[cig-commits] r12991 - in long/3D/SNAC/trunk: . StGermain StGermain/Base StGermain/Base/Automation StGermain/Base/Automation/src StGermain/Base/Automation/tests StGermain/Base/Automation/tests/data StGermain/Base/Container StGermain/Base/Container/src StGermain/Base/Container/tests StGermain/Base/Context StGermain/Base/Context/Python StGermain/Base/Context/src StGermain/Base/Context/tests StGermain/Base/Extensibility StGermain/Base/Extensibility/distributedtests StGermain/Base/Extensibility/distributedtests/data StGermain/Base/Extensibility/distributedtests/testplugins StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep StGermain/Base/Extensibility/src StGermain/Base/Extensibility/tests StGermain/Base/FlattenXML StGermain/Base/FlattenXML/src StGermain/Base/FlattenXML/test StGermain/Base/FlattenXML/test/data StGermain/Base/FlattenXML/test/expected StGermain/Base/Foundation StGermain/Base/Foundation/src StGermain/Base/Foundation/tests StGermain/Base/IO StGermain/Base/IO/Python StGermain/Base/IO/src StGermain/Base/IO/src/mpirecord StGermain/Base/IO/src/mpirecord/none StGermain/Base/IO/src/mpirecord/profile StGermain/Base/IO/tests StGermain/Base/IO/tests/data StGermain/Base/IO/tests/data/subdir StGermain/Base/IO/tests/data/subdir/another StGermain/Base/ListPlugins StGermain/Base/ListPlugins/src StGermain/Base/ListPlugins/tests StGermain/Base/ListPlugins/tests/data StGermain/Base/Python StGermain/Base/Python/Bindings StGermain/Base/Python/Bindings/Context StGermain/Base/Python/Bindings/Dictionary StGermain/Base/src StGermain/Base/tests StGermain/Discretisation StGermain/Discretisation/Geometry StGermain/Discretisation/Geometry/src StGermain/Discretisation/Geometry/tests StGermain/Discretisation/Geometry/tests/data StGermain/Discretisation/Mesh StGermain/Discretisation/Mesh/Python StGermain/Discretisation/Mesh/src StGermain/Discretisation/Mesh/tests StGermain/Discretisation/Mesh/tests/data StGermain/Discretisation/Python StGermain/Discretisation/Python/Bindings StGermain/Discretisation/Python/Bindings/Mesh StGermain/Discretisation/Shape StGermain/Discretisation/Shape/src StGermain/Discretisation/Shape/tests StGermain/Discretisation/Shape/tests/expected StGermain/Discretisation/Shape/tests/output StGermain/Discretisation/Swarm StGermain/Discretisation/Swarm/src StGermain/Discretisation/Swarm/tests StGermain/Discretisation/Swarm/tests/Bouncer StGermain/Discretisation/Swarm/tests/SingleAttractor StGermain/Discretisation/Swarm/tests/Spinner StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors StGermain/Discretisation/Swarm/tests/expected StGermain/Discretisation/Utils StGermain/Discretisation/Utils/src StGermain/Discretisation/Utils/tests StGermain/Discretisation/Utils/tests/data StGermain/Discretisation/Utils/tests/expected StGermain/Discretisation/src StGermain/Discretisation/tests StGermain/FD StGermain/FD/Python StGermain/FD/Python/Bindings StGermain/FD/Python/Bindings/MeshContext StGermain/FD/src StGermain/FD/tests StGermain/Regresstor StGermain/Regresstor/ClientPrograms StGermain/Regresstor/ClientPrograms/checkDiff StGermain/Regresstor/ClientPrograms/checkExecution StGermain/Regresstor/ClientPrograms/endRun StGermain/Regresstor/ClientPrograms/startRun StGermain/Regresstor/ClientPrograms/submitBuild StGermain/Regresstor/RegresstorMail StGermain/Regresstor/RegresstorServices StGermain/Regresstor/libRegresstor StGermain/Regresstor/libRegresstor/src StGermain/Regresstor/tools StGermain/Services StGermain/Services/BinaryDownload StGermain/Services/Common StGermain/Services/Common/tests StGermain/Services/tests StGermain/VMake StGermain/VMake/Commands StGermain/VMake/Config StGermain/VMake/Config/OpenGl StGermain/VMake/Config/PETSc StGermain/VMake/Config/PICellerator StGermain/VMake/Config/StGermain StGermain/VMake/Config/StgFEM StGermain/VMake/Config/Underworld StGermain/VMake/Config/X11 StGermain/VMake/Config/Xanthus StGermain/VMake/Config/glucifer StGermain/VMake/Config/mpi StGermain/VMake/Config/python StGermain/VMake/Config/python-compile StGermain/VMake/Initialise StGermain/VMake/Rules StGermain/VMake/SystemTests StGermain/VMake/SystemTests/C-CompilerType StGermain/VMake/SystemTests/CXX-CompilerType StGermain/VMake/SystemTests/Endian StGermain/VMake/SystemTests/Fortran-CompilerType StGermain/VMake/SystemTests/Fortran-Symbol StGermain/VMake/SystemTests/LongSize StGermain/Viewers StGermain/Viewers/MeshLayoutViewer StGermain/Viewers/MeshLayoutViewer/MLGen StGermain/Viewers/MeshLayoutViewer/MLView StGermain/Viewers/MeshLayoutViewer/src StGermain/Viewers/MeshViewer StGermain/Viewers/MeshViewer/src StGermain/compatibility StGermain/compatibility/libmpi StGermain/compatibility/libpetsc StGermain/compatibility/libpmpich StGermain/compatibility/libpython StGermain/compatibility/mpipython StGermain/doc StGermain/libStGermain StGermain/libStGermain/Python StGermain/libStGermain/Python/Bindings StGermain/libStGermain/Python/Bindings/General StGermain/libStGermain/Python/Bindings/MPI StGermain/libStGermain/dynamic StGermain/libStGermain/src StGermain/libStGermain/static StGermain/libStGermain/tests StGermain/libStGermain/testsDynamic StGermain/libStGermainAll StGermain/libStGermainAll/dynamic StGermain/libStGermainAll/src StGermain/libStGermainAll/static StGermain/libStGermainAll/tests StGermain/libStGermainAll/testsDynamic StGermain/pyre StGermain/pyre/Bindings StGermain/pyre/Bindings/pyre StGermain/pyre/Mesh StGermain/src

ces74 at geodynamics.org ces74 at geodynamics.org
Fri Oct 3 10:12:00 PDT 2008


Author: ces74
Date: 2008-10-03 10:11:55 -0700 (Fri, 03 Oct 2008)
New Revision: 12991

Added:
   long/3D/SNAC/trunk/StGermain/
   long/3D/SNAC/trunk/StGermain/.cvsignore
   long/3D/SNAC/trunk/StGermain/Base/
   long/3D/SNAC/trunk/StGermain/Base/Automation/
   long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Automation/makefile
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCondition_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Container/
   long/3D/SNAC/trunk/StGermain/Base/Container/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Container/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Container/makefile
   long/3D/SNAC/trunk/StGermain/Base/Container/src/
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Container.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/List.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/List.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Container/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/units.h
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/dictionary.txt
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUniqueList.c
   long/3D/SNAC/trunk/StGermain/Base/Context/
   long/3D/SNAC/trunk/StGermain/Base/Context/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/Context.py
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/src/
   long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.meta
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Context.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/units.h
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/output/
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.DictionaryCheck.txt.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalDepPlugins.xml
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalPlugin.xml
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.xml
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.meta
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin2.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/RemotePlugin1.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.meta
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Extensibility.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.c
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/makefile
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/main.c
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1-include.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include2.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include3.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/testInput.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/testFlattenXML.0of1.output.xml.expected
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/log/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/makefile
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/output/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/testFlattenXML.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/
   long/3D/SNAC/trunk/StGermain/Base/Foundation/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Foundation/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Foundation/makefile
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Foundation.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryTag.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/forwardDecl.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/PtrMapWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/IO/
   long/3D/SNAC/trunk/StGermain/Base/IO/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/Dictionary.py
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IO.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/mpimessaging.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/mpimessaging.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/stgmessaging.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/stgmessaging.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.h
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/PtrMapWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/duplicate.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/empty.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/invalid.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/journal.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/mpi-stream.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/normal.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/rawdata.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/empty2.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_namespace.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_root_node.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/output/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.dictionaryOutput.dat.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi1.txt.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi2.txt.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testPathUtils.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/makefile
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/main.c
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/pluginstest.xml
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/init.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/makefile
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/init.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/makefile
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/Base/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/Python/makefile
   long/3D/SNAC/trunk/StGermain/Base/makefile
   long/3D/SNAC/trunk/StGermain/Base/src/
   long/3D/SNAC/trunk/StGermain/Base/src/Base.h
   long/3D/SNAC/trunk/StGermain/Base/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/tests/
   long/3D/SNAC/trunk/StGermain/Base/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.c
   long/3D/SNAC/trunk/StGermain/COPYING
   long/3D/SNAC/trunk/StGermain/Discretisation/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Geometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/isinf.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/stg_lapack.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/units.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/points.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRMatrix.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Mesh.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Mesh.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ShadowInfo.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/trisurf.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCartesianGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCommTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecompTransfer.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp_Sync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf-withLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-large.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Shape.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/Viewport.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testCylinder.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/log/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/output/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/output/window.mpeg
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DDoubleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DDoubleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionDoubleNot.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionSingleNot.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere-invert.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D-invert.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnionSingleNot.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/Bouncer.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/SingleAttractor.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/Spinner.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/log/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/output/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvection.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionBouncer.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinner.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Utils.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/allVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/compositeVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/cornerVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/wallVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/log/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/output/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testEmbeddedSurface.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSemiRegDeform.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegration.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Discretisation.h
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.c
   long/3D/SNAC/trunk/StGermain/FD/
   long/3D/SNAC/trunk/StGermain/FD/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.c
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.h
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/init.c
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/makefile
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.c
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.h
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/FD/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/MeshContext.py
   long/3D/SNAC/trunk/StGermain/FD/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/FD/Python/makefile
   long/3D/SNAC/trunk/StGermain/FD/makefile
   long/3D/SNAC/trunk/StGermain/FD/src/
   long/3D/SNAC/trunk/StGermain/FD/src/FD.h
   long/3D/SNAC/trunk/StGermain/FD/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/FD/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/FD/src/Init.c
   long/3D/SNAC/trunk/StGermain/FD/src/Init.h
   long/3D/SNAC/trunk/StGermain/FD/src/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.c
   long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.h
   long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.meta
   long/3D/SNAC/trunk/StGermain/FD/src/makefile
   long/3D/SNAC/trunk/StGermain/FD/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/FD/src/types.h
   long/3D/SNAC/trunk/StGermain/FD/tests/
   long/3D/SNAC/trunk/StGermain/FD/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/tests/makefile
   long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.expected
   long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.sh
   long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.c
   long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.expected
   long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.sh
   long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.c
   long/3D/SNAC/trunk/StGermain/Make.mm
   long/3D/SNAC/trunk/StGermain/Makefile.def
   long/3D/SNAC/trunk/StGermain/Makefile.system
   long/3D/SNAC/trunk/StGermain/Makefile.vmake
   long/3D/SNAC/trunk/StGermain/Regresstor/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorEmail.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorMailConfig.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/regresstorCheckAndSend.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Error.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorCommon.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorConfig.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorTable.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitBuild.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitCheck.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildLog.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildMakefile.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadFailedUnitSubTestOutput.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.c
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.c
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Regresstor.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.c
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/forwardDecl.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/types.h
   long/3D/SNAC/trunk/StGermain/Regresstor/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/tools/
   long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorDBSetup.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorMailSetup.pl
   long/3D/SNAC/trunk/StGermain/Services/
   long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/
   long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/BinaryServer.pm
   long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/services.cgi
   long/3D/SNAC/trunk/StGermain/Services/Common/
   long/3D/SNAC/trunk/StGermain/Services/Common/Dictionary.pm
   long/3D/SNAC/trunk/StGermain/Services/Common/QueryShortcuts.pm
   long/3D/SNAC/trunk/StGermain/Services/Common/StGermainPrivate.pm
   long/3D/SNAC/trunk/StGermain/Services/Common/tests/
   long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-Dictionary.pl
   long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-QueryShortcuts.pl
   long/3D/SNAC/trunk/StGermain/Services/StGermain.pm
   long/3D/SNAC/trunk/StGermain/Services/services.cgi
   long/3D/SNAC/trunk/StGermain/Services/tests/
   long/3D/SNAC/trunk/StGermain/Services/tests/downloads/
   long/3D/SNAC/trunk/StGermain/Services/tests/test-download.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-getBinary.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-giveFileTest.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-ping.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-submitBinary.pl
   long/3D/SNAC/trunk/StGermain/VMake/
   long/3D/SNAC/trunk/StGermain/VMake/COPYING
   long/3D/SNAC/trunk/StGermain/VMake/Commands/
   long/3D/SNAC/trunk/StGermain/VMake/Commands/all.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/check.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/clean.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/docs.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/echo.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/errorhelp.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/examples.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/find_fail.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/help.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/long_check.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/regresstor.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/scibenchmark_check.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/single_exe.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/svncleanup.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/touch.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/update.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/version.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Component-meta-template.xml
   long/3D/SNAC/trunk/StGermain/VMake/Config/
   long/3D/SNAC/trunk/StGermain/VMake/Config/ImageFormats-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.error
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.log
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.warning
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/SLEPC-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/Snark-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/atk-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/blaslapack-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/cairo-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/carbon-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/compiler-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/freetype-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/gLucifer-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/glib2-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/gtk2-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/hdf5-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/libavcodec-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/libfame-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/makefile-shortcuts.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/math-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/neon-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/pango-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/pdt-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest.py
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/sdl-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/tau-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/tetgen-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/vtk-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/xml-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/BuildOptions.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/DirectoryVariables.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/ProjectVariable.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/Subversion.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/UserVariables.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/VersionVariables.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Makefile.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/
   long/3D/SNAC/trunk/StGermain/VMake/Rules/Preprocess/
   long/3D/SNAC/trunk/StGermain/VMake/Rules/Targets/
   long/3D/SNAC/trunk/StGermain/VMake/Rules/apps_xml.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/bin.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/checks.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/compile.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/includes.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/input_xml.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/intermediate.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/lib.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/makedirs.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/meta.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/mod.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/packages.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/plugins.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/postmake.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/premake.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/processflags.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/pyb.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/pyc.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/source.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/subdirs.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/tau.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/tests.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/xmls.vmake
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/conftest.cxx
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/conftest.F
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/conftest.F
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/symbol.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/makefile
   long/3D/SNAC/trunk/StGermain/VMake/build-functions.sh
   long/3D/SNAC/trunk/StGermain/VMake/configure.sh
   long/3D/SNAC/trunk/StGermain/VMake/executableTester.sh
   long/3D/SNAC/trunk/StGermain/VMake/meta-template.c
   long/3D/SNAC/trunk/StGermain/VMake/profile.sh
   long/3D/SNAC/trunk/StGermain/VMake/softlinker.sh
   long/3D/SNAC/trunk/StGermain/Viewers/
   long/3D/SNAC/trunk/StGermain/Viewers/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/MLGen.c
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.c
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.h
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/MLView.c
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/main.cxx
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.cxx
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.h
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/input.xml
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/main.cxx
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/types.h
   long/3D/SNAC/trunk/StGermain/Viewers/makefile
   long/3D/SNAC/trunk/StGermain/build-functions.sh
   long/3D/SNAC/trunk/StGermain/compatibility/
   long/3D/SNAC/trunk/StGermain/compatibility/Make.mm
   long/3D/SNAC/trunk/StGermain/compatibility/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libmpi/
   long/3D/SNAC/trunk/StGermain/compatibility/libmpi/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libmpi/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/petsccompat.h
   long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/
   long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/libpython/
   long/3D/SNAC/trunk/StGermain/compatibility/libpython/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libpython/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/main.c
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/makefile
   long/3D/SNAC/trunk/StGermain/configure.sh
   long/3D/SNAC/trunk/StGermain/doc/
   long/3D/SNAC/trunk/StGermain/doc/C_full.doxyconf.in
   long/3D/SNAC/trunk/StGermain/doc/Makefile.def
   long/3D/SNAC/trunk/StGermain/doc/doxygen.css
   long/3D/SNAC/trunk/StGermain/doc/footer.html
   long/3D/SNAC/trunk/StGermain/doc/generateForWeb.sh
   long/3D/SNAC/trunk/StGermain/doc/header.html
   long/3D/SNAC/trunk/StGermain/doc/makefile
   long/3D/SNAC/trunk/StGermain/doc/web.doxyconf.in
   long/3D/SNAC/trunk/StGermain/libStGermain/
   long/3D/SNAC/trunk/StGermain/libStGermain/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/init.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/init.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/src/
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.c
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.h
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/src/StGermain.h
   long/3D/SNAC/trunk/StGermain/libStGermain/src/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/static/
   long/3D/SNAC/trunk/StGermain/libStGermain/static/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/static/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/static/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermain/static/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.c
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/StGermain.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/StGermainAll.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/StGermain.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.c
   long/3D/SNAC/trunk/StGermain/makefile
   long/3D/SNAC/trunk/StGermain/project-config.sh
   long/3D/SNAC/trunk/StGermain/pyre/
   long/3D/SNAC/trunk/StGermain/pyre/Application.py
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.cc
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.h
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/init.cc
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/makefile
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.cc
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.h
   long/3D/SNAC/trunk/StGermain/pyre/Component.py
   long/3D/SNAC/trunk/StGermain/pyre/Controller.py
   long/3D/SNAC/trunk/StGermain/pyre/Debug.py
   long/3D/SNAC/trunk/StGermain/pyre/Dictionary.py
   long/3D/SNAC/trunk/StGermain/pyre/Layout.py
   long/3D/SNAC/trunk/StGermain/pyre/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/Mesh.py
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/RegularMeshLayout.py
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/__init__.py
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/makefile
   long/3D/SNAC/trunk/StGermain/pyre/Solver.py
   long/3D/SNAC/trunk/StGermain/pyre/__init__.py
   long/3D/SNAC/trunk/StGermain/pyre/makefile
   long/3D/SNAC/trunk/StGermain/src/
   long/3D/SNAC/trunk/StGermain/src/main.c
   long/3D/SNAC/trunk/StGermain/src/makefile
Log:
Adding a working version of StGermain, rev. 3890.

Added: long/3D/SNAC/trunk/StGermain/.cvsignore
===================================================================
--- long/3D/SNAC/trunk/StGermain/.cvsignore	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/.cvsignore	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+Makefile.system

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainBaseAutomation
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	External header file to this library.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	None.
+**
+** $Id: Automation.h 3614 2006-06-01 08:58:48Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_Automation_h__
+#define __Base_Automation_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "offsets.h"
+	#include "Stg_Component.h"
+	#include "Stg_ComponentMeta.h"
+	#include "Stg_ComponentRegister.h"
+	#include "LiveComponentRegister.h"
+	#include "Stg_ComponentFactory.h"
+	#include "DocumentationComponentFactory.h"
+	#include "Variable.h"
+	#include "Variable_Register.h"
+	#include "VariableDumpStream.h"
+	#include "ConditionFunction.h"
+	#include "ConditionFunction_Register.h"
+	#include "VariableCondition.h"
+	#include "VariableCondition_Register.h"
+	#include "CompositeVC.h"
+	#include "SetVC.h"
+	#include "VariableAllVC.h"
+	#include "HierarchyTable.h"
+	#include "CallGraph.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Base_Automation_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,356 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Stg_Component.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CallGraph.h"
+
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type Stg_CallGraph_Type = "Stg_CallGraph";
+
+static const Type _Stg_CallGraph_Stack_Type = "_Stg_CallGraph_Stack";
+static const Type _Stg_CallGraph_Entry_Type = "_Stg_CallGraph_Entry";
+static const Index _Stg_CallGraph_Table_Delta = 256; /* TODO: ascertain whether this is a good for an initial & delta size */
+
+/* Call graph singleton. The code in this file (this class) shouldn't use this global variable. It is a global variable ONLY
+    because adding it to the context and making the appropriate changes to EntryPoints and Components (and where ever else
+    push and pop may end up, is a big deal. */
+Stg_CallGraph* stgCallGraph = 0;
+
+
+Stg_CallGraph* Stg_CallGraph_New() {
+	return _Stg_CallGraph_New(
+		sizeof(Stg_CallGraph),
+		Stg_CallGraph_Type,
+		_Stg_CallGraph_Delete,
+		_Stg_CallGraph_Print,
+		_Stg_CallGraph_Copy );
+}
+
+void Stg_CallGraph_Init( void* callGraph ) {
+	Stg_CallGraph* self = (Stg_CallGraph*)callGraph;
+	
+	/* General info */
+	self->type = Stg_CallGraph_Type;
+	self->_sizeOfSelf = sizeof(Stg_CallGraph);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Stg_CallGraph_Delete;
+	self->_print = _Stg_CallGraph_Print;
+	self->_copy = _Stg_CallGraph_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Stg_CallGraph info */
+	_Stg_CallGraph_Init( self );
+};
+
+Stg_CallGraph* _Stg_CallGraph_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy )
+{
+	Stg_CallGraph* self;
+	
+	/* Allocate memory */
+	Journal_Firewall( 
+		_sizeOfSelf >= sizeof(Stg_CallGraph), 
+		Journal_Register( Error_Type, Stg_CallGraph_Type ), 
+		"Attempting to construct an object that is smaller than this class" );
+	self = (Stg_CallGraph*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* Stg_CallGraph info */
+	_Stg_CallGraph_Init( self );
+	
+	return self;
+}
+
+
+void _Stg_CallGraph_Init( Stg_CallGraph* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_CallGraph info */
+	self->_stack = 0;
+	self->_tableSize = _Stg_CallGraph_Table_Delta; 
+	self->_tableCount = 0;
+	self->table = Memory_Alloc_Array( _Stg_CallGraph_Entry, self->_tableSize, _Stg_CallGraph_Entry_Type );
+}
+
+
+static void _Stg_CallGraph_Delete_Stack( _Stg_CallGraph_Stack* stack ) {
+	if( stack ) {
+		_Stg_CallGraph_Delete_Stack( stack->pop );
+		Memory_Free( stack );
+	}
+}
+
+void _Stg_CallGraph_Delete( void* callGraph ) {
+	Stg_CallGraph* self = (Stg_CallGraph*)callGraph;
+	
+	/* Stg_CallGraph info */
+	_Stg_CallGraph_Delete_Stack( self->_stack );
+	if( self->table ) {
+		Memory_Free( self->table );
+	}
+	self->_tableCount = self->_tableSize = 0;
+	
+	/* Delete parent class */
+	_Stg_Class_Delete( self );
+}
+
+
+static void _Stg_CallGraph_Print_Stack( _Stg_CallGraph_Stack* stack, Stream* stream ) {
+	if( stack ) {
+		Journal_Printf( (void*) stream, "\t\tfunction pointer (ptr): %p\n", stack->functionPtr );
+		Journal_Printf( (void*) stream, "\t\tfunction name: \"%s\"\n", stack->name );
+		Journal_Printf( (void*) stream, "\t\tfunction started timestamp: %g\n", stack->time );
+		Journal_Printf( (void*) stream, "\t\tfunction memory stamp at start: %u\n", stack->memory );
+		Journal_Printf( (void*) stream, "\t\tfunction table entry: %u\n", stack->entry_I );
+		_Stg_CallGraph_Print_Stack( stack->pop, stream );
+	}
+}
+
+void _Stg_CallGraph_Print( void* callGraph, Stream* stream ) {
+	Stg_CallGraph*	self = (Stg_CallGraph*)callGraph;
+	Index		i;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Stg_CallGraph (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* Stg_CallGraph */
+	Journal_Printf( (void*) stream, "\t_stack (ptr): %p\n", self->_stack );
+	_Stg_CallGraph_Print_Stack( self->_stack, stream );
+	
+	Journal_Printf( (void*) stream, "\t_tableSize: %u\n", self->_tableSize );
+	Journal_Printf( (void*) stream, "\t_tableCount: %u\n", self->_tableCount );
+	Journal_Printf( (void*) stream, "\ttable (ptr): %p\n", self->table );
+	for( i = 0; i < self->_tableCount; i++ ) {
+		Journal_Printf( (void*) stream, 
+			"\t\tfunction (ptr): %p, parent (ptr): %p, name: \"%s\", parent name: \"%s\", time: %g, memory: %u, called: %u, returned: %u\n",
+			self->table[i].functionPtr, 
+			self->table[i].parentPtr, 
+			self->table[i].name,
+			self->table[i].parentName,
+			self->table[i].time, 
+			self->table[i].memory,
+			self->table[i].called,
+			self->table[i].returned );
+	}
+}
+
+
+static void _Stg_CallGraph_Copy_Table( _Stg_CallGraph_Entry* dst, _Stg_CallGraph_Entry* src, Index size, Index count ) {
+	memcpy( dst, src, sizeof(_Stg_CallGraph_Entry) * count );
+}
+
+static void _Stg_CallGraph_Copy_Stack_Deep( _Stg_CallGraph_Stack** dst, _Stg_CallGraph_Stack* src, PtrMap* map ) {
+	if( dst && !src ) {
+		*dst = src;
+	}
+	else if( dst && (*dst = PtrMap_Find( map, src )) == NULL ) {
+		*dst = Memory_Alloc( _Stg_CallGraph_Stack, "Stg_CallGraph->_stack" );
+		(*dst)->functionPtr = src->functionPtr;
+		(*dst)->name = src->name;
+		(*dst)->time = src->time;
+		(*dst)->memory = src->memory;
+		(*dst)->entry_I = src->entry_I;
+		(*dst)->pop = 0;
+		_Stg_CallGraph_Copy_Stack_Deep( &((*dst)->pop), src->pop, map );
+		PtrMap_Append( map, *dst, src );
+	}
+	
+}
+
+static void _Stg_CallGraph_Copy_Stack_ShallowIncr( _Stg_CallGraph_Stack* stack ) {
+	_Stg_CallGraph_Copy_Stack_ShallowIncr( stack->pop );
+	Memory_CountInc( stack );
+}
+
+static void _Stg_CallGraph_Copy_Stack_Shallow( _Stg_CallGraph_Stack** dst, _Stg_CallGraph_Stack* src ) {
+	*dst = src;
+	_Stg_CallGraph_Copy_Stack_ShallowIncr( *dst );
+}
+
+void* _Stg_CallGraph_Copy( void* callGraph, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_CallGraph*	self = (Stg_CallGraph*)callGraph;
+	Stg_CallGraph*	newCallGraph;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap= False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newCallGraph = _Stg_Class_Copy( callGraph, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newCallGraph->_tableSize = self->_tableSize;
+	newCallGraph->_tableCount = self->_tableCount;
+
+	if( deep ) {
+		if( self->table && (newCallGraph->table = PtrMap_Find( map, self->table )) == NULL ) {
+			newCallGraph->table = Memory_Alloc_Array( _Stg_CallGraph_Entry, newCallGraph->_tableSize, 
+				"Stg_CallGraph->table" );
+			_Stg_CallGraph_Copy_Table( newCallGraph->table, self->table, newCallGraph->_tableSize, 
+				newCallGraph->_tableCount );
+			PtrMap_Append( map, newCallGraph->table, self->table );
+		}
+		
+		_Stg_CallGraph_Copy_Stack_Deep( &newCallGraph->_stack, self->_stack, map );
+	}
+	else {
+		newCallGraph->table = self->table;
+		Memory_CountInc( newCallGraph->table );
+		_Stg_CallGraph_Copy_Stack_Shallow( &newCallGraph->_stack, self->_stack );
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+
+	return newCallGraph;
+}
+
+
+
+void Stg_CallGraph_Push( void* callGraph, void* functionPtr, Type name ) {
+	Stg_CallGraph*		self = (Stg_CallGraph*)callGraph;
+	_Stg_CallGraph_Stack*	newStack;
+	Bool			found;
+	void*			parentPtr;
+	Type			parentName;
+	
+	/* Push onto the stack */
+	parentPtr = self->_stack ? self->_stack->functionPtr : 0;
+	parentName = self->_stack ? self->_stack->name : 0;
+	newStack = Memory_Alloc( _Stg_CallGraph_Stack, _Stg_CallGraph_Stack_Type );
+	newStack->functionPtr = functionPtr;
+	newStack->name = name;
+	newStack->time = 0.0f; /* TODO: Actual time stamp */
+	newStack->memory = 0; /* TODO: Actual memory stamp */
+	newStack->pop = self->_stack;
+	self->_stack = newStack;
+	
+	/* Search for the function in the table */
+	found = False;
+	for( newStack->entry_I = 0; newStack->entry_I < self->_tableCount; newStack->entry_I++ ) {
+		/* Each function/parent-pointer - function/parent name, is treated as a distinct call graph entry. This way, if a
+		    function is called by more than one distinct function, we have that information (the user can combine this
+		    info if they see fit. And in the case of entry points, the same function pointer is used for all entry points,
+		    as the name is the distinquisher */
+		if( 
+			self->table[newStack->entry_I].functionPtr == functionPtr &&
+			self->table[newStack->entry_I].parentPtr == parentPtr &&
+			self->table[newStack->entry_I].name == name && 
+			self->table[newStack->entry_I].parentName == parentName ) 
+		{
+			found = True;
+			break;
+		}
+	}
+	
+	if( found ) {
+		self->table[newStack->entry_I].called += 1;
+	}
+	/* else, add to the table */
+	else {
+		/* We may need to allocate some more memory */
+		if( self->_tableCount >= self->_tableSize ) {
+			_Stg_CallGraph_Entry* newTable;
+			SizeT newSize;
+			
+			Journal_Firewall( 
+				self->_tableCount == self->_tableSize, 
+				Journal_Register( Error_Type, Stg_CallGraph_Type ), 
+				"Somehow the table entry counter is greater than the memory allocation" );
+
+			
+			newSize = self->_tableSize + _Stg_CallGraph_Table_Delta;
+			newTable = Memory_Alloc_Array( _Stg_CallGraph_Entry, newSize, _Stg_CallGrap_Entry_Type );
+			/* safe to do, we want to copy ptr values */
+			memcpy( newTable, self->table, self->_tableSize * sizeof(_Stg_CallGraph_Entry) ); 
+			Memory_Free( self->table );
+			self->table = newTable;
+			self->_tableSize = newSize;
+		}
+		
+		newStack->entry_I = self->_tableCount;
+		self->_tableCount += 1;
+		
+		self->table[newStack->entry_I].functionPtr = functionPtr;
+		self->table[newStack->entry_I].name = name;
+		self->table[newStack->entry_I].parentPtr = parentPtr;
+		self->table[newStack->entry_I].parentName = parentName;
+		self->table[newStack->entry_I].time = 0.0f;
+		self->table[newStack->entry_I].memory = 0;
+		self->table[newStack->entry_I].called = 1;
+		self->table[newStack->entry_I].returned = 0;
+	}
+}
+
+void Stg_CallGraph_Pop( void* callGraph ) {
+	Stg_CallGraph*		self = (Stg_CallGraph*)callGraph;
+	_Stg_CallGraph_Stack*	oldStack;
+	
+	Journal_Firewall( 
+		self->_stack != 0, 
+		Journal_Register( Error_Type, Stg_CallGraph_Type ), 
+		"Attempting to pop and empty stack" );
+	
+	/* Record the accumulative delta time & memory */
+	self->table[self->_stack->entry_I].time += 0 /* TODO: Actual time stamp */ - self->_stack->time;
+	self->table[self->_stack->entry_I].memory += 0 /* TODO: Actual memory stamp */ - self->_stack->memory;
+	self->table[self->_stack->entry_I].returned += 1;
+	
+	/* Pop the stack */
+	oldStack = self->_stack;
+	self->_stack = oldStack->pop;
+	Memory_Free( oldStack );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_CallGraph_h__
+#define __Base_Automation_Stg_CallGraph_h__
+	
+	/* Templates of virtual functions */
+	typedef struct {
+		void*			functionPtr;
+		Type			name;			/* assume its a const char* (i.e. we just need to copy ptr */
+		void*			parentPtr;
+		Type			parentName;		/* assume its a const char* (i.e. we just need to copy ptr */
+		double			time;
+		SizeT			memory;
+		Index			called;
+		Index			returned;
+	} _Stg_CallGraph_Entry;
+	
+	typedef struct __Stg_CallGraph_Stack _Stg_CallGraph_Stack;
+	struct __Stg_CallGraph_Stack {
+		void*			functionPtr;
+		Type			name;			/* assume its a const char* (i.e. we just need to copy ptr */
+		double			time;
+		SizeT			memory;
+		Index			entry_I;
+		_Stg_CallGraph_Stack*	pop;
+	};
+	
+	/* Textual name of this class */
+	extern const Type Stg_CallGraph_Type;
+	
+	/* Stg_Component information */
+	#define __Stg_CallGraph \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_CallGraph info */ \
+		_Stg_CallGraph_Stack*	_stack; \
+		_Stg_CallGraph_Entry*	table; \
+		Index			_tableSize; \
+		Index			_tableCount;
+	struct Stg_CallGraph { __Stg_CallGraph };
+	
+	
+	/** StGermain call graph singleton */
+	extern Stg_CallGraph* stgCallGraph;
+	
+	/** Create a new CallGraph */
+	Stg_CallGraph* Stg_CallGraph_New();
+	
+	/** Initialise an existing CallGraph */
+	void Stg_CallGraph_Init( void* callGraph );
+	
+	/* Creation implementation */
+	Stg_CallGraph* _Stg_CallGraph_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy );
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/* Initialisation implementation */
+	void _Stg_CallGraph_Init( Stg_CallGraph* self );
+	
+	/* Delete implementation */
+	void _Stg_CallGraph_Delete( void* callGraph );
+	
+	/* Print implementation */
+	void _Stg_CallGraph_Print( void* callGraph, Stream* stream );
+	
+	/* Copy implementation */
+	void* _Stg_CallGraph_Copy( void* callGraph, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/* Copy the component */
+	#define Stg_CallGraph_Copy( self ) \
+		(Stg_CallGraph*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Stg_CallGraph_DeepCopy(self) \
+		(Stg_CallGraph*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	/** Push a new function call onto the stack, and lodge trace */
+	void Stg_CallGraph_Push( void* callGraph, void* functionPtr, Type name );
+	
+	/** Pop the function on the stack, and finalise trace */
+	void Stg_CallGraph_Pop( void* callGraph );
+	
+#endif /* __Base_Automation_Stg_CallGraph_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: ComponentRepository.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Base.h"
+#include "Context/Context.h"
+#include "types.h"
+#include "units.h"
+#include "AbstractFactory.h"
+#include "Stg_ComponentFactory.h"
+#include "Stg_ComponentRepository.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type Stg_ComponentRepository_Type = "Stg_ComponentRepository";
+
+
+Stg_ComponentRepository* Stg_ComponentRepository_New( Dictionary* dictionary ) {
+	return _Stg_ComponentRepository_New( sizeof(Stg_ComponentRepository), Stg_ComponentRepository_Type, _Stg_ComponentRepository_Delete,
+		_Stg_ComponentRepository_Print, dictionary );
+}
+
+void Stg_ComponentRepository_Init( Stg_ComponentRepository* self, Dictionary* dictionary )
+{
+	/* General info */
+	self->type = Stg_ComponentRepository_Type;
+	self->_sizeOfSelf = sizeof(Stg_ComponentRepository);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _Stg_ComponentRepository_Delete;
+	self->_print = _Stg_ComponentRepository_Print;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Stg_ComponentRepository */
+	_Stg_ComponentRepository_Init( self );
+}
+
+Stg_ComponentRepository* _Stg_ComponentRepository_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Dictionary*			dictionary )
+{
+	Stg_ComponentRepository* self;
+	
+	/* Allocate memory */
+	self = (Stg_ComponentRepository*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* Stg_ComponentRepository info */
+	_Stg_ComponentRepository_Init( self );
+	
+	return self;
+}
+
+void _Stg_ComponentRepository_Init( Stg_ComponentRepository* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_ComponentRepository info */
+	self->factoriesSize = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, 
+		"componentFactoriesSize", Dictionary_Entry_Value_FromUnsignedInt( 256 ) ) );
+	self->factoriesDelta = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, 
+		"componentFactoriesDelta", Dictionary_Entry_Value_FromUnsignedInt( 256 ) ) );
+	self->factories = Memory_Alloc_Array( Stg_ComponentFactoryPtr, self->factoriesSize, "Stg_ComponentRepository->factories" );
+	self->factories = 0;
+}
+
+void _Stg_ComponentRepository_Delete( void* componentRepository ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	
+	if( self->factories ) {
+		Memory_Free( self->factories );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _Stg_ComponentRepository_Print( void* componentRepository ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	Factory_Index factoryIndex;
+	
+	/* Set the Journal for printing informations */
+	Stream* componentRepositoryStream = Journal_Register( InfoStream_Type,	"Stg_ComponentRepositoryStream");
+	
+	/* General info */
+	Journal_Printf( componentRepositoryStream, "Stg_ComponentRepository (%p):\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self );
+	
+	/* Virtual info */
+	
+	/* Stg_ComponentRepository info */
+	Journal_Printf( componentRepositoryStream, "\tfactoriesSize: %lu\n", self->factoriesSize );
+	Journal_Printf( componentRepositoryStream, "\tfactoriesDelta: %lu\n", self->factoriesDelta );
+	Journal_Printf( componentRepositoryStream, "\tfactoryCount: %lu\n", self->factoryCount );
+	
+	Journal_Printf( componentRepositoryStream, "\tfactories: %p\n", self->factories );
+	Journal_Printf( componentRepositoryStream, "\tfactories[0-%lu]: ", self->factoryCount );
+	for( factoryIndex = 0; factoryIndex < self->factoryCount; factoryIndex++ ) {
+		Journal_Printf( componentRepositoryStream, "%p ", self->factories[factoryIndex] );
+	}
+	Journal_Printf( componentRepositoryStream, "\n" );
+}
+
+void Stg_ComponentRepository_Register( void* componentRepository, Stg_ComponentFactory* factory ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	
+	if( self->factoryCount == self->factoriesSize ) {
+		self->factoriesSize += self->factoriesDelta;
+		self->factories = Memory_Realloc_Array( self->factories, Stg_ComponentFactoryPtr, self->factoriesSize );
+		assert( self->factories );
+	}
+	self->factories[self->factoryCount] = factory;
+}
+	
+void* Stg_ComponentRepository_Build( void* componentRepository, Category category, ClassType class ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	
+	Factory_Index index;
+	Stg_ComponentFactory* factory;
+	
+	factory = Stg_ComponentFactory_New( category, class, 0 );
+	
+	for( index = 0; index < self->factoryCount; index++ ) {
+		if( Stg_ComponentFactory_IsEqual( self->factories[index], factory ) ) {
+			Memory_Free( factory );
+			return self->factories[index];
+		}
+	}
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Creator of arbitary components.
+**
+** Assumptions:
+**
+** Comments:
+**	Does not assumes ownership of the factories registered (i.e. it will not free the memory associated to them ).
+**	Do we eventually want to keep a registry of instantiated components?
+**
+** $Id: ComponentRepository.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Stg_Component_Stg_ComponentRepository_h__
+#define __Stg_Component_Stg_ComponentRepository_h__
+	
+	/* Textual name of this class */
+	extern const Type Stg_ComponentRepository_Type;
+	
+	/* Stg_ComponentRepository information */
+	#define __Stg_ComponentRepository \
+		/* General info */ \
+		__Stg_Class \
+		Dictionary*		dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_ComponentRepository info */ \
+		Stg_ComponentFactoryPtr*	factories; \
+		Factory_Index		factoriesSize; \
+		Factory_Index		factoriesDelta; \
+		Factory_Index		factoryCount; 
+	struct _Stg_ComponentRepository { __Stg_ComponentRepository };
+	
+	
+	/* Create a new Stg_ComponentRepository and initialise */
+	Stg_ComponentRepository* Stg_ComponentRepository_New( Dictionary* dictionary );
+	
+	/* Initialise a Stg_ComponentRepository construct */
+	void Stg_ComponentRepository_Init( Stg_ComponentRepository* self, Dictionary* dictionary );
+	
+	/* Creation implementation / Virtual constructor */
+	Stg_ComponentRepository* _Stg_ComponentRepository_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Dictionary*			dictionary );
+	
+	/* Initialise implementation */
+	void _Stg_ComponentRepository_Init( Stg_ComponentRepository* self );
+	
+	/* Stg_Class_Delete a Stg_ComponentRepository implementation */
+	void _Stg_ComponentRepository_Delete( void* componentRepository );
+	
+	/* Print a Stg_ComponentRepository implementation */
+	void _Stg_ComponentRepository_Print( void* componentRepository );
+	
+	/* Register a new type of component. Stg_ComponentRepository does not assume ownership of the factory. */
+	void Stg_ComponentRepository_Register( void* componentRepository, Stg_ComponentFactory* factory );
+	
+	/* Create a new component */
+	void* Stg_ComponentRepository_Build( void* componentRepository, Category category, ClassType class );
+	
+#endif /* __Stg_Component_Stg_ComponentRepository_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,708 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: CompositeVC.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "LiveComponentRegister.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "VariableCondition.h"
+#include "VariableCondition_Register.h"
+#include "CompositeVC.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type CompositeVC_Type = "CompositeVC";
+const Name defaultCompositeVCName = "defaultCompositeVCName";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* CompositeVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)CompositeVC_New( defaultCompositeVCName, variable_Register, conFunc_Register, dictionary, data );
+}
+
+
+CompositeVC* CompositeVC_New(
+		Name						name,
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return _CompositeVC_New(
+		sizeof(CompositeVC), 
+		CompositeVC_Type, 
+		_CompositeVC_Delete, 
+		_CompositeVC_Print,
+		_CompositeVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CompositeVC_DefaultNew,
+		_CompositeVC_Construct,
+		_CompositeVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		NULL,
+		_CompositeVC_PrintConcise,
+		_CompositeVC_ReadDictionary,
+		_CompositeVC_GetSet, 
+		_CompositeVC_GetVariableCount, 
+		_CompositeVC_GetVariableIndex, 
+		_CompositeVC_GetValueIndex, 
+		_CompositeVC_GetValueCount, 
+		_CompositeVC_GetValue, 
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		data );
+}
+
+CompositeVC* CompositeVC_DefaultNew( Name name )
+{
+	return (CompositeVC*)_CompositeVC_New(
+		sizeof(CompositeVC), 
+		CompositeVC_Type, 
+		_CompositeVC_Delete, 
+		_CompositeVC_Print,
+		_CompositeVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CompositeVC_DefaultNew,
+		_CompositeVC_Construct,
+		_CompositeVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		NULL,
+		_CompositeVC_PrintConcise,
+		_CompositeVC_ReadDictionary,
+		_CompositeVC_GetSet, 
+		_CompositeVC_GetVariableCount, 
+		_CompositeVC_GetVariableIndex, 
+		_CompositeVC_GetValueIndex, 
+		_CompositeVC_GetValueCount, 
+		_CompositeVC_GetValue, 
+		NULL/*variable_Register*/, 
+		NULL/*conFunc_Register*/,
+		NULL,
+		NULL );
+}
+
+void CompositeVC_Init(
+		CompositeVC*					self, 
+		Name						name,
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	/* General info */
+	self->type = CompositeVC_Type;
+	self->_sizeOfSelf = sizeof(CompositeVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _CompositeVC_Delete;
+	self->_print = _CompositeVC_Print;
+	self->_copy = _CompositeVC_Copy;
+	self->_build = _CompositeVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_buildSelf = NULL;
+	self->_printConcise = _CompositeVC_PrintConcise;
+	self->_readDictionary = _CompositeVC_ReadDictionary;
+	self->_getSet = _CompositeVC_GetSet;
+	self->_getVariableCount = _CompositeVC_GetVariableCount;
+	self->_getVariableIndex = _CompositeVC_GetVariableIndex;
+	self->_getValueIndex = _CompositeVC_GetValueIndex;
+	self->_getValueCount = _CompositeVC_GetValueCount;
+	self->_getValue = _CompositeVC_GetValue;
+	
+	_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 */
+	_CompositeVC_Init( self, data );
+}
+
+
+CompositeVC* _CompositeVC_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,
+		Variable_Register*				variable_Register,
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data)
+{
+	CompositeVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(CompositeVC));
+	self = (CompositeVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount,
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_CompositeVC_Init( self, data );
+	}
+	
+	return self;
+}
+
+
+void _CompositeVC_Init(
+		void*						compositeVC, 
+		void*						data )
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	
+	self->isConstructed = True;
+	self->itemCount = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->itemTbl = Memory_Alloc_Array( VariableCondition*, self->_size, "CompositeCV->itemTbl" );
+	memset(self->itemTbl, 0 , sizeof(VariableCondition*)*self->_size);
+	self->iOwnTbl = Memory_Alloc_Array( Bool, self->_size, "CompositeCV->iOwnTbl" );
+	memset(self->iOwnTbl, 0, sizeof(Bool)*self->_size);
+	self->data = data;
+	self->attachedSets = 0;
+	self->hasReadDictionary = False;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _CompositeVC_ReadDictionary( void* compositeVC, void* dictionary ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+
+	/* View the dictionary as a list of variable conditions */
+	if( dictionary && !self->hasReadDictionary ) {
+		Dictionary_Entry_Value*	vcList;
+		
+		vcList = Dictionary_Get( dictionary, "vcList" );
+		if( vcList ) {
+			Index	count;
+			Index	entry_I;
+			
+			count = Dictionary_Entry_Value_GetCount(vcList);
+			for (entry_I = 0; entry_I < count; entry_I++)
+			{
+				Dictionary_Entry_Value*	vcEntry;
+				Type			type;
+				Dictionary*		dictionary;
+				VariableCondition*	vc;
+				
+				vcEntry = Dictionary_Entry_Value_GetElement(vcList, entry_I);
+				type = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcEntry, "type"));
+				dictionary = Dictionary_Entry_Value_AsDictionary(vcEntry);
+				vc = VariableCondition_Register_CreateNew(variableCondition_Register, self->variable_Register, 
+					self->conFunc_Register, type, dictionary, self->data );
+				vc->_readDictionary( vc, dictionary );
+				CompositeVC_Add(self, vc, True);
+			}
+			
+		}
+		self->hasReadDictionary = True;
+	}
+}
+
+void _CompositeVC_Construct( void* compositeVC, Stg_ComponentFactory* cf, void* data ) {
+	CompositeVC* self                      = (CompositeVC*)compositeVC;
+	void*        variableRegister          = NULL;
+	void*        conditionFunctionRegister = NULL;
+	void*        initData                      = NULL;
+	Dictionary*  vcDict                    = NULL;
+	Name         vcName;
+	
+	self->dictionary = cf->rootDict;
+	
+	variableRegister = (void*)Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variableRegister );
+	conditionFunctionRegister = (void*)Stg_ObjectList_Get( cf->registerRegister, "ConditionFunction_Register" );
+	assert( conditionFunctionRegister );
+	
+	vcName = Stg_ComponentFactory_GetString( cf, self->name, "vcName", self->name );
+	if ( cf->rootDict )
+		vcDict = Dictionary_GetDictionary( cf->rootDict, vcName );
+//	Journal_Firewall(
+//			vcDict != NULL,
+//			Journal_Register( Error_Type, self->type ),
+//			"For %s '%s' - Cannont find variable condition dictionary '%s'\n", self->type, self->name, vcName );
+	
+	initData = Stg_ComponentFactory_ConstructByKey( cf, self->name, "Data", Stg_Component, False, data );
+	
+	_VariableCondition_Init( self, variableRegister, conditionFunctionRegister, vcDict );
+	_CompositeVC_Init( self, initData );
+}
+
+void _CompositeVC_Delete(void* compositeVC)
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	
+	if (self->itemTbl)
+	{
+		VariableCondition_Index	entry_I;
+		
+		for (entry_I = 0; entry_I < self->itemCount; entry_I++)
+		{
+			if (self->iOwnTbl[entry_I] && self->itemTbl[entry_I])
+				Memory_Free(self->itemTbl[entry_I]);
+		}
+		
+		Memory_Free(self->itemTbl);
+	}
+	
+	if( self->attachedSets ) {
+		Memory_Free( self->attachedSets );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _CompositeVC_Print(void* compositeVC, Stream* stream)
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Index		item_I;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "CompositeVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\titemCount: %u\n", self->itemCount );
+	Journal_Printf( info, "\titemTbl (ptr): %p\n", self->itemTbl);
+	if (self->itemTbl)
+	{
+		for (item_I = 0; item_I < self->itemCount; item_I++)
+			Journal_Printf( info, "\t\titemTbl[%u] (ptr): %p\n", item_I, self->itemTbl[item_I]);
+	}
+	Journal_Printf( info, "\tiOwnTbl (ptr): %p\n", self->iOwnTbl);
+	if (self->iOwnTbl)
+	{
+		for (item_I = 0; item_I < self->itemCount; item_I++)
+			Journal_Printf( info, "\t\tiOwnTbl[%u]: %s\n", item_I, self->iOwnTbl[item_I] ? "True" : "False");
+	}
+	Journal_Printf( info, "\t_size: %lu\n", self->_size);
+	Journal_Printf( info, "\t_delta: %lu\n", self->_delta);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _CompositeVC_Copy( void* compositeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	CompositeVC*	newCompositeVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newCompositeVC = (CompositeVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newCompositeVC->itemCount = self->itemCount;
+	newCompositeVC->_size = self->_size;
+	newCompositeVC->_delta = self->_delta;
+	newCompositeVC->hasReadDictionary = self->hasReadDictionary;
+	newCompositeVC->data = self->data;
+	
+	if( deep ) {
+		if( (newCompositeVC->itemTbl = PtrMap_Find( map, self->itemTbl )) == NULL && self->itemTbl ) {
+			Index	item_I;
+			
+			newCompositeVC->itemTbl = Memory_Alloc_Array( VariableCondition*, newCompositeVC->_size, "CompositeCV->itemTbl" );
+			memset( newCompositeVC->itemTbl, 0, sizeof(VariableCondition*) * newCompositeVC->_size );
+			for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+				newCompositeVC->itemTbl[item_I] = (VariableCondition*)Stg_Class_Copy( self->itemTbl[item_I], NULL, deep, nameExt, map );
+			}
+			PtrMap_Append( map, newCompositeVC->itemTbl, self->itemTbl );
+		}
+		
+		if( (newCompositeVC->iOwnTbl = PtrMap_Find( map, self->iOwnTbl )) == NULL && self->iOwnTbl ) {
+			newCompositeVC->iOwnTbl = Memory_Alloc_Array( Bool, newCompositeVC->_size, "CompositeCV->iOwnTbl" );
+			memcpy( newCompositeVC->iOwnTbl, self->iOwnTbl, sizeof(Bool) * newCompositeVC->_size );
+			PtrMap_Append( map, newCompositeVC->iOwnTbl, self->iOwnTbl );
+		}
+		
+		if( (newCompositeVC->attachedSets = PtrMap_Find( map, self->attachedSets )) == NULL && self->attachedSets ) {
+			Index	item_I;
+			
+			self->attachedSets = Memory_Alloc_Array( IndexSet*, newCompositeVC->itemCount, "CompositeCV->attachedSets" );
+			for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+				newCompositeVC->attachedSets[item_I] = (IndexSet*)Stg_Class_Copy( self->attachedSets[item_I], NULL, deep, nameExt, map );
+			}
+			PtrMap_Append( map, newCompositeVC->attachedSets, self->attachedSets );
+		}
+	}
+	else {
+		newCompositeVC->itemTbl = self->itemTbl;
+		newCompositeVC->iOwnTbl = self->iOwnTbl;
+		newCompositeVC->attachedSets = self->attachedSets;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newCompositeVC;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CompositeVC_Build( void* compositeVC, void* data ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Index		index;
+	
+	/* Read the dictionary... we have to do this early to get self->itemCount filled in. Hence we keep a flag to ensure we
+		dont read twice */
+	self->_readDictionary( self, self->dictionary );
+	
+	/* Build a temporary array to store the sets of attached VCs for the build process and clear it afterward */
+	if( self->itemCount ) {
+		Index			item_I;
+		
+		self->attachedSets = Memory_Alloc_Array( IndexSet*, self->itemCount, "CompositeCV->attachedSets" );
+		memset( self->attachedSets, 0, sizeof(IndexSet*) * self->itemCount );
+		
+		/* This guy is here so that a VC that was created by the composite VC can do any
+		   build stuff it needs, without calling _VariableCondition_Build for itself. */
+		for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+			VariableCondition_BuildSelf( self->itemTbl[item_I], data );
+		}
+		
+		_VariableCondition_Build( self, data );
+		for( index = 0; index < self->itemCount; index++ ) {
+			Stg_Class_Delete( self->attachedSets[index] );
+		}
+		Memory_Free( self->attachedSets );
+		self->attachedSets = 0;
+	}
+}
+
+
+IndexSet* _CompositeVC_GetSet( void* compositeVC ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	IndexSet*	set = NULL;
+	Index		i;
+	
+	/* Use the first attachment to obtain the size, etc. Be effecient by duplicating if for the my own set */
+	if( self->itemCount ) {
+		self->attachedSets[0] = self->itemTbl[0]->_getSet( self->itemTbl[0] );
+		set = IndexSet_Duplicate( self->attachedSets[0] );
+	}
+	
+	/* For the remainder of the attachments, OR in their sets */
+	for( i = 1; i < self->itemCount; i++ ) {
+		self->attachedSets[i] = self->itemTbl[i]->_getSet( self->itemTbl[i] );
+		IndexSet_Merge_OR( set, self->attachedSets[i] );
+	}
+	
+	return set;
+}
+
+	
+Variable_Index _CompositeVC_GetVariableCount( void* compositeVC, Index globalIndex ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Variable_Index*	varIndices;
+	Variable_Index	varIndexCount = 0;
+	Index		i;
+	
+	varIndices = Memory_Alloc_Array( Variable_Index, self->variable_Register->count, "varIndices" );
+		
+	for( i = 0; i < self->itemCount; i++ ) {
+		if( IndexSet_IsMember( self->attachedSets[i], globalIndex ) ) {
+			Index	varCount = self->itemTbl[i]->_getVariableCount( self->itemTbl[i], globalIndex );
+			Index	j;
+		
+			for(j = 0; j < varCount; j++ ) {
+				Index	newVarIndex = self->itemTbl[i]->_getVariableIndex(self->itemTbl[i], globalIndex, j);
+				Index	k;
+			
+				for (k = 0; k < varIndexCount; k++)
+					if (varIndices[k] == newVarIndex)
+						break;
+				if (k < varIndexCount)
+					continue;
+				
+				varIndices[varIndexCount++] = newVarIndex;
+			}
+		}
+	}
+	
+	if (varIndices) Memory_Free(varIndices);
+	
+	return varIndexCount;
+}
+
+	
+Variable_Index _CompositeVC_GetVariableIndex(
+		void*				compositeVC, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex)
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Variable_Index*	varIndices;
+	Variable_Index	varIndexCount = 0;
+	Index		i;
+	
+	varIndices = Memory_Alloc_Array( Variable_Index, self->variable_Register->count, "varIndices" );
+		
+	for( i = 0; i < self->itemCount; i++ ) {
+		if( IndexSet_IsMember( self->attachedSets[i], globalIndex ) ) {
+			Index	varCount = self->itemTbl[i]->_getVariableCount(self->itemTbl[i], globalIndex);
+			Index	j;
+		
+			for (j = 0; j < varCount; j++)
+			{
+				Index	newVarIndex = self->itemTbl[i]->_getVariableIndex(self->itemTbl[i], globalIndex, j);
+				Index	k;
+			
+				for (k = 0; k < varIndexCount; k++)
+					if (varIndices[k] == newVarIndex)
+						break;
+				if (k < varIndexCount)
+					continue;
+			
+				if (varIndexCount == varIndex)
+				{
+					if (varIndices) Memory_Free(varIndices);
+					return newVarIndex;
+				}
+			
+				varIndices[varIndexCount++] = newVarIndex;
+			}
+		}
+	}
+	
+	if (varIndices) Memory_Free(varIndices);
+	
+	return (Variable_Index)-1;
+}
+
+
+VariableCondition_ValueIndex _CompositeVC_GetValueIndex(
+				void*				compositeVC, 
+				Index				globalIndex, 
+				VariableCondition_VariableIndex	varIndex)
+{
+	CompositeVC*			self = (CompositeVC*)compositeVC;
+	VariableCondition_ValueIndex	valIndex = (VariableCondition_ValueIndex)-1;
+	CompositeVC_ItemIndex		valItem = 0;
+	Variable_Index			varRegIndex = self->_getVariableIndex(self, globalIndex, varIndex);
+	Index				i;
+	
+	for( i = self->itemCount; i > 0; i-- ) {
+		if( IndexSet_IsMember( self->attachedSets[i-1], globalIndex ) ) {
+			Index	j;
+			
+			for (j = 0; j < self->itemTbl[i - 1]->_getVariableCount(self->itemTbl[i - 1], globalIndex); j++)
+				if (self->itemTbl[i - 1]->_getVariableIndex(self->itemTbl[i - 1], globalIndex, j) == 
+					varRegIndex)
+					break;
+			if (j == self->itemTbl[i - 1]->_getVariableCount(self->itemTbl[i - 1], globalIndex))
+				continue;
+			
+			valItem = i - 1;
+			valIndex = self->itemTbl[valItem]->_getValueIndex(self->itemTbl[valItem], globalIndex, j);
+			break;
+		}
+	}
+	
+	for (i = 0; i < valItem; i++)
+		valIndex += self->itemTbl[i]->_getValueCount(self->itemTbl[i]);
+	
+	return valIndex;
+}
+
+	
+VariableCondition_ValueIndex _CompositeVC_GetValueCount(void* compositeVC)
+{
+	CompositeVC*			self = (CompositeVC*)compositeVC;
+	VariableCondition_ValueIndex	valCount = 0;
+	Index				i;
+	
+	for (i = 0; i < self->itemCount; i++)
+		valCount += self->itemTbl[i]->_getValueCount(self->itemTbl[i]);
+		
+	return valCount;
+}
+
+	
+VariableCondition_Value _CompositeVC_GetValue(void* compositeVC, VariableCondition_ValueIndex valIndex)
+{
+	CompositeVC*			self = (CompositeVC*)compositeVC;
+	VariableCondition_ValueIndex	valPos = valIndex;
+	Index				i = 0;
+	
+	while (valPos >= self->itemTbl[i]->_getValueCount(self->itemTbl[i]))
+	{
+		valPos -= self->itemTbl[i]->_getValueCount(self->itemTbl[i]);
+		i++;
+/*		if (++i >= self->itemCount)	*/
+			/* Then what? */
+	}
+	
+	return self->itemTbl[i]->_getValue(self->itemTbl[i], valPos);
+}
+
+
+void _CompositeVC_PrintConcise( void* compositeVC, Stream* stream ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Index		item_I;
+	
+	Journal_Printf( stream, "\ttype: %s, {\n", self->type );
+	if( self->itemTbl ) {
+		for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+			VariableCondition_PrintConcise( self->itemTbl[item_I], stream );
+		}
+	}
+	Journal_Printf( stream, "}\n" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+CompositeVC_ItemIndex CompositeVC_Add(void* compositeVC, void* variableCondition, Bool iOwn)
+{
+	CompositeVC*		self = (CompositeVC*)compositeVC;
+	CompositeVC_ItemIndex	handle;
+	
+	if (self->itemCount >= self->_size)
+	{
+		SizeT currentSize = self->_size;
+		
+		self->_size += self->_delta;
+
+		self->itemTbl = Memory_Realloc_Array( self->itemTbl, VariableCondition*, self->_size );
+		memset( (Pointer)((ArithPointer)self->itemTbl + (sizeof(VariableCondition*) * currentSize) ),
+			0, sizeof(VariableCondition*) * (self->_size - currentSize) );
+
+		self->iOwnTbl = Memory_Realloc_Array( self->iOwnTbl, Bool, self->_size );
+		memset( (Pointer)((ArithPointer)self->iOwnTbl + (sizeof(Bool) * currentSize )),
+			0, sizeof(Bool) * (self->_size - currentSize ) );
+	}
+	
+	handle = self->itemCount++;
+	self->itemTbl[handle] = (VariableCondition*) variableCondition;
+	self->iOwnTbl[handle] = iOwn;
+	
+	return handle;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,188 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**
+** <b>Assumptions:</b>
+**
+** <b>Comments:</b>
+**
+** $Id: CompositeVC.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_Automation_CompositeVC_h__
+#define __Base_Automation_CompositeVC_h__
+	
+	
+	extern const Type CompositeVC_Type;
+	
+	
+	#define __CompositeVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		CompositeVC_ItemIndex		itemCount; \
+		VariableCondition**		itemTbl; \
+		Bool*				iOwnTbl; \
+		SizeT				_size; \
+		SizeT				_delta; \
+		void*				data; \
+		IndexSet**			attachedSets; \
+		Bool				hasReadDictionary;
+	
+	struct _CompositeVC { __CompositeVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		CompositeVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	CompositeVC*			CompositeVC_New(
+						Name						name,
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	CompositeVC*			CompositeVC_DefaultNew( Name name );
+	
+	void				CompositeVC_Init(
+						CompositeVC*					self, 
+						Name						name,
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	CompositeVC*			_CompositeVC_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,
+						Variable_Register*				variable_Register,
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	void				_CompositeVC_Init(
+						void*						compositeVC,
+						void*						data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_CompositeVC_Delete( void* compositeVC );
+	
+	void				_CompositeVC_Print( void* compositeVC, Stream* stream );
+	
+	/* Copy */
+	#define CompositeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CompositeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _CompositeVC_Copy( void* compositeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_CompositeVC_Build( void* compositeVC, void* data );
+	
+	void				_CompositeVC_Construct( void* compositeVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_CompositeVC_ReadDictionary( void* compositeVC, void* dictionary );
+	
+	IndexSet*			_CompositeVC_GetSet( void* compositeVC );
+	
+	VariableCondition_VariableIndex	_CompositeVC_GetVariableCount( void* compositeVC, Index globalIndex );
+	
+	Variable_Index			_CompositeVC_GetVariableIndex(
+						void*				compositeVC, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+	
+	VariableCondition_ValueIndex	_CompositeVC_GetValueIndex(
+						void*				compositeVC, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+	
+	VariableCondition_ValueIndex	_CompositeVC_GetValueCount( void* compositeVC );
+	
+	VariableCondition_Value		_CompositeVC_GetValue( void* compositeVC, VariableCondition_ValueIndex valIndex );
+	
+	void				_CompositeVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	CompositeVC_ItemIndex		CompositeVC_Add( void* compositeVC, void* variableCondition, Bool iOwn );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Base_Automation_CompositeVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">CompositeVC</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">vcName</param>
+		<param name="Type">String</param>
+		<param name="Default">self->name</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">No</param>
+		<param name="Name">Data</param>
+		<param name="Type">Stg_Component</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 319 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: ConditionFunction.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "ConditionFunction.h"
+
+#include <stdio.h>
+#include <assert.h>
+
+
+const Type ConditionFunction_Type = "ConditionFunction";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+ConditionFunction* ConditionFunction_New(ConditionFunction_ApplyFunc* apply, Name name)
+{
+	return _ConditionFunction_New(sizeof(ConditionFunction), ConditionFunction_Type, _ConditionFunction_Delete,
+		_ConditionFunction_Print, NULL, apply, name);
+}
+
+
+void ConditionFunction_Init(ConditionFunction* self, ConditionFunction_ApplyFunc* apply, Name name)
+{
+	/* General info */
+	self->type = ConditionFunction_Type;
+	self->_sizeOfSelf = sizeof(ConditionFunction);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ConditionFunction_Delete;
+	self->_print = _ConditionFunction_Print;
+	self->_copy = NULL;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_ConditionFunction_Init(self, apply, name);
+}
+
+
+ConditionFunction* _ConditionFunction_New( 
+		SizeT				_sizeOfSelf, 
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*		_copy, 
+		ConditionFunction_ApplyFunc*	apply,
+		Name				name)
+{
+	ConditionFunction* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ConditionFunction) );
+	self = (ConditionFunction*)_Stg_Class_New(_sizeOfSelf, type, _delete, _print, _copy);
+	
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* Stg_Class info */
+	_ConditionFunction_Init(self, apply, name);
+	
+	return self;
+}
+
+
+void _ConditionFunction_Init(void* conditionFunction, ConditionFunction_ApplyFunc* apply, Name name)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	self->apply = apply;
+	self->name = name;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _ConditionFunction_Delete(void* conditionFunction)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(self);
+}
+
+
+void _ConditionFunction_Print(void* conditionFunction, Stream* stream)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	/* Set the Journal for printing informations */
+	Stream* conditionFunctionStream = stream;
+	
+	/* General info */
+	Journal_Printf( conditionFunctionStream, "ConditionFunction (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( conditionFunctionStream, "\tapply (func ptr): %p\n", self->apply);
+	Journal_Printf( conditionFunctionStream, "\tname (ptr): %p\n", self->name);
+	if (self->name)
+		Journal_Printf( conditionFunctionStream, "\t\tname: %s\n", self->name);
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, conditionFunctionStream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void _ConditionFunction_Apply(void* conditionFunction, Index index, Variable_Index var_I, void* context, void* result)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	ConditionFunction_Apply(self, index, var_I, context, result);
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Abstract class faciliting the Boundary Condition definition of this system. 
+**	Meshs should only reference this... the base class, not the implementations.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ConditionFunction.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_ConditionFunction_h__
+#define __Base_Automation_ConditionFunction_h__
+
+
+	typedef void	(ConditionFunction_ApplyFunc)	(Index index, Variable_Index var_I, void* context, void* result);
+	
+
+	extern const Type ConditionFunction_Type;
+	
+	
+	#define __ConditionFunction \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Dictionary*				dictionary; \
+		ConditionFunction_ApplyFunc*		apply; \
+		Name					name; \
+		
+	struct _ConditionFunction { __ConditionFunction };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	ConditionFunction*	ConditionFunction_New(ConditionFunction_ApplyFunc* apply, Name name);
+	
+	void			ConditionFunction_Init(ConditionFunction* self, ConditionFunction_ApplyFunc* apply, Name name);
+	
+	ConditionFunction*	_ConditionFunction_New( 
+					SizeT				_sizeOfSelf, 
+					Type				type,
+					Stg_Class_DeleteFunction*		_delete,
+					Stg_Class_PrintFunction*		_print, 
+					Stg_Class_CopyFunction*		_copy, 
+					ConditionFunction_ApplyFunc*	apply,
+					Name				name);
+	
+	void			_ConditionFunction_Init(void* conditionFunction, ConditionFunction_ApplyFunc* apply, Name name);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+
+	void	_ConditionFunction_Delete(void* conditionFunction);
+	
+	void	_ConditionFunction_Print(void* conditionFunction, Stream* stream);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	#define ConditionFunction_Apply(self, index, var_I, context, result) \
+		(self)->apply((index), (var_I), (context), (result))
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	/* Apply the condition function */
+	void	_ConditionFunction_Apply(void* conditionFunction, Index index, Variable_Index var_I, void* context, void* result);
+
+
+#endif /* __Base_Automation_ConditionFunction_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: ConditionFunction_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+const Type ConditionFunction_Register_Type = "ConditionFunction_Register";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+ConditionFunction_Register* ConditionFunction_Register_New(void)
+{ 
+	return _ConditionFunction_Register_New( sizeof(ConditionFunction_Register), ConditionFunction_Register_Type, 
+		_ConditionFunction_Register_Delete, _ConditionFunction_Register_Print, NULL);
+}
+
+
+void ConditionFunction_Register_Init(ConditionFunction_Register* self)
+{ 
+	/* General info */
+	self->type = ConditionFunction_Register_Type;
+	self->_sizeOfSelf = sizeof(ConditionFunction_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ConditionFunction_Register_Delete;
+	self->_print = _ConditionFunction_Register_Print;
+	self->_copy = NULL;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_ConditionFunction_Register_Init(self);
+}
+
+
+ConditionFunction_Register* _ConditionFunction_Register_New( 
+				SizeT			_sizeOfSelf,
+				Type			type,
+				Stg_Class_DeleteFunction*	_delete,
+				Stg_Class_PrintFunction*	_print, 
+				Stg_Class_CopyFunction*	_copy )
+{
+	ConditionFunction_Register*	self;
+	
+	/* Allocate memory */
+	self = (ConditionFunction_Register*)_Stg_Class_New(_sizeOfSelf, type, _delete, _print, _copy);
+	
+	/* Virtual info */
+	
+	/* ConditionFunction_Register info */
+	_ConditionFunction_Register_Init(self);
+	
+	return self;
+}
+
+
+void _ConditionFunction_Register_Init(void* conditionFunction_Register)
+{ 
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->_cf = Memory_Alloc_Array( ConditionFunction*, self->_size, "ConditionFunction_Register->_cf" );
+	memset(self->_cf, 0, sizeof(ConditionFunction*)*self->_size);
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _ConditionFunction_Register_Delete(void* conditionFunction_Register)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	
+	if (self->_cf) Memory_Free(self->_cf);
+		
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(self);
+}
+
+
+void _ConditionFunction_Register_Print(void* conditionFunction_Register, Stream* stream)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	
+	/* Set the Journal for printing informations */
+	Stream* conditionFunction_RegisterStream = stream;
+	
+	/* General info */
+	Journal_Printf( conditionFunction_RegisterStream, "ConditionFunction_Register (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* ConditionFunction_Register info */
+	Journal_Printf( conditionFunction_RegisterStream, "\tcount: %u\n", self->count);
+	Journal_Printf( conditionFunction_RegisterStream, "\t_size: %lu\n", self->_size);
+	Journal_Printf( conditionFunction_RegisterStream, "\t_delta: %lu\n", self->_delta);
+	Journal_Printf( conditionFunction_RegisterStream, "\t_cf (ptr): %p\n", self->_cf);
+	if (self->_cf)
+	{
+		ConditionFunction_Index	cf_I;
+		
+		for (cf_I = 0; cf_I < self->count; cf_I++)
+			Journal_Printf( conditionFunction_RegisterStream, "\t\t_cf[%u]: %p\n", cf_I, self->_cf[cf_I]);
+	}
+	
+	/* Parent class info */
+	_Stg_Class_Print( self, conditionFunction_RegisterStream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+ConditionFunction_Index ConditionFunction_Register_Add(void* conditionFunction_Register, ConditionFunction* cf)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	Variable_Index			handle;
+	
+	if (self->count >= self->_size)
+	{
+		SizeT currentSize = self->_size;
+		
+		/* Note: why is realloc not used here? */
+		self->_size += self->_delta;
+		
+		self->_cf = Memory_Realloc_Array( self->_cf, ConditionFunction*, self->_size );
+		memset( (Pointer)((ArithPointer)self->_cf + (sizeof(ConditionFunction*) * currentSize) ),
+			0, sizeof(ConditionFunction*) * (self->_size - currentSize) );
+	}
+	
+	handle = self->count++;
+	self->_cf[handle] = cf;
+	
+	return handle;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+ConditionFunction_Index ConditionFunction_Register_GetIndex(void* conditionFunction_Register, Name name)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	ConditionFunction_Index		cf_I;
+	
+	for (cf_I = 0; cf_I < self->count; cf_I++)
+	{
+		if (self->_cf[cf_I]->name && !strcmp(name, self->_cf[cf_I]->name))
+			return cf_I;
+	}
+	
+	return (ConditionFunction_Index)-1;
+}
+
+
+void ConditionFunction_Register_PrintNameOfEachFunc( void* conditionFunction_Register, Stream* stream ) {
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	ConditionFunction_Index		cf_I;
+	
+	for (cf_I = 0; cf_I < self->count; cf_I++)
+	{
+		Journal_Printf( stream, "\"%s\", ", self->_cf[cf_I]->name );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Instantiates the ConditionFunction_Register such that there is only one set of DOF descriptions (for example, all the nodes have the same
+**	DOF configuration).
+**
+** Assumptions:
+**	All "adding" is done before the ConditionFunction_Register_Build(...), which will be done in the mesh's initialisation.
+**
+** Comments:
+**	You "add" DOF descriptors by using the ConditionFunction_Register_Add( variable_Register, name, offset ), where the "name" is the
+**	textual name for the DOF that will be used in the I/O of the DOF (e.g. for initial and boundary conditions), and "offset" is
+**	the memory offset of the DOF in the construct that it will be used (e.g. node.vel[0]-node ).
+**
+** $Id: ConditionFunction_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_ConditionFunction_Register_h__
+#define __Base_Automation_ConditionFunction_Register_h__
+	
+	
+	extern const Type ConditionFunction_Register_Type;
+	
+	
+	#define __ConditionFunction_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		ConditionFunction_Index			count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		ConditionFunction**			_cf; \
+		
+	struct _ConditionFunction_Register { __ConditionFunction_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	ConditionFunction_Register*	ConditionFunction_Register_New(void);
+	
+	void				ConditionFunction_Register_Init(ConditionFunction_Register* self);
+	
+	ConditionFunction_Register*	_ConditionFunction_Register_New( 
+						SizeT			_sizeOfSelf,
+						Type			type,
+						Stg_Class_DeleteFunction*	_delete,
+						Stg_Class_PrintFunction*	_print,
+						Stg_Class_CopyFunction*	_copy );
+		
+	void				_ConditionFunction_Register_Init(void* conditionFunction_Register);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void	_ConditionFunction_Register_Delete( void* conditionFunction_Register );
+	
+	void	_ConditionFunction_Register_Print( void* conditionFunction_Register, Stream* stream );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	ConditionFunction_Index	ConditionFunction_Register_Add(void* conditionFunction_Register, ConditionFunction* cf);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	ConditionFunction_Index	ConditionFunction_Register_GetIndex(void* conditionFunction_Register, Name name);
+
+	void ConditionFunction_Register_PrintNameOfEachFunc( void* conditionFunction_Register, Stream* stream );
+
+	
+#endif /* __Base_Automation_ConditionFunction_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: DocumentationComponentFactory.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "LiveComponentRegister.h"
+#include "Stg_ComponentFactory.h"
+#include "DocumentationComponentFactory.h"
+#include "HierarchyTable.h"
+#include "Stg_ComponentRegister.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#define COMPONENT_TYPE_STRING_LENGTH 30
+
+/* Textual name of this class */
+const Type DocumentationComponentFactory_Type = "DocumentationComponentFactory";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+	
+DocumentationComponentFactory* DocumentationComponentFactory_New( Stg_ObjectList* registerRegister ) {
+	DocumentationComponentFactory *self = NULL;
+
+	self = _DocumentationComponentFactory_New( 
+			sizeof( DocumentationComponentFactory ), 
+			DocumentationComponentFactory_Type,
+			_DocumentationComponentFactory_Delete,
+			_DocumentationComponentFactory_Print,
+			NULL,
+			_DocumentationComponentFactory_GetDouble,
+			_DocumentationComponentFactory_GetInt,
+			_DocumentationComponentFactory_GetUnsignedInt,
+			_DocumentationComponentFactory_GetBool,
+			_DocumentationComponentFactory_GetString,
+			_DocumentationComponentFactory_GetRootDictDouble,
+			_DocumentationComponentFactory_GetRootDictInt,
+			_DocumentationComponentFactory_GetRootDictUnsignedInt,
+			_DocumentationComponentFactory_GetRootDictBool,
+			_DocumentationComponentFactory_GetRootDictString,
+			_DocumentationComponentFactory_ConstructByName,
+			_DocumentationComponentFactory_ConstructByKey,
+			_DocumentationComponentFactory_ConstructByNameWithKeyFallback,
+			_DocumentationComponentFactory_ConstructByList,
+			registerRegister );
+
+	return self;
+}
+
+/* Creation implementation */
+DocumentationComponentFactory* _DocumentationComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Stg_ObjectList*                                          registerRegister )
+{
+	DocumentationComponentFactory *self = NULL;
+
+	assert( _sizeOfSelf >= sizeof( DocumentationComponentFactory ) );
+	self = (DocumentationComponentFactory*) _Stg_ComponentFactory_New( 
+			_sizeOfSelf,
+			type, 
+			_delete,
+			_print,
+			_copy,
+			getDouble,
+			getInt,
+			getUnsignedInt,
+			getBool,
+			getString,
+			getRootDictDouble,
+			getRootDictInt,
+			getRootDictUnsignedInt,
+			getRootDictBool,
+			getRootDictString,
+			constructByName,
+			constructByKey,
+			constructByNameWithKeyFallback,
+			constructByList,
+			NULL,
+			NULL,
+			registerRegister );
+
+	return self;
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _DocumentationComponentFactory_Delete( void* componentFactory ) {
+	DocumentationComponentFactory *self = (DocumentationComponentFactory *) componentFactory;
+
+	_Stg_ComponentFactory_Delete( self );
+}
+	
+void _DocumentationComponentFactory_Print( void* componentFactory, Stream* stream ) {
+	DocumentationComponentFactory *self = (DocumentationComponentFactory*) componentFactory;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "DocumentationComponentFactory (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_ComponentFactory_Print( self, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+double _DocumentationComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'double' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}
+
+int _DocumentationComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+unsigned int _DocumentationComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'unsigned int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+Bool _DocumentationComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'Bool' - ", key );
+	Journal_PrintBool( self->infoStream, Default );
+	return Default;
+}	
+
+char* _DocumentationComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'string' - ", key );
+	Journal_PrintString( self->infoStream, Default );
+	return (char*)Default;
+}
+
+double _DocumentationComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'double' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}
+
+int _DocumentationComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+unsigned int _DocumentationComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'unsigned int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+Bool _DocumentationComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'Bool' - ", key );
+	Journal_PrintBool( self->infoStream, Default );
+	return Default;
+}	
+
+char* _DocumentationComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* const Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'string' - ", key );
+	Journal_PrintString( self->infoStream, Default );
+	return (char*)Default;
+}
+
+
+Stg_Component* _DocumentationComponentFactory_ConstructByName( 
+		void*			cf, 
+		Name			componentName, 
+		Type			type, 
+		Bool			isEssential, 
+		void*			data )
+{
+	DocumentationComponentFactory*    self              = (DocumentationComponentFactory*) cf;
+
+	Journal_Printf( self->infoStream, "%sEssential Component - Type '%s' - Name = '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, componentName );
+
+	return NULL;
+}
+
+Stg_Component* _DocumentationComponentFactory_ConstructByKey( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) 
+{
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	
+	Journal_Printf( self->infoStream, "%sEssential Component - Type '%s' - Key = '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, componentKey );
+
+	return NULL;
+}
+
+Stg_Component* _DocumentationComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	fallbackKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) 
+{
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	
+	Journal_Printf( self->infoStream, "%sEssential Component - Type '%s' - Trial Name = '%s' - Fall back key = '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, componentTrialName, fallbackKey );
+
+	return NULL;
+}
+
+Stg_Component** _DocumentationComponentFactory_ConstructByList( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data )
+{
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*)componentFactory;
+
+	Journal_Printf( self->infoStream, "%sEssential Components of type '%s' in list named '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, listName );
+
+	return NULL;
+}
+
+void DocumentationComponentFactory_DocumentType( void* cf, Name typeName ) {
+	DocumentationComponentFactory*             self              = (DocumentationComponentFactory*) cf;
+	Stg_Component_DefaultConstructorFunction*  defaultConstructor;
+	Stg_Component*                             component;
+	Stream*                                    stream            = self->infoStream;
+	Type                                       type;
+
+	type = HierarchyTable_GetTypePtrFromName( HierarchyTable_GetHierarchyTable(), typeName );
+			
+	Stream_Enable( stream, False );
+
+	defaultConstructor = Stg_ComponentRegister_AssertGet( 
+			Stg_ComponentRegister_Get_ComponentRegister(), type, "0" );
+
+	component = (Stg_Component*) defaultConstructor( "componentName" );
+
+	Stream_Enable( stream, True );
+	Journal_Printf( stream, "Class '%s'\n", type );
+	Stream_Indent( stream );
+
+	Journal_Printf( stream, "Parent - %s\n", GetParent( type ) );
+
+	Stg_Component_Construct( component, (Stg_ComponentFactory*)self, 0 /* dummy */, True );
+
+	Stg_Class_Delete( component );
+	Stream_UnIndent( self->infoStream );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,143 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: DocumentationComponentFactory.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Base_Automation_DocumentationComponentFactory_h__
+#define __Base_Automation_DocumentationComponentFactory_h__
+
+	extern const Type DocumentationComponentFactory_Type;
+	
+	#define __DocumentationComponentFactory \
+		/* General info */ \
+		__Stg_ComponentFactory \
+		\
+		/* Virtual info */ \
+		\
+		/* Class info */ \
+		
+	struct DocumentationComponentFactory { __DocumentationComponentFactory };
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	/* Creation implementation */
+	DocumentationComponentFactory* DocumentationComponentFactory_New( Stg_ObjectList* registerRegister );
+	
+	DocumentationComponentFactory* _DocumentationComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Stg_ObjectList*                                          registerRegister );
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _DocumentationComponentFactory_Delete( void* DocumentationComponentFactory );
+	
+	void _DocumentationComponentFactory_Print( void* DocumentationComponentFactory, Stream* stream );
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	Dictionary_Entry_Value* _DocumentationComponentFactory_GetDictionaryValue( 
+			void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	/** Function to get *numerical* values from component's dictionary
+	 * if the key in the sub-dictionary gives a string then it assumes 
+	 * that this is a key that points to the root dictionary */
+	Dictionary_Entry_Value* _DocumentationComponentFactory_GetNumericalValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	double _DocumentationComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int _DocumentationComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int _DocumentationComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool _DocumentationComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* _DocumentationComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) ;
+	
+	double _DocumentationComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int _DocumentationComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int _DocumentationComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool _DocumentationComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* _DocumentationComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* defaultVal ) ;
+
+	Stg_Component* _DocumentationComponentFactory_ConstructByName( 
+		void*			componentFactory, 
+		Name			componentName, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+	Stg_Component* _DocumentationComponentFactory_ConstructByKey( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+	Stg_Component* _DocumentationComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	componentTrialKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+	Stg_Component** _DocumentationComponentFactory_ConstructByList( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data );
+
+	void DocumentationComponentFactory_DocumentType( void* cf, Type type ) ;
+
+#endif /* __Base_Automation_DocumentationComponentFactory_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Finalise.c 3645 2006-06-19 06:31:44Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include "VariableCondition_Register.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+#include "HierarchyTable.h"
+#include "CallGraph.h"
+#include <stdio.h>
+
+Bool BaseAutomation_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	/* Clean up global variable */
+	Stg_Class_Delete( variableCondition_Register );
+	Stg_Class_Delete( stgComponentRegister );
+	Stg_Class_Delete( stgHierarchyTable );
+	Stg_Class_Delete( stgCallGraph );
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_BaseAutomation_Finalise_h__
+#define __Base_BaseAutomation_Finalise_h__
+	
+	Bool BaseAutomation_Finalise( void );
+	
+#endif /* __Base_BaseAutomation_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: HierarchyTable.c 3652 2006-06-27 01:11:50Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+#include "HierarchyTable.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type HierarchyTable_Type = "HierarchyTable";
+
+/* Global pointer to singleton */
+HierarchyTable* stgHierarchyTable = NULL;
+
+HierarchyTable* HierarchyTable_New( void ) {
+	HierarchyTable* self = NULL;
+
+	if( stgHierarchyTable == NULL ){
+		self = (HierarchyTable*) HashTable_New( NULL, NULL, NULL, HASHTABLE_POINTER_KEY );
+	}
+	else{
+		self = stgHierarchyTable;
+	}
+
+	return self;
+}
+	
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+int HierarchyTable_RegisterParent( void* hierarchyTable, Type childType, Type parentType ) {
+	HierarchyTable *self = (HierarchyTable*) hierarchyTable;
+
+	return HashTable_InsertEntry( (HashTable*) self, childType, sizeof(const Type), parentType, sizeof(const Type) );
+}
+
+Bool HierarchyTable_IsChild( void* hierarchyTable, Type childType, Type possibleParentType ) {
+	HierarchyTable* self     = (HierarchyTable*) hierarchyTable;
+	Type            currType;
+	
+	/* Starting from 'childType', sweep through Hierarchy Table, going from parent to parent.
+	 * Keep going until the Hierarchy Table produces a NULL - this means that we've reached the end of the table */
+	for ( currType = childType ; currType != NULL ; currType = HierarchyTable_GetParent( self, currType ) ) {
+		/* Test if this parent is the same as the one being tested for */
+		if ( currType == possibleParentType )
+			return True;
+	}
+
+	/* If we've gone through every parent in the table and reached the end - 
+	 * then 'childType' cannot be a child of 'possibleParentType' */
+	return False;
+}
+
+void HierarchyTable_PrintParents( void* hierarchyTable, Type childType, Stream* stream ) {
+	HierarchyTable* self     = (HierarchyTable*) hierarchyTable;
+	Type            parentType;
+
+	Journal_Printf( stream, "Type '%s' inherits from:\n", childType );
+
+	parentType = HierarchyTable_GetParent( self, childType );
+	for ( ; parentType != NULL ; parentType = HierarchyTable_GetParent( self, parentType ) ) {
+		Journal_Printf( stream, "\t%s\n", parentType );
+	}
+}
+
+void HierarchyTable_PrintChildren( void* hierarchyTable, Type parentType, Stream* stream ) {
+	HierarchyTable*    self     = (HierarchyTable*) hierarchyTable;
+	HashTable_Entry*   hashTableEntry;
+	Index              entry_I;
+	Stg_ComponentRegister* componentRegister = Stg_ComponentRegister_Get_ComponentRegister();
+
+	Journal_Printf( stream, "%s \t\t\t (%s Class)\n", 
+			parentType, ( Stg_ComponentRegister_Get( componentRegister, parentType, "0" ) ? "Concrete" : "Abstract" ) );
+	Stream_Flush( stream );
+	Stream_Indent( stream );
+
+	for ( entry_I = 0 ; entry_I < self->max ; entry_I++ ) {
+		hashTableEntry = self->entries[ entry_I ];
+
+		while( hashTableEntry ){
+			if ( (Type) hashTableEntry->data == parentType ) {
+				HierarchyTable_PrintChildren( self, (Type)hashTableEntry->key, stream );
+			}
+			hashTableEntry = hashTableEntry->next;
+		}
+
+	}
+	Stream_UnIndent( stream );
+}
+
+
+Stg_Class* Stg_Class_CheckType( void* classPtr, Type possibleParentType ) {
+	Stg_Class* self = (Stg_Class*) classPtr;
+	/* Check if the pointer is null */
+	Journal_Firewall(
+		self != NULL,
+		Journal_Register( Error_Type, HierarchyTable_Type ),
+		"Error doing type checking against possibleParentType %s - pointer is NULL.\n",
+		possibleParentType );
+	
+	if ( ! Stg_Class_IsInstance( self, possibleParentType ) ) {
+		Stream* stream = Journal_Register( Error_Type, HierarchyTable_Type );
+		
+		Journal_Printf( stream, "Error doing type checking:\nTrying to cast " );
+
+		/* Give the user the name of the object if you can */
+		if ( Stg_Class_IsInstance( classPtr, Stg_Object_Type ) ) 
+			Journal_Printf( stream, "'%s' ", ((Stg_Object*)classPtr)->name );
+		else 		
+			Journal_Printf( stream, "pointer '%p' ", classPtr );
+
+		Journal_Printf( stream, 
+				"as '%s' when it is actually of type '%s'.\n",
+				possibleParentType, self->type );
+		
+		PrintParents( possibleParentType, stream );
+		
+		Journal_Firewall( 
+			0,
+			stream, 
+			"Either the HierarchyTable for this class is incorrect or this object has been cast incorrectly.\n" );
+	}
+	return self;
+}
+
+Type HierarchyTable_GetTypePtrFromName( void* hierarchyTable, Name typeName ) {
+	HierarchyTable*    self     = (HierarchyTable*) hierarchyTable;
+	HashTable_Entry*   hashTableEntry;
+	Index              entry_I;
+
+	for ( entry_I = 0 ; entry_I < self->max ; entry_I++ ) {
+		hashTableEntry = self->entries[ entry_I ];
+
+		while( hashTableEntry ){
+			if ( strcmp( (Type) hashTableEntry->key, typeName ) == 0 )
+				return (Type) hashTableEntry->key;
+		
+			hashTableEntry = hashTableEntry->next;
+		}
+
+	}
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Abstract class for objects that are named.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: HierarchyTable.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_HierarchyTable_h__
+#define __Base_Automation_HierarchyTable_h__
+	
+	/* Textual name of this class */
+	extern const Type HierarchyTable_Type;
+
+	extern HierarchyTable *stgHierarchyTable;
+	
+	/* HierarchyTable information */
+	#define __HierarchyTable \
+		/* General info */ \
+		__HashTable \
+		\
+		/* Virtual info */ \
+		\
+		/* HierarchyTable info */ \
+	
+	struct HierarchyTable { __HierarchyTable };
+	
+	/** Constructor Implementation */
+	HierarchyTable* HierarchyTable_New(  );
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	/** This function returns the pointer to the singleton "stgHierarchyTable" */
+	#define HierarchyTable_GetHierarchyTable() \
+		((HierarchyTable*) stgHierarchyTable )
+	
+	/** Function to be called once per class and registers it's parent in the Hierarchy hash table 
+	 * the pointer to the child's type string can then be used as a key to find the pointer the 
+	 * parent's type string */
+	int HierarchyTable_RegisterParent( void* hierarchyTable, Type childType, Type parentType ) ;
+
+	/** Shortcut to above function - it grabs the pointer to the HierarchyTable singleton for you */
+	#define RegisterParent( childType, parentType ) \
+		HierarchyTable_RegisterParent( HierarchyTable_GetHierarchyTable(), (childType), (parentType) )
+
+	/** Macro to get immediate parent for a type */
+	#define HierarchyTable_GetParent( hierarchyTable, type ) \
+		(Type) HashTable_FindEntryFunction( (HashTable*) hierarchyTable, type, sizeof(const Type) )
+
+	/** Shortcut to above macro - Gets the HierarchyTable pointer for you */
+	#define GetParent( type ) \
+		HierarchyTable_GetParent( HierarchyTable_GetHierarchyTable(), type )
+	
+	/** Function to keep going up the hierarchy to test whether a certain type is a child of a another type */
+	Bool HierarchyTable_IsChild( void* hierarchyTable, Type childType, Type possibleParentType ) ;
+
+	/** Shortcut to above function - it grabs the pointer to the HierarchyTable singleton for you */
+	#define IsChild( childType, possibleParentType ) \
+		HierarchyTable_IsChild( HierarchyTable_GetHierarchyTable(), (childType), (possibleParentType) )
+
+	/** Macro which checks to see if a specific pointer to an object is an instance of a class -
+	 * i.e. it's type is a child of this 'possibleParentType' */
+	#define Stg_Class_IsInstance( classPtr, possibleParentType )\
+			IsChild( ((Stg_Class*) classPtr)->type, (possibleParentType) )
+
+	#define Stg_CheckType( classPtr, possibleParentTypedef ) \
+		(possibleParentTypedef*) Stg_Class_CheckType( classPtr, possibleParentTypedef ## _Type )
+
+	#ifdef DEBUG
+		#define Stg_DCheckType Stg_CheckType
+	#else
+		#define Stg_DCheckType( classPtr, possibleParentTypedef ) \
+			(possibleParentTypedef*) (classPtr)
+	#endif
+
+	Stg_Class* Stg_Class_CheckType( void* classPtr, Type possibleParentType );
+
+	void HierarchyTable_PrintParents( void* hierarchyTable, Type childType, Stream* stream ) ;
+	void HierarchyTable_PrintChildren( void* hierarchyTable, Type parentType, Stream* stream ) ;
+
+	#define PrintParents( childType, stream ) \
+		HierarchyTable_PrintParents( HierarchyTable_GetHierarchyTable(), (childType), (stream) )
+	#define PrintChildren( parentType, stream ) \
+		HierarchyTable_PrintChildren( HierarchyTable_GetHierarchyTable(), (parentType), (stream) )
+
+	Type HierarchyTable_GetTypePtrFromName( void* hierarchyTable, Name typeName ) ;
+
+#endif /* __Base_Automation_HierarchyTable_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Init.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Init.h"
+#include "VariableCondition_Register.h"
+#include "ConditionFunction_Register.h"
+#include "Variable_Register.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "VariableCondition.h"
+#include "SetVC.h"
+#include "CompositeVC.h"
+#include "ConditionFunction.h"
+#include "VariableAllVC.h"
+#include "HierarchyTable.h"
+#include "CallGraph.h"
+
+#include "VariableDumpStream.h"
+
+#include <stdio.h>
+
+Bool BaseAutomation_Init( int* argc, char** argv[] ) 
+{
+	Stream* typedStream;
+	
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	variableCondition_Register = VariableCondition_Register_New();
+	VariableCondition_Register_Add( variableCondition_Register, SetVC_Type, SetVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, CompositeVC_Type, CompositeVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, VariableAllVC_Type, VariableAllVC_Factory );
+
+	typedStream = VariableDumpStream_New( VariableDumpStream_Type );
+	Stream_Enable( typedStream, True );
+	Stream_SetLevel( typedStream, 1 );
+	Stream_SetFile( typedStream, stJournal->stdOut );
+	
+	Journal_RegisterTypedStream( typedStream );
+	
+	/** Initializing the Component Register singleton */
+	stgComponentRegister = Stg_ComponentRegister_New( );
+	
+	/** Initializing the Hierarchy Table singleton */
+	stgHierarchyTable = HierarchyTable_New();
+
+	/** Initializing the Call Graph singleton */
+	stgCallGraph = Stg_CallGraph_New();
+
+	/** Initializing the ComponentRegister singleton */
+	
+	/** Adding default constructors of various components to the Stg_ComponentRegister */
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Variable_Type, "0", (Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CompositeVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)CompositeVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SetVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)SetVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), VariableAllVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)VariableAllVC_DefaultNew );
+
+	/** Register Parents for All Classes */
+	RegisterParent( Stg_ComponentFactory_Type,           Stg_Class_Type );
+	RegisterParent( Stg_ComponentRegister_Type,          Stg_Class_Type );
+	RegisterParent( Stg_Component_Type,                  Stg_Object_Type );
+	RegisterParent( VariableCondition_Type,          Stg_Component_Type );
+	RegisterParent( CompositeVC_Type,                VariableCondition_Type );
+	RegisterParent( ConditionFunction_Type,          Stg_Class_Type );
+	RegisterParent( ConditionFunction_Register_Type, Stg_Class_Type );
+	RegisterParent( HierarchyTable_Type,             HashTable_Type );
+	RegisterParent( Stg_CallGraph_Type,              Stg_Class_Type );
+	RegisterParent( Variable_Type,                   Stg_Component_Type );
+	RegisterParent( VariableAllVC_Type,              VariableCondition_Type );
+	RegisterParent( VariableCondition_Register_Type, Stg_Class_Type );
+	RegisterParent( VariableDumpStream_Type,         CStream_Type );
+	RegisterParent( Variable_Register_Type,          Stg_Class_Type );
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_BaseAutomation_Init_h__
+#define __Base_BaseAutomation_Init_h__
+	
+	Bool BaseAutomation_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_BaseAutomation_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: LiveComponentRegister.c 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "LiveComponentRegister.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type LiveComponentRegister_Type = "LiveComponentRegister";
+LiveComponentRegister* stgLiveComponentRegister = NULL;
+
+LiveComponentRegister* _LiveComponentRegister_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy )
+{
+	LiveComponentRegister *self = NULL;
+
+	assert( _sizeOfSelf >= sizeof( LiveComponentRegister ) );
+	self = (LiveComponentRegister*) _Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	return self;
+}
+	
+LiveComponentRegister* LiveComponentRegister_New(  )
+{
+	LiveComponentRegister *self = NULL;
+
+	self = _LiveComponentRegister_New( sizeof( LiveComponentRegister ), 
+					LiveComponentRegister_Type,
+					_LiveComponentRegister_Delete,
+					_LiveComponentRegister_Print,
+					NULL);
+
+	LiveComponentRegister_Init( self );
+
+	if ( !stgLiveComponentRegister ) {
+		stgLiveComponentRegister = self;
+	}
+	return self;
+}
+
+void _LiveComponentRegister_Init( LiveComponentRegister *self )
+{
+}
+	
+void LiveComponentRegister_Init( LiveComponentRegister *self )
+{
+	assert( self );
+
+	self->componentList = Stg_ObjectList_New( );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _LiveComponentRegister_Delete( void* liveComponentRegister )
+{
+	LiveComponentRegister *self = (LiveComponentRegister *) liveComponentRegister;
+
+	assert( self );
+
+	// TODO: add some debug printing about this...
+	LiveComponentRegister_DeleteAll( self );
+	Stg_Class_Delete( self->componentList );
+
+	/* Note: this has to come after the LCRegister delete all, in case any of the
+	components need to refer to it as part of their delete phase */
+	if ( stgLiveComponentRegister == self ) {
+		stgLiveComponentRegister = NULL;
+	}
+
+	_Stg_Class_Delete( self );
+}
+
+void _LiveComponentRegister_Print( void* liveComponentRegister, Stream* stream )
+{
+	LiveComponentRegister *self = (LiveComponentRegister *) liveComponentRegister;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "LiveComponentRegister (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	Journal_Printf( (void*) stream, "componentList (ptr): %p\n", self->componentList );
+	Stg_Class_Print( self->componentList, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+Index LiveComponentRegister_Add( LiveComponentRegister *self, Stg_Component *component )
+{
+	assert( self );
+	return Stg_ObjectList_Append( self->componentList, component );
+}
+	
+Stg_Component *LiveComponentRegister_Get( LiveComponentRegister *self, Name name )
+{
+	assert( self );
+	
+	return ( Stg_Component* ) Stg_ObjectList_Get( self->componentList, name );
+}
+
+Stg_Component *LiveComponentRegister_At( void* liveComponentRegister, Index index ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	assert( self );
+
+	return ( Stg_Component* ) Stg_ObjectList_At( self->componentList, index );
+}
+
+
+Index LiveComponentRegister_RemoveOneComponentsEntry( void* liveComponentRegister, Name name ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	assert( self );
+
+	/* Note: as specified in the header, we don't want to actually delete the component, just
+	the entry */
+	return Stg_ObjectList_Remove( self->componentList, name, KEEP );
+}
+
+	
+unsigned int LiveComponentRegister_GetCount( LiveComponentRegister *self )
+{
+	assert( self );
+
+	return self->componentList->count;
+}
+
+
+void LiveComponentRegister_BuildAll( void* liveComponentRegister, void* data ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	Stg_Component*             component;
+	Index                  index;
+	Index                  count     = LiveComponentRegister_GetCount( self );
+	
+	for ( index = 0 ; index < count ; index++ ) {
+		component = LiveComponentRegister_At( self, index );
+		Build( component, data, False );
+	}
+}
+
+
+void LiveComponentRegister_InitialiseAll( void* liveComponentRegister, void* data ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	Stg_Component*             component;
+	Index                  index;
+	Index                  count     = LiveComponentRegister_GetCount( self );
+	
+	for ( index = 0 ; index < count ; index++ ) {
+		component = LiveComponentRegister_At( self, index );
+		Initialise( component, data, False );
+	}
+}
+
+
+void LiveComponentRegister_DeleteAll( void* liveComponentRegister ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	Stg_Component*             component;
+	Index                  index;
+	
+	/* Note: have to recompute count dynamically each loop in case a component deletes
+	some other components */
+	for ( index = 0 ; index < LiveComponentRegister_GetCount( self ) ; index++ ) {
+		component = LiveComponentRegister_At( self, index );
+		//printf( "Freeing component \"%s\" (type %s)\n", component->name, component->type );
+		Stg_Class_Delete( component );
+	}
+	self->componentList->count = 0;
+}
+
+
+LiveComponentRegister* LiveComponentRegister_GetLiveComponentRegister() {
+	return stgLiveComponentRegister;
+}
+
+void LiveComponentRegister_PrintSimilar( void* liveComponentRegister, Name name, Stream* stream, unsigned int number ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+
+	Stg_ObjectList_PrintSimilar( self->componentList, name, stream, number );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: LiveComponentRegister.h 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Base_Automation_LiveComponentRegister_h__
+#define __Base_Automation_LiveComponentRegister_h__
+
+	extern const Type LiveComponentRegister_Type;
+	extern LiveComponentRegister* stgLiveComponentRegister; /**< Live components singleton. */
+	
+	#define __LiveComponentRegister \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Class info */ \
+		Stg_ObjectList			*componentList;
+		
+	struct LiveComponentRegister { __LiveComponentRegister };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+		/* Creation implementation */
+	LiveComponentRegister* _LiveComponentRegister_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy
+		);
+	
+	LiveComponentRegister* LiveComponentRegister_New(  );
+
+	void _LiveComponentRegister_Init( LiveComponentRegister *self );
+	
+	void LiveComponentRegister_Init( LiveComponentRegister *self );
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _LiveComponentRegister_Delete( void* liveComponentRegister );
+	
+	void _LiveComponentRegister_Print( void* liveComponentRegister, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	Index LiveComponentRegister_Add( LiveComponentRegister *self, Stg_Component *component );
+	
+	Stg_Component *LiveComponentRegister_Get( LiveComponentRegister *self, Name name );
+	Stg_Component *LiveComponentRegister_At( void* liveComponentRegister, Index index ) ;
+	
+	/** Delete's the entry referring to a component, but not the *component referred to*. This
+	is useful when another class needs to delete a component from the lcRegister before the 
+	lcRegister does it as part of DeleteAll - such as with Codelets which must be deleted
+	before the plugin dlls are closed. */
+	Index LiveComponentRegister_RemoveOneComponentsEntry( void* liveComponentRegister, Name name );
+	unsigned int LiveComponentRegister_GetCount( LiveComponentRegister *self );
+
+	void LiveComponentRegister_BuildAll( void* liveComponentRegister, void* data ) ;
+	void LiveComponentRegister_InitialiseAll( void* liveComponentRegister, void* data ) ;
+	void LiveComponentRegister_DeleteAll( void* liveComponentRegister ) ;
+
+	LiveComponentRegister* LiveComponentRegister_GetLiveComponentRegister();
+
+	void LiveComponentRegister_PrintSimilar( void* liveComponentRegister, Name name, Stream* stream, unsigned int number ) ;
+#endif /* __Base_Automation_LiveComponentRegister_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 1260 2004-04-20 20:01:15Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseAutomation
+def_inc = StGermain/Base/Automation
+
+def_srcs = \
+	Variable.c \
+	Variable_Register.c \
+	VariableDumpStream.c \
+	ConditionFunction.c \
+	ConditionFunction_Register.c \
+	VariableCondition.c \
+	VariableCondition_Register.c \
+	CompositeVC.c \
+	SetVC.c \
+	VariableAllVC.c \
+	Stg_Component.c \
+	Stg_ComponentMeta.c \
+	Stg_ComponentRegister.c \
+	LiveComponentRegister.c \
+	Stg_ComponentFactory.c \
+	DocumentationComponentFactory.c \
+	HierarchyTable.c \
+	CallGraph.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	Variable.h \
+	Variable_Register.h \
+	VariableDumpStream.h \
+	ConditionFunction.h \
+	ConditionFunction_Register.h \
+	VariableCondition.h \
+	VariableCondition_Register.h \
+	CompositeVC.h \
+	SetVC.h \
+	VariableAllVC.h \
+	types.h \
+	shortcuts.h \
+	offsets.h \
+	Stg_Component.h \
+	Stg_ComponentMeta.h \
+	Stg_ComponentRegister.h \
+	LiveComponentRegister.h \
+	Stg_ComponentFactory.h \
+	DocumentationComponentFactory.h \
+	HierarchyTable.h \
+	CallGraph.h \
+	Init.h \
+	Finalise.h \
+	Automation.h
+
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,161 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: VariableDumpStream.c 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+                                                                                                                                    
+#include "types.h"
+#include "RegisterFactory.h"
+
+#include <assert.h>
+
+const Type RegisterFactory_Type = "RegisterFactory";
+const Type RegisterFactory_RegisterConstructorFunction_Type = "RegisterFactory_RegisterConstructorFunction";
+
+RegisterFactory_RegisterConstructor* RegisterFactory_RegisterConstructor_New(
+	Name						name,
+	RegisterFactory_RegisterConstructorFunction*	_constructor )
+{
+	return _RegisterFactory_RegisterConstructor_New(
+		sizeof(RegisterFactory_RegisterConstructor),
+		RegisterFactory_RegisterConstructorFunction_Type,
+		_Stg_Object_Delete,
+		_Stg_Object_Print,
+		NULL, 
+		name,
+		NON_GLOBAL,
+		_constructor );
+}
+
+RegisterFactory_RegisterConstructor* _RegisterFactory_RegisterConstructor_New(
+	SizeT						_sizeOfSelf,
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Name						name,
+	AllocationType					nameAllocationType,
+	RegisterFactory_RegisterConstructorFunction*	_constructor )
+{
+	RegisterFactory_RegisterConstructor* self;
+
+	assert( _sizeOfSelf >= sizeof(RegisterFactory_RegisterConstructor) );
+
+	self = (RegisterFactory_RegisterConstructor*)_Stg_Object_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy, 
+		name,
+		nameAllocationType );
+	
+	self->_constructor = _constructor;
+
+	return self;
+}
+
+RegisterFactory* RegisterFactory_New()
+{
+	return _RegisterFactory_New(
+		sizeof(RegisterFactory),
+		RegisterFactory_Type,
+		_RegisterFactory_Delete,
+		_RegisterFactory_Print,
+		NULL );
+}
+
+RegisterFactory* _RegisterFactory_New(
+	SizeT						_sizeOfSelf,
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy )
+{
+	RegisterFactory* self;
+
+	assert ( _sizeOfSelf >= sizeof(RegisterFactory) );
+
+	self = (RegisterFactory*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	_RegisterFactory_Init( self );
+
+	return self;
+}
+
+void _RegisterFactory_Init( RegisterFactory* self ) {
+	self->constructors = Stg_ObjectList_New();
+}
+
+void _RegisterFactory_Delete( void* factory ) {
+	RegisterFactory* self = (RegisterFactory*)factory;
+
+	Stg_ObjectList_DeleteAllObjects( self->constructors );
+	Stg_Class_Delete( self->constructors );
+	_Stg_Class_Delete( self );
+}
+
+void _RegisterFactory_Print( void* factory, Stream* stream ) {
+	RegisterFactory* self = (RegisterFactory*)factory;
+	
+	Journal_Printf( stream, "RegisterFactory\n" );
+	_Stg_Class_Print( self, stream );
+	Print( self->constructors, stream );
+}
+
+void RegisterFactory_Register( void* factory, Name name, void* _constructorFunction )
+{
+	RegisterFactory* self = (RegisterFactory*)factory;
+	
+	Stg_ObjectList_Append( self->constructors,
+		RegisterFactory_RegisterConstructor_New(
+			name,
+			(RegisterFactory_RegisterConstructorFunction*)_constructorFunction ) );
+}
+
+void* RegisterFactory_Create( void* factory, Name name )
+{
+	RegisterFactory* self = (RegisterFactory*)factory;
+	RegisterFactory_RegisterConstructor* constructor;
+	RegisterFactory_RegisterConstructorFunction* constructorFunc;
+	
+
+	constructor = (RegisterFactory_RegisterConstructor*)Stg_ObjectList_Get( self->constructors, name );
+	constructorFunc = (RegisterFactory_RegisterConstructorFunction*)constructor->_constructor;
+
+	return (constructorFunc)();
+}
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**
+**
+** <b>Assumptions</b>
+**	None
+**
+** <b>Comments</b>
+**	None
+**
+** <b>Description</b>
+**
+**
+** Comments:
+**
+** $Id: RegisterFactory.h 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_IO_RegisterFactory_h__
+#define __Base_IO_RegisterFactory_h__
+	
+	/** Textual name for RegisterFactory class. */
+	extern const Type RegisterFactory_Type;
+	
+	/** Textual name for RegisterFactory_RegisterConstructorFunction class. */
+	extern const Type RegisterFactory_RegisterConstructorFunction_Type;
+	
+	typedef void* (RegisterFactory_RegisterConstructorFunction) ( );
+
+	/** \def __RegisterFactory_RegisterConstructor See RegisterFactory_RegisterConstructor */
+	#define __RegisterFactory_RegisterConstructor \
+		__Stg_Object \
+		RegisterFactory_RegisterConstructorFunction*	_constructor;
+		
+	struct RegisterFactory_RegisterConstructor { __RegisterFactory_RegisterConstructor };
+
+	RegisterFactory_RegisterConstructor* RegisterFactory_RegisterConstructor_New(
+		Name						name,
+		RegisterFactory_RegisterConstructorFunction*	_constructor );
+
+	RegisterFactory_RegisterConstructor* _RegisterFactory_RegisterConstructor_New(
+		SizeT						_sizeOfSelf,
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Name						name,
+		AllocationType					nameAllocationType,
+		RegisterFactory_RegisterConstructorFunction*	_constructor );
+
+	/** \def __RegisterFactory See RegisterFactory. */
+	#define __RegisterFactory \
+		/* General info */ \
+		__Stg_Class \
+		\
+		Stg_ObjectList*	constructors;
+		
+	struct RegisterFactory { __RegisterFactory };
+
+	RegisterFactory* RegisterFactory_New();
+
+	RegisterFactory* _RegisterFactory_New(
+		SizeT						_sizeOfSelf,
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy );
+	
+	void _RegisterFactory_Init( RegisterFactory* self );
+
+	void _RegisterFactory_Delete( void* factory );
+
+	void _RegisterFactory_Print( void* factory, Stream* stream );
+
+	void RegisterFactory_Register( void* factory, Name name, void* _constructorFunction );
+
+	void* RegisterFactory_Create( void* factory, Name name );
+
+	
+#endif /* __IO_RegisterFactoryFile_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,567 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: SetVC.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+#include "VariableCondition.h"
+#include "SetVC.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type SetVC_Type = "SetVC";
+const Name defaultSetVCName = "defaultSetVCName";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* SetVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register, 
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)SetVC_New( defaultSetVCName, NULL, variable_Register, conFunc_Register, dictionary );
+}
+
+
+SetVC*	SetVC_New(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary )
+{
+	return _SetVC_New( 
+		sizeof(SetVC), 
+		SetVC_Type, 
+		_SetVC_Delete, 
+		_SetVC_Print, 
+		_SetVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)SetVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableCondition_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+	   True,	
+		NULL,
+		_SetVC_PrintConcise,
+		_SetVC_ReadDictionary,
+		_SetVC_GetSet, 
+		_SetVC_GetVariableCount, 
+		_SetVC_GetVariableIndex, 
+		_SetVC_GetValueIndex, 
+		_SetVC_GetValueCount, 
+		_SetVC_GetValue,
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+}
+
+SetVC* SetVC_DefaultNew( Name name )
+{
+	return (SetVC*)_SetVC_New( 
+		sizeof(SetVC), 
+		SetVC_Type, 
+		_SetVC_Delete, 
+		_SetVC_Print, 
+		_SetVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)SetVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableCondition_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name, 
+		False,
+		NULL,
+		_SetVC_PrintConcise,
+		_SetVC_ReadDictionary,
+		_SetVC_GetSet, 
+		_SetVC_GetVariableCount, 
+		_SetVC_GetVariableIndex, 
+		_SetVC_GetValueIndex, 
+		_SetVC_GetValueCount, 
+		_SetVC_GetValue,
+		NULL,
+		NULL/*variable_Register*/, 
+		NULL/*conFunc_Register*/,
+		NULL/*dictionary*/ );
+}
+
+void SetVC_Init(
+		SetVC*						self,
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = SetVC_Type;
+	self->_sizeOfSelf = sizeof(SetVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _SetVC_Delete;
+	self->_print = _SetVC_Print;
+	self->_copy = _SetVC_Copy;
+	self->_build = _VariableCondition_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_buildSelf = NULL;
+	self->_printConcise = _SetVC_PrintConcise;
+	self->_readDictionary = _SetVC_ReadDictionary;
+	self->_getSet = _SetVC_GetSet;
+	self->_getVariableCount = _SetVC_GetVariableCount;
+	self->_getVariableIndex = _SetVC_GetVariableIndex;
+	self->_getValueIndex = _SetVC_GetValueIndex;
+	self->_getValueCount = _SetVC_GetValueCount;
+	self->_getValue = _SetVC_GetValue;
+	
+	_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 */
+	_SetVC_Init( self,  _dictionaryEntryName );
+}
+
+
+SetVC* _SetVC_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,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary )
+{
+	SetVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(SetVC));
+	self = (SetVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue,
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_SetVC_Init( self, _dictionaryEntryName );
+	}
+	
+	return self;
+}
+
+void _SetVC_Init( void* setVC, Name _dictionaryEntryName ) {
+	SetVC*			self = (SetVC*)setVC;
+	
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+}	
+	
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _SetVC_ReadDictionary( void* setVC, void* dictionary ) {
+	SetVC*			self = (SetVC*)setVC;
+	Dictionary_Entry_Value*	vcDictVal;
+	Dictionary_Entry_Value	_vcDictVal;
+	Dictionary_Entry_Value*	varsVal;
+	SetVC_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)
+	{
+		Dictionary_Entry_Value*		setVal = Dictionary_Entry_Value_GetMember( vcDictVal, "indices" );
+		Index				indexCnt = Dictionary_Entry_Value_AsUnsignedInt( 
+							Dictionary_Entry_Value_GetMember( vcDictVal, "indexCount" ) );
+		Index				i, cnt;
+		
+		self->_vcset = IndexSet_New( indexCnt );
+		cnt = Dictionary_Entry_Value_GetCount( setVal );
+		for( i = 0; i < cnt; i++ )
+			IndexSet_Add( self->_vcset, Dictionary_Entry_Value_AsUnsignedInt( 
+				Dictionary_Entry_Value_GetElement( setVal, i ) ) );
+		
+		/* Obtain the variable entries */
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		self->_entryCount = Dictionary_Entry_Value_GetCount( varsVal );
+		self->_entryTbl = Memory_Alloc_Array( SetVC_Entry, self->_entryCount, "SetVC->_entryTbl");
+		
+		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 (!strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				self->_entryTbl[entry_I].value.as.typeCFIndex = ConditionFunction_Register_GetIndex(
+					self->conFunc_Register, funcName);
+			}
+			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, "SetVC->_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 _SetVC_Delete(void* setVC)
+{
+	SetVC*	self = (SetVC*)setVC;
+	
+	if (self->_entryTbl) Memory_Free( self->_entryTbl );
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _SetVC_Print(void* setVC, Stream* stream)
+{
+	SetVC*				self = (SetVC*)setVC;
+	SetVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "SetVC (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* _SetVC_Copy( void* setVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	SetVC*		self = (SetVC*)setVC;
+	SetVC*		newSetVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSetVC = (SetVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newSetVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newSetVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newSetVC->_vcset = (IndexSet*)Stg_Class_Copy( self->_vcset, NULL, deep, nameExt, map );
+		
+		if( (newSetVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newSetVC->_entryTbl = Memory_Alloc_Array( SetVC_Entry, newSetVC->_entryCount, "SetVC->_entryTbl");
+			memcpy( newSetVC->_entryTbl, self->_entryTbl, sizeof(SetVC_Entry) * newSetVC->_entryCount );
+			PtrMap_Append( map, newSetVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newSetVC->_vcset = self->_vcset;
+		newSetVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newSetVC;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+IndexSet* _SetVC_GetSet( void* variableCondition ) {
+	SetVC*		self = (SetVC*)variableCondition;
+	
+	return (IndexSet*) IndexSet_Duplicate( self->_vcset );
+}
+
+
+VariableCondition_VariableIndex _SetVC_GetVariableCount( void* variableCondition, Index globalIndex ) {
+	SetVC*	self = (SetVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _SetVC_GetVariableIndex( void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex ) {
+	SetVC*	self = (SetVC*)variableCondition;
+	
+	return Variable_Register_GetIndex(self->variable_Register, self->_entryTbl[varIndex].varName);
+}
+
+
+VariableCondition_ValueIndex _SetVC_GetValueIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex )
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _SetVC_GetValueCount( void* variableCondition ) {
+	SetVC*	self = (SetVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _SetVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex ) {
+	SetVC*	self = (SetVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+
+void _SetVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	SetVC*		self = (SetVC*)variableCondition;
+	IndexSet_Index	set_I;
+	
+	Journal_Printf( stream, "\ttype: %s, set: {", self->type );
+	for( set_I = 0; set_I < self->_set->size; set_I++ ) {
+		if( IndexSet_IsMember( self->_set, set_I ) ) {
+			Journal_Printf( stream, "%u ", set_I );
+		}
+	}
+	Journal_Printf( stream, "}\n" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: SetVC.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_SetVC_h__
+#define __Base_Automation_SetVC_h__
+	
+
+	extern const Type SetVC_Type;
+	
+	
+	#define __SetVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _SetVC_Entry { __SetVC_Entry };
+	
+	
+	#define __SetVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		SetVC_Entry_Index		_entryCount; \
+		SetVC_Entry*			_entryTbl; \
+		IndexSet*			_vcset;
+
+	struct _SetVC { __SetVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		SetVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	SetVC*				SetVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	SetVC*				SetVC_DefaultNew( Name name );
+	
+	void				SetVC_Init(
+						SetVC*						self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	SetVC*				_SetVC_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,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	void				_SetVC_Init( void* setVC, Name _dictionaryEntryName );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_SetVC_Delete( void* setVC );
+	
+	void				_SetVC_Print( void* setVC, Stream* stream );
+	
+	/* Copy */
+	#define SetVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define SetVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _SetVC_Copy( void* setVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_SetVC_ReadDictionary( void* setVC, void* dictionary );
+	
+	IndexSet*			_SetVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_SetVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_SetVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex);
+						
+	VariableCondition_ValueIndex	_SetVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex);
+						
+	VariableCondition_ValueIndex	_SetVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_SetVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_SetVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Base_Automation_SetVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">SetVC</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/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="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>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,635 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Stg_Component.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentMeta.h"
+#include "Stg_ComponentFactory.h"
+#include "LiveComponentRegister.h"
+#include "CallGraph.h"
+
+#include "Stg_ComponentRegister.h"
+
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+/* Textual name of this class */
+const Type Stg_Component_Type = "Stg_Component";
+
+
+Stg_Component* _Stg_Component_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,
+		AllocationType					nameAllocationType )
+{
+	Stg_Component* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_Component) );
+	self = (Stg_Component*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, nameAllocationType );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_defaultConstructor = _defaultConstructor;
+	self->_construct = _construct;
+	self->_build = _build;
+	self->_initialise =  _initialise;
+	self->_execute = _execute;
+	self->_destroy = _destroy;
+	
+	/* Stg_Component info */
+	_Stg_Component_Init( self );
+	
+	return self;
+}
+
+
+void _Stg_Component_Init( Stg_Component* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_Component info */
+	self->isConstructed = False;
+	self->isBuilt = False;
+	self->isInitialised = False;
+	self->hasExecuted = False;
+	self->isDestroyed = False;
+	self->constructType = Stg_Object_AppendSuffix( self, "Construct" );
+	self->buildType = Stg_Object_AppendSuffix( self, "Build" );
+	self->initialiseType = Stg_Object_AppendSuffix( self, "Initialise" );
+	self->executeType = Stg_Object_AppendSuffix( self, "Execute" );
+	self->destroyType = Stg_Object_AppendSuffix( self, "Destroy" );
+}
+
+
+void _Stg_Component_Delete( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	Memory_Free( self->destroyType );
+	Memory_Free( self->executeType );
+	Memory_Free( self->initialiseType );
+	Memory_Free( self->buildType );
+	Memory_Free( self->constructType );
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Object_Delete( self );
+}
+
+
+void _Stg_Component_Print( void* component, Stream* stream ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Stg_Component (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Object_Print( self, stream );
+	
+	/* Virtual info */
+	Journal_Printf( (void*) stream, "\t_defaultConstructor (func ptr): %p\n", self->_defaultConstructor );
+	Journal_Printf( (void*) stream, "\t_construct (func ptr): %p\n", self->_construct );
+	Journal_Printf( (void*) stream, "\t_build (func ptr): %p\n", self->_build );
+	Journal_Printf( (void*) stream, "\t_initialise (func ptr): %p\n", self->_initialise );
+	Journal_Printf( (void*) stream, "\t_execute (func ptr): %p\n", self->_execute );
+	Journal_Printf( (void*) stream, "\t_destroy (func ptr): %p\n", self->_destroy );
+	
+	/* Stg_Component */
+	Journal_Printf( (void*) stream, "\tisConstructed: %s\n", self->isConstructed ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\tisBuilt: %s\n", self->isBuilt ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\tisInitialised: %s\n", self->isInitialised ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\thasExecuted: %s\n", self->hasExecuted ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\tisDestroyed: %s\n", self->isDestroyed ? "True" : "False" );
+
+	Journal_Printf( (void*) stream, "\tconstructor function name: %s\n", self->constructType );
+	Journal_Printf( (void*) stream, "\tbuild function name: %s\n", self->buildType );
+	Journal_Printf( (void*) stream, "\tinitialise function name: %s\n", self->initialiseType );
+	Journal_Printf( (void*) stream, "\texecute function name: %s\n", self->executeType );
+	Journal_Printf( (void*) stream, "\tdestroy function name: %s\n", self->destroyType );
+}
+
+void* _Stg_Component_Copy( void* component, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_Component*	self = (Stg_Component*)component;
+	Stg_Component*	newComponent;
+	
+	newComponent = _Stg_Object_Copy( component, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newComponent->_defaultConstructor = self->_defaultConstructor;
+	newComponent->_construct = self->_construct;
+	newComponent->_build = self->_build;
+	newComponent->_initialise = self->_initialise;
+	newComponent->_execute = self->_execute;
+	newComponent->_destroy = self->_destroy;
+	
+	newComponent->isConstructed = self->isConstructed;
+	newComponent->isBuilt = self->isBuilt;
+	newComponent->isInitialised = self->isInitialised;
+	newComponent->hasExecuted = self->hasExecuted;
+	newComponent->isDestroyed = self->isDestroyed;
+	
+	newComponent->constructType = StG_Strdup( self->constructType );
+	newComponent->buildType = StG_Strdup( self->buildType );
+	newComponent->initialiseType = StG_Strdup( self->initialiseType );
+	newComponent->executeType = StG_Strdup( self->executeType );
+	newComponent->destroyType = StG_Strdup( self->destroyType );
+
+	if ( LiveComponentRegister_GetLiveComponentRegister() ) {
+		LiveComponentRegister_Add( LiveComponentRegister_GetLiveComponentRegister(), newComponent );
+		Memory_CountInc( newComponent );	/* Live register now has a refernce to it */
+	}
+
+	return newComponent;
+}
+
+void Stg_Component_Construct( void* component, Stg_ComponentFactory* cf, void* data, Bool force ) {
+	Stg_Component* self   = (Stg_Component*)component;
+
+	assert( self );
+	
+	if( force || !self->isConstructed ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;*/
+		
+		Stream* stream = Journal_Register( Info_Type, "Stg_ComponentFactory" );
+
+		Journal_Printf( stream, "Constructing %s..\n", self->name );
+		Stream_Indent( stream );
+		
+		/*buf = Stg_Object_AppendSuffix( self, "Construct" );
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_construct, self->constructType );
+		#endif
+		
+		if ( !self->isConstructed ) {
+			Stg_Component_SetupStreamFromDictionary( 
+				self, 
+				Dictionary_GetDictionary( cf->componentDict, self->name ) );
+		}
+		
+		self->isConstructed = True;
+		self->_construct( self, cf, data );
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+
+		Memory_Free( buf );*/
+		
+		Stream_UnIndent( stream );
+	}
+}
+
+void Stg_Component_Build( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	if( force || !self->isBuilt ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Build" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_build, self->buildType );
+		#endif
+		
+		self->_build( self, data );
+		self->isBuilt = True;
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+
+		Memory_Free( buf );*/
+	}
+}
+
+void Stg_Component_Initialise( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	if( force || !self->isInitialised ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Initialise" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_initialise, self->initialiseType );
+		#endif
+		
+		self->_initialise( self, data );
+		self->isInitialised = True;
+		
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+		
+		Memory_Free( buf );*/
+	}
+}
+
+void Stg_Component_Execute( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	if( force || !self->hasExecuted ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Execute" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_execute, self->executeType );
+		#endif
+		
+		self->_execute( self, data );
+		self->hasExecuted = True;
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );	
+		
+		Memory_Free( buf );*/
+	}
+}
+
+void Stg_Component_Destroy( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	if( force || !self->isDestroyed ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Destroy" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_destroy, self->destroyType );
+		#endif
+		
+		self->_destroy( self, data );
+		self->isDestroyed = True;
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+		Memory_Free( buf );*/
+	}
+}
+
+
+/* TODO: UPT TO HERE */
+
+Bool Stg_Component_IsBuiltFunc( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	return Stg_Component_IsBuiltMacro( self );
+}
+
+Bool Stg_Component_IsInitialisedFunc( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	return Stg_Component_IsInitialisedMacro( self );
+}
+
+Bool Stg_Component_HasExecutedFunc( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	return Stg_Component_HasExecutedMacro( self );
+}
+
+void Stg_Component_SetupStreamFromDictionary( void* component, Dictionary* dictionary ) {
+	Stg_Component* self = (Stg_Component*)component;
+
+	Index index;
+	Bool valid;
+
+	char* keyCopy;
+	char* operation;
+	char* streamType;
+
+	Stream* stream;
+
+	if ( dictionary == NULL ) {
+		return;
+	}
+	
+	/* Iterate through the whole dictionary, checking for journal related commands */
+	for ( index = 0; index < dictionary->count; ++index ) {
+		/* Check to see if it is a journal operation by searching for the JOURNAL_KEY. */
+		if ( (strncasecmp( dictionary->entryPtr[index]->key, JOURNAL_KEY, strlen(JOURNAL_KEY))) == 0 ) {
+			
+			keyCopy = StG_Strdup( dictionary->entryPtr[index]->key );
+
+			operation = strtok( keyCopy, JOURNAL_DELIMITER );
+			streamType = strtok( NULL, JOURNAL_DELIMITER );
+
+			if ( streamType == NULL ) {
+				streamType = Info_Type;
+			}
+
+			stream = Journal_MyStream( streamType, self );
+
+			valid = True;
+			if ( strcmp( operation, JOURNAL_ENABLE_KEY ) == 0 ) {
+				Bool enable = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				Stream_Enable( stream, enable );
+			}
+			else if ( strcmp( operation, JOURNAL_ENABLE_BRANCH_KEY ) == 0 ) {
+				Bool enable = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				Stream_EnableBranch( stream, enable );
+			}
+			else if ( strcmp( operation, JOURNAL_LEVEL_KEY ) == 0 ) {
+				JournalLevel level = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+				Stream_SetLevelBranch( stream, level );
+			}
+			else if ( strcmp( operation, JOURNAL_RANK_KEY ) == 0 ) {
+				int rank = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+				Stream_SetPrintingRank( stream, rank );
+			}
+			else if ( strcmp( operation, JOURNAL_FLUSH_KEY ) == 0 ) {
+				Bool flush = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				Stream_SetAutoFlush( stream, flush );
+			}
+			else {
+				valid = False;
+			}
+
+			if ( !valid ) {
+				Journal_Printf(
+					Journal_Register( Info_Type, "Journal" ),
+					"Warning - unknown journal operation %s for component %s\n",
+					dictionary->entryPtr[index]->key,
+					self->name );
+			}
+						
+			Memory_Free( keyCopy );
+		}
+	}
+											
+}
+
+Stg_ComponentMeta* _Stg_Component_CreateMeta( Name name, Type type ) {
+	Stg_ComponentMeta* meta;
+	const char* metadata;
+	Dictionary* metaDict;
+	XML_IO_Handler* ioHandler;
+
+	Dictionary_Entry_Value* depList;
+	Dictionary_Entry_Value* paramList;
+
+	metadata = Stg_ComponentRegister_GetMetadata( Stg_ComponentRegister_Get_ComponentRegister(), type, "0" )();
+	
+	metaDict = Dictionary_New();
+	
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromBuffer( ioHandler, metadata, metaDict );
+	
+	meta = Stg_ComponentMeta_New( name, type );
+
+	meta->ioHandler = ioHandler;
+	meta->dict = metaDict;
+	meta->type = type;
+	meta->project = Dictionary_GetString( metaDict, "Project" );
+	meta->location = Dictionary_GetString( metaDict, "Location" );
+	meta->web = Dictionary_GetString( metaDict, "Project Web" );
+	meta->copyright = Dictionary_GetString( metaDict, "Copyright" );
+	meta->license = Dictionary_GetString( metaDict, "License" );
+	meta->parent = Dictionary_GetString( metaDict, "Parent" );
+	meta->description = Dictionary_GetString( metaDict, "Description" );
+
+	depList = Dictionary_Get( metaDict, "Dependencies" );
+	if ( depList != NULL ) {
+		Dictionary_Entry_Value* current = Dictionary_Entry_Value_GetFirstElement( depList );
+
+		while ( current != NULL ) {
+			char* depName;
+			char* depType;
+			char* depDescription;
+			Bool essential;
+			Dictionary* depDict = Dictionary_Entry_Value_AsDictionary( current );
+
+			depName = Dictionary_GetString( depDict, "Name" );
+			depType = Dictionary_GetString( depDict, "Type" );
+			depDescription = Dictionary_GetString( depDict, "Description" );
+			essential = Dictionary_GetBool( depDict, "Essential" );
+
+			Stg_ObjectList_Append( 
+					meta->allDependencies, 
+					Stg_ComponentMeta_Value_New( depName, depType, depDescription, NULL ) );
+			if ( essential ) {
+				Stg_ObjectList_Append(
+					meta->essentialDependencies,
+					Stg_ComponentMeta_Value_New( depName, depType, depDescription, NULL ) );
+			}
+			else {
+				Stg_ObjectList_Append( 
+					meta->optionalDependencies,
+					Stg_ComponentMeta_Value_New( depName, depType, depDescription, NULL ) );
+			}
+
+			current = current->next;
+		}
+	}
+
+	paramList = Dictionary_Get( metaDict, "Params" );
+	if ( paramList != NULL ) {
+		Dictionary_Entry_Value* current = Dictionary_Entry_Value_GetFirstElement( paramList );
+
+		while ( current != NULL ) {
+			char* paramName;
+			char* paramType;
+			char* paramDescription;
+			char* paramDefault;
+
+			Dictionary* paramDict = Dictionary_Entry_Value_AsDictionary( Dictionary_Entry_Value_GetFirstElement( current ) );
+
+			paramName = Dictionary_GetString( paramDict, "Name" );
+			paramType = Dictionary_GetString( paramDict, "Type" );
+			paramDescription = Dictionary_GetString( paramDict, "Description" );
+			paramDefault = Dictionary_GetString( paramDict, "Default" );
+
+			Stg_ObjectList_Append( meta->allParams,
+					Stg_ComponentMeta_Value_New( paramName, paramType, paramDescription, paramDefault ) );
+
+			current = current->next;
+		}
+
+	}
+
+	return meta;
+}
+
+Stg_ComponentMeta* _Stg_Component_Validate( void* component, Type type, Dictionary* componentDictionary ) {
+	Stg_Component* self = (Stg_Component*)component;
+
+	const char* metadata;
+	
+	Dictionary* dictionary;
+
+	Stg_ComponentMeta* result;
+	int entry_I;
+	int obj_I;
+
+	metadata = Stg_ComponentRegister_GetMetadata( Stg_ComponentRegister_Get_ComponentRegister(), type, "0" )();
+
+	dictionary = Dictionary_GetDictionary( componentDictionary, self->name );
+
+	result = _Stg_Component_CreateMeta( self->name, self->type );
+
+	for ( entry_I = 0; entry_I < dictionary->count; ++entry_I ) {
+		Stg_ComponentMeta_Value* obj;
+		char* key;
+		Dictionary_Entry_Value* value;
+		key = dictionary->entryPtr[entry_I]->key;
+		value = Dictionary_GetByIndex( dictionary, entry_I );
+
+		/* Type special case */
+		if ( strcmp( key, "Type" ) == 0 ) {
+			continue;
+		}
+		
+		obj = (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->allParams, key );
+		if ( obj != NULL ) {
+			obj->haveValue = True;
+			continue;
+		}
+
+		if ( (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->allDependencies, key ) == NULL ) {
+			Stg_ObjectList_Append( 
+					result->unexpectedDependencies, 
+					Stg_ComponentMeta_Value_New( key, NULL, NULL, NULL ) );
+		}
+
+		obj = (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->essentialDependencies, key );
+		if ( obj != NULL ) {
+			/* can do subtype checking here */
+			obj->haveValue = True;
+		}
+		obj = (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->optionalDependencies, key );
+		if ( obj != NULL ) {
+			/* can do subtype checking here */
+			obj->haveValue = True;
+		}
+	}
+
+	for ( obj_I = 0; obj_I < result->essentialDependencies->count; ++obj_I ) {
+		Stg_ComponentMeta_Value* metaValue;
+		metaValue = (Stg_ComponentMeta_Value*)Stg_ObjectList_At( result->essentialDependencies, obj_I );
+		if ( metaValue->haveValue == False ) {
+			Stg_ObjectList_Append( 
+					result->missingDependencies,
+					Stg_ComponentMeta_Value_New( metaValue->name, metaValue->type, metaValue->description, metaValue->defaultValue ) );
+			result->isValid = False;
+		}
+	}
+
+	return result;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,227 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 for objects that are named.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_Component.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_Component_h__
+#define __Base_Automation_Stg_Component_h__
+	
+	/* Templates of virtual functions */
+	typedef void*				(Stg_Component_DefaultConstructorFunction)	( Name name );
+	typedef void				(Stg_Component_ConstructFunction)		( void* component, 
+												  Stg_ComponentFactory* cf,
+												  void* data );
+	typedef void				(Stg_Component_BuildFunction)			( void* component, void* data );
+	typedef void				(Stg_Component_InitialiseFunction)		( void* component, void* data );
+	typedef void				(Stg_Component_ExecuteFunction)			( void* component, void* data );
+	typedef void				(Stg_Component_DestroyFunction)			( void* component, void* data );
+	
+	/* Textual name of this class */
+	extern const Type Stg_Component_Type;
+	
+	
+	/* Stg_Component information */
+	#define __Stg_Component \
+		/* General info */ \
+		__Stg_Object \
+		\
+		/* Virtual info */ \
+		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_Component info */ \
+		Bool					isConstructed; \
+		Bool					isBuilt; \
+		Bool					isInitialised; \
+		Bool					hasExecuted; \
+		Bool					isDestroyed; \
+		Type					constructType; \
+		Type					buildType; \
+		Type					initialiseType; \
+		Type					executeType; \
+		Type					destroyType;
+	struct Stg_Component { __Stg_Component };
+
+	#define STG_COMPONENT_DEFARGS							\
+		STG_CLASS_DEFARGS,							\
+		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, 			\
+		AllocationType					nameAllocationType
+
+	#define STG_COMPONENT_PASSARGS						\
+		STG_CLASS_PASSARGS, _defaultConstructor, _construct, 		\
+		_build, _initialise, _execute, _destroy, 			\
+		name, nameAllocationType
+	
+	/* No Stg_Component_New or Stg_Component_Init as this is an abstract class */
+	
+	/* Creation implementation */
+	Stg_Component* _Stg_Component_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,
+		AllocationType					nameAllocationType );
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Initialisation implementation */
+	void _Stg_Component_Init( Stg_Component* self );
+	
+	/* Stg_Class_Delete boundary condition layout implementation */
+	void _Stg_Component_Delete( void* component );
+	
+	/* Print boundary condition layout implementation */
+	void _Stg_Component_Print( void* component, Stream* stream );
+	
+	void* _Stg_Component_Copy( void* component, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Copy the component */
+	#define Stg_Component_Copy( self ) \
+		(Stg_Component*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Stg_Component_DeepCopy(self) \
+		(Stg_Component*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	/** Contruct the component. Configure/setup the component. */
+	void Stg_Component_Construct( void* component, Stg_ComponentFactory* cf, void* data, Bool force );
+	
+	/** Build the component: Take the configuration and instantiate the component (do all main mallocs, etc). */
+	void Stg_Component_Build( void* component, void* data, Bool force );
+	
+	/** Initialise the component: Place in initial values. After this point the component is ready to execute. */
+	void Stg_Component_Initialise( void* component, void* data, Bool force );
+	
+	/** Execute the component: Perform its task. */
+	void Stg_Component_Execute( void* component, void* data, Bool force );
+	
+	/** Destroy the component: All resources used in the other phases are released. */
+	void Stg_Component_Destroy( void* component, void* data, Bool force );
+	
+	/** Is the component constructed? (i.e. its configration/setup performed) */
+	#define Stg_Component_IsConstructedMacro( component ) \
+		((component)->isConstructed)
+	Bool Stg_Component_IsConstructedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsConstructed Stg_Component_IsConstructedFunc
+	#else
+		#define Stg_Component_IsConstructed Stg_Component_IsConstructedMacro
+	#endif
+	#define IsConstructed Stg_Component_IsConstructed
+	
+	/** Is the component built? (i.e. instantiated) */
+	#define Stg_Component_IsBuiltMacro( component ) \
+		((component)->isBuilt)
+	Bool Stg_Component_IsBuiltFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsBuilt Stg_Component_IsBuiltFunc
+	#else
+		#define Stg_Component_IsBuilt Stg_Component_IsBuiltMacro
+	#endif
+	#define IsBuilt Stg_Component_IsBuilt
+	
+	/** Is the component initialised? (i.e. all initial values set) */
+	#define Stg_Component_IsInitialisedMacro( component ) \
+		((component)->isInitialised)
+	Bool Stg_Component_IsInitialisedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsInitialised Stg_Component_IsInitialisedFunc
+	#else
+		#define Stg_Component_IsInitialised Stg_Component_IsInitialisedMacro
+	#endif
+	#define IsInitialised Stg_Component_IsInitialised
+	
+	/** Has the component executed? */
+	#define Stg_Component_HasExecutedMacro( component ) \
+		((component)->hasExecuted)
+	Bool Stg_Component_HasExecutedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_HasExecuted Stg_Component_HasExecutedFunc
+	#else
+		#define Stg_Component_HasExecuted Stg_Component_HasExecutedMacro
+	#endif
+	#define HasExecuted Stg_Component_HasExecuted
+	
+	/** Is the component destroyed? */
+	#define Stg_Component_IsDestroyedMacro( component ) \
+		((component)->isDestroyed)
+	Bool Stg_Component_IsDestroyedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsDestroyed Stg_Component_IsDestroyedFunc
+	#else
+		#define Stg_Component_IsDestroyed Stg_Component_IsDestroyedMacro
+	#endif
+	#define IsDestroyed Stg_Component_IsDestroyed
+
+	/** Disowns the component from the current source, leaving the Live Stg_Component Register to 
+	    destroy it */
+	#define Stg_Component_Disown( component ) \
+		( Memory_CountGet( component ) > 1 ? Memory_CountDec( component ) : Stg_Class_Delete( component ) )
+
+	void Stg_Component_SetupStreamFromDictionary( void* component, Dictionary* dictionary );
+
+	#define Stg_Component_CreateMeta( name, type ) \
+		_Stg_Component_CreateMeta( name, type )
+	Stg_ComponentMeta* _Stg_Component_CreateMeta( Name name, Type type );
+
+	#define Stg_Component_Validate( component, type, dictionary ) \
+		_Stg_Component_Validate( component, type, dictionary )
+	Stg_ComponentMeta* _Stg_Component_Validate( void* component, Type type, Dictionary* dictionary );
+	
+#endif /* __Base_Automation_Stg_Component_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Stg_Component</param>
+<param name="Author">CSD Team</param>
+<param name="Organisation">VPAC</param>
+<param name="Description">An abstract class representing the parent of all Components</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The VPAC Public License Version 1.0-rc1. The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+</list>
+
+
+</StGermainData>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,690 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Stg_ComponentFactory.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "LiveComponentRegister.h"
+#include "Stg_ComponentFactory.h"
+#include "Stg_ComponentRegister.h"
+#include "HierarchyTable.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type Stg_ComponentFactory_Type = "Stg_ComponentFactory";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+/* Creation implementation */
+Stg_ComponentFactory* _Stg_ComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Dictionary*                                              rootDict,
+		Dictionary*                                              componentDict,
+		Stg_ObjectList*                                          registerRegister )
+{
+	Stg_ComponentFactory *self = NULL;
+
+	assert( _sizeOfSelf >= sizeof( Stg_ComponentFactory ) );
+	self = (Stg_ComponentFactory*) _Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	self->getDouble = getDouble;
+	self->getInt = getInt;
+	self->getUnsignedInt = getUnsignedInt;
+	self->getBool = getBool;
+	self->getString = getString;
+
+	self->getRootDictDouble = getRootDictDouble;
+	self->getRootDictInt = getRootDictInt;
+	self->getRootDictUnsignedInt = getRootDictUnsignedInt;
+	self->getRootDictBool = getRootDictBool;
+	self->getRootDictString = getRootDictString;
+	
+	self->constructByName = constructByName;
+	self->constructByKey = constructByKey;
+	self->constructByNameWithKeyFallback  = constructByNameWithKeyFallback;
+	self->constructByList = constructByList;
+
+	self->rootDict = rootDict;
+	self->componentDict = componentDict;
+	self->registerRegister = registerRegister;
+	self->infoStream = Journal_Register( InfoStream_Type, self->type );
+	Stream_SetPrintingRank( self->infoStream, 0 );
+	Stream_SetAutoFlush( self->infoStream, True );
+		
+	_Stg_ComponentFactory_Init( self );
+	
+	return self;
+}
+	
+Stg_ComponentFactory* Stg_ComponentFactory_New( 
+		Dictionary*                                          rootDict,
+		Dictionary*                                          componentDict,
+		Stg_ObjectList*                                      registerRegister )
+{
+	Stg_ComponentFactory *self = NULL;
+
+	assert( rootDict );
+	assert( registerRegister );
+	self = _Stg_ComponentFactory_New( sizeof( Stg_ComponentFactory ), 
+					Stg_ComponentFactory_Type,
+					_Stg_ComponentFactory_Delete,
+					_Stg_ComponentFactory_Print,
+					NULL,
+					_Stg_ComponentFactory_GetDouble,
+					_Stg_ComponentFactory_GetInt,
+					_Stg_ComponentFactory_GetUnsignedInt,
+					_Stg_ComponentFactory_GetBool,
+					_Stg_ComponentFactory_GetString,
+					_Stg_ComponentFactory_GetRootDictDouble,
+					_Stg_ComponentFactory_GetRootDictInt,
+					_Stg_ComponentFactory_GetRootDictUnsignedInt,
+					_Stg_ComponentFactory_GetRootDictBool,
+					_Stg_ComponentFactory_GetRootDictString,
+					_Stg_ComponentFactory_ConstructByName,
+					_Stg_ComponentFactory_ConstructByKey,
+					_Stg_ComponentFactory_ConstructByNameWithKeyFallback,
+					_Stg_ComponentFactory_ConstructByList,
+					rootDict,
+					componentDict,
+					registerRegister );
+
+	return self;
+}
+
+void _Stg_ComponentFactory_Init( Stg_ComponentFactory *self )
+{
+	assert( self );
+	
+	self->LCRegister = LiveComponentRegister_New( );
+}
+
+void Stg_ComponentFactory_Init( Stg_ComponentFactory *self )
+{
+	assert( self );
+	_Stg_ComponentFactory_Init( self );
+}
+	
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Stg_ComponentFactory_Delete( void* cf )
+{
+	Stg_ComponentFactory *self = (Stg_ComponentFactory *) cf;
+
+	assert( self );
+
+	Stg_Class_Delete( self->LCRegister );
+	_Stg_Class_Delete( self );
+}
+	
+void _Stg_ComponentFactory_Print( void* cf, Stream* stream )
+{
+	Stg_ComponentFactory *self = (Stg_ComponentFactory*) cf;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Stg_ComponentFactory (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	Journal_Printf( (void*) stream, "LiveComponentRegister (ptr): %p\n", self->LCRegister );
+	Print( self->LCRegister, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void Stg_ComponentFactory_SetComponentDictionary( Stg_ComponentFactory *self, Dictionary *dict )
+{
+	assert( self );
+	assert( dict );
+
+	self->componentDict = dict;
+}
+
+void Stg_ComponentFactory_CreateComponents( Stg_ComponentFactory *self ) {
+	Dictionary_Entry*                      componentDictEntry           = NULL;
+	Dictionary*                            currComponentDict            = NULL;
+	Type                                   componentType                = NULL;
+	Name                                   componentName                = NULL;
+	Stg_Component_DefaultConstructorFunction*  componentConstructorFunction;
+	Index                                  component_I;
+	Stream*                                stream;
+	
+	assert( self );
+	
+	stream = self->infoStream;
+	if( self->componentDict ){
+		Journal_Printf( stream, "\nCreating Stg_Components from the component-list\n\n" );
+		Stream_Indent( stream );
+	
+		for( component_I = 0; component_I < Dictionary_GetCount( self->componentDict ) ; component_I++ ){
+			componentDictEntry = self->componentDict->entryPtr[ component_I ];
+
+			currComponentDict  = Dictionary_Entry_Value_AsDictionary( componentDictEntry->value );
+			componentType      = Dictionary_GetString( currComponentDict, "Type" );
+			componentName      = componentDictEntry->key;
+
+			Journal_Firewall( 
+					LiveComponentRegister_Get( self->LCRegister, componentName ) == NULL,
+					Journal_Register( Error_Type, self->type ),
+					"Error in func %s: Trying to instantiate two components with the name of '%s'\n"
+					"Each component's name must be unique.\n",
+					__func__, componentName );
+
+			/* Print Message */
+			Journal_Printf( stream, "Instantiating %s as %s\n", componentType, componentName );
+			
+			/* Get Default Constructor for this type */
+			componentConstructorFunction = Stg_ComponentRegister_AssertGet( 
+					Stg_ComponentRegister_Get_ComponentRegister(), componentType, "0" );
+
+			/* Add to register */
+			LiveComponentRegister_Add( self->LCRegister,
+					componentConstructorFunction( componentName ) );
+		}
+		Stream_UnIndent( stream );
+	}
+	else{
+		Journal_Printf( stream, "No Stg_Component List found..!\n" );
+	}
+}
+
+void Stg_ComponentFactory_ConstructComponents( Stg_ComponentFactory* self, void* data ) {
+	Dictionary_Entry*                      componentDictEntry           = NULL;
+	Dictionary*                            currComponentDict            = NULL;
+	Type                                   componentType                = NULL;
+	Name                                   componentName                = NULL;
+	Stg_Component*                         component                    = NULL;
+	Index                                  component_I;
+	Stream*                                stream;
+	
+	assert( self );
+	
+	if( self->componentDict ){
+		stream = self->infoStream;
+		Journal_Printf( stream, "\nConstructing Stg_Components from the live-component register\n\n" );
+		Stream_Indent( stream );
+	
+		for( component_I = 0; component_I < Dictionary_GetCount( self->componentDict ) ; component_I++ ){
+			componentDictEntry = self->componentDict->entryPtr[ component_I ];
+
+			currComponentDict  = Dictionary_Entry_Value_AsDictionary( componentDictEntry->value );
+			componentType      = Dictionary_GetString( currComponentDict, "Type" );
+			componentName      = componentDictEntry->key;
+
+			/* Grab component from register */
+			component = LiveComponentRegister_Get( self->LCRegister, componentName );
+			if( component && !component->isConstructed ){
+				Stg_Component_Construct( component, self, data, True );
+			}
+		}
+		Stream_UnIndent( stream );
+	}
+	else{
+		Journal_Printf( stream, "No Stg_ComponentList found..!\n" );
+	}
+}
+
+Dictionary_Entry_Value* _Stg_ComponentFactory_GetDictionaryValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) {
+	Stg_ComponentFactory*       self              = (Stg_ComponentFactory*) cf;
+	Dictionary*             componentDict     = NULL;
+	Dictionary*             thisComponentDict = NULL;
+	Dictionary_Entry_Value* returnVal;
+	Bool                    usedDefault       = False;
+	Stream*                 errorStream       = Journal_Register( Error_Type, Stg_Component_Type );
+	Stream*                 stream            = self->infoStream;
+
+	Journal_Firewall( self != NULL, errorStream, "In func %s: Stg_ComponentFactory is NULL.\n", __func__ );
+
+	Journal_PrintfL( stream, 2, "Getting parameter '%s': ", key );
+
+	/* Get this Stg_Component's Dictionary */
+	componentDict = self->componentDict;
+	Journal_Firewall( componentDict != NULL, errorStream, 
+			"In func %s: Stg_Component Factory's dictionary is NULL.\n", __func__ );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, componentName );
+	Journal_Firewall( thisComponentDict != NULL, errorStream,
+			"In func %s: Can't find sub-dictionary for component '%s'.\n", __func__, componentName );
+
+	/* Get Value from dictionary */
+	returnVal = Dictionary_Get( thisComponentDict, key );
+	if ( !returnVal && defaultVal ) {
+		returnVal = Dictionary_GetDefault( thisComponentDict, key, defaultVal );
+		usedDefault = True;
+	}
+
+	/* Print Stuff */
+	if ( usedDefault ) {
+		Journal_PrintfL( stream, 2, "Using default value = " );
+		if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+			Dictionary_Entry_Value_Print( returnVal, stream );
+		Journal_PrintfL( stream, 2, "\n" );
+
+		return returnVal;
+	}
+	else if ( returnVal ) {
+		Journal_PrintfL( stream, 2, "Found - Value = " );
+		if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+			Dictionary_Entry_Value_Print( returnVal, stream );
+		Journal_PrintfL( stream, 2, "\n" );
+	}
+	else 
+		Journal_PrintfL( stream, 2, "Not found.\n" );
+
+	return returnVal;
+}
+
+Dictionary_Entry_Value* _Stg_ComponentFactory_GetNumericalValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) {
+	Stg_ComponentFactory*       self              = (Stg_ComponentFactory*) cf;
+	Dictionary_Entry_Value* returnVal;
+	Bool                    usedDefault       = False;
+	Stream*                 errorStream       = Journal_Register( Error_Type, Stg_Component_Type );
+	Stream*                 stream            = self->infoStream;
+
+	returnVal = _Stg_ComponentFactory_GetDictionaryValue( self, componentName, key, defaultVal );
+
+	/* Check to see whether the type is a string -
+	 * if it is then assume that this is a dictionary key linking to the root dictionary */
+	if ( returnVal ) {
+		Dictionary_Entry_Key rootDictKey = Dictionary_Entry_Value_AsString( returnVal );
+		Dictionary*          rootDict    = self->rootDict;
+
+		/* Check if the number really is a string or not */
+		if ( Stg_StringIsNumeric( rootDictKey ) )
+			return returnVal;
+		
+		Journal_PrintfL( stream, 2, "Key '%s' points to key '%s' in the root dictionary: ", key, rootDictKey );
+
+		Journal_Firewall( rootDict != NULL, errorStream, "Root Dictionary NULL in component factory.\n" );
+
+		/* Get Value from dictionary */
+		returnVal = Dictionary_Get( rootDict, rootDictKey );
+		if ( !returnVal && defaultVal ) {
+			returnVal = Dictionary_GetDefault( rootDict, rootDictKey, defaultVal );
+			usedDefault = True;
+		}
+
+		/* Print Stuff */
+		if ( usedDefault ) {
+			Journal_PrintfL( stream, 2, "Using default value = " );
+			if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+				Dictionary_Entry_Value_Print( returnVal, stream );
+			Journal_PrintfL( stream, 2, "\n" );
+			return returnVal;
+		}
+		else if ( returnVal ) {
+			Journal_PrintfL( stream, 2, "Found - Value = " );
+			if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+				Dictionary_Entry_Value_Print( returnVal, stream );
+			Journal_PrintfL( stream, 2, "\n" );
+		}
+		else 
+			Journal_PrintfL( stream, 2, "Not found.\n" );
+	}
+
+	return returnVal;
+}
+
+double Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, double defaultVal ) {
+        Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+        return self->getDouble( cf, componentName, key, defaultVal );
+}
+double _Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, double defaultVal ) {
+	return Dictionary_Entry_Value_AsDouble( 
+			_Stg_ComponentFactory_GetNumericalValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromDouble( defaultVal )));
+}
+int Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, int defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getInt( cf, componentName, key, defaultVal );
+}
+int _Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, int defaultVal ) {
+	return Dictionary_Entry_Value_AsInt( 
+			_Stg_ComponentFactory_GetNumericalValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromInt( defaultVal ) ) );
+}	
+unsigned int Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, unsigned int defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getUnsignedInt( cf, componentName, key, defaultVal );
+}
+unsigned int _Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, unsigned int defaultVal ) {
+	unsigned int retVal;
+	retVal = Dictionary_Entry_Value_AsUnsignedInt( 
+			_Stg_ComponentFactory_GetNumericalValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromUnsignedInt( defaultVal )));
+	// TODO : Possible memory leak if defaultVal not added to the dictionary
+	return retVal;
+}	
+Bool Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, Bool defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getBool( cf, componentName, key, defaultVal );
+}
+Bool _Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, Bool defaultVal ) {
+	return Dictionary_Entry_Value_AsBool( 
+			_Stg_ComponentFactory_GetDictionaryValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromBool( defaultVal ) ) );
+}	
+char* Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getString( cf, componentName, key, defaultVal );
+}
+char* _Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	return Dictionary_Entry_Value_AsString( 
+			_Stg_ComponentFactory_GetDictionaryValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromString( defaultVal ) ) );
+}
+
+
+double Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictDouble( self, key, defaultVal );
+}
+double _Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream, 2, "Getting double from root dictionary with key '%s' and default value '%g'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetDouble_WithDefault( self->rootDict, key, defaultVal );
+}
+int Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictInt( self, key, defaultVal );
+}
+int _Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream, 2, "Getting int from root dictionary with key '%s' and default value '%d'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetInt_WithDefault( self->rootDict, key, defaultVal );
+}	
+unsigned int Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictUnsignedInt( self, key, defaultVal );
+}
+unsigned int _Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream,2, "Getting unsigned int from root dictionary with key '%s' and default value '%u'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetUnsignedInt_WithDefault( self->rootDict, key, defaultVal );
+}	
+Bool Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictBool( self, key, defaultVal );
+}
+Bool _Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream, 2, "Getting Bool from root dictionary with key '%s' and default value '%s'\n",
+			key, defaultVal ? "True" : "False" );
+
+	assert( self->rootDict );
+	return Dictionary_GetBool_WithDefault( self->rootDict, key, defaultVal );
+}	
+char* Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictString( self, key, defaultVal );
+}
+char* _Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+
+	Journal_PrintfL( self->infoStream, 2, "Getting string from root dictionary with key '%s' and default value '%s'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetString_WithDefault( self->rootDict, key, defaultVal );
+}
+
+
+Stg_Component* _Stg_ComponentFactory_ConstructByName( void* cf, Name componentName, Type type, Bool isEssential, void* data ) {
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Stg_Component*		component;
+	Stream*			stream            = self->infoStream;
+
+	Journal_PrintfL( stream, 2, "Looking for %sessential component '%s': ", (isEssential ? "" : "non-"), componentName );
+
+	component = LiveComponentRegister_Get( self->LCRegister, componentName );
+
+	/* Checking */
+	if (component) {
+		Journal_PrintfL( stream, 2, "Found.\n" );
+
+		if ( !component->isConstructed ) {
+			Journal_Printf( stream, "%s has not been constructed yet. Constructing now.\n", componentName );
+			Stream_Indent( stream );
+			Stg_Component_Construct( component, self, data, True );
+			Stream_UnIndent( stream );
+		}
+
+		Stg_Class_CheckType( component, type );
+
+		/* Note: I think we should disable the line below here since this function is only providing a reference
+		to an existing object, not creating a brand new one, and it was thus stuffing up the count so the
+		original object never got deleted. If we are going to do reference counting we need to adapt it across
+		the board so whenever you request access to memory you delete your own reference.
+		-- Main.PatrickSunter 18 May 2006 */
+		Memory_CountInc( component );
+	}
+	else {
+		Journal_PrintfL( stream, 2, "Not found.\n" );
+
+		if ( isEssential ) {
+			Stream* errorStream = Journal_Register( Error_Type, self->type );
+
+			Journal_Printf( errorStream, "In func %s: Cannot find essential component '%s'.\n", __func__, componentName );
+
+			Journal_Printf( errorStream, "Could you have meant one of these?\n" );
+
+			Stream_Indent( errorStream );
+			LiveComponentRegister_PrintSimilar( self->LCRegister, componentName, errorStream, 5 );
+			abort();
+		}
+	}
+	
+	return component;
+}
+
+Stg_Component* _Stg_ComponentFactory_ConstructByKey( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey,
+		Type			type, 
+		Bool 			isEssential,
+		void* 			data ) 
+{
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Dictionary*		thisComponentDict = NULL;
+	Dictionary*		componentDict     = NULL;
+	Name			componentName;
+	Dictionary_Entry_Value*	componentEntryVal;
+	Stream*			errorStream       = Journal_Register( Error_Type, self->type );
+
+	Journal_Firewall( self != NULL, errorStream, "In func %s: Stg_Component is NULL.\n", __func__ );
+
+	/* Get this Stg_Component's Dictionary */
+	componentDict = self->componentDict;
+	Journal_Firewall( componentDict != NULL, errorStream, 
+			"In func %s: Stg_Component Factory's dictionary is NULL.\n", __func__ );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, parentComponentName );
+	Journal_Firewall( thisComponentDict != NULL, errorStream,
+			"In func %s: Can't find sub-dictionary for component '%s'.\n", __func__, parentComponentName );
+
+	/* Get Dependency's Name */
+	componentEntryVal = Dictionary_Get( thisComponentDict, componentKey );
+	if ( componentEntryVal == NULL ) {
+		Journal_Firewall( !isEssential, errorStream,
+				"Stg_Component '%s' cannot find essential component with key '%s'.\n", parentComponentName, componentKey );
+		Journal_PrintfL( self->infoStream, 2, "Stg_Component '%s' cannot find non-essential component with key '%s'.\n", parentComponentName, componentKey );
+		return NULL;
+	}
+		
+	componentName = Dictionary_Entry_Value_AsString( componentEntryVal );
+
+	return self->constructByName( self, componentName, type, isEssential, data );
+}
+
+Stg_Component* _Stg_ComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			cf, 
+		Name 			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	fallbackKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) 
+{
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Stg_Component*		component;
+	Stream*			stream            = self->infoStream;
+
+	Journal_PrintfL( stream, 2, "First Trying to find component by name '%s': ", componentTrialName );
+	component = LiveComponentRegister_Get( self->LCRegister, componentTrialName );
+	
+	if (component) {
+		Journal_PrintfL( stream, 2, "Found.\n" );
+
+		if ( !component->isConstructed ) {
+			Journal_Printf( stream, "%s has not been constructed yet. Constructing now.\n", componentTrialName );
+			Stream_Indent( stream );
+			Stg_Component_Construct( component, self, data, True );
+			Stream_UnIndent( stream );
+		}
+	}
+	else {
+		Journal_PrintfL( stream, 2, "Not found.\n" );
+		Journal_PrintfL( stream, 2, "Fallback - Trying to find component by key '%s'.\n", fallbackKey );
+
+		component = self->constructByKey( self, parentComponentName, fallbackKey, type, isEssential, data );
+	}
+		
+	return component;
+}
+
+Stg_Component** _Stg_ComponentFactory_ConstructByList( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data )
+{
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Dictionary*		thisComponentDict = NULL;
+	Dictionary*		componentDict     = NULL;
+	Name			componentName;
+	Dictionary_Entry_Value*	list;
+	Stg_Component**		componentList;
+	Index			component_I;
+	Stream*			errorStream       = Journal_Register( Error_Type, self->type );
+
+	Journal_Firewall( self != NULL, errorStream, "In func %s: Stg_Component is NULL.\n", __func__ );
+
+	/* Get this Stg_Component's Dictionary */
+	componentDict = self->componentDict;
+	Journal_Firewall( componentDict != NULL, errorStream, 
+			"In func %s: Stg_Component Factory's dictionary is NULL.\n", __func__ );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, parentComponentName );
+	Journal_Firewall( thisComponentDict != NULL, errorStream,
+			"In func %s: Can't find sub-dictionary for component '%s'.\n", __func__, parentComponentName );
+	
+	Journal_PrintfL( self->infoStream, 2, "Looking for list '%s': ", listName );
+	if (( list = Dictionary_Get( thisComponentDict, listName ) )) {
+		Journal_PrintfL( self->infoStream, 2, "Found.\n" );
+
+		*componentCount = MIN( Dictionary_Entry_Value_GetCount( list ), maxComponents );
+
+		componentList = Memory_Alloc_Array( Stg_Component*, *componentCount, "componentList" );
+	
+		Stream_Indent( self->infoStream );
+		for ( component_I = 0 ; component_I < *componentCount ; component_I++ ) {
+			componentName = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( list, component_I ) );
+
+			componentList[ component_I ] = self->constructByName( self, componentName, type, isEssential, data );
+		}
+		Stream_UnIndent( self->infoStream );
+	}
+	else {
+		Journal_PrintfL( self->infoStream, 2, "Not Found.\n" );
+
+		Journal_Firewall( !isEssential, errorStream, "Stg_Component '%s' cannot find list '%s'.\n", 
+				parentComponentName, listName );
+
+		*componentCount = 0;
+		componentList   = NULL;
+	}
+
+	return componentList;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,281 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Stg_ComponentFactory.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Base_Automation_Stg_ComponentFactory_h__
+#define __Base_Automation_Stg_ComponentFactory_h__
+
+	extern const Type Stg_ComponentFactory_Type;
+	
+	typedef double (Stg_ComponentFactory_GetDoubleFunc) (
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const double         defaultVal );
+	typedef int (Stg_ComponentFactory_GetIntFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const int            defaultVal );
+	typedef unsigned int (Stg_ComponentFactory_GetUnsignedIntFunc) (
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const unsigned int   defaultVal);
+	typedef Bool (Stg_ComponentFactory_GetBoolFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const Bool           defaultVal );
+	typedef char* (Stg_ComponentFactory_GetStringFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const char*          defaultVal ) ;
+
+	
+	typedef double (Stg_ComponentFactory_GetRootDictDoubleFunc) (
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const double         defaultVal );
+	typedef int (Stg_ComponentFactory_GetRootDictIntFunc) ( 
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const int            defaultVal );
+	typedef unsigned int (Stg_ComponentFactory_GetRootDictUnsignedIntFunc) (
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const unsigned int   defaultVal);
+	typedef Bool (Stg_ComponentFactory_GetRootDictBoolFunc) ( 
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const Bool           defaultVal );
+	typedef char* (Stg_ComponentFactory_GetRootDictStringFunc) ( 
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const char*          defaultVal ) ;
+
+	typedef Stg_Component* (Stg_ComponentFactory_ConstructByNameFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Type                 type, 
+			Bool                 isEssential,
+			void*                data ) ;
+	typedef Stg_Component* (Stg_ComponentFactory_ConstructByKeyFunc) (
+			void*                cf, 
+			Name                 parentComponentName, 
+			Dictionary_Entry_Key componentKey, 
+			Type                 type, 
+			Bool                 isEssential,
+			void*                data );
+	typedef Stg_Component* (Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc) ( 
+			void*                cf, 
+			Name                 parentComponentName, 
+			Name                 componentTrialName, 
+			Dictionary_Entry_Key componentTrialKey, 
+			Type                 type, 
+			Bool                 isEssential,
+			void*                data ) ;
+
+	typedef Stg_Component** (Stg_ComponentFactory_ConstructByListFunc) ( 
+			void*                cf, 
+			Name                 parentComponentName, 
+			Name                 listName, 
+			unsigned int         maxComponents,
+			Type                 type, 
+			Bool                 isEssential,
+			unsigned int*        componentCount,
+			void*                data ) ;
+
+	#define __Stg_ComponentFactory \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble; \
+		Stg_ComponentFactory_GetIntFunc*                         getInt; \
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt; \
+		Stg_ComponentFactory_GetBoolFunc*                        getBool; \
+		Stg_ComponentFactory_GetStringFunc*                      getString; \
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble; \
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt; \
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt; \
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool; \
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString; \
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName; \
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey; \
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback; \
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList; \
+		\
+		/* Class info */ \
+		Stg_ObjectList*                                          registerRegister; \
+		Dictionary*                                              rootDict; \
+		Dictionary*                                              componentDict; \
+		LiveComponentRegister*                                   LCRegister;    \
+		Stream*                                                  infoStream;    
+		
+	struct Stg_ComponentFactory { __Stg_ComponentFactory };
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	/* Creation implementation */
+	Stg_ComponentFactory* _Stg_ComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Dictionary*                                              rootDict,
+		Dictionary*                                              componentDict,
+		Stg_ObjectList*                                          registerRegister );
+	
+	Stg_ComponentFactory* Stg_ComponentFactory_New( 
+		Dictionary*                                              rootDict,
+		Dictionary*                                              componentDict,
+		Stg_ObjectList*                                          registerRegister );
+
+	void _Stg_ComponentFactory_Init( Stg_ComponentFactory *self );
+	
+	void Stg_ComponentFactory_Init( Stg_ComponentFactory *self );
+
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Stg_ComponentFactory_Delete( void* Stg_ComponentFactory );
+	
+	void _Stg_ComponentFactory_Print( void* Stg_ComponentFactory, Stream* stream );
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	void Stg_ComponentFactory_SetComponentDictionary( Stg_ComponentFactory *self, Dictionary *dict );
+
+	void Stg_ComponentFactory_CreateComponents( Stg_ComponentFactory *self );
+	
+	void Stg_ComponentFactory_ConstructComponents( Stg_ComponentFactory* self, void* data );
+	
+	Dictionary_Entry_Value* _Stg_ComponentFactory_GetDictionaryValue( 
+			void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	/** Function to get *numerical* values from component's dictionary
+	 * if the key in the sub-dictionary gives a string then it assumes 
+	 * that this is a key that points to the root dictionary */
+	Dictionary_Entry_Value* _Stg_ComponentFactory_GetNumericalValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	double Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double defaultVal ) ;
+	double _Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int defaultVal ) ;
+	int _Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	unsigned int _Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	Bool _Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) ;
+	char* _Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) ;
+
+	double Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) ;
+	double _Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) ;
+	int _Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	unsigned int _Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	Bool _Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* defaultVal ) ;
+	char* _Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* defaultVal ) ;
+
+	#define Stg_ComponentFactory_ConstructByName( cf, componentName, type, isEssential, data ) \
+		(type*) ( (Stg_ComponentFactory*) cf )->constructByName( cf, componentName, type ## _Type, isEssential, data )
+	Stg_Component* _Stg_ComponentFactory_ConstructByName( void* cf, Name componentName, Type type, Bool isEssential, void* d );
+	
+	#define Stg_ComponentFactory_ConstructByKey( cf, parentComponentName, componentKey, type, isEssential, data ) \
+		(type*) ( (Stg_ComponentFactory*) cf )->constructByKey( \
+			cf, parentComponentName, componentKey, type ## _Type, isEssential, data )
+	Stg_Component* _Stg_ComponentFactory_ConstructByKey( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+
+	#define Stg_ComponentFactory_ConstructByNameWithKeyFallback( \
+		cf, parentComponentName, componentTrialName, componentFallbackKey, type, isEssential, data ) \
+		(type*) ( (Stg_ComponentFactory*) cf )->constructByNameWithKeyFallback( \
+			cf, parentComponentName, componentTrialName, componentFallbackKey, type ## _Type, isEssential, data )
+	Stg_Component* _Stg_ComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	componentTrialKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+
+	#define Stg_ComponentFactory_ConstructByList( \
+		cf, parentComponentName, listName, maxComponents, type, isEssential, componentCount, data ) \
+		(type**) ( (Stg_ComponentFactory*) cf )->constructByList( \
+			cf, parentComponentName, listName, maxComponents, type ## _Type, isEssential, componentCount, data )
+
+	Stg_Component** _Stg_ComponentFactory_ConstructByList( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data );
+
+	#define Stg_ComponentFactory_Unlimited ((unsigned int) -1)
+
+#endif /* __Base_Automation_Stg_ComponentFactory_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	A class which encapsulates the instance meta data.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentMeta.h 3367 2005-12-09 07:39:53Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type Stg_ComponentMeta_Value_Type = "Stg_ComponentMeta_Value";
+
+Stg_ComponentMeta_Value* Stg_ComponentMeta_Value_New( Name name, Type metaType, const char* description, const char* defaultValue ) {
+	Stg_ComponentMeta_Value* self;
+	self = (Stg_ComponentMeta_Value*)_Stg_Object_New(
+			sizeof( Stg_ComponentMeta_Value ),
+			Stg_ComponentMeta_Value_Type,
+			_Stg_ComponentMeta_Value_Delete,
+			NULL,
+			_Stg_ComponentMeta_Value_Copy,//NULL,
+			name,
+			NON_GLOBAL );
+	self->metaType = metaType;
+	self->description = description;
+	self->defaultValue = defaultValue;
+	self->haveValue = False;
+
+	return self;
+}
+void _Stg_ComponentMeta_Value_Delete( void* instance ) {
+
+	Stg_ComponentMeta_Value* self = (Stg_ComponentMeta_Value*) instance;
+
+	/* Delete the specific ComponentMeta_Value members that were given memory. */
+	if (self->description) Memory_Free((char*) self->description);
+	if (self->defaultValue) Memory_Free((char*) self->defaultValue);
+
+	_Stg_Object_Delete( instance );
+}
+
+void* _Stg_ComponentMeta_Value_Copy( void* instance, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+
+	Stg_ComponentMeta_Value*  self = (Stg_ComponentMeta_Value*)instance;
+
+	Stg_ComponentMeta_Value*  newComponentMeta_Value;
+
+	/* Copy the generic Stg_Object members */
+        newComponentMeta_Value = _Stg_Object_Copy( instance, dest, deep, nameExt, ptrMap );
+
+	/* Copy the Stg_ComponentMeta_Value specific members  that don't require memory*/
+	newComponentMeta_Value->metaType = self->metaType;
+       	newComponentMeta_Value->haveValue = self->haveValue;
+
+	if(deep)
+	{
+		if( (newComponentMeta_Value->description = PtrMap_Find( ptrMap, (char*) self->description )) == NULL && self->description ) {
+			newComponentMeta_Value->description = (const char*) Memory_Alloc_Array( char, strlen(self->description) + 1, "ComponentMeta_V->description" );
+			strcpy((char*) newComponentMeta_Value->description, self->description);
+			PtrMap_Append( ptrMap, (char*)newComponentMeta_Value->description, (char*)self->description);
+		}
+		if( (newComponentMeta_Value->defaultValue = PtrMap_Find( ptrMap, (char*)self->defaultValue )) == NULL && self->defaultValue ) {
+			newComponentMeta_Value->defaultValue = (const char*) Memory_Alloc_Array( char, strlen(self->defaultValue) + 1, "ComponentMeta_V->defaultValue" );
+			strcpy((char*) newComponentMeta_Value->defaultValue, self->defaultValue);
+			PtrMap_Append( ptrMap, (char*) newComponentMeta_Value->defaultValue, (char*) self->defaultValue);
+		}
+	}
+	else
+	{
+		newComponentMeta_Value->description = self->description;
+		newComponentMeta_Value->defaultValue = self->defaultValue;
+	}
+
+	return newComponentMeta_Value;
+}
+
+
+const Type Stg_ComponentMeta_Type = "Stg_ComponentMeta";
+
+Stg_ComponentMeta* Stg_ComponentMeta_New( Name name, Type metaType ) {
+	Stg_ComponentMeta* self;
+
+	self = (Stg_ComponentMeta*)_Stg_Object_New(
+			sizeof( Stg_ComponentMeta ),
+			Stg_ComponentMeta_Type,
+			_Stg_ComponentMeta_Delete,
+			_Stg_ComponentMeta_Print,
+			_Stg_ComponentMeta_Copy,
+			name,
+			NON_GLOBAL );
+
+	self->ioHandler = NULL;
+	self->dict = NULL;
+	self->metaType = metaType;
+	self->isValid = True;
+	self->project = NULL;
+	self->location = NULL;
+	self->web = NULL;
+	self->copyright = NULL;
+	self->license = NULL;
+	self->parent = NULL;
+	self->description = NULL;
+	
+	self->allDependencies = Stg_ObjectList_New();
+	self->essentialDependencies = Stg_ObjectList_New();
+	self->optionalDependencies = Stg_ObjectList_New();
+	self->missingDependencies = Stg_ObjectList_New();
+	self->unexpectedDependencies = Stg_ObjectList_New();
+
+	self->allParams = Stg_ObjectList_New();
+	
+	return self;
+}
+void _Stg_ComponentMeta_Delete( void* instance ) {
+	Stg_ComponentMeta* self = (Stg_ComponentMeta*)instance;
+
+	if ( self->ioHandler ) {
+		Stg_Class_Delete( self->ioHandler );
+	}
+	if ( self->dict ) {
+		Stg_Class_Delete( self->dict );
+	}
+	Stg_Class_Delete( self->allDependencies );
+	Stg_Class_Delete( self->essentialDependencies );
+	Stg_Class_Delete( self->optionalDependencies );
+	Stg_Class_Delete( self->missingDependencies );
+	Stg_Class_Delete( self->unexpectedDependencies );
+	Stg_Class_Delete( self->allParams );
+}
+	
+void _Stg_ComponentMeta_Print( void* instance, Stream* stream ) {
+	Stg_ComponentMeta* self = (Stg_ComponentMeta*)instance;
+	int i;
+
+	Journal_Printf( stream, "Name: %s\n", self->name );
+	Journal_Printf( stream, "Type: %s\n", self->metaType );
+	Journal_Printf( stream, "Project: %s\n", self->project );
+	Journal_Printf( stream, "Location: %s\n", self->location );
+	Journal_Printf( stream, "Project Web: %s\n", self->web );
+	Journal_Printf( stream, "Copyright: %s\n", self->copyright );
+	Journal_Printf( stream, "License: %s\n", self->license );
+	Journal_Printf( stream, "Parent: %s\n", self->parent );
+	Journal_Printf( stream, "Description: %s\n", self->description );
+	Journal_Printf( stream, "isValid: %d\n", self->isValid );
+
+	Journal_Printf( stream, "All dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->allDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->allDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Essential dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->essentialDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->essentialDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Optional dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->optionalDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->optionalDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Missing dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->missingDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->missingDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Unexpected dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->unexpectedDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->unexpectedDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "All params\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->allParams->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->allParams, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+}
+
+void* _Stg_ComponentMeta_Copy( void* instance, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	A class which encapsulates the component meta data.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentMeta.h 3367 2005-12-09 07:39:53Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_ComponentMeta_h__
+#define __Base_Automation_Stg_ComponentMeta_h__
+	
+	#define __Stg_ComponentMeta_Value       \
+		__Stg_Object                    \
+		Type            metaType;       \
+		const char*     description;    \
+		const char*     defaultValue;   \
+		Bool            haveValue;
+
+	struct Stg_ComponentMeta_Value { __Stg_ComponentMeta_Value };
+
+	Stg_ComponentMeta_Value* Stg_ComponentMeta_Value_New( Name name, Type metaType, const char* description, const char* defaultValue );
+	void _Stg_ComponentMeta_Value_Delete( void* instance );
+	void* _Stg_ComponentMeta_Value_Copy( void* instance, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	/* Textual name of this class */
+	extern const Type Stg_ComponentMeta_Type;
+
+	
+	/* Stg_ComponentMeta information */
+	#define __Stg_ComponentMeta \
+		__Stg_Object \
+		\
+		XML_IO_Handler* ioHandler; /** For buffer memory */     \
+		Dictionary*     dict;      /** For buffer memory */     \
+		Type            metaType;  /**< Type of the component */\
+		char*           project;                                \
+		char*           location;                               \
+		char*           web;                                    \
+		char*           copyright;                              \
+	        char*           license;                                \
+		char*           parent;                                 \
+		char*           description;                            \
+		Bool            isValid;                                \
+		Stg_ObjectList* allDependencies;                        \
+		Stg_ObjectList* essentialDependencies;                  \
+		Stg_ObjectList* optionalDependencies;                   \
+		Stg_ObjectList* missingDependencies;                    \
+		Stg_ObjectList* unexpectedDependencies;                 \
+		\
+	        Stg_ObjectList* allParams;                              
+	
+	struct Stg_ComponentMeta { __Stg_ComponentMeta };
+	
+	Stg_ComponentMeta* Stg_ComponentMeta_New( Name name, Type metaType );
+	
+	void _Stg_ComponentMeta_Delete( void* component );
+	
+	void _Stg_ComponentMeta_Print( void* component, Stream* stream );
+	
+	void* _Stg_ComponentMeta_Copy( void* component, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+#endif /* __Base_Automation_Stg_ComponentMeta_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,421 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Stg_ComponentRegister.c 2745 2005-05-1 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type Stg_ComponentRegister_Type = "Stg_ComponentRegister";
+
+const Name Version = "0";
+Stg_ComponentRegister *stgComponentRegister = NULL;
+
+Stg_ComponentRegister *_Stg_ComponentRegister_New(
+	SizeT					_sizeOfSelf, 
+	Type					type,
+	Stg_Class_DeleteFunction*		_delete,
+	Stg_Class_PrintFunction*		_print, 
+	Stg_Class_CopyFunction*			_copy )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_ComponentRegister) );
+	self = (Stg_ComponentRegister*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	return self;
+}
+	
+Stg_ComponentRegister *Stg_ComponentRegister_New(  )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	if( stgComponentRegister == NULL ){
+		
+		self = _Stg_ComponentRegister_New( sizeof( Stg_ComponentRegister ),
+			Stg_ComponentRegister_Type,
+			_Stg_ComponentRegister_Delete,
+			_Stg_ComponentRegister_Print,
+			NULL );
+		Stg_ComponentRegister_Init( self );
+	}
+	else{
+		self = stgComponentRegister;
+	}
+
+	return self;
+}
+	
+/* Initialisation implementation */
+void _Stg_ComponentRegister_Init( Stg_ComponentRegister* self )
+{
+	assert( self );
+	
+	self->constructors = BTree_New(
+							constructorElementCompareFunction,
+							NULL,
+							constructorElementDeleteFunction,
+							constructorElementPrintFunction,
+							BTREE_NO_DUPLICATES);
+}
+	
+void Stg_ComponentRegister_Init( Stg_ComponentRegister* self )
+{
+	assert( self );
+	_Stg_ComponentRegister_Init( self );
+}
+	
+/* Delete boundary condition layout implementation */
+void _Stg_ComponentRegister_Delete( void* componentRegister )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	self = (Stg_ComponentRegister*) componentRegister;
+	assert( self );
+
+	Stg_Class_Delete( self->constructors );
+	_Stg_Class_Delete( self );
+}
+	
+void _Stg_ComponentRegister_Print( void* componentRegister, Stream* stream )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	self = ( Stg_ComponentRegister* ) componentRegister;
+
+	assert( self );
+	
+		/* General info */
+	Journal_Printf( (void*) stream, "Stg_ComponentRegister (ptr): %p\n", self );
+	_Stg_Class_Print( self, stream );
+	Journal_Printf( stream, "Constructors:\n" );
+	Stg_Class_Print( self->constructors, stream );
+}
+	
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+int Stg_ComponentRegister_AddFunc( 
+		Stg_ComponentRegister *self,
+		Name componentType,
+		Name version,
+		Stg_Component_DefaultConstructorFunction *func,
+		Stg_Component_Type_GetMetadataFunction* metadata )
+{
+	Stg_ComponentRegisterElement *element = NULL;
+
+	assert( self );
+	element = Memory_Alloc( Stg_ComponentRegisterElement, "Stg_ComponentRegisterElement" );
+
+	element->componentType = StG_Strdup( componentType );
+	element->defaultConstructor = func;
+	element->metadata = metadata;
+	element->version = StG_Strdup( version );
+
+	Journal_Firewall( BTree_InsertNode( self->constructors, (void*)element, sizeof( Stg_ComponentRegisterElement ) ),
+			Journal_Register( Error_Type, Stg_ComponentRegister_Type ), 
+			"Error in func %s: Attempting to enter duplicate constructors for type '%s' (version '%s').\n"
+			"This should only be done once per type.\n",
+			__func__, componentType, version );
+
+	return 1;
+}
+
+Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_Get( 
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version ) 
+{
+	BTreeNode *node = NULL;
+	Stg_ComponentRegisterElement *element = NULL;
+	SearchCriteria sc;
+
+	assert( self );
+	
+	sc.type = componentType;
+	sc.version = version;
+	
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction1 );
+	node = BTree_FindNode( self->constructors, (void*)(&sc) );
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction );
+	if( node ){
+		element = (Stg_ComponentRegisterElement*) node->data;
+		if( element ){
+			return (void*) element->defaultConstructor;
+		}
+	}
+	
+	return NULL;
+}
+
+Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_AssertGet( 
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version ) 
+{
+	Stg_Component_DefaultConstructorFunction* componentConstructorFunction;
+	
+	componentConstructorFunction = Stg_ComponentRegister_Get( self, componentType, version );
+
+	/* If we cannot find the default construct for this componentType - then abort() with a nice message */
+	if ( !componentConstructorFunction ) {
+		Stream* errorStream = Journal_Register( Error_Type, self->type );
+
+		Journal_Printf( errorStream, "Cannot find default constructor function for type '%s'\n", componentType );
+		Journal_Printf( errorStream, "Could you have meant one of these?\n" );
+
+		Stream_Indent( errorStream );
+		Stg_ComponentRegister_PrintSimilar( self, componentType, errorStream, 5 );
+		abort();
+	}	
+
+	return componentConstructorFunction;
+}
+
+Stg_Component_Type_GetMetadataFunction* Stg_ComponentRegister_GetMetadata(
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version ) 
+{
+	BTreeNode *node = NULL;
+	Stg_ComponentRegisterElement *element = NULL;
+	SearchCriteria sc;
+
+	assert( self );
+
+	sc.type = componentType;
+	sc.version = version;
+
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction1 );
+	node = BTree_FindNode( self->constructors, (void*)(&sc) );
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction );
+
+	if( node ){
+		element = (Stg_ComponentRegisterElement*) node->data;
+		if( element ){
+			return (void*) element->metadata;
+		}
+	}
+
+	assert(0);
+
+	return NULL;
+}
+
+Stg_ComponentRegister *Stg_ComponentRegister_Get_ComponentRegister( )
+{
+	if( stgComponentRegister ){
+		return stgComponentRegister;
+	}
+	else{
+		return NULL;
+	}
+}
+
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+int constructorElementCompareFunction( void *data1, void *data2 )
+{
+	Stg_ComponentRegisterElement *d1 = NULL, *d2 = NULL;
+	char key[1024];
+	char key1[1024];
+
+	d1 = (Stg_ComponentRegisterElement*)data1;
+	d2 = (Stg_ComponentRegisterElement*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+
+	memset( key, 0, sizeof( key ) );
+	memset( key1, 0, sizeof( key1 ) );
+	sprintf( key, "%s%s", d1->componentType, d1->version );
+	sprintf( key1, "%s%s", d2->componentType, d2->version );
+	
+	if (strcmp(key, key1) > 0){
+		return  1;
+	}
+	else if (!strcmp(key, key1)){
+		return 0;
+	}
+	else{
+		return -1;
+	}	
+}
+	
+int constructorElementCompareFunction1( void *data1, void *data2 )
+{
+	Stg_ComponentRegisterElement *d1 = NULL;
+	SearchCriteria *d2 = NULL;
+	char key[1024];
+	char key1[1024];
+
+	d1 = (Stg_ComponentRegisterElement*)data1;
+	d2 = (SearchCriteria*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+	
+	memset( key, 0, sizeof( key ) );
+	memset( key1, 0, sizeof( key1 ) );
+	sprintf( key, "%s%s", d1->componentType, d1->version );
+	sprintf( key1, "%s%s", d2->type, d2->version );
+	
+	if (strcmp(key, key1) > 0){
+		return  1;
+	}
+	else if (!strcmp(key, key1)){
+		return 0;
+	}
+	else{
+		return -1;
+	}	
+}
+
+void constructorElementPrintFunction( void *nodeData, Stream *printStream )
+{
+	Stg_ComponentRegisterElement *element;
+	
+	assert( nodeData );
+
+	element = ( Stg_ComponentRegisterElement* ) nodeData;
+	Journal_Printf( printStream, "Constructor Information\n");
+	Journal_Printf( printStream, "\tStg_ComponentType                : %s\n", element->componentType );
+	Journal_Printf( printStream, "\tStg_Component Default Constructor: %p\n", element->defaultConstructor );
+	Journal_Printf( printStream, "\tVersion                      : %s\n", element->version );
+}
+
+void constructorElementDeleteFunction( void *nodeData )
+{
+	Stg_ComponentRegisterElement *element = NULL;
+
+	element = (Stg_ComponentRegisterElement*) nodeData;
+
+	if( element ){
+		Memory_Free( element->componentType );
+		Memory_Free( element->version );
+		Memory_Free( element );
+	}
+}
+
+typedef struct {
+	Type     type;
+	float    percentageSimilar;
+} Stg_ComponentRegister_SimilarityObject;
+
+typedef struct {
+	Name                                    nameToCompare;
+	Index                                   currentIndex;
+	Stg_ComponentRegister_SimilarityObject* array;
+} Stg_ComponentRegister_SimilarityList;
+
+int _Stg_ComponentRegister_SimilarityCompare( const void *ptr1, const void *ptr2 ) {
+	Stg_ComponentRegister_SimilarityObject* similarityPtr1 = (Stg_ComponentRegister_SimilarityObject*) ptr1;
+	Stg_ComponentRegister_SimilarityObject* similarityPtr2 = (Stg_ComponentRegister_SimilarityObject*) ptr2;
+
+	if ( similarityPtr1->percentageSimilar > similarityPtr2->percentageSimilar )
+		return -1;
+	else 
+		return 1;
+}
+
+void Stg_ComponentRegister_Similarity_Helper( void* nodeData, void* _list ) {
+	Stg_ComponentRegisterElement*           element       = (Stg_ComponentRegisterElement*) nodeData;
+	Stg_ComponentRegister_SimilarityList*   list          = (Stg_ComponentRegister_SimilarityList*) _list;
+	Type                                    componentType = element->componentType;
+	float                                   stringLength  = (float) strlen( list->nameToCompare );
+	float                                   typeLength    = (float) strlen( componentType );
+	Index                                   array_I       = list->currentIndex;
+	unsigned int                            substringLength;
+
+	substringLength = Stg_LongestMatchingSubsequenceLength( componentType, list->nameToCompare, False );
+	list->array[ array_I ].type = componentType;
+	list->array[ array_I ].percentageSimilar = (float) substringLength * 100.0 / MAX( typeLength, stringLength );
+
+	list->currentIndex++;
+}
+
+void Stg_ComponentRegister_PrintSimilar( void* componentRegister, Name name, void* _stream, unsigned int number ) {
+	Stg_ComponentRegister*                  self               = (Stg_ComponentRegister*) componentRegister;
+	Stream*                                 stream             = (Stream*)         _stream;
+	Stg_ComponentRegister_SimilarityList    similarityList;
+	Stg_ComponentRegister_SimilarityObject* similarityObject;
+	Index                                   type_I;
+	Index                                   count              = self->constructors->nodeCount;
+
+	similarityList.nameToCompare = name;
+	similarityList.currentIndex = 0;
+	similarityList.array = Memory_Alloc_Array( Stg_ComponentRegister_SimilarityObject, count, "similarityArray");
+
+	/* First parse the tree, calculating how similar the 'name' is to the types registered */
+	BTree_ParseTree( self->constructors, Stg_ComponentRegister_Similarity_Helper, &similarityList );
+
+	/* Sort list from most similar to least similar */
+	qsort( similarityList.array, (size_t)count, sizeof( Stg_ComponentRegister_SimilarityObject ), _Stg_ComponentRegister_SimilarityCompare );
+	
+	/* Print out the first 'number' in list */
+	if ( number > count )
+		number = count;
+	for ( type_I = 0 ; type_I < number ; type_I++ ) {
+		similarityObject = &similarityList.array[ type_I ];
+		Journal_Printf( stream, "%s (%.2f%% similar)\n", similarityObject->type, similarityObject->percentageSimilar );
+	}
+
+	Memory_Free( similarityList.array );
+}
+
+
+void constructorElementPrintTypeFunction( void* nodeData, void* printStream ) {
+	Stg_ComponentRegisterElement* element = ( Stg_ComponentRegisterElement* ) nodeData;
+	Stream*                       stream  = (Stream*) printStream;
+	
+	assert( nodeData );
+	assert( stream );
+
+	Journal_Printf( stream, "%s\n", element->componentType );
+}
+
+void Stg_ComponentRegister_PrintAllTypes( void* componentRegister, void* stream ) {
+	Stg_ComponentRegister*                  self               = (Stg_ComponentRegister*) componentRegister;
+
+	/* Parse the tree, printing all the names */
+	BTree_ParseTree( self->constructors, constructorElementPrintTypeFunction, stream );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,145 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 for objects that are named.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentRegister.h 2745 2005-05-11 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_ComponentRegister_h__
+#define __Base_Automation_Stg_ComponentRegister_h__
+	
+	/* Textual name of this class */
+	extern const Type Stg_ComponentRegister_Type;
+	extern Stg_ComponentRegister *stgComponentRegister;
+
+	typedef const char* (Stg_Component_Type_GetMetadataFunction) ( );
+	
+	/*struct Stg_Component_DefaultConstructorFunction;*/
+	#define __Stg_ComponentRegisterElement \
+		Type								componentType; \
+		Stg_Component_DefaultConstructorFunction*			defaultConstructor; \
+		Stg_Component_Type_GetMetadataFunction*                              metadata; \
+		Name								version;
+
+	struct Stg_ComponentRegisterElement{ __Stg_ComponentRegisterElement };
+	
+	/* Stg_ComponentRegister information */
+	#define __Stg_ComponentRegister \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_ComponentRegister info */ \
+		BTree									*constructors; \
+	
+	struct Stg_ComponentRegister { __Stg_ComponentRegister };
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/** Constructor Implementation */
+	Stg_ComponentRegister *_Stg_ComponentRegister_New(
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*			_copy );
+	
+	Stg_ComponentRegister *Stg_ComponentRegister_New(  );
+	
+	/* Initialisation implementation */
+	void _Stg_ComponentRegister_Init( Stg_ComponentRegister* self );
+	
+	void Stg_ComponentRegister_Init( Stg_ComponentRegister* self );
+	
+	/* Delete boundary condition layout implementation */
+	void _Stg_ComponentRegister_Delete( void* componentRegister );
+	
+	/* Print boundary condition layout implementation */
+	void _Stg_ComponentRegister_Print( void* componentRegister, Stream* stream );
+	
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	int constructorElementCompareFunction( void *data1, void *data2 );
+	
+	int constructorElementCompareFunction1( void *data1, void *data2 );
+	
+	void constructorElementPrintFunction( void *nodeData, Stream *printStream );
+
+	void constructorElementDeleteFunction( void *nodeData );
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	int Stg_ComponentRegister_AddFunc( 
+			Stg_ComponentRegister *self,
+			Name componentType,
+			Name version,
+			Stg_Component_DefaultConstructorFunction *func,
+			Stg_Component_Type_GetMetadataFunction* metadata );
+
+	#define Stg_ComponentRegister_Add( self, componentType, version, func ) \
+	{ \
+		const char* componentType ##_GetMetadata(); \
+		Stg_ComponentRegister_AddFunc( self, componentType, version, func, componentType ##_GetMetadata ); \
+	}
+
+	Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_Get( 
+			Stg_ComponentRegister* self,
+			Name                   componentType,
+			Name                   version );
+	
+	/* Same function as above, but it asserts and gives a nice message if it cannot find the default constructor */
+	Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_AssertGet( 
+			Stg_ComponentRegister* self,
+			Name                   componentType,
+			Name                   version ); 
+
+	Stg_Component_Type_GetMetadataFunction* Stg_ComponentRegister_GetMetadata(
+			Stg_ComponentRegister* self,
+			Name                   componentType,
+			Name                   version );
+
+	/** This function returns the pointer to the singleton "stgComponentRegister" */
+	Stg_ComponentRegister *Stg_ComponentRegister_Get_ComponentRegister( );
+
+	/** This function prints the types registered that are most similar to the 'name' passed in */
+	void Stg_ComponentRegister_PrintSimilar( void* componentRegister, Name name, void* _stream, unsigned int number ) ;
+
+	Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_AssertGet( 
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version );
+	void Stg_ComponentRegister_PrintAllTypes( void* componentRegister, void* stream ) ;
+	
+#endif /* __Base_Automation_Stg_ComponentRegister_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1078 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Variable.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "LiveComponentRegister.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type Variable_Type = "Variable";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Variable* Variable_New(
+		Name						name,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr )
+{
+	Variable*	self;
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy,
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute, 
+		_Variable_Destroy,
+		name,
+		True,
+		dataCount, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames, 
+		structSizePtr, 
+		arraySizePtr,
+		arrayPtrPtr, 
+		vr );
+	
+	return self;
+}
+
+Variable* Variable_DefaultNew( Name name )
+{
+	Variable*	self;
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy,
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute, 
+		_Variable_Destroy,
+		name,
+		False,
+		0, 
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL,
+		NULL, 
+		NULL );
+	
+	return self;
+}
+
+Variable* Variable_NewScalar( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr )
+{
+	Variable*		self;
+	SizeT			dataOffsets[] = { 0 };
+	Variable_DataType	dataTypes[] = { 0 };		/* Init value later */
+	Index			dataTypeCounts[] = { 1 };
+	
+	dataTypes[0] = dataType;
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy,
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute,
+		_Variable_Destroy,
+		name,
+		True,
+		1, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		0, /* no component names */
+		0, /* means work out from dataType at build phase */
+		arraySizePtr,
+		arrayPtrPtr, 
+		vr );
+	
+	return self;
+}
+
+Variable* Variable_NewVector( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index						dataTypeCount,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr,
+		... 						/* vector component names */ )
+{
+	Variable*		self;
+	SizeT			dataOffsets[] = { 0 };
+	Variable_DataType	dataTypes[] = { 0 };				/* Init later... */
+	Index			dataTypeCounts[] = { 0 };			/* Init later... */
+	Name*			dataNames;
+	Index			vector_I;
+	va_list			ap;
+
+	dataTypes[0] = dataType;
+	dataTypeCounts[0] = dataTypeCount;
+
+	dataNames = Memory_Alloc_Array( Name, dataTypeCount, "dataNames" );
+
+	va_start( ap, vr );
+	for( vector_I = 0; vector_I < dataTypeCount; vector_I++ ) {
+		dataNames[vector_I] = va_arg( ap, Name );
+	}
+	va_end( ap );
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy, 
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute, 
+		_Variable_Destroy,
+		name,
+		True,
+		1, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames,
+		0, /* means work out from dataType at build phase */
+		arraySizePtr,
+		arrayPtrPtr, 
+		vr );
+
+	Memory_Free( dataNames );
+	
+	return self;
+}
+
+
+void Variable_Init(
+		Name						name,
+		Variable*					self,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool						allocateSelf,
+		Variable_Register*				vr )
+{
+	/* 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 = _Variable_Copy;
+	self->_build = _Variable_Build;
+	self->_initialise = _Variable_Initialise;
+	self->_execute = _Variable_Execute;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	/* Variable info */
+	_Variable_Init( 
+		self, 
+		dataCount, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames, 
+		structSizePtr,
+		arraySizePtr,
+		arrayPtrPtr, 
+		allocateSelf,
+		vr );
+}
+
+
+Variable* _Variable_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,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr )
+{
+	Variable*	self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Variable) );
+	self = (Variable*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+										_construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->_build = _build;
+	self->_initialise = _initialise;
+	
+	/* Variable info */
+	if( initFlag ){
+		_Variable_Init( 
+			self, 
+			dataCount, 
+			dataOffsets, 
+			dataTypes, 
+			dataTypeCounts, 
+			dataNames, 
+			structSizePtr, 
+			arraySizePtr,
+			arrayPtrPtr, 
+			False,
+			vr );
+	}
+	
+	return self;
+}
+
+void _Variable_Init(
+		Variable*					self, 
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool                        allocateSelf,
+		Variable_Register*				vr )
+{
+	/* General and Virtual info should already be set */
+	
+	/* Variable info */
+	self->isConstructed = True;
+	self->allocateSelf  = allocateSelf;
+	self->offsetCount = dataCount;
+	self->structSizePtr = structSizePtr;
+	self->arraySizePtr = arraySizePtr;
+	self->arrayPtrPtr = arrayPtrPtr;
+
+	/* Use of this class has increased... can't assume the info arrays are on persistant memory... copy by default. They will
+	   be deleted. */
+	Journal_Firewall( dataOffsets ? True : False, Journal_Register( Error_Type, Variable_Type ), "dataOffsets is null\n" );
+	self->offsets = Memory_Alloc_Array( SizeT, self->offsetCount, "Variable->offsets" );
+	memcpy( self->offsets, dataOffsets, sizeof(SizeT) * self->offsetCount );
+	
+	Journal_Firewall( dataTypes ? True : False, Journal_Register( Error_Type, Variable_Type ), "dataTypes is null\n" );
+	self->dataTypes = Memory_Alloc_Array( Variable_DataType, self->offsetCount, "Variable->dataTypes" );
+	memcpy( self->dataTypes, dataTypes, sizeof(Variable_DataType) * self->offsetCount );
+	
+	Journal_Firewall( 
+		dataTypeCounts ? True : False , 
+		Journal_Register( Error_Type, Variable_Type ), 
+		"dataTypeCounts is null\n" );
+	self->dataTypeCounts = Memory_Alloc_Array( Index, self->offsetCount, "Variable->dataTypeCounts" );
+	memcpy( self->dataTypeCounts, dataTypeCounts, sizeof(Index) * self->offsetCount );
+	
+	/* These get set at the build phase (when we assume the variable's data memory has been allocated) */
+	self->structSize = 0;
+	self->arrayPtr = 0;
+	self->dataSizes = 0;
+	
+	if ( dataNames && self->offsetCount == 1 && self->dataTypeCounts[0] > 1 ) {
+		/* Vector case */
+		self->components = Memory_Alloc_Array( Variable*, self->dataTypeCounts[0], "Variable->components" );
+		memset( self->components, 0, sizeof(Variable*) * self->dataTypeCounts[0] );
+	}
+	else {
+		/* Scalar or Complex case */
+		self->components = Memory_Alloc_Array( Variable*, self->offsetCount, "Variable->components" );
+		memset( self->components, 0, sizeof(Variable*) * self->offsetCount );
+	}
+	
+	/* If the variable register is provided, add this and component variable(s) to the register */
+	if( vr ) {
+		self->vr = vr;
+		Variable_Register_Add( vr, self );
+		
+		/* If we have component names, create the associated variables. Don't do if there is only one component. */
+		if( dataNames && self->offsetCount > 1 ) {
+			Index			component_I;
+			
+			for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+				if( dataNames[component_I] ) {
+					SizeT			componentOffsets[] = { 0 };
+					Variable_DataType	componentTypes[] = { 0 };
+					Index			componentTypeCounts[] = { 0 };
+
+					componentOffsets[0] = self->offsets[component_I];
+					componentTypes[0] = self->dataTypes[component_I];
+					componentTypeCounts[0] = self->dataTypeCounts[component_I];
+					
+					/* Assumption: components are scalar or vector, but cannot be complex */
+					self->components[component_I] = Variable_New( 
+						dataNames[component_I], 
+						1, 
+						componentOffsets, 
+						componentTypes, 
+						componentTypeCounts,
+						0,
+						self->structSizePtr,
+						self->arraySizePtr,
+						self->arrayPtrPtr,
+						vr );
+				}
+			}
+		}
+		/* Else if we have vector-component names, create the associated variables. Do only if non-complex and a vector. */
+		else if( dataNames && self->offsetCount == 1 && self->dataTypeCounts[0] > 1 ) {
+			Index			vector_I;
+
+			for( vector_I = 0; vector_I < self->dataTypeCounts[0]; vector_I++ ) {
+				if( dataNames[vector_I] ) {
+					/* Unfortunately we cannot call any of our fancy macros here as the array is not resolved
+					 * yet. As a consequence we have to manually work out the vector's indecis offsets. Ouch
+					 * only from a code-maintenance point of view. */
+					SizeT			componentOffsets[] = { 0 };		/* Init later... */
+					Variable_DataType	componentTypes[] = { 0 };		/* Init later... */
+					Index			componentTypeCounts[] = { 1 };
+				
+					componentOffsets[0] = 
+						(ArithPointer)self->offsets[0] + 
+						( self->dataTypes[0] == Variable_DataType_Char ? ( sizeof(char) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Short ? ( sizeof(short) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Int ? ( sizeof(int) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Float ? ( sizeof(float) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Double ? ( sizeof(double) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Pointer ? ( sizeof(void*) * vector_I ) :
+						  Journal_Firewall(
+							0,
+							Journal_Register( Error_Type, Variable_Type ),
+							"Vector is of a non-builtin type\n" ) );
+					componentTypes[0] = self->dataTypes[0];
+
+							
+					/* Assumption: vector-components are scalar, but cannot be complex */
+					self->components[vector_I] = Variable_New( 
+						dataNames[vector_I],
+						1, 
+						componentOffsets, 
+						componentTypes, 
+						componentTypeCounts,
+						0,
+						self->structSizePtr,
+						self->arraySizePtr,
+						self->arrayPtrPtr,
+						vr );
+				}
+			}
+		}
+	}
+	else {
+		self->vr = NULL;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Variable_Delete( void* variable ) {
+	Variable*	self = (Variable*)variable;
+
+	if ( self->dataSizes ) {
+		Memory_Free( self->dataSizes );
+	}
+	if (self->allocateSelf) {
+		Memory_Free( self->arrayPtr );
+	}
+	
+	Memory_Free( self->dataTypeCounts );
+	Memory_Free( self->dataTypes );
+	Memory_Free( self->offsets );
+	Memory_Free( self->components );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _Variable_Print( void* variable, Stream* stream ) {
+	Variable*	self = (Variable*)variable;
+	Index		component_I;
+	
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Variable (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* Variable info */
+	Journal_Printf( stream, "\toffsetCount: %u\n", self->offsetCount );
+	
+	Journal_Printf( stream, "\toffsets (ptr): %p\n", self->offsets );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\toffsets[%u]: %lu\n", component_I, self->offsets[component_I] );
+	}
+	
+	Journal_Printf( stream, "\tdataTypes (ptr): %p\n", self->dataTypes );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\tdataTypes[%u]: %lu\n", component_I, self->dataTypes[component_I] );
+	}
+	
+	Journal_Printf( stream, "\tdataTypeCounts (ptr): %p\n", self->dataTypeCounts );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\tdataTypeCounts[%u]: %lu\n", component_I, self->dataTypeCounts[component_I] );
+	}
+
+	Journal_Printf( stream, "\tdataSizes (ptr): %p\n", self->dataSizes );
+	for( component_I = 0; component_I < self->offsetCount && self->dataSizes; component_I++ ) {
+		Journal_Printf( stream, "\t\tdataSizes[%u]: %lu\n", component_I, self->dataSizes[component_I] );
+	}
+
+	Journal_Printf( stream, "\tcomponents (ptr): %p\n", self->components );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\tcomponents[%u] (ptr): %p\n", component_I, self->components[component_I] );
+		if( self->components[component_I] ) {
+			Journal_Printf( stream, "\t\tcomponents[%u]: %s\n", component_I, self->components[component_I]->name );
+		}
+	}
+
+	Journal_Printf( stream, "\tstructSize: %lu\n", self->structSize );
+	Journal_Printf( stream, "\tstructSizePtr (ptr): %p\n", self->structSizePtr );
+
+	Journal_Printf( stream, "\tarrayPtr (ptr): %p\n", self->arrayPtr );
+	Journal_Printf( stream, "\tarrayPtrPtr (ptr): %p\n", self->arrayPtrPtr );
+
+	Journal_Printf( stream, "\tarraySize: %lu\n", self->arraySize );
+	Journal_Printf( stream, "\tarraySizePtr (ptr): %p\n", self->arraySizePtr );
+
+	Journal_Printf( stream, "\tallocateSelf = %s\n", self->allocateSelf ? "True" : "False" );
+}
+
+
+void* _Variable_Copy( void* variable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Variable*	self = (Variable*)variable;
+	Variable*	newVariable;
+	PtrMap*		map = ptrMap;
+	
+	newVariable = (Variable*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	PtrMap_Append( map, self, newVariable );
+	
+	/* virtual methods */
+	newVariable->offsetCount = self->offsetCount;
+	newVariable->structSize = self->structSize;
+	newVariable->arraySize = self->arraySize;
+	
+	newVariable->allocateSelf = self->allocateSelf; /* This may change depending on whether arrayPtr is found in map */
+
+	/* single valued members */
+	
+	if( deep ) {
+		if( (newVariable->offsets = PtrMap_Find( map, self->offsets )) == NULL && self->offsets != NULL ) {
+			newVariable->offsets = Memory_Alloc_Array( SizeT, newVariable->offsetCount, "Variable->offsets" );
+			memcpy( newVariable->offsets, self->offsets, sizeof(SizeT) * newVariable->offsetCount );
+			PtrMap_Append( map, self->offsets, newVariable->offsets );
+		}
+		
+		if( (newVariable->dataTypes = PtrMap_Find( map, self->dataTypes )) == NULL && self->offsets != NULL ) {
+			newVariable->dataTypes = Memory_Alloc_Array( Variable_DataType, newVariable->offsetCount, "Variable->dataTypes" );
+			memcpy( newVariable->dataTypes, self->dataTypes, sizeof(Variable_DataType) * newVariable->offsetCount );
+			PtrMap_Append( map, self->dataTypes, newVariable->dataTypes );
+		}
+		
+		if( (newVariable->dataTypeCounts = PtrMap_Find( map, self->dataTypeCounts )) == NULL && self->dataTypeCounts != NULL ) {
+			newVariable->dataTypeCounts = Memory_Alloc_Array( Index, newVariable->offsetCount, "Variable->dataTypeCounts" );
+			memcpy( newVariable->dataTypeCounts, self->dataTypeCounts, sizeof(Index) * newVariable->offsetCount );
+			PtrMap_Append( map, self->dataTypeCounts, newVariable->dataTypeCounts );
+		}
+		
+		if ( self->structSizePtr != NULL ) {
+			if( (newVariable->structSizePtr = PtrMap_Find( map, self->structSizePtr )) == NULL ) {
+				newVariable->structSizePtr = Memory_Alloc_Array( 
+					SizeT, 
+					1, 
+					"Variable->structSizePtr" );
+				memcpy( newVariable->structSizePtr, self->structSizePtr, sizeof(SizeT) );
+				PtrMap_Append( map, self->structSizePtr, newVariable->structSizePtr );
+			}
+		}
+		else {
+			newVariable->structSizePtr = NULL;
+		}
+		
+		if ( self->arraySizePtr != NULL ) {
+			if( (newVariable->arraySizePtr = PtrMap_Find( map, self->arraySizePtr )) == NULL ) {
+				newVariable->arraySizePtr = Memory_Alloc_Array(
+					Index,
+					1,
+					"Variable->arraySizePtr" );
+				memcpy( newVariable->arraySizePtr, self->arraySizePtr, sizeof(Index) );
+				PtrMap_Append( map, self->arraySizePtr, newVariable->arraySizePtr );
+			}
+		}
+		else {
+			newVariable->arraySizePtr = NULL;
+		}
+		
+		if( (newVariable->dataSizes = PtrMap_Find( map, self->dataSizes )) == NULL && self->dataSizes != NULL ) {
+			newVariable->dataSizes = Memory_Alloc_Array( SizeT, newVariable->offsetCount, "Variable->dataSizes" );
+			memcpy( newVariable->dataSizes, self->dataSizes, sizeof(SizeT) * newVariable->offsetCount );
+			PtrMap_Append( map, self->dataSizes, newVariable->dataSizes );
+		}
+
+		if( (newVariable->arrayPtrPtr = PtrMap_Find( map, self->arrayPtrPtr )) == NULL && self->arrayPtrPtr != NULL ) {	
+			if( (newVariable->arrayPtr = PtrMap_Find( map, self->arrayPtr )) == NULL && self->arrayPtr != NULL ) {
+				Index memoryToAllocSize = self->arraySize * self->structSize;
+				newVariable->arrayPtr = Memory_Alloc_Bytes( 
+					memoryToAllocSize,
+					Variable_Type,
+					"SelfAllocedArray" );
+				memcpy( newVariable->arrayPtr, self->arrayPtr, memoryToAllocSize );
+				PtrMap_Append( map, self->arrayPtr, newVariable->arrayPtr );
+
+				newVariable->arrayPtrPtr = &(newVariable->arrayPtr);
+				newVariable->allocateSelf = True;
+			}
+		}
+		else {
+			newVariable->arrayPtr = *newVariable->arrayPtrPtr;
+			memcpy( newVariable->arrayPtr, self->arrayPtr, self->arraySize * self->structSize );
+		}
+		
+		if( (newVariable->components = PtrMap_Find( map, self->components )) == NULL && self->components != NULL ) {
+			Index	comp_I;
+			
+			if( newVariable->offsetCount == 1 && newVariable->dataTypeCounts[0] > 1 ) {
+				/* Vector case */
+				newVariable->components = Memory_Alloc_Array( 
+					Variable*, 
+					newVariable->dataTypeCounts[0], 
+					"Variable->components" );
+				memset( newVariable->components, 0, sizeof(Variable*) * newVariable->dataTypeCounts[0] );
+				
+				for( comp_I = 0; comp_I < newVariable->dataTypeCounts[0]; comp_I++ ) {
+					newVariable->components[comp_I] = (Variable*)Stg_Class_Copy( 
+						self->components[comp_I], 
+						NULL, 
+						deep, 
+						nameExt, 
+						map );
+				}
+			}
+			else {
+				/* Scalar or Complex case */
+				newVariable->components = Memory_Alloc_Array( 
+					Variable*, 
+					newVariable->offsetCount, 
+					"Variable->components" );
+				memset( newVariable->components, 0, sizeof(Variable*) * newVariable->offsetCount );
+				
+				for( comp_I = 0; comp_I < newVariable->offsetCount; comp_I++ ) {
+					if ( self->components[comp_I] ) {
+						newVariable->components[comp_I] = (Variable*)Stg_Class_Copy( 
+							self->components[comp_I], 
+							NULL, 
+							deep, 
+							nameExt, 
+							map );
+					}
+				}
+			}
+			
+			PtrMap_Append( map, self->components, newVariable->components );
+		}
+
+		if ( self->vr ) {
+			newVariable->vr = Stg_Class_Copy( self->vr, NULL, deep, nameExt, map );
+		}
+	}
+	else {
+		fprintf( stderr, "Warning: please don't shallow copy variables yet...or ever!\n" );
+	}
+	
+	return (void*)newVariable;
+}
+
+
+void _Variable_Build( void* variable, void* data ) {
+	Variable*	self = (Variable*)variable;
+	Index 		component_I;
+	
+	/* Obtain the actual array size, and array pointer */
+	Journal_Firewall( 
+		self->arraySizePtr ? True : False, 
+		Journal_Register( Error_Type, Variable_Type ), 
+		"arraySizePtr is null\n" );
+	self->arraySize = *self->arraySizePtr;
+
+
+	/* Work out the actual data sizes from the data types */
+	if( self->dataSizes ) {
+		Memory_Free( self->dataSizes );
+	}
+	self->dataSizes = Memory_Alloc_Array( SizeT, self->offsetCount, "Variable->dataSizes" );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		switch ( self->dataTypes[component_I] ) {
+			case Variable_DataType_Variable:
+				Journal_Firewall( 
+					self->dataTypes[component_I] != Variable_DataType_Variable, 
+					Journal_Register( Error_Type, Variable_Type ),
+					"\"dataType[?] == Variable_DataType_Variables\" not yet implemented\n" );
+				break;
+			case Variable_DataType_Char:
+				self->dataSizes[component_I] = sizeof( char ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Short:
+				self->dataSizes[component_I] = sizeof( short ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Int:
+				self->dataSizes[component_I] = sizeof( int ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Float:
+				self->dataSizes[component_I] = sizeof( float ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Double:
+				self->dataSizes[component_I] = sizeof( double ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Pointer:
+				self->dataSizes[component_I] = sizeof( void* ) * self->dataTypeCounts[component_I];
+				break;
+			default:
+				Journal_Firewall( 
+					self->dataTypes[component_I] >= Variable_DataType_Size, 
+					Journal_Register( Error_Type, Variable_Type ),
+					"\"dataType[?]\" is unrecognised\n" );
+				break;
+		}
+	}		
+	
+	/* Non-complex variables: Scalar & Vector can workout struct size for themselves.
+	 * Now that we know all the data sizes, work out the actual struct size (which may need the data sizes) */
+	if( self->offsetCount == 1 && !self->structSizePtr ) {
+		/* Vector and Scalars which are not apart of a Vector can work out their own size */
+		if ( self->structSize == 0 ) {
+			self->structSize = self->dataSizes[0];
+		}
+
+		/* If this is a vector, set its sub variables to the same struct size */
+		if ( self->dataTypeCounts[0] > 1 ) {
+			int subVariable_I;
+			for ( subVariable_I = 0; subVariable_I < self->dataTypeCounts[0]; ++subVariable_I ) {
+				if ( self->components[subVariable_I] ) {
+					self->components[subVariable_I]->structSize = self->structSize;
+				}
+				else
+					/* break here because if one subVariable isn't allocated - then the rest shouldn't be */
+					break;
+			}
+		}
+	}
+	else {
+		Journal_Firewall( 
+			self->structSizePtr ? True: False, 
+			Journal_Register( Error_Type, Variable_Type ), 
+			"structSizePtr is null\n" );
+		self->structSize = *self->structSizePtr;
+	}
+	
+	if (self->allocateSelf) {
+		Index memoryToAllocSize = self->arraySize * self->structSize;
+		Index subVariable_I;
+
+		Journal_Firewall( self->offsetCount == 1, 
+				Journal_Register( Error_Type, Variable_Type ), 
+				"Variable '%s' has 'offsetCount = %u', which should be 1 for self allocation.\n", 
+				self->name, self->offsetCount );
+
+		self->arrayPtr = Memory_Alloc_Bytes( memoryToAllocSize, Variable_Type, "SelfAllocedArray" );
+		memset( self->arrayPtr, 0, memoryToAllocSize );
+		
+		/* If this is a vector then set arrayPtr to be the same */
+		if ( self->dataTypeCounts[0] > 1 ) {
+			for ( subVariable_I = 0 ; subVariable_I < self->dataTypeCounts[0] ; subVariable_I++ ) {
+				if ( self->components[subVariable_I] )
+					self->components[ subVariable_I ]->arrayPtr = self->arrayPtr;
+				else
+					/* break here because if one subVariable isn't allocated - then the rest shouldn't be */
+					break;
+			}
+		}
+	}
+	else {
+		Journal_Firewall( 
+			self->arrayPtrPtr ? True : False, 
+			Journal_Register( Error_Type, Variable_Type ), 
+			"Variable '%s' has NULL arrayPtrPtr\n", self->name );
+		self->arrayPtr = *self->arrayPtrPtr;
+	}
+}
+
+
+void _Variable_Initialise( void* variable, void* data ) {
+}
+
+
+void _Variable_Execute( void* variable, void* data ) {
+}
+
+void _Variable_Construct( void* variable, Stg_ComponentFactory* cf, void* data ) {
+	Variable*           self              = (Variable*) variable;
+	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;
+	Name                countName         = NULL;
+	unsigned int*       count             = NULL;
+	void *              variableRegister  = NULL;
+	void *              pointerRegister   = NULL;
+	Name*               names             = NULL;
+	Stream*             error             = Journal_Register( Error_Type, self->type );
+	
+	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 );
+	
+	Stg_ComponentFactory_ConstructByKey( cf, self->name, "Dependency", Stg_Component, False, data );
+			
+	/* Get Pointer to number of elements in array */
+	countName = Dictionary_GetString( thisComponentDict, "Count" );
+	count = Stg_ObjectList_Get( pointerRegister, countName );
+	assert( count );
+	
+	/* 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( 
+			self, 
+			1, 
+			dataOffsets,
+			dataTypes,
+			dataTypeCounts, 
+			names, 
+			0, 
+			count, 
+			(void**)&self->arrayPtr,
+			True,
+			variableRegister );
+
+	/* Clean Up */
+	if (names)
+		Memory_Free(names);
+}
+	
+void _Variable_Destroy( void* variable, void* data )
+{
+	
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Variable_SetValue( void* variable, Index array_I, void* value ) {
+	Variable*	self = (Variable*)variable;
+	ArithPointer*	vPtr;
+	Index		component_I;
+	
+	vPtr = value;
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		memcpy( _Variable_GetPtr( self, array_I, component_I, 0 ), (void*)vPtr, self->dataSizes[component_I] );
+		
+		vPtr += self->dataSizes[component_I];
+	}
+}
+
+
+void Variable_GetValue( void* variable, Index array_I, void* value ) {
+	Variable*	self = (Variable*)variable;
+	ArithPointer*	vPtr;
+	Index		component_I;
+	
+	vPtr = value;
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		memcpy( (void*)vPtr, _Variable_GetPtr( self, array_I, component_I, 0 ), self->dataSizes[component_I] );
+		
+		vPtr += self->dataSizes[component_I];
+	}
+}
+
+void Variable_Update( void* variable ) {
+	Variable* self = (Variable*)variable;
+
+	/* array may have resized, assign local properties again */
+	self->arrayPtr = *self->arrayPtrPtr;
+	self->arraySize = *self->arraySizePtr;
+	
+	if( !( self->offsetCount == 1 && !self->structSizePtr ) ) {
+		/* For non-scalar or non-vector variables, the targets may have been extended. */
+		self->structSize = *self->structSizePtr;
+	}
+}
+
+void Variable_SetValueDoubleAll( void* variable, double value ) {
+	Variable* self       = (Variable*)  variable;
+	Index     arraySize  = self->arraySize;
+	Index     array_I;
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) 
+		Variable_SetValueDouble( self, array_I, value );
+}
+		
+
+void Variable_SaveToFileAsDoubles( void* variable, char* filename ) {
+	Variable* self       = (Variable*)  variable;
+	Index     arraySize  = self->arraySize;
+	Index     array_I;
+	double    value;
+	FILE*     outputFile;
+	Index     comp_I;
+
+	outputFile = fopen( filename, "w" );
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		if ( *self->dataTypeCounts > 1 ) {
+			for ( comp_I = 0; comp_I < *self->dataTypeCounts; comp_I++ ) {	
+				value = Variable_GetValueAtDouble( self, array_I, comp_I );
+				fwrite( &value, sizeof(double), 1, outputFile );
+			}
+		}
+		else {
+			value = Variable_GetValueDouble( self, array_I );
+			fwrite( &value, sizeof(double), 1, outputFile );
+		}	
+	
+	}	
+
+	fclose( outputFile );
+}
+
+
+void Variable_ReadFromFileAsDoubles( void* variable, char* filename ) {
+	Variable* self       = (Variable*)  variable;
+	Index     arraySize  = self->arraySize;
+	Index     array_I;
+	double    value;
+	FILE*     inputFile;
+	Index     comp_I;
+
+	inputFile = fopen( filename, "r" );
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		if ( *self->dataTypeCounts > 1 ) {
+			for ( comp_I = 0; comp_I < *self->dataTypeCounts; comp_I++ ) {	
+				fread( &value, sizeof(double), 1, inputFile );
+				Variable_SetValueAtDouble( self, array_I, comp_I, value );
+			}
+		}
+		else {
+			fread( &value, sizeof(double), 1, inputFile );
+			Variable_SetValueDouble( self, array_I, value );
+		}
+	}	
+
+	fclose( inputFile );
+}
+
+
+/** Returns || variable - comparison || / || variable ||, 
+  * where ||x|| indicates the Euclidean Norm which is the square root of the sum of the squares for each component in x
+  * i.e.  ||x|| = \sqrt{\sum_i x_i^2}*/
+double Variable_ValueCompare( void* variable, void* _comparison ) {
+	Variable* self            = (Variable*)  variable;
+	Variable* comparison      = (Variable*) _comparison;
+	Index     arraySize       = self->arraySize;
+	Index     dataTypeCounts  = *self->dataTypeCounts;
+	Index     array_I;
+	Index     component_I;
+	double    differenceValue;
+	double    selfValue;
+	double    normDifference  = 0.0;
+	double    normVariable    = 0.0;
+	Stream*   error           = Journal_Register( Error_Type, self->type );
+
+	/* Simple Error Checking */
+	Journal_Firewall( arraySize == comparison->arraySize, error, 
+			"In func %s: Array sizes different for variables '%s' and '%s'\n", __func__, self->name, comparison->name );
+	Journal_Firewall( dataTypeCounts == *comparison->dataTypeCounts, error, 
+			"In func %s: Data Type Counts different for variables '%s' and '%s'\n",  __func__, self->name,comparison->name);
+
+	for ( component_I = 0 ; component_I < self->offsetCount ; component_I++ ) {
+		Journal_Firewall( self->dataTypes[component_I] == Variable_DataType_Double, error, 
+				"In func %s: Stg_Component %d of variable '%s' has different type to Variable_DataType_Double.\n", 
+				 __func__, component_I, self->name );
+		Journal_Firewall( comparison->dataTypes[component_I] == Variable_DataType_Double, error, 
+				"In func %s: Stg_Component %d of variable '%s' has different type to Variable_DataType_Double.\n", 
+				 __func__, component_I, comparison->name );
+	}
+
+	/* Calculate Euclidean Norms */
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		for ( component_I = 0 ; component_I < dataTypeCounts ; component_I++ ) {
+			selfValue       = Variable_GetValueAtDouble( self, array_I, component_I );
+			differenceValue = selfValue - Variable_GetValueAtDouble( comparison, array_I, component_I );
+
+			normDifference += differenceValue * differenceValue;
+			normVariable   += selfValue * selfValue;
+		}
+	}
+
+	normDifference = sqrt( normDifference );
+	normVariable   = sqrt( normVariable );
+
+	return normDifference/normVariable;
+}
+
+/** Checks whether || variable - comparison || / || variable || < tolerance */
+Bool Variable_ValueCompareWithinTolerance( void* variable, void* comparison, double tolerance ) {
+	return ( Variable_ValueCompare( variable, comparison ) < tolerance );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1178 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	A Variable associates a textual name to a field(s) in an array of structures.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** <b>Description</b>
+**	Variable is used to group a field of a structure inside an array so that functions and algorithms can be solely
+**	applied to this member. This allows more dynamic library routines possible.
+**
+**	For example in an array of coordinates {x, y, z} a Variable can be created to represent "x".
+**
+**	Note that Variables can be applied to any piece of contiguous memory.
+**
+** $Id: Variable.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_Automation_Variable_h__
+#define __Base_Automation_Variable_h__
+	
+	/** Textual name for Variable class. */
+	extern const Type Variable_Type;
+
+	typedef enum {
+		Variable_DataType_Variable,
+		Variable_DataType_Char,
+		Variable_DataType_Short,
+		Variable_DataType_Int,
+		Variable_DataType_Float,
+		Variable_DataType_Double,
+		Variable_DataType_Pointer,
+		Variable_DataType_Size /* Marker for derivatives to enum */
+	} Variable_DataType;
+
+	/* See Variable */
+	#define __Variable \
+		/* General info */ 					\
+		__Stg_Component						\
+									\
+		/* Virtual info */ 					\
+									\
+		/* Variable info */ 					\
+		Index				offsetCount; 		/**< Number of fields in this variable. */ \
+		SizeT*				offsets; 		/**< The offset in bytes these fields are in the struct.*/ \
+		Variable_DataType*		dataTypes;		/**< A list of original data types. */ \
+		Index*				dataTypeCounts;		/**< A list of the number of data. */ \
+		SizeT*				structSizePtr; 		/**< A pointer to the size of the structure. */ \
+		void**				arrayPtrPtr; 		/**< A pointer to a pointer to the 1D array data. */ \
+		Index*				arraySizePtr; 		/**< A pointer to the size/count of the 1D array data. */ \
+									\
+		SizeT*				dataSizes; 		/**< The size in bytes of each field in this variable. */ \
+		SizeT				structSize; 		/**< The size of the structure. */ \
+		void*				arrayPtr; 		/**< A pointer to the 1D array of structures. */ \
+		Index				arraySize; 		/**< The size/count of the 1D array of structures. */ \
+		Variable**			components;		/**< For each component of this variable that we made a variable for, the pointer to the variable. */ \
+		Bool				allocateSelf;		\
+		Variable_Register*		vr;
+
+	struct _Variable { __Variable };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Creates a new Variable. A Variable holds the run-time information of a complex data type created by the programmer.
+	  * Essentially it associates a textual name to a variable in the program that the user can use to access or modify.
+	  *
+	  * For example, if the program has an array of doubles that stores temperature, a Variable can be created with the name
+	  * "temperature", which will know how to access any item of this array. This name can then be added to a list of variables
+	  * to dump, where the code doing so has at compile-time has no idea about the existance of this variable.
+	  * 
+	  * This constructor is the most complex, allowing the captured data to be a composition of items in a struct, of which
+	  * itself may be in an array. Each item can be named, causing the construction of a new variable for each, but only if the
+	  * register is made available and the name is not 0. If the register is made available, then this variable is also added
+	  * to the register. In the case where there is only one item, but it is a vector, the name list must reperesent the name
+	  * each each vector item (as opposed to items of the complex type). 
+	  * If structSizePtr is 0 and dataCount is 1, it will attempt to work out the size from the dataType
+	  * (otherwise it will assert). The casting allows the Variable to be seen in a different type to its actual representation
+	  * (e.g. as an arry of floats instead of doubles). If dataCastTypes == 0, then no casting is done for any component. The
+	  * size of the struct, the size of the array and the pointer to the array are provided as pointers to this information, of
+	  * which will get resolved/dereferenced at the build phase. */
+	Variable* Variable_New( 
+		Name						name,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr );
+	
+	
+	Variable* Variable_DefaultNew( Name name );
+	
+	/** Creates a new Variable. A Variable holds the run-time information of a complex data type created by the programmer.
+	  * Essentially it associates a textual name to a variable in the program that the user can use to access or modify.
+	  *
+	  * See Variable_New for more info.
+	  * 
+	  * This constructor is a shortcut to create a Variable of a scalar in an array. The stride/struct size is the size
+	  * of the dataType. There is no casting. */
+	Variable* Variable_NewScalar( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr );
+	
+	/** Creates a new Variable. A Variable holds the run-time information of a complex data type created by the programmer.
+	  * Essentially it associates a textual name to a variable in the program that the user can use to access or modify.
+	  *
+	  * See Variable_New for more info.
+	  * 
+	  * This constructor is a shortcut to create a Variable of a vector in an array. The names of the vector components are
+	  * optional and are specified via the variable arguement list at the end. A 0 value signifies no name for the associated
+	  * vector component. The stride/struct size is the size of the dataType. There is no casting.*/
+	Variable* Variable_NewVector( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index						dataTypeCount,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr,
+		... 						/* vector component names */ );
+	
+	/** Constructor interface. */
+	Variable* _Variable_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,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr );
+	
+	
+	/** Initialise a Variable */
+	void Variable_Init(
+		Name						name,
+		Variable*					self,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool						allocateSelf,
+		Variable_Register*				vr );
+	
+	/** Init interface. */
+	void _Variable_Init(
+		Variable*					self, 
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool                        allocateSelf,
+		Variable_Register*				vr );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete Variable implementation */
+	void _Variable_Delete( void* variable );
+	
+	/** Print Variable implementation */
+	void _Variable_Print( void* variable, Stream* stream );
+	
+	/** Copy implementation */
+	#define Variable_Copy( self ) \
+		(Variable*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Variable_DeepCopy( self ) \
+		(Variable*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Variable_Copy( void* variable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Build implementation */
+	void _Variable_Build( void* variable, void* data );
+	
+	/** Initialisation implementation */
+	void _Variable_Initialise( void* variable, void* data );
+	
+	/** Execution implementation */
+	void _Variable_Execute( void* variable, void* data );
+	
+	void _Variable_Construct( void* variable, Stg_ComponentFactory* cf, void* data );
+	
+	void _Variable_Destroy( void* variable, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions: Fundamental address calculators
+	*/
+	
+	/** Implementation of "get" the structure in an array, that the requested data member is in. Private (Do not directly
+	 *  use!)
+	 *  NB:- the array_I needs to be cast to an ArithPointer below - see __Variable_GetPtr() for reason. */
+	#define __Variable_GetStructPtr( self, array_I ) \
+		( ( (self)->offsetCount < 2 ) ? \
+			( (void*)( (ArithPointer)(self)->arrayPtr + (ArithPointer)(array_I) * (ArithPointer)( (self)->structSize) + (ArithPointer)( (self)->offsets[0] ) ))  : \
+			( (void*)((ArithPointer)(self)->arrayPtr + (ArithPointer)(array_I) * (ArithPointer)((self)->structSize)) ) )
+	#ifdef CAUTIOUS
+		/** Implementation of "get" the structure in an array that the requested data member is in if CAUTIOUS is defined.
+		 *  It ensures that array_I is within its bounds. Private (Do not directly use!) */
+		#define _Variable_GetStructPtr( self, array_I ) \
+			( (array_I) < (self)->arraySize ? \
+				__Variable_GetStructPtr( (self), (array_I) ) : \
+				/*TODO : call J_Firewall, then return NULL. */ \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Array array_I %d out of range\n", array_I ), NULL) )
+	#else
+		/** Implementation of "get" the structure in an array, that the requested data member is in if CAUTIOUS is NOT
+		 *  defined. It DOES NOT ensure that array_I is within its bounds. Private (Do not directly use!) */
+		#define _Variable_GetStructPtr __Variable_GetStructPtr
+	#endif
+	
+	
+/* BUG!:	( (void*)((ArithPointer)_Variable_GetStructPtr( (self), (array_I) ) + (self)->offsets[component_I]) ) */
+
+	/** Implementation of "get" the requested data member in a structure in an array. Private (Do not directly use!)
+		NB - we cast the array_I to an ArithPointer since its usually passed in as an Index (unsigned int), which on
+		some architectures such as the SGI Altix is of a different size to the ArithPointer (unsigned long) */
+	#define __Variable_GetPtr( self, array_I, component_I, vector_I ) \
+		( (void*)((ArithPointer)(self)->arrayPtr + (ArithPointer)(array_I) * (self)->structSize + (self)->offsets[component_I]) )
+	#ifdef CAUTIOUS
+		/** Implementation of "get" the requested data member in a structure in an array if CAUTIOUS is defined.
+		 *  It ensures that component_I  and array_I are within its bounds. Private (Do not directly use!) */
+		#define _Variable_GetPtr( self, array_I, component_I, vector_I ) \
+			( (component_I) < (self)->offsetCount ? \
+				__Variable_GetPtr( (self), (array_I), (component_I), (vector_I) ) :\
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Offset array_I out of range\n" ), NULL) )
+	#else
+		/** Implementation of "get" the requested data member in a structure in an array if CAUTIOUS is NOT
+		 *  defined. It DOES NOT ensure that component_I and array_I are within its bounds. Private (Do not directly
+		 *  use!) */
+		#define _Variable_GetPtr __Variable_GetPtr
+	#endif
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "char" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "char" inbuilt type, return a pointer to that char (type casted to char*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrChar( self, array_I ) \
+		( (char*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "char" inbuilt type, return a pointer to that char (type casted to char*).
+		 *  It ensures the Variable is of a "char" and is not complex. */
+		#define Variable_GetPtrChar( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Char ? \
+				_Variable_GetPtrChar( (self), (array_I) ) : \
+				(char*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a char or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "char" inbuilt type, return a pointer to that char (type casted to char*).
+		 *  It DOES NOT ensure the Variable is of a "char" and is not complex. */
+		 #define Variable_GetPtrChar _Variable_GetPtrChar
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char. Private (Do not directly use!). */
+	#define _Variable_GetValueAtChar( self, array_I, vector_I ) \
+		( Variable_GetPtrChar( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "char" inbuilt type, return that char. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtChar( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtChar( (self), (array_I), (vector_I) ) : \
+				(char)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "char" inbuilt type, return that char. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtChar _Variable_GetValueAtChar
+	#endif
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return a pointer to that char.  */
+	#define Variable_GetPtrAtChar( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a short */
+	#define Variable_GetValueAtCharAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as an int */
+	#define Variable_GetValueAtCharAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a float */
+	#define Variable_GetValueAtCharAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a double */
+	#define Variable_GetValueAtCharAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a pointer (void*) */
+	#define Variable_GetValueAtCharAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, set that char to a new value (internally type casted to char) */
+	#define Variable_SetValueAtChar( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtChar( (self), (array_I), (vector_I) ) = (char)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char */
+	#define Variable_GetValueChar( self, array_I ) \
+		( Variable_GetValueAtChar( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a short */
+	#define Variable_GetValueCharAsShort( self, array_I ) \
+		( (short)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as an int */
+	#define Variable_GetValueCharAsInt( self, array_I ) \
+		( (int)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a float */
+	#define Variable_GetValueCharAsFloat( self, array_I ) \
+		( (float)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a double */
+	#define Variable_GetValueCharAsDouble( self, array_I ) \
+		( (double)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a pointer (void*) */
+	#define Variable_GetValueCharAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueChar( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, set that char to a new value (internally type casted to
+	 *  char) */
+	#define Variable_SetValueChar( self, array_I, value ) \
+		( *Variable_GetPtrChar( (self), (array_I) ) = (char)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "short" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return a pointer to that short (type casted to short*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrShort( self, array_I ) \
+		( (short*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "short" inbuilt type, return a pointer to that short (type casted to short*).
+		 *  It ensures the Variable is of a "short" and is not complex. */
+		#define Variable_GetPtrShort( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Short ? \
+				_Variable_GetPtrShort( (self), (array_I) ) : \
+				(short*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a short or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "short" inbuilt type, return a pointer to that short (type casted to short*).
+		 *  It DOES NOT ensure the Variable is of a "short" and is not complex. */
+		 #define Variable_GetPtrShort _Variable_GetPtrShort
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short. Private (Do not directly use!). */
+	#define _Variable_GetValueAtShort( self, array_I, vector_I ) \
+		( Variable_GetPtrShort( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "short" inbuilt type, return that short. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtShort( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtShort( (self), (array_I), (vector_I) ) : \
+				(short)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "short" inbuilt type, return that short. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtShort _Variable_GetValueAtShort
+	#endif
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return a pointer to that short.  */
+	#define Variable_GetPtrAtShort( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a char */
+	#define Variable_GetValueAtShortAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as an int */
+	#define Variable_GetValueAtShortAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a float */
+	#define Variable_GetValueAtShortAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a double */
+	#define Variable_GetValueAtShortAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a pointer (void*) */
+	#define Variable_GetValueAtShortAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, set that short to a new value (internally type casted to
+	 *  short)*/
+	#define Variable_SetValueAtShort( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtShort( self, array_I, vector_I ) = (short)(value) )
+	
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short */
+	#define Variable_GetValueShort( self, array_I ) \
+		( Variable_GetValueAtShort( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a char */
+	#define Variable_GetValueShortAsChar( self, array_I ) \
+		( (char)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as an int */
+	#define Variable_GetValueShortAsInt( self, array_I ) \
+		( (int)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a float */
+	#define Variable_GetValueShortAsFloat( self, array_I ) \
+		( (float)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a double */
+	#define Variable_GetValueShortAsDouble( self, array_I ) \
+		( (double)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a pointer (void*) */
+	#define Variable_GetValueShortAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueShort( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, set that short to a new value (internally type casted to
+	 *  short)*/
+	#define Variable_SetValueShort( self, array_I, value ) \
+		( *Variable_GetPtrShort( self, array_I ) = (short)(value) )
+	
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "int" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "int" inbuilt type, return a pointer to that int (type casted to int*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrInt( self, array_I ) \
+		( (int*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "int" inbuilt type, return a pointer to that int (type casted to int*).
+		 *  It ensures the Variable is of a "int" and is not complex. */
+		#define Variable_GetPtrInt( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Int ? \
+				_Variable_GetPtrInt( (self), (array_I) ) : \
+				(int*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a int or is complex, but this macro assumes so.\n" ),NULL) )
+	#else
+		/** Assuming this is a Variable of a "int" inbuilt type, return a pointer to that int (type casted to int*).
+		 *  It DOES NOT ensure the Variable is of a "int" and is not complex. */
+		 #define Variable_GetPtrInt _Variable_GetPtrInt
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int. Private (Do not directly use!). */
+	#define _Variable_GetValueAtInt( self, array_I, vector_I ) \
+		( Variable_GetPtrInt( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "int" inbuilt type, return that int. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtInt( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtInt( (self), (array_I), (vector_I) ) : \
+				(int)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "int" inbuilt type, return that int. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtInt _Variable_GetValueAtInt
+	#endif
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return a pointer to that int.  */
+	#define Variable_GetPtrAtInt( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a char */
+	#define Variable_GetValueAtIntAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a short */
+	#define Variable_GetValueAtIntAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a float */
+	#define Variable_GetValueAtIntAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a double */
+	#define Variable_GetValueAtIntAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a pointer (void*) */
+	#define Variable_GetValueAtIntAsPointer( self, array_I, vector_I ) \
+		( (void*)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, set that int to a new value (internally type casted to int) */
+	#define Variable_SetValueAtInt( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtInt( (self), (array_I), (vector_I) ) = (int)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int */
+	#define Variable_GetValueInt( self, array_I ) \
+		( Variable_GetValueAtInt( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a char */
+	#define Variable_GetValueIntAsChar( self, array_I ) \
+		( (char)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a short */
+	#define Variable_GetValueIntAsShort( self, array_I ) \
+		( (short)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a float */
+	#define Variable_GetValueIntAsFloat( self, array_I ) \
+		( (float)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a double */
+	#define Variable_GetValueIntAsDouble( self, array_I ) \
+		( (double)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a pointer (void*) */
+	#define Variable_GetValueIntAsPointer( self, array_I ) \
+		( (void*)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, set that int to a new value (internally type casted to int) */
+	#define Variable_SetValueInt( self, array_I, value ) \
+		( *Variable_GetPtrInt( (self), (array_I) ) = (int)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "float" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "float" inbuilt type, return a pointer to that float (type casted to float*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrFloat( self, array_I ) \
+		( (float*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "float" inbuilt type, return a pointer to that float (type casted to float*).
+		 *  It ensures the Variable is of a "float" and is not complex. */
+		#define Variable_GetPtrFloat( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Float ? \
+				_Variable_GetPtrFloat( (self), (array_I) ) : \
+				(float*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a float or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "float" inbuilt type, return a pointer to that float (type casted to float*).
+		 *  It DOES NOT ensure the Variable is of a "float" and is not complex. */
+		 #define Variable_GetPtrFloat _Variable_GetPtrFloat
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float. Private (Do not directly use!). */
+	#define _Variable_GetValueAtFloat( self, array_I, vector_I ) \
+		( Variable_GetPtrFloat( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "float" inbuilt type, return that float. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtFloat( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) : \
+				(float)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "float" inbuilt type, return that float. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtFloat _Variable_GetValueAtFloat
+	#endif
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return a pointer to that float.  */
+	#define Variable_GetPtrAtFloat( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a char */
+	#define Variable_GetValueAtFloatAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a short */
+	#define Variable_GetValueAtFloatAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as an int */
+	#define Variable_GetValueAtFloatAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a double */
+	#define Variable_GetValueAtFloatAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a pointer (void*) */
+	#define Variable_GetValueAtFloatAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, set that float to a new value (internally type casted to
+	 *  float) */
+	#define Variable_SetValueAtFloat( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtFloat( (self), (array_I), (vector_I) ) = (float)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float */
+	#define Variable_GetValueFloat( self, array_I ) \
+		( Variable_GetValueAtFloat( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a char */
+	#define Variable_GetValueFloatAsChar( self, array_I ) \
+		( (char)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a short */
+	#define Variable_GetValueFloatAsShort( self, array_I ) \
+		( (short)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as an int */
+	#define Variable_GetValueFloatAsInt( self, array_I ) \
+		( (int)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a double */
+	#define Variable_GetValueFloatAsDouble( self, array_I ) \
+		( (double)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a pointer (void*) */
+	#define Variable_GetValueFloatAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueFloat( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, set that float to a new value (internally type casted to
+	 *  float) */
+	#define Variable_SetValueFloat( self, array_I, value ) \
+		( *Variable_GetPtrFloat( (self), (array_I) ) = (float)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "double" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "double" inbuilt type, return a pointer to that double (type casted to double*).
+	 *  Private (Do not directly use!). */
+	#define _Variable_GetPtrDouble( self, array_I ) \
+		( (double*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "double" inbuilt type, return a pointer to that double (type casted to
+		 *  double*). It ensures the Variable is of a "double" and is not complex. */
+		#define Variable_GetPtrDouble( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Double ? \
+				_Variable_GetPtrDouble( (self), (array_I) ) : \
+				(double*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a double or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "double" inbuilt type, return a pointer to that double (type casted to
+		 *   double*). It DOES NOT ensure the Variable is of a "double" and is not complex. */
+		 #define Variable_GetPtrDouble _Variable_GetPtrDouble
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double. Private (Do not directly use!). */
+	#define _Variable_GetValueAtDouble( self, array_I, vector_I ) \
+		( (Variable_GetPtrDouble( (self), (array_I) ))[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "double" inbuilt type, return that double. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtDouble( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) : \
+				(double)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "double" inbuilt type, return that double. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtDouble _Variable_GetValueAtDouble
+	#endif
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return a pointer to that double.  */
+	#define Variable_GetPtrAtDouble( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a char */
+	#define Variable_GetValueAtDoubleAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a short */
+	#define Variable_GetValueAtDoubleAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a int */
+	#define Variable_GetValueAtDoubleAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a float */
+	#define Variable_GetValueAtDoubleAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a double */
+	#define Variable_GetValueAtDoubleAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a pointer (void*) */
+	#define Variable_GetValueAtDoubleAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, set that double to a new value (internally type casted to
+	 *  double) */
+	#define Variable_SetValueAtDouble( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtDouble( (self), (array_I), (vector_I) ) = (double)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double */
+	#define Variable_GetValueDouble( self, array_I ) \
+		( Variable_GetValueAtDouble( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a char */
+	#define Variable_GetValueDoubleAsChar( self, array_I ) \
+		( (char)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a short */
+	#define Variable_GetValueDoubleAsShort( self, array_I ) \
+		( (short)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a int */
+	#define Variable_GetValueDoubleAsInt( self, array_I ) \
+		( (int)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a float */
+	#define Variable_GetValueDoubleAsFloat( self, array_I ) \
+		( (float)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a double */
+	#define Variable_GetValueDoubleAsDouble( self, array_I ) \
+		( (double)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a pointer (void*) */
+	#define Variable_GetValueDoubleAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueDouble( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, set that double to a new value (internally type casted to
+	 *  double) */
+	#define Variable_SetValueDouble( self, array_I, value ) \
+		( *Variable_GetPtrDouble( (self), (array_I) ) = (double)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "pointer" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "pointer" inbuilt type, return a pointer to that pointer (type casted to void**).
+	 *  Private. (Do not directly use!). */
+	#define _Variable_GetPtrPointer( self, array_I ) \
+		( (void**)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "pointer" inbuilt type, return a pointer to that pointer (type casted to
+		 *  void**). It ensures the Variable is of a "pointer" and is not complex. */
+		#define Variable_GetPtrPointer( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Pointer ? \
+				_Variable_GetPtrPointer( (self), (array_I) ) : \
+				(void**)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a pointer or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "pointer" inbuilt type, return a pointer to that pointer (type casted to
+		 *  void**). It DOES NOT ensure the Variable is of a "pointer" and is not complex. */
+		 #define Variable_GetPtrPointer _Variable_GetPtrPointer
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer. Private (Do not directly use!). */
+	#define _Variable_GetValueAtPointer( self, array_I, vector_I ) \
+		( Variable_GetPtrPointer( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtPointer( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) : \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtPointer _Variable_GetValueAtPointer
+	#endif
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return a pointer to that pointer.  */
+	#define Variable_GetPtrAtPointer( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a char pointer (char*) */
+	#define Variable_GetValueAtPointerAsCharPointer( self, array_I, vector_I ) \
+		( (char*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a short pointer (short*) */
+	#define Variable_GetValueAtPointerAsShortPointer( self, array_I, vector_I ) \
+		( (short*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as an int pointer (int*) */
+	#define Variable_GetValueAtPointerAsIntPointer( self, array_I, vector_I ) \
+		( (int*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a float pointer (float*) */
+	#define Variable_GetValueAtPointerAsFloatPointer( self, array_I, vector_I ) \
+		( (float*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a double pointer (double*) */
+	#define Variable_GetValueAtPointerAsDoublePointer( self, array_I, vector_I ) \
+		( (double*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, set that pointer to a new value (internally type casted to
+	 *  void*) */
+	#define Variable_SetValueAtPointer( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtPointer( (self), (array_I), (vector_I) ) = (void*)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer (void*) */
+	#define Variable_GetValuePointer( self, array_I ) \
+		( Variable_GetValueAtPointer( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a char pointer (char*) */
+	#define Variable_GetValuePointerAsCharPointer( self, array_I ) \
+		( (char*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a short pointer (short*) */
+	#define Variable_GetValuePointerAsShortPointer( self, array_I ) \
+		( (short*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as an int pointer (int*) */
+	#define Variable_GetValuePointerAsIntPointer( self, array_I ) \
+		( (int*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a float pointer (float*) */
+	#define Variable_GetValuePointerAsFloatPointer( self, array_I ) \
+		( (float*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a double pointer (double*) */
+	#define Variable_GetValuePointerAsDoublePointer( self, array_I ) \
+		( (double*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, set that pointer to a new value (internally type casted to
+	 *  void*) */
+	#define Variable_SetValuePointer( self, array_I, value ) \
+		( *Variable_GetPtrPointer( (self), (array_I) ) = (void*)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of any inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of any inbuilt type, return a char (type casted to char). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsChar( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsChar( (self), (array_I) ) : \
+		  (char)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a char (type casted to char). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsChar( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsChar( (self), (array_I) ) : \
+				(char)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a char (type casted to char). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsChar _Variable_GetValueAsChar
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a short (type casted to short). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsShort( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsShort( (self), (array_I) ) : \
+		  (short)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a short (type casted to short). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsShort( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsShort( (self), (array_I) ) : \
+				(short)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a short (type casted to short). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsShort _Variable_GetValueAsShort
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a int (type casted to int). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsInt( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsInt( (self), (array_I) ) : \
+		  (int)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a int (type casted to int). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsInt( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsInt( (self), (array_I) ) : \
+				(int)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a int (type casted to int). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsInt _Variable_GetValueAsInt
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a float (type casted to float). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer.*/
+	#define _Variable_GetValueAsFloat( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsFloat( (self), (array_I) ) : \
+		  (float)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a float (type casted to float). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsFloat( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsFloat( (self), (array_I) ) : \
+				(float)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a float (type casted to float). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsFloat _Variable_GetValueAsFloat
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a double (type casted to double). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsDouble( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDouble( (self), (array_I) ) : \
+		  (double)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a double (type casted to double). It ensures the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsDouble( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsDouble( (self), (array_I) ) : \
+				(double)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a double (type casted to double). It DOES NOT ensure
+		 *  the Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsDouble _Variable_GetValueAsDouble
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a pointer (type casted to void*). Private. (Do not directly
+	 *  use!). Resolution order: pointer, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsPointer( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Pointer ?	Variable_GetValuePointer( (self), (array_I) ) : \
+		  (Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ), NULL) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a pointer (type casted to void*). It ensures the Variable
+		 * is not complex. Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_GetValueAsPointer( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsPointer( (self), (array_I) ) : \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a pointer (type casted to void*). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_GetValueAsPointer _Variable_GetValueAsPointer
+	#endif
+	
+
+	/** Assuming this is a Variable of any inbuilt type, set the value. Private. (Do not directly use!). Resolution order:
+	 *  pointer, short, int, float, double, pointer. */
+	#define _Variable_SetValueFromInbuilt( self, array_I, value ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_SetValueChar( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_SetValueShort( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_SetValueInt( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_SetValueFloat( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_SetValueDouble( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Pointer ?	Variable_SetValuePointer( (self), (array_I), (value) ) : \
+		  (Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ), NULL) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, set the value. It ensures the Variable is not complex.
+		  * Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_SetValueFromInbuilt( self, array_I, value ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_SetValueFromInbuilt( (self), (array_I), (value) ) : \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, set the value. It DOES NOT ensure the Variable is not complex.
+		 *  Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_SetValueFromInbuilt _Variable_SetValuefromInBuilt
+	#endif
+	
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: for any Variable
+	*/
+	
+	/** "Get" the requested data from the Variable that may be in an array. The returned value is a void*. If the Variable is
+	 *  of a basic type, then the pointer to the scalar or the vector itself with the structure (if relevant) is returned. If
+	 *  the Variable is of a complex type (i.e. it has more than one data component), then the pointer to the structure the
+	 *  variable repesents is returned. */
+	#define Variable_GetStructPtr _Variable_GetStructPtr
+	
+	/** Generic Variable "set". Works for any Variable. For complex Variables, the value must be the array of bytes of all the
+	 * data members concatenated (i.e. in marshalled form, not the structured form). Inherently slow operation. */
+	void Variable_SetValue( void* variable, Index array_I, void* value );
+	
+	/** Generic Variable "get". Works for any Variable. For complex Variables, the value must be the array of already allocated
+	 * bytes of all the data members concatenated (i.e. in marshalled form, not the structured form). Inherently slow
+	 * operation. */
+	void Variable_GetValue( void* variable, Index array_I, void* value );
+
+	/** Updates the local members in variable from pointers
+	 *  Used then the data is resized or extened.
+	 *  If the data is an array which the array length is changed, this function expects the length */
+	void Variable_Update( void* variable );
+
+	/** Sets value to all entries in array of variable */
+	void Variable_SetValueDoubleAll( void* variable, double value ) ;
+
+	void Variable_SaveToFileAsDoubles( void* variable, char* filename );
+
+	void Variable_ReadFromFileAsDoubles( void* variable, char* filename );
+	
+	/** Returns || variable - comparison || / || variable ||, 
+	  * where ||x|| indicates the Euclidean Norm which is the square root of the sum of the squares for each component in x
+	  * i.e.  ||x|| = \sqrt{\sum_i x_i^2}*/
+	double Variable_ValueCompare( void* variable, void* _comparison );
+	/** Checks whether || variable - comparison || / || variable || < tolerance */
+	Bool Variable_ValueCompareWithinTolerance( void* variable, void* comparison, double tolerance );
+
+#endif /* __Base_Automation_Variable__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Variable</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/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">
+	<struct>
+		<param name="Name">VectorComponentCount</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">nameCount</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">No</param>
+		<param name="Name">Dependency</param>
+		<param name="Type">Stg_Component</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 839 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,584 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: VariableAllVC.c 2509 2005-01-10 23:39:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+                                                                                                                                    
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+#include "VariableCondition.h"
+#include "VariableAllVC.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type VariableAllVC_Type = "VariableAllVC";
+const Name defaultVariableAllVCName = "defaultVariableAllVCName";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* VariableAllVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register, 
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)VariableAllVC_New( defaultVariableAllVCName, NULL, variable_Register, conFunc_Register, dictionary, data );
+}
+
+
+VariableAllVC*	VariableAllVC_New(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return _VariableAllVC_New(
+		sizeof(VariableAllVC), 
+		VariableAllVC_Type, 
+		_VariableAllVC_Delete, 
+		_VariableAllVC_Print, 
+		_VariableAllVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)VariableAllVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableAllVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name, 
+		True,
+		_VariableAllVC_BuildSelf, 
+		_VariableAllVC_PrintConcise,
+		_VariableAllVC_ReadDictionary,
+		_VariableAllVC_GetSet, 
+		_VariableAllVC_GetVariableCount, 
+		_VariableAllVC_GetVariableIndex, 
+		_VariableAllVC_GetValueIndex, 
+		_VariableAllVC_GetValueCount, 
+		_VariableAllVC_GetValue,
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		data );
+}
+
+VariableAllVC*	VariableAllVC_DefaultNew( Name name )
+{
+	return (VariableAllVC*)_VariableAllVC_New(
+		sizeof(VariableAllVC), 
+		VariableAllVC_Type, 
+		_VariableAllVC_Delete, 
+		_VariableAllVC_Print, 
+		_VariableAllVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)VariableAllVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableAllVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_VariableAllVC_BuildSelf, 
+		_VariableAllVC_PrintConcise,
+		_VariableAllVC_ReadDictionary,
+		_VariableAllVC_GetSet, 
+		_VariableAllVC_GetVariableCount, 
+		_VariableAllVC_GetVariableIndex, 
+		_VariableAllVC_GetValueIndex, 
+		_VariableAllVC_GetValueCount, 
+		_VariableAllVC_GetValue,
+		NULL,
+		NULL/*variable_Register*/, 
+		NULL/*conFunc_Register*/, 
+		NULL,
+		NULL );
+}
+
+void VariableAllVC_Init(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		VariableAllVC*					self,
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	/* General info */
+	self->type = VariableAllVC_Type;
+	self->_sizeOfSelf = sizeof(VariableAllVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _VariableAllVC_Delete;
+	self->_print = _VariableAllVC_Print;
+	self->_copy = _VariableAllVC_Copy;
+	self->_build = _VariableAllVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_buildSelf = _VariableAllVC_BuildSelf;
+	self->_printConcise = _VariableAllVC_PrintConcise;
+	self->_readDictionary = _VariableAllVC_ReadDictionary;
+	self->_getSet = _VariableAllVC_GetSet;
+	self->_getVariableCount = _VariableAllVC_GetVariableCount;
+	self->_getVariableIndex = _VariableAllVC_GetVariableIndex;
+	self->_getValueIndex = _VariableAllVC_GetValueIndex;
+	self->_getValueCount = _VariableAllVC_GetValueCount;
+	self->_getValue = _VariableAllVC_GetValue;
+	
+	_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 */
+	_VariableAllVC_Init( self, _dictionaryEntryName, data );
+}
+
+
+VariableAllVC* _VariableAllVC_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,
+		Name									_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data)
+{
+	VariableAllVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(VariableAllVC));
+	self = (VariableAllVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue,
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_VariableAllVC_Init( self, _dictionaryEntryName, data );
+	}
+	
+	return self;
+}
+
+
+void _VariableAllVC_Init(
+		void* 						allElementsVC,
+		Name						_dictionaryEntryName, 
+		void*						data )
+{
+	VariableAllVC*			self = (VariableAllVC*)allElementsVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->data = data;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _VariableAllVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	VariableAllVC*			self = (VariableAllVC*)variableCondition;
+	Dictionary_Entry_Value*		vcDictVal;
+	Dictionary_Entry_Value		_vcDictVal;
+	Dictionary_Entry_Value*		varsVal;
+	VariableAllVC_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( VariableAllVC_Entry, self->_entryCount, "VariableAllVC->_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 (!strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				self->_entryTbl[entry_I].value.as.typeCFIndex = ConditionFunction_Register_GetIndex(
+					self->conFunc_Register, funcName);
+			}
+			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,"VariableAllVC->_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 _VariableAllVC_Delete( void* allElementsVC ) {
+	VariableAllVC*				self = (VariableAllVC*)allElementsVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _VariableAllVC_Print( void* allElementsVC, Stream* stream ) {
+	VariableAllVC*				self = (VariableAllVC*)allElementsVC;
+	VariableAllVC_Entry_Index		entry_I;
+	Index					i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "VariableAllVC (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* _VariableAllVC_Copy( void* allElementsVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	VariableAllVC*		self = (VariableAllVC*)allElementsVC;
+	VariableAllVC*		newVariableAllVC;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newVariableAllVC = (VariableAllVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newVariableAllVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newVariableAllVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newVariableAllVC->data = Stg_Class_Copy( self->data, NULL, deep, nameExt, map );
+		
+		if( (newVariableAllVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newVariableAllVC->_entryTbl = Memory_Alloc_Array( VariableAllVC_Entry, newVariableAllVC->_entryCount, "VariableAllVC->_entryTbl");
+			memcpy( newVariableAllVC->_entryTbl, self->_entryTbl, sizeof(VariableAllVC_Entry) * newVariableAllVC->_entryCount );
+			PtrMap_Append( map, newVariableAllVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newVariableAllVC->data = self->data;
+		newVariableAllVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newVariableAllVC;
+}
+
+
+void _VariableAllVC_Build( void* allElementsVC, void* data ) {
+	VariableAllVC*		self = (VariableAllVC*)allElementsVC;
+	
+	_VariableAllVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _VariableAllVC_BuildSelf( void* allElementsVC, void* data ) {
+	VariableAllVC*		self = (VariableAllVC*)allElementsVC;
+	
+	if( self->data ) {
+		Build( self->data, data, False );
+	}
+}
+
+
+IndexSet* _VariableAllVC_GetSet( void* variableCondition ) {
+	VariableAllVC*				self = (VariableAllVC*)variableCondition;
+	Variable*				var = self->variable_Register->_variable[0];
+	IndexSet*				set = IndexSet_New( var->arraySize );
+	
+	IndexSet_AddAll( set );
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _VariableAllVC_GetVariableCount( void* variableCondition, Index globalIndex ) {
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _VariableAllVC_GetVariableIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex) 
+{
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+	
+	return Variable_Register_GetIndex(self->variable_Register, self->_entryTbl[varIndex].varName);
+}
+
+
+VariableCondition_ValueIndex _VariableAllVC_GetValueIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _VariableAllVC_GetValueCount( void* variableCondition ) {
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _VariableAllVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex ) {
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _VariableAllVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	VariableAllVC*		self = (VariableAllVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: all\n", self->type );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,194 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: VariableAllVC.h 2509 2005-01-10 23:39:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_VariableAllVC_h__
+#define __Base_Automation_VariableAllVC_h__
+	
+
+	extern const Type VariableAllVC_Type;
+	
+	
+	#define __VariableAllVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _VariableAllVC_Entry { __VariableAllVC_Entry };
+	
+	
+	#define __VariableAllVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		VariableAllVC_Entry_Index	_entryCount; \
+		VariableAllVC_Entry*		_entryTbl; \
+		void*				data;
+
+	struct _VariableAllVC { __VariableAllVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		VariableAllVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	VariableAllVC*			VariableAllVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				VariableAllVC_Init(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						VariableAllVC*					self,
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	VariableAllVC*			VariableAllVC_DefaultNew( Name name );
+	
+	VariableAllVC*			_VariableAllVC_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,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				_VariableAllVC_Init(
+						void*						allElementsVC, 
+						Name						_dictionaryEntryName, 
+						void*						mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_VariableAllVC_Delete( void* allElementsVC );
+	
+	void				_VariableAllVC_Print( void* allElementsVC, Stream* stream );
+	
+	/* Copy */
+	#define VariableAllVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define VariableAllVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _VariableAllVC_Copy( void* allElementsVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_VariableAllVC_Build( void* allElementsVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_VariableAllVC_BuildSelf( void* allElementsVC, void* data );
+	
+	void				_VariableAllVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_VariableAllVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_VariableAllVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_VariableAllVC_GetVariableIndex(
+						void*					variableCondition,
+						Index					globalIndex, 
+						VariableCondition_VariableIndex		varIndex );
+						
+	VariableCondition_ValueIndex	_VariableAllVC_GetValueIndex(
+						void*					variableCondition, 
+						Index					globalIndex, 
+						VariableCondition_VariableIndex		varIndex );
+						
+	VariableCondition_ValueIndex	_VariableAllVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_VariableAllVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_VariableAllVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Base_Automation_VariableAllVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">VariableAllVC</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/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="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>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,731 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: VariableCondition.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+#include "VariableCondition.h"
+
+#include <string.h>
+#include <assert.h>
+
+/** Textual name of this class */
+const Type VariableCondition_Type = "VariableCondition";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* _VariableCondition_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,
+			Variable_Register*				variable_Register,
+			ConditionFunction_Register*			conFunc_Register,
+			Dictionary*					dictionary )
+{
+	VariableCondition*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(VariableCondition));
+	self = (VariableCondition*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy,  _defaultConstructor, 
+												_construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* Virtual info */
+	self->_buildSelf = _buildSelf;
+	self->_printConcise = _printConcise;
+	self->_readDictionary = _readDictionary;
+	self->_getSet = _getSet;
+	self->_getVariableCount = _getVariableCount;
+	self->_getVariableIndex = _getVariableIndex;
+	self->_getValueIndex = _getValueIndex;
+	self->_getValueCount = _getValueCount;
+	self->_getValue = _getValue;
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_VariableCondition_Init( self, variable_Register, conFunc_Register, dictionary );
+	}
+	
+	return self;
+}
+
+
+void _VariableCondition_Init(
+		void*				variableCondition, 
+		Variable_Register*		variable_Register, 
+		ConditionFunction_Register*	conFunc_Register,
+		Dictionary*			dictionary )
+{
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	
+	self->isConstructed = True;
+	self->variable_Register = variable_Register;
+	self->conFunc_Register = conFunc_Register;
+	self->dictionary = dictionary;
+	self->_set = NULL;
+	self->indexCount = 0;
+	self->indexTbl = NULL;
+	self->vcVarCountTbl = NULL;
+	self->vcTbl = NULL;
+	self->valueCount = 0;
+	self->valueTbl = NULL;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _VariableCondition_Delete(void* variableCondition)
+{
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	
+	if (self->_set) Stg_Class_Delete(self->_set);
+	if (self->indexTbl) Memory_Free(self->indexTbl);
+	if (self->vcVarCountTbl) Memory_Free(self->vcVarCountTbl);
+	if (self->valueTbl) Memory_Free(self->valueTbl);
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _VariableCondition_Print(void* variableCondition)
+{
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_VariableIndex	vcVar_I;
+	VariableCondition_ValueIndex	val_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* variableConditionStream = Journal_Register( InfoStream_Type,	"VariableConditionStream");
+	
+	/* General info */
+	Journal_Printf( variableConditionStream, "VariableCondition (ptr): %p\n", self);
+	
+	/* Print parent */
+	_Stg_Component_Print( self, variableConditionStream );
+	
+	/* Virtual info */
+	Journal_Printf( variableConditionStream, "\t_getSet (func ptr): %p\n", self->_getSet);
+	Journal_Printf( variableConditionStream, "\t_getVariableCount (func ptr): %p\n", self->_getVariableCount);
+	Journal_Printf( variableConditionStream, "\t_getVariableIndex (func ptr): %p\n", self->_getVariableIndex);
+	Journal_Printf( variableConditionStream, "\t_getValueIndex (func ptr): %p\n", self->_getValueIndex);
+	Journal_Printf( variableConditionStream, "\t_getValueCount (func ptr): %p\n", self->_getValueCount);
+	Journal_Printf( variableConditionStream, "\t_getValue (func ptr): %p\n", self->_getValue);
+	
+	/* Stg_Class info */
+	Journal_Printf( variableConditionStream, "\tvariable_Register (ptr): %p\n", self->variable_Register);
+	Journal_Printf( variableConditionStream, "\tconFunc_Register (ptr): %p\n", self->conFunc_Register);
+	Journal_Printf( variableConditionStream, "\t_set (ptr): %p\n", self->_set);
+	Journal_Printf( variableConditionStream, "\tindexCount: %u\n", self->indexCount);
+	Journal_Printf( variableConditionStream, "\tindexTbl (ptr): %p\n", self->indexTbl);
+	if (self->indexTbl)
+		for (i = 0; i < self->indexCount; i++)
+			Journal_Printf( variableConditionStream, "\t\tindexTbl[%u]: %u\n", i, self->indexTbl[i]);
+	Journal_Printf( variableConditionStream, "\tvcVarCountTbl (ptr): %p\n", self->vcVarCountTbl);
+	if (self->vcVarCountTbl)
+		for (i = 0; i < self->indexCount; i++)
+			Journal_Printf( variableConditionStream, "\t\tvcVarCountTbl[%u]: %u\n", i, self->vcVarCountTbl[i]);
+	Journal_Printf( variableConditionStream, "\tvcTbl (ptr): %p\n", self->vcTbl);
+	if (self->vcTbl)
+		for (i = 0; i < self->indexCount; i++)
+			for (vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++)
+			{
+				Journal_Printf( variableConditionStream, "\t\tvcTbl[%u][%u]:\n", i, vcVar_I);
+				Journal_Printf( variableConditionStream, "\t\t\tvarIndex: %u\n", self->vcTbl[i][vcVar_I].varIndex);
+				Journal_Printf( variableConditionStream, "\t\t\tvalIndex: %u\n", self->vcTbl[i][vcVar_I].valIndex);
+			}
+	Journal_Printf( variableConditionStream, "\tvalueCount: %u\n", self->valueCount);
+	Journal_Printf( variableConditionStream, "\tvalueTbl (ptr): %p\n", self->valueTbl);
+	if( self->valueTbl ) {
+		for (val_I = 0; val_I < self->valueCount; val_I++)
+		{
+			Journal_Printf( variableConditionStream, "\t\tvalueTbl[%u]:\n", val_I);
+			switch (self->valueTbl[val_I].type)
+			{
+				case VC_ValueType_Double:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( variableConditionStream, "\t\t\tasDouble: %g\n", self->valueTbl[val_I].as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( variableConditionStream, "\t\t\tasInt: %i\n", self->valueTbl[val_I].as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( variableConditionStream, "\t\t\tasShort: %i\n", self->valueTbl[val_I].as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( variableConditionStream, "\t\t\tasChar: %c\n", self->valueTbl[val_I].as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( variableConditionStream, "\t\t\tasPtr: %g\n", self->valueTbl[val_I].as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( variableConditionStream, "\t\t\tarraySize: %u\n", self->valueTbl[val_I].as.typeArray.size);
+					Journal_Printf( variableConditionStream, "\t\t\tasDoubleArray (ptr): %p\n", self->valueTbl[val_I].as.typeArray.array);
+					if (self->valueTbl[val_I].as.typeArray.array)
+						for (i = 0; i < self->valueTbl[val_I].as.typeArray.size; i++)
+							Journal_Printf( variableConditionStream, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->valueTbl[val_I].as.typeArray.array[i]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( variableConditionStream, "\t\t\tasCFIndex: %u\n", self->valueTbl[val_I].as.typeCFIndex);
+					break;
+			}
+		}
+	}
+}
+
+
+void* _VariableCondition_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	VariableCondition*	newVariableCondition;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newVariableCondition = (VariableCondition*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newVariableCondition->_buildSelf = self->_buildSelf;
+	newVariableCondition->_printConcise = self->_printConcise;
+	newVariableCondition->_readDictionary = self->_readDictionary;
+	newVariableCondition->_getSet = self->_getSet;
+	newVariableCondition->_getVariableCount = self->_getVariableCount;
+	newVariableCondition->_getVariableIndex = self->_getVariableIndex;
+	newVariableCondition->_getValueIndex = self->_getValueIndex;
+	newVariableCondition->_getValueCount = self->_getValueCount;
+	newVariableCondition->_getValue = self->_getValue;
+	
+	newVariableCondition->variable_Register = self->variable_Register;
+	newVariableCondition->conFunc_Register = self->conFunc_Register;
+	newVariableCondition->dictionary = self->dictionary;
+	newVariableCondition->indexCount = self->indexCount;
+	newVariableCondition->valueCount = self->valueCount;
+	
+	if( deep ) {
+		newVariableCondition->_set = (IndexSet*)Stg_Class_Copy( self->_set, NULL, deep, nameExt, map );
+		
+		if( (newVariableCondition->indexTbl = PtrMap_Find( map, self->indexTbl )) == NULL && self->indexTbl ) {
+			newVariableCondition->indexTbl = (Index*)Memory_Alloc_Array( Index, newVariableCondition->indexCount, "VariableCondition->indexTbl" );
+			memcpy( newVariableCondition->indexTbl, self->indexTbl, sizeof(Index) * newVariableCondition->indexCount );
+			PtrMap_Append( map, newVariableCondition->indexTbl, self->indexTbl );
+		}
+		
+		if( (newVariableCondition->vcVarCountTbl = PtrMap_Find( map, self->vcVarCountTbl )) == NULL && self->vcVarCountTbl ) {
+			newVariableCondition->vcVarCountTbl = Memory_Alloc_Array( VariableCondition_VariableIndex, newVariableCondition->indexCount, "VC->vcVarCountTbl" );
+			memcpy( newVariableCondition->vcVarCountTbl, self->vcVarCountTbl, sizeof(VariableCondition_VariableIndex) * newVariableCondition->indexCount );
+			PtrMap_Append( map, newVariableCondition->vcVarCountTbl, self->vcVarCountTbl );
+		}
+		
+		if( (newVariableCondition->vcTbl = PtrMap_Find( map, self->vcTbl )) == NULL && self->vcTbl ) {
+			Index	idx_I;
+			
+			newVariableCondition->vcTbl = Memory_Alloc_2DComplex( VariableCondition_Tuple, newVariableCondition->indexCount, newVariableCondition->vcVarCountTbl, "VC->vcTbl" );
+			for( idx_I = 0; idx_I < newVariableCondition->indexCount; idx_I++ ) {
+				memcpy( newVariableCondition->vcTbl[idx_I], self->vcTbl[idx_I], sizeof(VariableCondition_Tuple) * newVariableCondition->vcVarCountTbl[idx_I] );
+			}
+			PtrMap_Append( map, newVariableCondition->vcTbl, self->vcTbl );
+		}
+		
+		if( (newVariableCondition->valueTbl = PtrMap_Find( map, self->valueTbl )) == NULL && self->valueTbl ) {
+			newVariableCondition->valueTbl = Memory_Alloc_Array( VariableCondition_Value, newVariableCondition->valueCount, "VC->valueTbl" );
+			memcpy( newVariableCondition->valueTbl, self->valueTbl, sizeof(VariableCondition_Value) * newVariableCondition->indexCount );
+			PtrMap_Append( map, newVariableCondition->valueTbl, self->valueTbl );
+		}
+	}
+	else {
+		newVariableCondition->_set = self->_set;
+		newVariableCondition->indexTbl = self->indexTbl;
+		newVariableCondition->vcVarCountTbl = self->vcVarCountTbl;
+		newVariableCondition->vcTbl = self->vcTbl;
+		newVariableCondition->valueTbl = self->valueTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newVariableCondition;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+void _VariableCondition_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _VariableCondition_Build( void* variableCondition, void* data ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_ValueIndex	val_I;
+	Index				i;
+	
+	/* Read the dictionary */
+	self->_readDictionary( self, self->dictionary );
+	
+	/* Obtain the set */
+	self->_set = self->_getSet(self);
+	if (self->_set)
+		IndexSet_GetMembers(self->_set, &self->indexCount, &self->indexTbl);
+	else
+	{
+		self->indexCount = 0;
+		self->indexTbl = NULL;
+	}
+	
+	/* Only build the index related tables if there are active BCs */
+	if ( self->indexCount ) {
+		/* Build the variable to condition table */
+		self->vcVarCountTbl = Memory_Alloc_Array( VariableCondition_VariableIndex, self->indexCount, "VC->vcVarCountTbl" );
+		
+		for (i = 0; i < self->indexCount; i++)
+		{
+			/* For the index, get the number of "variables" that have been assigned conditions */
+			self->vcVarCountTbl[i] = self->_getVariableCount(self, self->indexTbl[i]);
+		}
+
+		self->vcTbl = Memory_Alloc_2DComplex( VariableCondition_Tuple, self->indexCount, self->vcVarCountTbl, "VC->vcTbl" );
+		for ( i = 0; i < self->indexCount; i++ )
+		{
+			VariableCondition_VariableIndex vcVar_I;
+
+			for ( vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++ )
+			{
+				Variable* var;
+
+				/* For the index's variable, get the variable i.d. and value i.d. */
+				self->vcTbl[i][vcVar_I].varIndex = self->_getVariableIndex(self, self->indexTbl[i], vcVar_I);
+				self->vcTbl[i][vcVar_I].valIndex = self->_getValueIndex(self, self->indexTbl[i], vcVar_I);
+
+				/* Force the building of the variable (to be safe) */
+				var = self->variable_Register->_variable[self->vcTbl[i][vcVar_I].varIndex];
+				Build( var, data, False );
+			}
+		}
+	}	
+
+	self->valueCount = self->_getValueCount(self);
+	self->valueTbl = Memory_Alloc_Array( VariableCondition_Value, self->valueCount, "VC->valueTbl" );
+	for (val_I = 0; val_I < self->valueCount; val_I++)
+		self->valueTbl[val_I] = self->_getValue(self, val_I);
+}
+
+void _VariableCondition_Initialise( void* variableCondition, void* data ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	Index				i;
+	
+	for( i = 0; i < self->indexCount; i++ ) {
+		VariableCondition_VariableIndex	vcVar_I;
+		
+		for( vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++ ) {
+			Variable* var;
+			
+			/* Force the building of the variable (to be safe) */
+			var = self->variable_Register->_variable[self->vcTbl[i][vcVar_I].varIndex];
+			Initialise( var, data, False );
+		}
+	}
+}
+
+void _VariableCondition_Execute( void* variableCondition, void* data ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	
+	VariableCondition_Apply( self, data );
+}
+
+void _VariableCondition_Destroy( void* variableCondition, void* data )
+{
+	
+}
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void VariableCondition_Apply( void* variableCondition, void* context ) {
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	Index			i;
+	
+	for (i = 0; i < self->indexCount; i++)
+		VariableCondition_ApplyToIndex(variableCondition, self->indexTbl[i], context);
+}
+
+
+void VariableCondition_ApplyToVariable( void* variableCondition, VariableCondition_VariableIndex varIndex, void* context ) {
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	Index			i;
+	
+	for (i = 0; i < self->indexCount; i++)
+		VariableCondition_ApplyToIndexVariable(variableCondition, self->indexTbl[i], varIndex, context);
+}
+
+
+void VariableCondition_ApplyToIndex( void* variableCondition, Index localIndex, void* context ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	Variable*			var;
+	Variable_Index			varIndex;
+	VariableCondition_ValueIndex	val_I;
+	ConditionFunction*		cf;
+	Index				index, i;
+	Stream*				errorStr = Journal_Register( Error_Type, self->type );
+	
+	/* Ensure that the index provided (localIndex) has a condition attached to it */
+	for (index = 0; index < self->indexCount; index++)
+		if (self->indexTbl[index] == localIndex)
+			break;
+	if (index == self->indexCount)
+		return;
+	
+	/* For each variable that has a condition at this index */
+	for (i = 0; i < self->vcVarCountTbl[index]; i++)
+	{
+		varIndex = self->vcTbl[index][i].varIndex;
+		assert( varIndex != (unsigned)-1 );
+		
+		var = self->variable_Register->_variable[varIndex];
+		
+		val_I = self->vcTbl[index][i].valIndex;
+		assert( val_I != (unsigned)-1 );
+		
+		switch (self->valueTbl[val_I].type)
+		{
+			case VC_ValueType_Double:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "double",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueDouble(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeDouble );
+				break;
+			
+			case VC_ValueType_DoubleArray:
+				Variable_SetValue(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeArray.array );
+				break;
+			
+			case VC_ValueType_CFIndex:
+				Journal_Firewall( self->valueTbl[val_I].as.typeCFIndex != (unsigned)-1, errorStr,
+					"Error - in %s: trying to apply to index %d of variable \"%s\", which "
+					"is supposed to be a condition function, but the cond. func. wasn't "
+					"found in the c.f. register.\n", __func__, localIndex, var->name );
+				cf = self->conFunc_Register->_cf[self->valueTbl[val_I].as.typeCFIndex];
+				ConditionFunction_Apply(
+					cf, 
+					localIndex, 
+					varIndex, 
+					context, 
+					Variable_GetStructPtr( var, self->indexTbl[index] ) );
+				break;
+			
+			case VC_ValueType_Int:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "int",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueInt(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeInt );
+				break;
+			
+			case VC_ValueType_Short:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "short",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueShort(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeShort );
+				break;
+			
+			case VC_ValueType_Char:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "char",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueChar(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeChar );
+				break;
+			
+			case VC_ValueType_Ptr:
+				Variable_SetValuePointer(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typePtr );
+				break;
+			
+			default:
+				assert(0);
+				break;
+		}
+	}
+}
+
+
+void VariableCondition_ApplyToIndexVariable(
+		void*				variableCondition, 
+		Index				localIndex, 
+		VariableCondition_VariableIndex	varIndex,
+		void*				context )
+{
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	Variable_Index		globalVarIndex;
+	Variable*		var;
+	ConditionFunction*	cf;
+	Index			index;
+	
+	for (index = 0; index < self->indexCount; index++)
+		if (self->indexTbl[index] == localIndex)
+			break;
+			
+	if (index == self->indexCount)
+		return;
+	
+	globalVarIndex = self->vcTbl[index][varIndex].varIndex;
+	var = self->variable_Register->_variable[globalVarIndex];
+		
+	switch (self->valueTbl[self->vcTbl[index][varIndex].valIndex].type)
+	{
+		case VC_ValueType_Double:
+			Variable_SetValueDouble(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeDouble );
+			break;
+		
+		case VC_ValueType_CFIndex:
+			cf = self->conFunc_Register->_cf[self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeCFIndex];
+			ConditionFunction_Apply( 
+				cf, 
+				localIndex, 
+				globalVarIndex, 
+				context, 
+				Variable_GetStructPtr( var, self->indexTbl[index]) );
+			break;
+		
+		case VC_ValueType_DoubleArray:
+			Variable_SetValue(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeArray.array );
+			break;
+		
+		case VC_ValueType_Int:
+			Variable_SetValueInt(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeInt );
+			break;
+		
+		case VC_ValueType_Short:
+			Variable_SetValueShort(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeShort );
+			break;
+		
+		case VC_ValueType_Char:
+			Variable_SetValueChar(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeChar );
+			break;
+		
+		case VC_ValueType_Ptr:
+			Variable_SetValuePointer(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typePtr );
+			break;
+		
+		default:
+			assert(0);
+			break;
+	}
+}
+
+
+Bool VariableCondition_IsCondition( void* variableCondition, Index localIndex, Variable_Index varIndex ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_VariableIndex	vcVar_I;
+	Index				i;
+	
+
+	/* if the set isn't initialised, this is a NULL BC : False */
+	if ( !self->_set ) {
+		return False;
+	}
+
+	/* first check if the index they've given us is actually in the list this VC applies to */
+	/* quick check, since we have the set available */
+	if ( localIndex >= self->_set->size ) {
+		Stream* warning = Journal_Register( ErrorStream_Type, self->type );
+		Journal_Printf( warning, "Error- In %s: Tried to check an index %d larger than the size of "
+			"the set (%d).\n", __func__, localIndex, self->_set->size );
+		assert(0);	
+		return False;
+	}
+	if ( !IndexSet_IsMember( self->_set, localIndex ) ) {
+		return False;
+	}
+	for (i = 0; i < self->indexCount; i++)
+		if (self->indexTbl[i] == localIndex)
+			break;
+			
+	if (i == self->indexCount)
+		return False;
+	
+	/* now check if the Variable they've given us is actually in the list to apply at the given index */
+	for (vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++)
+		if (self->vcTbl[i][vcVar_I].varIndex == varIndex)
+			return True;
+	
+	return False;
+}
+
+
+VariableCondition_ValueIndex VariableCondition_GetValueIndex (void* variableCondition, Index localIndex, Variable_Index varIndex )
+{
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_VariableIndex	vcVar_I;
+	Index				i;
+	
+	/* if the set isn't initialised, this is a NULL BC : False */
+	if ( !self->_set ) {
+		return False;
+	}
+
+	/* first check if the index they've given us is actually in the list this VC applies to */
+	/* quick check, since we have the set available */
+	if ( localIndex >= self->_set->size ) {
+		Stream* warning = Journal_Register( ErrorStream_Type, self->type );
+		Journal_Printf( warning, "Error- In %s: Tried to check an index %d larger than the size of "
+			"the set (%d).\n", __func__, localIndex, self->_set->size );
+		assert(0);	
+		return False;
+	}
+	if ( !IndexSet_IsMember( self->_set, localIndex ) ) {
+		return (VariableCondition_ValueIndex)-1;
+	}
+	for (i = 0; i < self->indexCount; i++)
+		if (self->indexTbl[i] == localIndex)
+			break;
+			
+	if (i == self->indexCount)
+		return (VariableCondition_ValueIndex)-1;
+	
+	/* now check if the Variable they've given us is actually in the list to apply at the given index */
+	for (vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++)
+		if (self->vcTbl[i][vcVar_I].varIndex == varIndex)
+			return self->vcTbl[i][vcVar_I].valIndex;
+	
+	return (VariableCondition_ValueIndex)-1;
+}
+
+
+void VariableCondition_PrintConcise( void* variableCondition, Stream* stream ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	
+	self->_printConcise( self, stream );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,243 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 for specifying (1 or more) conditions that apply to (1 or more) variables in an array.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: VariableCondition.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_VariableCondition_h__
+#define __Base_Automation_VariableCondition_h__
+	
+	/** Textual name of this class */
+	extern const Type VariableCondition_Type;
+	
+	typedef void				(VariableCondition_BuildSelfFunc)		( void* variableCondition, void* data );
+	typedef void				(VariableCondition_PrintConciseFunc)		( void* variableCondition, Stream* stream );
+	typedef void				(VariableCondition_ReadDictionaryFunc)		( void* variableCondition, void* dictionary );
+	typedef IndexSet*			(VariableCondition_GetSetFunc)			( void* variableCondition );
+	typedef VariableCondition_VariableIndex	(VariableCondition_GetVariableCountFunc)	( void* variableCondition, Index index );
+	typedef Variable_Index			(VariableCondition_GetVariableIndexFunc)	( void* variableCondition, Index index, VariableCondition_VariableIndex condVar_I );
+	typedef VariableCondition_ValueIndex	(VariableCondition_GetValueIndexFunc)		( void* variableCondition, Index index, VariableCondition_VariableIndex condVar_I );
+	typedef VariableCondition_ValueIndex	(VariableCondition_GetValueCountFunc)		( void* variableCondition );
+	typedef VariableCondition_Value		(VariableCondition_GetValueFunc)		( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	
+	typedef struct {
+		Index			size;
+		double*			array;
+	} VariableCondition_Value_Array;
+	
+	typedef union { 
+		double				typeDouble;
+		int				typeInt;
+		short				typeShort;
+		char				typeChar;
+		void*				typePtr;
+		VariableCondition_Value_Array	typeArray;
+		ConditionFunction_Index		typeCFIndex;
+	} VariableCondition_Value_AsType;
+	
+	#define __VariableCondition_Value \
+		VariableCondition_ValueType	type; \
+		VariableCondition_Value_AsType	as;
+	struct _VariableCondition_Value { __VariableCondition_Value };
+	
+	
+	#define __VariableCondition_Tuple \
+		/** The variable index into VariableCondition::variable_Register identifying a variable */ \
+		Variable_Index				varIndex; \
+		/** The value index into VariableCondition::valueTbl identifying a value to apply to the variable */ \
+		VariableCondition_ValueIndex		valIndex; \
+	
+	/** Used to relate which Condition is applied to a Variable */
+	struct _VariableCondition_Tuple { __VariableCondition_Tuple };
+	
+	
+	#define __VariableCondition \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		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; \
+		\
+		/* Stg_Class info */ \
+		/** Register of Variables that may be operated on. */ \
+		Variable_Register*				variable_Register; \
+		/** Register of Condition functions that may be applied. */ \
+		ConditionFunction_Register*			conFunc_Register; \
+		Dictionary*					dictionary; \
+		\
+		/** Set specifying which indexes in the client structure are being controlled by this VC. */ \
+		IndexSet*					_set; \
+		/** the number of indexes this VC applies to. */ \
+		Index						indexCount; \
+		/** Array, of size indexCount, containing the indexes this VC applies to. */ \
+		Index*						indexTbl; \
+		/** Array containing the number of variables at each index that are controlled by this VC */ \
+		VariableCondition_VariableIndex*		vcVarCountTbl; \
+		/** 2d Array, which for each index this VC controls, stores the VariableCondition_Tuple that relates
+		what condition is being applied to which Variable */ \
+		VariableCondition_Tuple**			vcTbl; \
+		/** Number of values in the valueTbl which will be applied somewhere using this VC */ \
+		VariableCondition_ValueIndex			valueCount; \
+		/** Array of values which are available to apply (which index/var pairs they apply to is determined
+		by VariableCondition::vcTbl). */ \
+		VariableCondition_Value*			valueTbl; \
+	
+	/** Abstract class for specifying (1 or more) conditions that apply to (1 or more) variables in an array - 
+	see VariableCondition.h for details */
+	struct _VariableCondition { __VariableCondition };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		_VariableCondition_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,
+						Variable_Register*				variable_Register,
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	void				_VariableCondition_Init(
+						void*						variableCondition, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_VariableCondition_Delete( void* variableCondition );
+	
+	void				_VariableCondition_Print( void* variableCondition );
+	
+	/* Copy */
+	#define VariableCondition_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define VariableCondition_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _VariableCondition_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	void				_VariableCondition_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* d );
+	void				_VariableCondition_Build( void* variableCondition, void* data );
+	void				_VariableCondition_Initialise( void* variableCondition, void* data );
+	void				_VariableCondition_Execute( void* variableCondition, void* data );
+	void				_VariableCondition_Destroy( void* variableCondition, void* data );
+	
+	#define VariableCondition_BuildSelf( self, data ) \
+		if( (self)->_buildSelf ) \
+			(self)->_buildSelf( self, data )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	void				VariableCondition_Apply( void* variableCondition, void* context );
+	
+	void				VariableCondition_ApplyToVariable(
+						void*				variableCondition,
+						VariableCondition_VariableIndex	varIndex, 
+						void*				context );
+	
+	void				VariableCondition_ApplyToIndex( void* variableCondition, Index globalIndex, void* context );
+	
+	void				VariableCondition_ApplyToIndexVariable(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex,
+						void*				context );
+	
+	/** Checks whether a given (node)/(var at that node) pair is a variable condition */
+	Bool				VariableCondition_IsCondition(
+						void*		variableCondition,
+						Index		globalIndex, 
+						Variable_Index	varIndex );
+	
+	VariableCondition_ValueIndex	VariableCondition_GetValueIndex(
+						void*		variableCondition, 
+						Index		globalIndex, 
+						Variable_Index	varIndex );
+	
+	void				VariableCondition_PrintConcise( void* variableCondition, Stream* stream );
+	
+#endif /* __Base_Automation_VariableCondition_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">VariableCondition</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/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>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: VariableCondition_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "VariableCondition_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type VariableCondition_Register_Type = "VariableCondition_Register";
+
+
+/* Global, default instantiation of the register... will be loaded with in built types (built in Init.c) */
+VariableCondition_Register* variableCondition_Register = 0;
+
+
+VariableCondition_Register* VariableCondition_Register_New(void) {
+	return _VariableCondition_Register_New( sizeof(VariableCondition_Register), VariableCondition_Register_Type, _VariableCondition_Register_Delete, _VariableCondition_Register_Print, NULL );
+}
+
+void VariableCondition_Register_Init( void* variableCondition_Register ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	
+	/* General info */
+	self->type = VariableCondition_Register_Type;
+	self->_sizeOfSelf = sizeof(VariableCondition_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _VariableCondition_Register_Delete;
+	self->_print = _VariableCondition_Register_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* VariableCondition_Register info */
+	_VariableCondition_Register_Init( self );
+}
+
+VariableCondition_Register* _VariableCondition_Register_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy )
+{
+	VariableCondition_Register* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(VariableCondition_Register) );
+	self = (VariableCondition_Register*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	_VariableCondition_Register_Init( self );
+	
+	return self;
+}
+
+void _VariableCondition_Register_Init( void* variableCondition_Register ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	
+	/* General and Virtual info should already be set */
+	
+	/* VariableCondition_Register info */
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->entry = Memory_Alloc_Array( VariableCondition_Register_Entry, self->_size, "VC_Register->entry" );
+	memset( self->entry, 0, sizeof(VariableCondition_Register_Entry) * self->_size );
+}
+
+void _VariableCondition_Register_Delete( void* variableCondition_Register ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	
+	/* Assumes ownerships of the element types */
+	if( self->entry ) {
+		Memory_Free( self->entry );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _VariableCondition_Register_Print( void* variableCondition_Register, Stream* stream ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	#ifdef DEBUG
+		VariableCondition_Index variableCondition_I;
+	#endif
+	
+	/* Set the Journal for printing informations */
+	Stream* variableCondition_RegisterStream = stream;
+	
+	/* General info */
+	Journal_Printf( variableCondition_RegisterStream, "VariableCondition_Register (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, variableCondition_RegisterStream );
+	
+	/* Virtual info */
+	
+	/* VariableCondition_Register info */
+	Journal_Printf( variableCondition_RegisterStream, "\tcount: %u\n", self->count );
+	Journal_Printf( variableCondition_RegisterStream, "\t_size: %lu\n", self->_size );
+	Journal_Printf( variableCondition_RegisterStream, "\t_delta: %lu\n", self->_delta );
+	
+	Journal_Printf( variableCondition_RegisterStream, "\tvariableCondition (ptr): %p\n", self->entry );
+	Journal_Printf( variableCondition_RegisterStream, "\tvariableCondition[0-%u]:\n", self->count );
+	#ifdef DEBUG
+		for( variableCondition_I = 0; variableCondition_I < self->count; variableCondition_I++ ) {
+			Journal_Printf( variableCondition_RegisterStream, "\tentry[%u]:\n", variableCondition_I );
+			Journal_Printf( variableCondition_RegisterStream, "\t\ttype: %s\n", self->entry[variableCondition_I].type );
+			Journal_Printf( variableCondition_RegisterStream, "\t\tfactory (func ptr): %p\n", self->entry[variableCondition_I].factory );
+		}
+	#else
+		Journal_Printf( variableCondition_RegisterStream, "...\n" );
+	#endif
+	Journal_Printf( variableCondition_RegisterStream, "\t]\n" );
+}
+
+VariableCondition_Index VariableCondition_Register_Add(
+		void*					variableCondition_Register, 
+		Type					type, 
+		VariableCondition_Register_FactoryFunc*	factory )
+{
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	VariableCondition_Index	handle;
+	
+	if( self->count >= self->_size ) {
+		SizeT currentSize = self->_size;
+
+		self->_size += self->_delta;
+		self->entry = Memory_Realloc_Array( self->entry, VariableCondition_Register_Entry, self->_size );
+		memset( (Pointer)((ArithPointer)self->entry + (currentSize * sizeof(VariableCondition_Register_Entry)) ),
+			0, sizeof(VariableCondition_Register_Entry) * (self->_size - currentSize) );
+	}
+	
+	handle = self->count;
+	self->entry[handle].type = type;
+	self->entry[handle].factory = factory;
+	self->count++;
+	
+	return handle;
+}
+
+VariableCondition_Index VariableCondition_Register_GetIndex( void* variableCondition_Register, Type type ) {
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	VariableCondition_Index variableCondition_I;
+	
+	for( variableCondition_I = 0; variableCondition_I < self->count; variableCondition_I++ ) {
+		if( self->entry[variableCondition_I].type == type ) {
+			return variableCondition_I;
+		}
+	}
+	/* type is likely to be given from input file in this case... treat comparison checks like for Name... do strcmp too */
+	for( variableCondition_I = 0; variableCondition_I < self->count; variableCondition_I++ ) {
+		if( strcmp( self->entry[variableCondition_I].type, type ) == 0 ) {
+			return variableCondition_I;
+		}
+	}
+	return (unsigned)-1;
+}
+
+VariableCondition_Register_Entry* _VariableCondition_Register_At( 
+		void*					variableCondition_Register, 
+		VariableCondition_Index			handle ) 
+{
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	
+	return VariableCondition_Register_At( self, handle );
+}
+
+VariableCondition* VariableCondition_Register_CreateNew(
+				void* variableCondition_Register, 
+				void* variable_Register, 
+				void* conFunc_Register, 
+				Type type, 
+				void* dictionary, 
+				void* data )
+{
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	
+	return VariableCondition_Register_At( self, VariableCondition_Register_GetIndex( self, type ) )->factory( 
+		(Variable_Register*)variable_Register,
+		(ConditionFunction_Register*)conFunc_Register,
+		(Dictionary*)dictionary,
+		data );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	The original sizes need to be manually set by the user.... this whole system needs rethinking... it can be done better
+**
+** $Id: VariableCondition_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_VariableCondition_Register_h__
+#define __Base_Automation_VariableCondition_Register_h__
+	
+
+	/* Child classes must define these factories */
+	typedef VariableCondition*	(VariableCondition_Register_FactoryFunc)	( Variable_Register* variable_Register, ConditionFunction_Register* conFunc_Register, Dictionary* dictionary, void* data );
+	
+	
+	/** Textual name of this class */
+	extern const Type VariableCondition_Register_Type;
+	
+	
+	/** Global, default instantiation of the register... will be loaded with in built types (built in Init.c) */
+	extern VariableCondition_Register* variableCondition_Register;
+	
+	
+	/* Register entry info */
+	#define __VariableCondition_Register_Entry \
+		Type					type; \
+		VariableCondition_Register_FactoryFunc*	factory;
+	struct _VariableCondition_Register_Entry { __VariableCondition_Register_Entry };
+	
+	
+	/* VariableCondition_Register info */
+	#define __VariableCondition_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* VariableCondition_Register info */ \
+		VariableCondition_Index			count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		VariableCondition_Register_Entry*	entry;
+	struct _VariableCondition_Register { __VariableCondition_Register };
+	
+	
+	/* Create a new VariableCondition_Register */
+	VariableCondition_Register* VariableCondition_Register_New(void);
+	
+	/* Initialise a VariableCondition_Register */
+	void VariableCondition_Register_Init(
+			void*				variableCondition_Register);
+	
+	/* Creation implementation / Virtual constructor */
+	VariableCondition_Register* _VariableCondition_Register_New( 
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy );
+	
+	/* Initialisation implementation */
+	void _VariableCondition_Register_Init( void* variableCondition_Register);
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _VariableCondition_Register_Delete( void* variableCondition_Register );
+	
+	/* Print implementation */
+	void _VariableCondition_Register_Print( void* variableCondition_Register, Stream* stream );
+	
+	
+	/* Add a new entry */
+	VariableCondition_Index VariableCondition_Register_Add( 
+		void*					variableCondition_Register, 
+		Type					type, 
+		VariableCondition_Register_FactoryFunc*	factory );
+	
+	/* Get the handle to an entry */
+	VariableCondition_Index VariableCondition_Register_GetIndex( void* variableCondition_Register, Type type );
+	
+	/* Get an entry from the register */
+	#define VariableCondition_Register_At( variableCondition_Register, handle ) \
+		( &(variableCondition_Register)->entry[(handle)] )
+	VariableCondition_Register_Entry* _VariableCondition_Register_At( 
+		void*					variableCondition_Register, 
+		VariableCondition_Index			handle );
+	
+	/* Create a new instance of a type */
+	VariableCondition* VariableCondition_Register_CreateNew(
+				void* variableCondition_Register, 
+				void* variable_Register, 
+				void* conFunc_Register, 
+				Type type, 
+				void* dictionary, 
+				void* data );
+	
+#endif /* __Base_Automation_VariableCondition_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: VariableDumpStream.c 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+                                                                                                                                    
+#include "types.h"
+#include "Stg_Component.h"
+#include "Variable.h"
+#include "VariableDumpStream.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+const Type VariableDumpStream_Type = "VariableDumpStream";
+
+
+Stream* VariableDumpStream_New( Name name )
+{
+	return (Stream*)_VariableDumpStream_New( 
+		sizeof(VariableDumpStream), 
+		VariableDumpStream_Type, 
+		_VariableDumpStream_Delete, 
+		_VariableDumpStream_Print, 
+		_VariableDumpStream_Copy, 
+		name,
+		_CStream_Printf,
+		_CStream_Write,
+		_VariableDumpStream_Dump,
+		_CStream_SetFile );
+}
+
+void VariableDumpStream_Init( VariableDumpStream* self, Name name )
+{
+	
+}
+
+
+VariableDumpStream* _VariableDumpStream_New( 
+	SizeT			_sizeOfSelf, 
+	Type			type, 
+	Stg_Class_DeleteFunction*	_delete, 
+	Stg_Class_PrintFunction* 	_print,
+	Stg_Class_CopyFunction*	_copy, 
+	Name			name,
+	Stream_PrintfFunction*	_printf, 
+	Stream_WriteFunction*	_write, 
+	Stream_DumpFunction*	_dump,
+	Stream_SetFileFunction*	_setFile )
+{
+	VariableDumpStream* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(VariableDumpStream) );
+	self = (VariableDumpStream*)_CStream_New( _sizeOfSelf, type, _delete, _print, _copy, name, 
+		_printf, _write, _dump, _setFile );
+	
+	_VariableDumpStream_Init( self );
+	
+	return self;
+}
+
+void _VariableDumpStream_Init( VariableDumpStream* self )
+{
+	self->data = NULL;
+	self->numItems = 0;
+}
+	
+void _VariableDumpStream_Delete( void* cStream )
+{
+	VariableDumpStream* self = (VariableDumpStream*)cStream;
+	
+	/* Stg_Class_Delete parent */
+	_Stream_Delete( self );
+}
+
+void _VariableDumpStream_Print( void* cStream, Stream* stream ) {
+
+	VariableDumpStream* self = (VariableDumpStream*)cStream;
+	
+	/* Print parent */
+	_Stream_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream,  "VariableDumpStream (ptr): %p\n", cStream);
+	
+	Journal_Printf( stream, "data (ptr): %p\n", self->data );
+	Journal_Printf( stream, "numItems: %d\n", self->numItems );
+}
+
+void* _VariableDumpStream_Copy( void* variableDumpStream, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	VariableDumpStream*	self = (VariableDumpStream*)variableDumpStream;
+	VariableDumpStream*	newVariableDumpStream;
+	
+	newVariableDumpStream = _Stream_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* HACK */
+	/* TODO: this should actually copy the data, i think... */
+	newVariableDumpStream->data = NULL;
+	newVariableDumpStream->numItems = 0;
+	/* END HACK */
+	newVariableDumpStream->dumpEvery = self->dumpEvery;
+	
+	return newVariableDumpStream;
+}
+
+Bool _VariableDumpStream_Dump( Stream* stream, void* _loop )
+{
+	VariableDumpStream* self = (VariableDumpStream*)stream;
+	int varI, typeI;
+	int* loop = (int*)_loop;
+	float tmp;
+	
+	
+	if ( self->data == NULL || self->numItems == 0 )
+	{
+		return True;
+	}
+	if ( loop != NULL )
+	{
+		if( !((*loop) == 0 || (((*loop) - 1) % self->dumpEvery == 0)) )
+			return True;
+	}
+
+	/* testing if the others compile....
+	char tmp1 = Variable_GetValueAsChar( self->data, varI );
+	short tmp2 = Variable_GetValueAsShort( self->data, varI );
+	int tmp3 = Variable_GetValueAsInt( self->data, varI );
+	double tmp4 = Variable_GetValueAsDouble( self->data, varI );
+	void* tmp5 = Variable_GetValueAsPointer( self->data, varI );*/
+	for ( varI = 0; varI < self->data->arraySize; ++varI ) {
+		if ( *self->data->dataTypeCounts > 1 ) {
+			for ( typeI = 0; typeI < *self->data->dataTypeCounts; ++typeI ) {
+				tmp = Variable_GetValueAtDoubleAsFloat( self->data, varI, typeI );
+				self->_write(
+					stream,
+					&tmp,
+					sizeof(float), 1 );
+			}
+		}
+		else {
+			tmp = Variable_GetValueDoubleAsFloat( self->data, varI );
+			self->_write(
+				stream,
+				&tmp,
+				sizeof(float), 1 );
+		}
+	}
+
+
+	return True;
+}
+
+void VariableDumpStream_SetVariable( void* stream, Variable* data, int numItems, unsigned int dumpEvery, char* fileName )
+{
+	VariableDumpStream* self = (VariableDumpStream*)stream;
+	JournalFile* file;
+	
+	self->data = data;
+	self->numItems = numItems;
+	self->dumpEvery = dumpEvery;
+	
+	file = Journal_GetFile( fileName );
+	if ( file == NULL )
+	{
+		file = CFile_New2( fileName );
+		Journal_RegisterFile( file );
+	}
+	Stream_SetFile( stream, file );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**
+**
+** <b>Assumptions</b>
+**	None
+**
+** <b>Comments</b>
+**	None
+**
+** <b>Description</b>
+**
+**
+** Comments:
+**
+** $Id: VariableDumpStream.h 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_IO_VariableDumpStream_h__
+#define __Base_IO_VariableDumpStream_h__
+	
+	/** Textual name for VariableDumpStream class. */
+	extern const Type VariableDumpStream_Type;
+	
+	
+	/** \def __VariableDumpStream See VariableDumpStream. */
+	#define __VariableDumpStream \
+		/* General info */ \
+		__CStream \
+		Variable*	data; \
+		Index		numItems; \
+		unsigned int	dumpEvery;
+	struct VariableDumpStream { __VariableDumpStream };
+
+
+	/** Create a new VariableDumpStream */
+	Stream* VariableDumpStream_New( Name name );
+
+	/** Inits a VariableDumpStream. */
+	void VariableDumpStream_Init( VariableDumpStream* self, Name name );
+
+	/** Constructor interface. */
+	VariableDumpStream* _VariableDumpStream_New( 
+		SizeT			_sizeOfSelf, 
+		Type			type, 
+		Stg_Class_DeleteFunction*	_delete, 
+		Stg_Class_PrintFunction* 	_print,
+		Stg_Class_CopyFunction*	_copy, 
+		Name			name,
+		Stream_PrintfFunction*	_printf, 
+		Stream_WriteFunction*	_write, 
+		Stream_DumpFunction*	_dump,
+		Stream_SetFileFunction*	_setFile );
+
+	/** Init interface. */
+	void _VariableDumpStream_Init( VariableDumpStream *self );
+	
+	/** Stg_Class_Delete interface. */
+	void _VariableDumpStream_Delete( void* vStream );
+	
+	/** Print interface. */
+	void _VariableDumpStream_Print( void* vStream, Stream* stream );
+
+	/** Dumps the variable. */ 
+	Bool _VariableDumpStream_Dump( Stream* stream, void* loop );
+	
+	/** Copy interface. */
+	#define VariableDumpStream_Copy( self ) \
+		(VariableDumpStream*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define VariableDumpStream_DeepCopy( self ) \
+		(VariableDumpStream*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _VariableDumpStream_Copy( void* variableDumpStream, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+	/** Sets the information that this stream dumps. */
+	void VariableDumpStream_SetVariable( void* stream, Variable* data, int numItems, unsigned int dumpEvery, char* fileName );
+	
+	
+#endif /* __IO_VariableDumpStreamFile_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,268 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Variable_Register.c 3879 2006-10-26 01:32:33Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+const Type Variable_Register_Type = "Variable_Register";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+Variable_Register* Variable_Register_New(void)
+{ 
+	return _Variable_Register_New( sizeof(Variable_Register), Variable_Register_Type, _Variable_Register_Delete,
+		_Variable_Register_Print, _Variable_Register_Copy );
+}
+
+
+void Variable_Register_Init(Variable_Register* self)
+{ 
+	/* General info */
+	self->type = Variable_Register_Type;
+	self->_sizeOfSelf = sizeof(Variable_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Variable_Register_Delete;
+	self->_print = _Variable_Register_Print;
+	self->_copy = _Variable_Register_Copy;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_Variable_Register_Init(self);
+}
+
+
+Variable_Register* _Variable_Register_New( 
+			SizeT			_sizeOfSelf,
+			Type			type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print, 
+			Stg_Class_CopyFunction*	_copy )
+{
+	Variable_Register*	self;
+	
+	/* Allocate memory */
+	self = (Variable_Register*)_Stg_Class_New(_sizeOfSelf, type, _delete, _print, _copy);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	_Variable_Register_Init(self);
+	
+	return self;
+}
+
+
+void _Variable_Register_Init(void* variable_Register)
+{ 
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->_variable = Memory_Alloc_Array( Variable*, self->_size, "Variable_Register->_variable" );
+	memset(self->_variable, 0, sizeof(Variable*)*self->_size);
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _Variable_Register_Delete(void* variable_Register)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	
+	if (self->_variable) Memory_Free(self->_variable);
+
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(self);
+}
+
+void _Variable_Register_Print(void* variable_Register, Stream* stream)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	
+	/* Set the Journal for printing informations */
+	Stream* variable_RegisterStream = Journal_Register( InfoStream_Type,	"Variable_RegisterStream");
+	
+	/* General info */
+	Journal_Printf( variable_RegisterStream, "Variable_Register (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( variable_RegisterStream, "\tcount: %u\n", self->count);
+	Journal_Printf( variable_RegisterStream, "\t_size: %lu\n", self->_size);
+	Journal_Printf( variable_RegisterStream, "\t_delta: %lu\n", self->_delta);
+	Journal_Printf( variable_RegisterStream, "\t_variable (ptr): %p\n", self->_variable);
+	if (self->_variable)
+	{
+		Variable_Index	var_I;
+		
+		for (var_I = 0; var_I < self->count; var_I++)
+			Print(self->_variable[var_I], stream);
+	}
+	
+	/* Print parent */
+	_Stg_Class_Print(self, variable_RegisterStream);
+}
+
+void* _Variable_Register_Copy( void* vr, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+
+	Variable_Register* self = (Variable_Register*)vr;
+	Variable_Register* newVariableRegister;
+	int ii;
+
+	newVariableRegister = (Variable_Register*)_Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newVariableRegister );
+
+	newVariableRegister->count = self->count;
+	newVariableRegister->_size = self->_size;
+	newVariableRegister->_variable = Memory_Alloc_Array( Variable*, self->_size, "Variable_Register->_variable" );
+	memset(newVariableRegister->_variable, 0, sizeof(Variable*)*self->_size);
+
+	for ( ii = 0; ii < self->count; ++ii ) {
+		if ( (newVariableRegister->_variable[ii] = PtrMap_Find( ptrMap, self->_variable[ii] )) == NULL ) {
+			newVariableRegister->_variable[ii] = Stg_Class_Copy( self->_variable[ii], NULL, deep, nameExt, ptrMap );
+		}
+	}
+
+	return newVariableRegister;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+Variable_Index Variable_Register_Add(void* variable_Register, Variable* variable)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		handle;
+	
+	if (self->count >= self->_size)
+	{
+		SizeT currentSize = self->_size;
+
+		self->_size += self->_delta;
+		self->_variable = Memory_Realloc_Array( self->_variable, Variable*, self->_size );
+		memset( (Pointer)((ArithPointer)self->_variable + (currentSize * sizeof(Variable*)) ), 0, 
+			sizeof(Variable*) * (self->_size - currentSize) );
+	}
+	
+	handle = self->count++;
+	self->_variable[handle] = variable;
+
+	return handle;
+}
+
+
+void Variable_Register_BuildAll(void* variable_Register)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		var_I;
+	
+	for (var_I = 0; var_I < self->count; var_I++)
+		Build( self->_variable[var_I], 0, False );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+Variable_Index Variable_Register_GetIndex(void* variable_Register, Name name)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		var_I;
+	
+	for (var_I = 0; var_I < self->count; var_I++)
+	{
+		if (self->_variable[var_I]->name && !strcmp(name, self->_variable[var_I]->name))
+			return var_I;
+	}
+	
+	return (Variable_Index)-1;
+}
+
+
+Variable* Variable_Register_GetByName(void* variable_Register, Name name)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		varIndex;
+	
+	if( (varIndex = Variable_Register_GetIndex( self, name )) != (Variable_Index)-1 )
+		return self->_variable[varIndex];
+	
+	return NULL;
+}
+
+
+Variable* Variable_Register_GetByIndex(void* variable_Register, Variable_Index varIndex ) {
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	#if DEBUG
+	Stream*			error = Journal_Register( ErrorStream_Type, self->type );
+	
+	Journal_DFirewall(  (varIndex < self->count), error,
+		"Error: Given variable index %d not between 0 and variable count %d.\n",
+		varIndex, self->count );
+	#endif
+		
+	return  self->_variable[varIndex];
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Instantiates the Variable_Register such that there is only one set of DOF descriptions (for example, all the nodes have the same
+**	DOF configuration).
+**
+** Assumptions:
+**	All "adding" is done before the Variable_Register_Build(...), which will be done in the mesh's initialisation.
+**
+** Comments:
+**	You "add" DOF descriptors by using the Variable_Register_Add( variable_Register, name, offset ), where the "name" is the
+**	textual name for the DOF that will be used in the I/O of the DOF (e.g. for initial and boundary conditions), and "offset" is
+**	the memory offset of the DOF in the construct that it will be used (e.g. node.vel[0]-node ).
+**
+** $Id: Variable_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Variable_Register_h__
+#define __Base_Automation_Variable_Register_h__
+	
+	
+	extern const Type Variable_Register_Type;
+	
+	
+	#define __Variable_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		/** Total number of variables counted */ \
+		Variable_Index				count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		Variable**				_variable; \
+		
+	struct _Variable_Register { __Variable_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	Variable_Register*	Variable_Register_New(void);
+	
+	void			Variable_Register_Init(Variable_Register* self);
+	
+	Variable_Register*	_Variable_Register_New( 
+					SizeT			_sizeOfSelf,
+					Type			type,
+					Stg_Class_DeleteFunction*	_delete,
+					Stg_Class_PrintFunction*	_print, 
+					Stg_Class_CopyFunction*	_copy );
+		
+	void			_Variable_Register_Init(void* variable_Register);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void	_Variable_Register_Delete(void* variable_Register);
+	
+	void	_Variable_Register_Print(void* variable_Register, Stream* stream);
+
+	void*	_Variable_Register_Copy( void* vr, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	/* Add a variable... do before building */
+	Variable_Index	Variable_Register_Add(void* variable_Register, Variable* variable);
+	
+	void		Variable_Register_BuildAll(void* variable_Register);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Functions & Macros
+	*/
+	
+	Variable_Index	Variable_Register_GetIndex(void* variable_Register, Name name);
+
+	Variable*	Variable_Register_GetByName(void* variable_Register, Name name);
+
+	Variable*	Variable_Register_GetByIndex( void* variable_Register, Variable_Index varIndex);	
+	
+#endif /* __Base_Automation_Variable_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.rules 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseContainer ${RPATH_LFLAGS}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Macros for calculating offsets of members in structs and arrays.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: offsets.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_offsets_h__
+#define __Base_Automation_offsets_h__
+
+	/** Given a struct object and the name of a member, return the member */
+	#define GetMember( structVar, member ) \
+		( (structVar).member )
+
+	/** Given an array object and an index into the array, return the indexed item */
+	#define GetIndex( arrayVar, index ) \
+		( (arrayVar)[(index)] )
+
+	/** Given a struct object and the name of a member, work out the offset of that member in the struct. */
+	#define GetOffsetOfMember( structVar, member ) \
+		( (ArithPointer)&( GetMember( (structVar), member ) ) - (ArithPointer)&(structVar) )
+
+	/** Given an array object and an index into the array, work out the offset of that index in the array */
+	#define GetOffsetOfIndex( arrayVar, index ) \
+		( (ArithPointer)&( GetIndex( (arrayVar), (index) ) ) - (ArithPointer)&(arrayVar) )
+
+	/** Given a struct object, the name of an array member and an index into the array, work out the offset of that index in
+	    the struct */
+	#define GetOffsetOfMemberArrayIndex( structVar, arrayMember, index ) \
+		( GetOffsetOfMember( (structVar), arrayMember ) + GetOffsetOfIndex( (structVar).arrayMember, (index) ) )
+
+	/** Given an array object, the index of a struct item and a name of a member, work out the offset of that member in the
+	    array */
+	#define GetOffsetOfIndexStructMember( arrayVar, structIndex, member ) \
+		( GetOffsetOfIndex( (arrayVar), (structIndex) ) + \
+		  GetOffsetOfMember( GetIndex( (arrayVar), (structIndex) ), (index) ) )
+
+#endif /* __Base_Automation_offsets_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 __Base_Automation_shortcuts_h__
+#define __Base_Automation_shortcuts_h__
+	
+	/* VTK uses Stg_Class_Delete as a standard class member...so if an app
+	uses St. G and VTK, then we can't use this macro */
+	#ifndef __vtkObject_h
+		#define Build			Stg_Component_Build
+		#define Initialise		Stg_Component_Initialise
+		#define Execute			Stg_Component_Execute
+	#endif
+	
+#endif /* __Base_Automation_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Types for the Automation layer
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3614 2006-06-01 08:58:48Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_types_h__
+#define __Base_Automation_types_h__
+
+	/* types/classes */
+	typedef struct Stg_Component			Stg_Component;
+	typedef struct Stg_ComponentMeta                Stg_ComponentMeta;
+	typedef struct Stg_ComponentMeta_Value          Stg_ComponentMeta_Value;
+	typedef struct Stg_ComponentRegisterElement     Stg_ComponentRegisterElement;
+	typedef struct Stg_ComponentRegister            Stg_ComponentRegister;
+	typedef struct LiveComponentRegister            LiveComponentRegister;
+	typedef struct Stg_ComponentFactory		Stg_ComponentFactory;
+	typedef struct DocumentationComponentFactory    DocumentationComponentFactory;
+	typedef struct HierarchyTable                   HierarchyTable;
+	typedef struct Stg_CallGraph			Stg_CallGraph;
+	typedef struct _Variable			Variable;
+	typedef struct _Variable_Register		Variable_Register;
+	typedef struct VariableDumpStream		VariableDumpStream;
+	typedef struct _VariableCondition		VariableCondition;
+	typedef struct _SetVC				SetVC;
+	typedef struct _CompositeVC			CompositeVC;
+	typedef struct _VariableCondition_Register	VariableCondition_Register;
+	typedef struct _ConditionFunction		ConditionFunction;
+	typedef struct _ConditionFunction_Register	ConditionFunction_Register;
+
+	typedef struct _VariableAllVC_Entry		VariableAllVC_Entry;
+	typedef struct _VariableAllVC			VariableAllVC;
+	typedef Index					VariableAllVC_Entry_Index;
+
+	/* Variable_Register types */
+	typedef Index					Variable_Set_Index;
+	typedef Index					Variable_Index;
+	typedef Index					Dof_Index;
+	
+	/* VariableCondition_Register types */
+	typedef struct _VariableCondition_Register_Entry VariableCondition_Register_Entry;
+	
+	/* VariableCondition types */
+	typedef enum
+	{
+		VC_ValueType_Double = 1,
+		VC_ValueType_Int,
+		VC_ValueType_Short,
+		VC_ValueType_Char,
+		VC_ValueType_Ptr,
+		VC_ValueType_DoubleArray,
+		VC_ValueType_CFIndex
+	} VariableCondition_ValueType;
+	
+	typedef struct SearchCriteria_t{
+		Name type;
+		Name version;	
+	}SearchCriteria;
+
+	typedef Index					VariableCondition_Index;
+	typedef struct _VariableCondition_Value		VariableCondition_Value;
+	typedef struct _VariableCondition_Tuple		VariableCondition_Tuple;
+	typedef Index					VariableCondition_ValueIndex;
+	typedef Index					ConditionFunction_Index;
+	typedef Index					VariableCondition_VariableIndex;
+
+	typedef struct _SetVC_Entry			SetVC_Entry;
+	typedef Index					SetVC_Entry_Index;
+	
+	/* CompositeVC types */
+	typedef Index					CompositeVC_ItemIndex;
+	
+	typedef void* (Stg_Component_Constructor) ( Name );
+	typedef void (Stg_Component_LoadFromDict) ( void*, Dictionary*, Dictionary*, Stg_ObjectList* );
+
+#endif /* __Base_Automation_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3614 2006-06-01 08:58:48Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseAutomation
+
+def_srcs = \
+	testComponentCopy.c \
+	testLiveComponentRegister.c \
+	testVariable.c \
+	testVariable-Char.c \
+	testVariable-Short.c \
+	testVariable-Int.c \
+	testVariable-Float.c \
+	testVariable-Double.c \
+	testVariable_Register.c \
+	testVariableDumpStream.c \
+	testVariableValueCompare.c \
+	testVariableCopy.c \
+	testSetVC.c \
+	testConditionFunction.c \
+	testConditionFunction_Register.c \
+	testHierarchyTable.c \
+	testCallGraph.c \
+	testVariableAllVC.c \
+	testComponentMetadata.c
+	
+def_checks = \
+	testComponentCopy.0of1.sh \
+	testLiveComponentRegister.0of1.sh \
+	testVariable.0of1.sh \
+	testVariable-Char.0of1.sh \
+	testVariable-Short.0of1.sh \
+	testVariable-Int.0of1.sh \
+	testVariable-Float.0of1.sh \
+	testVariable-Double.0of1.sh \
+	testVariable_Register.0of1.sh \
+	testVariableDumpStream.0of1.sh \
+	testVariableValueCompare.0of1.sh \
+	testVariableCopy.0of1.sh \
+	testConditionFunction.0of1.sh \
+	testConditionFunction_Register.0of1.sh \
+	testSetVC.0of1.sh \
+	testSetVC.0of2.sh \
+	testSetVC.1of2.sh \
+	testSetVC.0of3.sh \
+	testSetVC.1of3.sh \
+	testSetVC.2of3.sh \
+	testHierarchyTable.0of1.sh \
+	testCallGraph.0of1.sh \
+	testVariableAllVC.0of1.sh \
+	testComponentMetadata.0of1.sh

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	<struct name="components">
+		<struct name="a">
+			<param name="Type">Stg_ComponentA</param>
+		</struct>
+		<struct name="b">
+			<param name="Type">Stg_ComponentB</param>
+		</struct>
+		<struct name="c">
+			<param name="Type">Stg_ComponentC</param>
+		</struct>
+    	</struct>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	<struct name="components">
+		<struct name="vc">
+			<param name="Type">CompositeVC</param>
+		</struct>
+    	</struct>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,56 @@
+<?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="SetVC">
+		<param name="type">SetVC</param>
+		<param name="indexCount">64</param>
+		<list name="indices">
+			<param>0</param>
+			<param>2</param>
+			<param>4</param>
+			<param>6</param>
+			<param>8</param>
+			<param>10</param>
+			<param>12</param>
+			<param>14</param>
+			<param>16</param>
+			<param>18</param>
+			<param>20</param>
+			<param>22</param>
+			<param>24</param>
+			<param>26</param>
+		</list>
+		<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>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $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
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseAutomation -lStGermainBaseContainer -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+	packages += CSOAP NANOHTTP
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+Passed test Construction: Can we use New()?
+Passed test One push: First push?
+Passed test One pop: Pop first push?
+Passed test New entries: Unique for function-parent-name?
+Passed test Table realloc: Does the table grow when needed?
+Passed test Copy: Copying
+Passed test Destruction: Deleting all allocated memory

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testCallGraph " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+
+const Type TestFunc1_Type = "TestFunc1";
+void TestFunc1( void ) {}
+
+const Type TestFunc2_Type = "TestFunc2";
+void TestFunc2( void ) {}
+
+int main( int argc, char *argv[] ) {
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/CallGraph" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		Stg_CallGraph*	cg0;
+		Stg_CallGraph 	cg1;
+		Stg_CallGraph*	cg2;
+		Stg_CallGraph*	cg3;
+		Stg_CallGraph*	cg3deep;
+		Index		count;
+		Index		size;
+		Index		i;
+		
+		
+		/* Test 1: Construction */
+		cg0 = Stg_CallGraph_New();
+		Stg_CallGraph_Init( &cg1 );
+		cg2 = Stg_CallGraph_New();
+		cg3 = Stg_CallGraph_New();
+		RegressionTest_Check( cg0 && cg2 && cg3, stream, "Construction", "Can we use New()?" );
+		
+		
+		/* Test 2: Can we push the first call on the stack? */
+		Stg_CallGraph_Push( cg0, TestFunc1, TestFunc1_Type );
+		Stg_CallGraph_Push( &cg1, TestFunc1, TestFunc1_Type );
+		RegressionTest_Check( 
+			cg0->_stack && 
+			!cg0->_stack->pop && 
+			cg0->_stack->entry_I == 0 && 
+			cg0->_stack->functionPtr == TestFunc1 &&
+			cg0->_tableCount == 1 && 
+			cg0->table[0].name == TestFunc1_Type &&
+			cg0->table[0].functionPtr == TestFunc1 &&
+			cg0->table[0].parentPtr == 0 &&
+			cg0->table[0].returned == 0 &&
+			cg0->table[0].called == 1 &&
+			cg1._stack && 
+			!cg1._stack->pop && 
+			cg1._stack->entry_I == 0 && 
+			cg1._stack->functionPtr == TestFunc1 &&
+			cg1._tableCount == 1 && 
+			cg1.table[0].name == TestFunc1_Type &&
+			cg1.table[0].functionPtr == TestFunc1 &&
+			cg1.table[0].parentPtr == 0 &&
+			cg1.table[0].returned == 0 &&
+			cg1.table[0].called == 1, 
+			stream, "One push", "First push?" );
+		
+		
+		/* Test 3: Can we pop the first call on the stack? */
+		Stg_CallGraph_Pop( cg0 );
+		Stg_CallGraph_Pop( &cg1 );
+		RegressionTest_Check( 
+			!cg0->_stack && 
+			cg0->table[0].name == TestFunc1_Type &&
+			cg0->table[0].functionPtr == TestFunc1 &&
+			cg0->table[0].parentPtr == 0 &&
+			cg0->table[0].returned == 1 &&
+			cg0->table[0].called == 1 &&
+			!cg1._stack && 
+			cg1.table[0].name == TestFunc1_Type &&
+			cg1.table[0].functionPtr == TestFunc1 &&
+			cg1.table[0].parentPtr == 0 &&
+			cg1.table[0].returned == 1 &&
+			cg1.table[0].called == 1, 
+			stream, "One pop", "Pop first push?" );
+		
+		
+		/* Test 4: Ensure that each function pointer - parent pointer - name is a unique entry */
+		Stg_CallGraph_Push( cg2, TestFunc1, TestFunc1_Type ); /* p0: f:1 n:1  Should add */
+		Stg_CallGraph_Push( cg2, TestFunc2, TestFunc2_Type ); /* p1: f:2 n:2  Should add */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Push( cg2, TestFunc2, TestFunc2_Type ); /* p1: f:2 n:2  Should increment */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Push( cg2, TestFunc1, TestFunc2_Type ); /* p1: f:1 n:2  Should add (recursive case) */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Push( cg2, TestFunc2, TestFunc1_Type ); /* p1: f:2 n:1  Should add */
+		Stg_CallGraph_Push( cg2, TestFunc1, TestFunc1_Type ); /* p2: f:1 n:1  Should add */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Pop( cg2 );
+		RegressionTest_Check( 
+			!cg2->_stack && 
+			cg2->_tableCount == 5 && 
+			cg2->table[0].returned == 1 &&
+			cg2->table[0].called == 1 &&
+			cg2->table[1].returned == 2 &&
+			cg2->table[1].called == 2 &&
+			cg2->table[2].returned == 1 &&
+			cg2->table[2].called == 1 &&
+			cg2->table[3].returned == 1 &&
+			cg2->table[3].called == 1 &&
+			cg2->table[4].returned == 1 &&
+			cg2->table[4].called == 1,
+			stream, "New entries", "Unique for function-parent-name?" );
+		
+		
+		/* Test 5: Force a realloc of the table */
+		count = (Index)((double)1.5 * cg3->_tableSize);
+		size = cg3->_tableSize;
+		for( i = 0; i < count; i++ ) {
+			/* Use "i" as a unique string (unique pointer value)... don't try to print! */
+			Stg_CallGraph_Push( cg3, TestFunc1, (Name)i );
+		}
+		RegressionTest_Check( 
+			cg3->_tableCount == count && 
+			cg3->_tableSize == (size * 2),
+			stream, "Table realloc", "Does the table grow when needed?" );
+		
+		
+		/* Test 9: Copying */
+		/* Shallow copying not yet implemented */
+		cg3deep = Stg_Class_Copy( cg3, 0, True, 0, 0 );
+		RegressionTest_Check(
+			cg3->_tableCount == cg3deep->_tableCount &&
+			cg3->_tableSize == cg3deep->_tableSize &&
+			/* TODO: check not just the table, but the stack too */
+			memcmp( cg3->table, cg3deep->table, sizeof(_Stg_CallGraph_Entry) * cg3->_tableCount ) == 0,
+			stream,
+			"Copy",
+			"Copying" );
+		
+		/* Test 9: Destruction */
+		Stg_Class_Delete(  cg3deep );
+		Stg_Class_Delete(  cg3 );
+		Stg_Class_Delete(  cg2 );
+		Stg_Class_Delete( &cg1 );
+		Stg_Class_Delete(  cg0 );
+		RegressionTest_Check( 1, stream, "Destruction", "Deleting all allocated memory" );
+	}
+
+	RegressionTest_Finalise();
+
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,74 @@
+
+Creating Stg_Components from the component-list
+
+	Instantiating Stg_ComponentA as a
+	Instantiating Stg_ComponentB as b
+	Instantiating Stg_ComponentC as c
+
+Constructing Stg_Components from the live-component register
+
+	Constructing a..
+		b has not been constructed yet. Constructing now.
+			Constructing b..
+		c has not been constructed yet. Constructing now.
+			Constructing c..
+Passed test Stg_Components creation: Can we create the components from dictionary
+a Stg_ComponentA 1,
+b Stg_ComponentB 3,
+c Stg_ComponentC 2,
+b Stg_ComponentB 3,
+Passed test Stg_Components copy: Can we copy the components and subcomponents correctly
+a_dup Stg_ComponentA 1,
+b_dup Stg_ComponentB 3,
+c_dup Stg_ComponentC 2,
+b_dup Stg_ComponentB 3,
+Passed test Instance counter: Are the instance counters correct
+LiveComponentRegister (ptr): 0x532cd4
+Stg_Class (ptr): 0x532cd4
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: LiveComponentRegister
+	_delete (func ptr): 0x2a9556b3f1
+	_print (func ptr): 0x2a9556b46e
+	_copy (func ptr): (nil)
+componentList (ptr): 0x528324
+Stg_ObjectList (ptr):0x528324
+	Stg_Class (ptr): 0x528324
+		sizeOfSelf: 176
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0x2a958e0928
+		_print (func ptr): 0x2a958e0957
+		_copy (func ptr): 0x2a958e0bd3
+	_append(func ptr): 0x2a958e1859
+	_prepend(func ptr): 0x2a958e1929
+	_replaceAll(func ptr): 0x2a958e19e1
+	_replace(func ptr): 0x2a958e1aaa
+	_insertBefore(func ptr): 0x2a958e1c67
+	_insertAfter(func ptr): 0x2a958e1e1a
+	_remove(func ptr): 0x2a958e1fd1
+	_getIndex(func ptr): 0x2a958e2065
+	_get(func ptr): 0x2a958e2124
+	_allocMoreMemory(func ptr): 0x2a958e2353
+	_insertAtIndex(func ptr): 0x2a958e23e7
+	_removeByIndex(func ptr): 0x2a958e248a
+	_deleteAllObjects(func ptr): 0x2a958e22c5
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 6
+	data[0-6]:
+	a Stg_ComponentA 1,
+	b Stg_ComponentB 3,
+	c Stg_ComponentC 2,
+	b Stg_ComponentB 3,
+	b Stg_ComponentB 3,
+	c Stg_ComponentC 2,
+	b Stg_ComponentB 3,
+	a_dup Stg_ComponentA 1,
+	b_dup Stg_ComponentB 3,
+	c_dup Stg_ComponentC 2,
+	b_dup Stg_ComponentB 3,
+	b_dup Stg_ComponentB 3,
+	c_dup Stg_ComponentC 2,
+	b_dup Stg_ComponentB 3,

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testComponentCopy " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,438 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 Stg_Component copying
+**
+** $Id: testLiveComponentRegister.c 2136 2005-05-10 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+/*
+ * A
+ * |
+ * +------>C
+ * |       |
+ * +-->B<--+
+ */
+
+struct Stg_ComponentA;
+struct Stg_ComponentB;
+struct Stg_ComponentC;
+
+typedef struct Stg_ComponentA Stg_ComponentA;
+typedef struct Stg_ComponentB Stg_ComponentB;
+typedef struct Stg_ComponentC Stg_ComponentC;
+
+Type Stg_ComponentA_Type = "Stg_ComponentA";
+Type Stg_ComponentB_Type = "Stg_ComponentB";
+Type Stg_ComponentC_Type = "Stg_ComponentC";
+
+const char* Stg_ComponentA_Type_GetMetadata() { return  ""; }
+const char* Stg_ComponentB_Type_GetMetadata() { return  ""; }
+const char* Stg_ComponentC_Type_GetMetadata() { return  ""; }
+
+
+#define __Stg_ComponentA \
+	__Stg_Component \
+	Stg_ComponentB* b; \
+	Stg_ComponentC* c;
+struct Stg_ComponentA { __Stg_ComponentA };
+
+void* Stg_ComponentA_NewDefault( Name name );
+void Stg_ComponentA_Delete( void* class );
+void Stg_ComponentA_Print( void* class, Stream* s );
+void* Stg_ComponentA_Copy( void* self, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+void Stg_ComponentA_Construct( void* component, Stg_ComponentFactory* cf, void* data );
+void Stg_ComponentA_Build( void* component, void* data );
+void Stg_ComponentA_Initialise( void* component, void* data );
+void Stg_ComponentA_Execute( void* component, void* data );
+void Stg_ComponentA_Destroy( void* component, void* data );
+
+void* Stg_ComponentA_NewDefault( Name name )
+{
+	return _Stg_Component_New(
+		sizeof(Stg_ComponentA),
+		"Stg_ComponentA",
+		Stg_ComponentA_Delete,
+		Stg_ComponentA_Print,
+		Stg_ComponentA_Copy,
+		Stg_ComponentA_NewDefault,
+		Stg_ComponentA_Construct,
+		Stg_ComponentA_Build,
+		Stg_ComponentA_Initialise,
+		Stg_ComponentA_Execute,
+		Stg_ComponentA_Destroy,
+		name,
+		NON_GLOBAL );
+}
+void Stg_ComponentA_Delete( void* class ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)class;
+	
+	Stg_Class_Delete( self->c );
+	Stg_Class_Delete( self->b );
+
+	_Stg_Component_Delete( self );
+}
+void Stg_ComponentA_Print( void* class, Stream* s ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)class;
+
+	Journal_Printf(
+		s,
+		"%s %s %d,\n", self->name, self->type, Memory_CountGet( self ) );
+	Print( self->b, s );
+	Print( self->c, s );
+}
+void* Stg_ComponentA_Copy( void* class, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)class;
+	Stg_ComponentA* newCopy;
+	
+	newCopy = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newCopy );
+	
+	newCopy->b = Stg_Class_Copy( self->b, dest, deep, nameExt, ptrMap );
+	newCopy->c = Stg_Class_Copy( self->c, dest, deep, nameExt, ptrMap );
+	
+	return newCopy;
+}
+void Stg_ComponentA_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)component;
+
+	self->b =  Stg_ComponentFactory_ConstructByName(  cf,  "b", Stg_ComponentB,  True, data  ) ;
+	self->c =  Stg_ComponentFactory_ConstructByName(  cf,  "c", Stg_ComponentC,  True, data  ) ;
+}
+void Stg_ComponentA_Build( void* component, void* data ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)component;
+	
+	Build( self->b, data, False );
+	Build( self->c, data, False );
+}
+void Stg_ComponentA_Initialise( void* component, void* data ) {
+
+}
+void Stg_ComponentA_Execute( void* component, void* data ) {
+
+}
+void Stg_ComponentA_Destroy( void* component, void* data ) {
+
+}
+
+#define __Stg_ComponentB \
+	__Stg_Component
+struct Stg_ComponentB { __Stg_ComponentB };
+
+void* Stg_ComponentB_NewDefault( Name name );
+void Stg_ComponentB_Delete( void* class );
+void Stg_ComponentB_Print( void* class, Stream* s );
+void* Stg_ComponentB_Copy( void* self, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+void Stg_ComponentB_Construct( void* component, Stg_ComponentFactory* cf, void* data );
+void Stg_ComponentB_Build( void* component, void* data );
+void Stg_ComponentB_Initialise( void* component, void* data );
+void Stg_ComponentB_Execute( void* component, void* data );
+void Stg_ComponentB_Destroy( void* component, void* data );
+
+void* Stg_ComponentB_NewDefault( Name name )
+{
+	return _Stg_Component_New(
+		sizeof(Stg_ComponentB),
+		"Stg_ComponentB",
+		Stg_ComponentB_Delete,
+		Stg_ComponentB_Print,
+		Stg_ComponentB_Copy,
+		Stg_ComponentB_NewDefault,
+		Stg_ComponentB_Construct,
+		Stg_ComponentB_Build,
+		Stg_ComponentB_Initialise,
+		Stg_ComponentB_Execute,
+		Stg_ComponentB_Destroy,
+		name,
+		NON_GLOBAL );
+}
+void Stg_ComponentB_Delete( void* class ) {
+	Stg_ComponentB* self = (Stg_ComponentB*)class;
+	
+	_Stg_Component_Delete( self );
+}
+void Stg_ComponentB_Print( void* class, Stream* s ) {
+	Stg_ComponentB* self = (Stg_ComponentB*)class;
+
+	Journal_Printf(
+		s,
+		"%s %s %d,\n", self->name, self->type, Memory_CountGet( self ) );
+}
+void* Stg_ComponentB_Copy( void* class, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_ComponentB* self = (Stg_ComponentB*)class;
+	Stg_ComponentB* newCopy;
+	
+	newCopy = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newCopy );
+	
+	return newCopy;
+}
+void Stg_ComponentB_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+}
+void Stg_ComponentB_Build( void* component, void* data ) {
+}
+void Stg_ComponentB_Initialise( void* component, void* data ) {
+}
+void Stg_ComponentB_Execute( void* component, void* data ) {
+}
+void Stg_ComponentB_Destroy( void* component, void* data ) {
+}
+
+
+#define __Stg_ComponentC \
+	__Stg_Component \
+	Stg_ComponentB* b;
+struct Stg_ComponentC { __Stg_ComponentC };
+
+void* Stg_ComponentC_NewDefault( Name name );
+void Stg_ComponentC_Delete( void* class );
+void Stg_ComponentC_Print( void* class, Stream* s );
+void* Stg_ComponentC_Copy( void* self, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+void Stg_ComponentC_Construct( void* component, Stg_ComponentFactory* cf, void* data );
+void Stg_ComponentC_Build( void* component, void* data );
+void Stg_ComponentC_Initialise( void* component, void* data );
+void Stg_ComponentC_Execute( void* component, void* data );
+void Stg_ComponentC_Destroy( void* component, void* data );
+
+void* Stg_ComponentC_NewDefault( Name name )
+{
+	return _Stg_Component_New(
+		sizeof(Stg_ComponentC),
+		"Stg_ComponentC",
+		Stg_ComponentC_Delete,
+		Stg_ComponentC_Print,
+		Stg_ComponentC_Copy,
+		Stg_ComponentC_NewDefault,
+		Stg_ComponentC_Construct,
+		Stg_ComponentC_Build,
+		Stg_ComponentC_Initialise,
+		Stg_ComponentC_Execute,
+		Stg_ComponentC_Destroy,
+		name,
+		NON_GLOBAL );
+}
+void Stg_ComponentC_Delete( void* class ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)class;
+	
+	Stg_Class_Delete( self->b );
+
+	_Stg_Component_Delete( self );
+}
+void Stg_ComponentC_Print( void* class, Stream* s ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)class;
+
+	Journal_Printf(
+		s,
+		"%s %s %d,\n", self->name, self->type, Memory_CountGet( self ) );
+	Print( self->b, s );
+}
+void* Stg_ComponentC_Copy( void* class, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)class;
+	Stg_ComponentC* newCopy;
+	
+	newCopy = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newCopy );
+
+	newCopy->b = Stg_Class_Copy( self->b, dest, deep, nameExt, ptrMap );
+
+	return newCopy;
+}
+void Stg_ComponentC_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)component;
+
+	self->b =  Stg_ComponentFactory_ConstructByName(  cf,  "b", Stg_ComponentB,  True, data  ) ;
+}
+void Stg_ComponentC_Build( void* component, void* data ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)component;
+	
+	Build( self->b, data, False );
+}
+void Stg_ComponentC_Initialise( void* component, void* data ) {
+
+}
+void Stg_ComponentC_Execute( void* component, void* data ) {
+
+}
+void Stg_ComponentC_Destroy( void* component, void* data ) {
+
+}
+
+
+
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/Stg_Component" );
+	
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Stg_ComponentA* a;
+		Stg_ComponentA* aCopy;
+		XML_IO_Handler* ioHandler;
+		Dictionary* dictionary;
+		Dictionary* componentDictionary;
+
+		Stg_ComponentFactory* cf;
+
+		Stg_ComponentRegister_Add( 
+			Stg_ComponentRegister_Get_ComponentRegister(), 
+			Stg_ComponentA_Type, 
+			"0", 
+			(Stg_Component_DefaultConstructorFunction*)Stg_ComponentA_NewDefault );
+
+		Stg_ComponentRegister_Add( 
+			Stg_ComponentRegister_Get_ComponentRegister(), 
+			Stg_ComponentB_Type,
+			"0",
+			(Stg_Component_DefaultConstructorFunction*)Stg_ComponentB_NewDefault );
+
+		Stg_ComponentRegister_Add( 
+			Stg_ComponentRegister_Get_ComponentRegister(), 
+			Stg_ComponentC_Type,
+			"0",
+			(Stg_Component_DefaultConstructorFunction*)Stg_ComponentC_NewDefault );
+
+		/* Create the application's dictionary */
+		dictionary = Dictionary_New();
+                                                                                                                                    
+		/* Read input */
+		ioHandler = XML_IO_Handler_New();
+		IO_Handler_ReadAllFromFile( ioHandler, "data/copy.xml", dictionary );
+                                                                                                                                    
+		Journal_ReadFromDictionary( dictionary );
+
+		componentDictionary = Dictionary_GetDictionary( dictionary, "components" );
+		if ( componentDictionary ) {
+			cf = Stg_ComponentFactory_New( dictionary, componentDictionary, Stg_ObjectList_New() );
+
+			Stg_ComponentFactory_CreateComponents( cf );
+			Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+
+			a = (Stg_ComponentA*)LiveComponentRegister_Get( cf->LCRegister, "a" );
+			
+			RegressionTest_Check(
+				a != NULL &&
+				a->b != NULL &&
+				a->c != NULL &&
+				a->b == a->c->b,
+				stream,
+				"Stg_Components creation",
+				"Can we create the components from dictionary" );
+
+			if ( a ) {
+				Print( a, stream );
+				
+				aCopy = Stg_Class_Copy( a, NULL, True, "_dup", NULL );
+
+				/* Disown the copy. Why? Because main() doesn't own the original neither.
+				 * The instance counting then matches up.
+				 */
+				Stg_Component_Disown( aCopy );
+
+				RegressionTest_Check(
+					aCopy != NULL &&
+					aCopy->b != NULL &&
+					aCopy->c != NULL &&
+					aCopy->b == aCopy->c->b,
+					stream,
+					"Stg_Components copy",
+					"Can we copy the components and subcomponents correctly" );
+
+				if ( aCopy ) {
+					Print( aCopy, stream );
+				}
+
+				RegressionTest_Check(
+					Memory_CountGet( a ) == Memory_CountGet( aCopy ) &&
+					Memory_CountGet( a->b ) == Memory_CountGet( aCopy->b ) &&
+					Memory_CountGet( a->c ) == Memory_CountGet( aCopy->c ),
+					stream,
+					"Instance counter",
+					"Are the instance counters correct" );
+				
+				Print( cf->LCRegister, stream );
+			}
+
+		}
+
+		Stg_Class_Delete( ioHandler );
+		Stg_Class_Delete( dictionary );
+	}
+
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	RegressionTest_Finalise();
+	
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,39 @@
+<?xml version="1.0"?><!DOCTYPE StGermainData SYSTEM "stgermain.dtd"><!-- DTD to validate against --><StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003"><param name="Name">Stg_Component</param><param name="Author">CSD Team</param><param name="Organisation">VPAC</param><param name="Description">An abstract class representing the parent of all Components</param><param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param><param name="License">The VPAC Public License Version 1.0-rc1. The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param><list name="Params"></list><list name="Dependencies"></list></StGermainData></StGermainData>
+Name: blah
+Type: Variable
+Project: StGermain
+Location: ./StGermain/Base/Automation/src/
+Project Web: https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome
+Copyright: StGermain Framework. Copyright (C) 2003-2005 VPAC.
+License: The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html
+Parent: Stg_Component
+Description: ...
+isValid: 1
+All dependencies
+	Dependency
+Essential dependencies
+Optional dependencies
+	Dependency
+Missing dependencies
+Unexpected dependencies
+All params
+	VectorComponentCount
+Name: vc
+Type: CompositeVC
+Project: StGermain
+Location: ./StGermain/Base/Automation/src/
+Project Web: https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome
+Copyright: StGermain Framework. Copyright (C) 2003-2005 VPAC.
+License: The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html
+Parent: VariableCondition
+Description: ...
+isValid: 1
+All dependencies
+	Data
+Essential dependencies
+Optional dependencies
+	Data
+Missing dependencies
+Unexpected dependencies
+All params
+	vcName

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testComponentMetadata " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+** 	Tests Stg_Component copying
+**
+** $Id: testLiveComponentRegister.c 2136 2005-05-10 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+/* This prototype might be removed later on */
+const char* Stg_Component_GetMetadata();
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/Stg_Component" );
+	
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Stg_ComponentMeta* metaTest;
+
+		XML_IO_Handler* io;
+		Dictionary* allDict;
+		Dictionary* compDict;
+
+		CompositeVC* vc;
+		
+		Journal_Printf( stream, "%s\n", Stg_Component_GetMetadata() );
+
+		metaTest = Stg_Component_CreateMeta( "blah", Variable_Type );
+		Stg_Class_Print( metaTest, stream );
+		Stg_Class_Delete( metaTest );
+
+		allDict = Dictionary_New();
+		io = XML_IO_Handler_New();
+		IO_Handler_ReadAllFromFile( io, "data/metatest.xml", allDict );
+		compDict = Dictionary_GetDictionary( allDict, "components" );
+		vc = CompositeVC_DefaultNew( "vc" );	
+		
+		metaTest = Stg_Component_Validate( vc, CompositeVC_Type, compDict );
+		Stg_Class_Print( metaTest, stream );
+		Stg_Class_Delete( metaTest );
+
+		Stg_Class_Delete( io );
+		Stg_Class_Delete( compDict );
+	}
+
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	RegressionTest_Finalise();
+	
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+ConditionFunction (ptr): 0x8076578
+	apply (func ptr): 0x804b484
+	name (ptr): 0x8063691
+		name: quadratic
+Stg_Class (ptr): 0x8076578
+	sizeOfSelf: 36
+	_deleteSelf: Yes
+	type: ConditionFunction
+	_delete (func ptr): 0x804b793
+	_print (func ptr): 0x804b7bc
+	_copy (func ptr): (nil)
+Apply:
+	index: 4
+	var_I: 2

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testConditionFunction " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testConditionFunction.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void func(Index index, Variable_Index var_I, void* context, void* result)
+{
+	printf("Apply:\n");
+	printf("\tindex: %u\n", index);
+	printf("\tvar_I: %u\n", var_I);
+}
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ConditionFunction*	cf;
+
+		cf = ConditionFunction_New(func, "quadratic");
+		Print(cf, stream);
+
+		ConditionFunction_Apply(cf, 4, 2, NULL, NULL);
+
+		Stg_Class_Delete(cf);
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+ConditionFunction_Register (ptr): 0x8076708
+	count: 0
+	_size: 8
+	_delta: 8
+	_cf (ptr): 0x8076738
+Stg_Class (ptr): 0x8076708
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: ConditionFunction_Register
+	_delete (func ptr): 0x804bb99
+	_print (func ptr): 0x804bbd9
+	_copy (func ptr): (nil)
+Add test:
+	Pass 1:
+		count: 1
+		_size: 8
+		_delta: 8
+	Pass 2:
+		count: 2
+		_size: 8
+		_delta: 8
+	Pass 3:
+		count: 3
+		_size: 8
+		_delta: 8
+	Pass 4:
+		count: 4
+		_size: 8
+		_delta: 8
+	Pass 5:
+		count: 5
+		_size: 8
+		_delta: 8
+	Pass 6:
+		count: 6
+		_size: 8
+		_delta: 8
+	Pass 7:
+		count: 7
+		_size: 8
+		_delta: 8
+	Pass 8:
+		count: 8
+		_size: 8
+		_delta: 8
+	Pass 9:
+		count: 9
+		_size: 16
+		_delta: 8
+	Pass 10:
+		count: 10
+		_size: 16
+		_delta: 8
+
+GetIndex test:
+	name: testCF0 - index: 0
+	name: testCF1 - index: 1
+	name: testCF2 - index: 2
+	name: testCF3 - index: 3
+	name: testCF4 - index: 4
+	name: testCF5 - index: 5
+	name: testCF6 - index: 6
+	name: testCF7 - index: 7
+	name: testCF8 - index: 8
+	name: testCF9 - index: 9

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testConditionFunction_Register " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testConditionFunction_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define ARRAY_SIZE	4
+#define STRUCT_SIZE	4
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ConditionFunction_Register*		reg;
+		ConditionFunction*	cf[10];
+		char*			name[10] = {"testCF0", "testCF1", "testCF2", "testCF3",
+						"testCF4", "testCF5", "testCF6", "testCF7",
+						"testCF8", "testCF9"};
+		Index			i;
+
+		for (i = 0; i < 10; i++)
+			cf[i] = ConditionFunction_New(NULL, name[i]);
+
+		reg = ConditionFunction_Register_New();
+		Print(reg, stream);
+
+		printf("Add test:\n");
+		for (i = 0; i < 10; i++)
+		{
+			ConditionFunction_Register_Add(reg, cf[i]);
+
+			printf("\tPass %u:\n", i + 1);
+			printf("\t\tcount: %u\n", reg->count);
+			printf("\t\t_size: %lu\n", reg->_size);
+			printf("\t\t_delta: %lu\n", reg->_delta);
+		}
+
+		printf("\nGetIndex test:\n");
+		for (i = 0; i < 10; i++)
+			printf("\tname: %s - index: %u\n", name[i], ConditionFunction_Register_GetIndex(reg, name[i]));
+
+		Stg_Class_Delete(reg);
+		for (i = 0; i < 10; i++)	
+			Stg_Class_Delete(cf[i]);
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,68 @@
+IsChild( A_Type, A_Type ) = True
+IsChild( A_Type, B_Type ) = False
+IsChild( A_Type, C_Type ) = False
+IsChild( A_Type, D_Type ) = False
+IsChild( A_Type, AA_Type ) = False
+IsChild( A_Type, BB_Type ) = False
+
+IsChild( B_Type, A_Type ) = True
+IsChild( B_Type, B_Type ) = True
+IsChild( B_Type, C_Type ) = False
+IsChild( B_Type, D_Type ) = False
+IsChild( B_Type, AA_Type ) = False
+IsChild( B_Type, BB_Type ) = False
+
+IsChild( C_Type, A_Type ) = True
+IsChild( C_Type, B_Type ) = True
+IsChild( C_Type, C_Type ) = True
+IsChild( C_Type, D_Type ) = False
+IsChild( C_Type, AA_Type ) = False
+IsChild( C_Type, BB_Type ) = False
+
+IsChild( D_Type, A_Type ) = True
+IsChild( D_Type, B_Type ) = True
+IsChild( D_Type, C_Type ) = True
+IsChild( D_Type, D_Type ) = True
+IsChild( D_Type, AA_Type ) = False
+IsChild( D_Type, BB_Type ) = False
+
+IsChild( AA_Type, A_Type ) = False
+IsChild( AA_Type, B_Type ) = False
+IsChild( AA_Type, C_Type ) = False
+IsChild( AA_Type, D_Type ) = False
+IsChild( AA_Type, AA_Type ) = True
+IsChild( AA_Type, BB_Type ) = False
+
+IsChild( BB_Type, A_Type ) = False
+IsChild( BB_Type, B_Type ) = False
+IsChild( BB_Type, C_Type ) = False
+IsChild( BB_Type, D_Type ) = False
+IsChild( BB_Type, AA_Type ) = True
+IsChild( BB_Type, BB_Type ) = True
+
+Type 'A' inherits from:
+Type 'B' inherits from:
+	A
+Type 'C' inherits from:
+	B
+	A
+Type 'D' inherits from:
+	C
+	B
+	A
+Type 'AA' inherits from:
+Type 'BB' inherits from:
+	AA
+A 			 (Abstract Class)
+	B 			 (Abstract Class)
+		C 			 (Abstract Class)
+			D 			 (Abstract Class)
+B 			 (Abstract Class)
+	C 			 (Abstract Class)
+		D 			 (Abstract Class)
+C 			 (Abstract Class)
+	D 			 (Abstract Class)
+D 			 (Abstract Class)
+AA 			 (Abstract Class)
+	BB 			 (Abstract Class)
+BB 			 (Abstract Class)

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHierarchyTable " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+** 	Tests Stg_Component copying
+**
+** $Id: testHierarchyTable.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+const Type A_Type = "A";
+const Type B_Type = "B";
+const Type C_Type = "C";
+const Type D_Type = "D";
+const Type AA_Type = "AA";
+const Type BB_Type = "BB";
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		HierarchyTable* hierarchyTable = HierarchyTable_GetHierarchyTable();
+
+		RegisterParent( B_Type, A_Type );
+		RegisterParent( C_Type, B_Type );
+		RegisterParent( D_Type, C_Type );
+		
+		RegisterParent( BB_Type, AA_Type );
+
+		Journal_PrintBool( stream, IsChild( A_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, BB_Type ) ); 		
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( B_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, BB_Type ) ); 	
+		Journal_Printf( stream, "\n");
+		
+		Journal_PrintBool( stream, IsChild( C_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, BB_Type ) ); 
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( D_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, BB_Type ) ); 	
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( AA_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, BB_Type ) ); 
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( BB_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, BB_Type ) ); 
+		Journal_Printf( stream, "\n");
+
+		HierarchyTable_PrintParents( hierarchyTable, A_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, B_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, C_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, D_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, AA_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, BB_Type, stream );
+		
+		HierarchyTable_PrintChildren( hierarchyTable, A_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, B_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, C_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, D_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, AA_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, BB_Type, stream );
+	}
+
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,274 @@
+Inserting live components into the LiveComponentRegistry
+Printing the LiveComponentRegister:LiveComponentRegister (ptr): 0x805c068
+Stg_Class (ptr): 0x805c068
+	sizeOfSelf: 28
+	_deleteSelf: Yes
+	type: LiveComponentRegister
+	_delete (func ptr): 0xb7f14e4b
+	_print (func ptr): 0xb7f14ed6
+	_copy (func ptr): (nil)
+componentList (ptr): 0x805c0f0
+Stg_ObjectList (ptr):0x805c0f0
+	Stg_Class (ptr): 0x805c0f0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ed48ce
+		_print (func ptr): 0xb7ed4905
+		_copy (func ptr): 0xb7ed4ba7
+	_append(func ptr): 0xb7ed580b
+	_prepend(func ptr): 0xb7ed58d1
+	_replaceAll(func ptr): 0xb7ed5995
+	_replace(func ptr): 0xb7ed5a4e
+	_insertBefore(func ptr): 0xb7ed5beb
+	_insertAfter(func ptr): 0xb7ed5da6
+	_remove(func ptr): 0xb7ed5f63
+	_getIndex(func ptr): 0xb7ed6009
+	_get(func ptr): 0xb7ed60b7
+	_allocMoreMemory(func ptr): 0xb7ed628a
+	_insertAtIndex(func ptr): 0xb7ed6310
+	_removeByIndex(func ptr): 0xb7ed638e
+	_deleteAllObjects(func ptr): 0xb7ed620b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 5
+	data[0-5]:
+	Stg_Component (ptr): 0x805aee8
+	Stg_Object (ptr): 0x805aee8
+		Stg_Class (ptr): 0x805aee8
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: Scalar
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: Scalar-Construct
+		build function name: Scalar-Build
+		initialise function name: Scalar-Initialise
+		execute function name: Scalar-Execute
+		destroy function name: Scalar-Destroy
+	Variable (ptr): (0x805aee8)
+		offsetCount: 1
+		offsets (ptr): 0x805acd8
+			offsets[0]: 0
+		dataTypes (ptr): 0x805ac50
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805b398
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c090
+			dataSizes[0]: 4
+		components (ptr): 0x805b3a8
+			components[0] (ptr): (nil)
+		structSize: 4
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805a7a0
+		arrayPtrPtr (ptr): 0xbfc30e3c
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805b3b8
+	Stg_Object (ptr): 0x805b3b8
+		Stg_Class (ptr): 0x805b3b8
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: Three
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: Three-Construct
+		build function name: Three-Build
+		initialise function name: Three-Initialise
+		execute function name: Three-Execute
+		destroy function name: Three-Destroy
+	Variable (ptr): (0x805b3b8)
+		offsetCount: 1
+		offsets (ptr): 0x805b6a8
+			offsets[0]: 0
+		dataTypes (ptr): 0x805b6b8
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805b6c8
+			dataTypeCounts[0]: 3
+		dataSizes (ptr): 0x805c0a0
+			dataSizes[0]: 12
+		components (ptr): 0x805b6d8
+			components[0] (ptr): 0x805b6f0
+			components[0]: a
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805b6f0
+	Stg_Object (ptr): 0x805b6f0
+		Stg_Class (ptr): 0x805b6f0
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: a
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: a-Construct
+		build function name: a-Build
+		initialise function name: a-Initialise
+		execute function name: a-Execute
+		destroy function name: a-Destroy
+	Variable (ptr): (0x805b6f0)
+		offsetCount: 1
+		offsets (ptr): 0x805b9d8
+			offsets[0]: 0
+		dataTypes (ptr): 0x805b9e8
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805b9f8
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c0b0
+			dataSizes[0]: 4
+		components (ptr): 0x805ba08
+			components[0] (ptr): (nil)
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805ba18
+	Stg_Object (ptr): 0x805ba18
+		Stg_Class (ptr): 0x805ba18
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: b
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: b-Construct
+		build function name: b-Build
+		initialise function name: b-Initialise
+		execute function name: b-Execute
+		destroy function name: b-Destroy
+	Variable (ptr): (0x805ba18)
+		offsetCount: 1
+		offsets (ptr): 0x805bd00
+			offsets[0]: 4
+		dataTypes (ptr): 0x805bd10
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805bd20
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c0c0
+			dataSizes[0]: 4
+		components (ptr): 0x805bd30
+			components[0] (ptr): (nil)
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805bd40
+	Stg_Object (ptr): 0x805bd40
+		Stg_Class (ptr): 0x805bd40
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: c
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: c-Construct
+		build function name: c-Build
+		initialise function name: c-Initialise
+		execute function name: c-Execute
+		destroy function name: c-Destroy
+	Variable (ptr): (0x805bd40)
+		offsetCount: 1
+		offsets (ptr): 0x805c028
+			offsets[0]: 8
+		dataTypes (ptr): 0x805c038
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805c048
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c0d0
+			dataSizes[0]: 4
+		components (ptr): 0x805c058
+			components[0] (ptr): (nil)
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+Retrieving live component references from the LiveComponentRegistry
+Retrieval Successful
+Retrieval Successful
+Retrieval Successful
+Retrieval Successful
+Retrieval Successful
+Deleting the LiveComponentRegister:
\ No newline at end of file

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLiveComponentRegister " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+** 	Tests the Float macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testLiveComponentRegister.c 2136 2005-05-10 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testLiveComponentRegister" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef float Triple[3];
+
+		float* array;
+		Triple* structArray;
+
+		LiveComponentRegister *LCRegister = NULL;
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+		Variable* tempVar = NULL;
+		Index length = 10;
+
+		Variable_Register* reg;
+
+		array = Memory_Alloc_Array( float, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Float,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Float,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		LCRegister = LiveComponentRegister_New( );
+		Journal_Printf( stream, "Inserting live components into the LiveComponentRegistry\n" );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) var );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vec );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vecVar[0] );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vecVar[1] );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vecVar[2] );
+
+		Journal_Printf( stream, "Printing the LiveComponentRegister:" );
+		Print( LCRegister, stream );
+		
+		Journal_Printf( stream, "Retrieving live component references from the LiveComponentRegistry\n" );
+	
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "Scalar" );
+		if( tempVar != var ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "Three" );
+		if( tempVar != vec ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "a" );
+		if( tempVar != vecVar[0] ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "b" );
+		if( tempVar != vecVar[1] ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "c" );
+		if( tempVar != vecVar[2] ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+
+		Journal_Printf( stream, "Deleting the LiveComponentRegister:" );
+		Stg_Class_Delete( LCRegister );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,49 @@
+RegisterFactory
+Class (ptr): 0x80c51a8
+Class (ptr): 0x80c51a8
+	sizeOfSelf: 24
+	_deleteSelf: True
+	type: RegisterFactory
+	_delete (func ptr): 0x804c5c0
+	_print (func ptr): 0x804c605
+NamedObjectList (ptr):0x80c51c8
+Class (ptr): 0x80c51c8
+Class (ptr): 0x80c51c8
+	sizeOfSelf: 76
+	_deleteSelf: True
+	type: NamedObjectList
+	_delete (func ptr): 0x805ba93
+	_print (func ptr): 0x805baca
+	_append(func ptr):0x805bca7
+	_prepend(func ptr):0x805bd90
+	_replaceAll(func ptr):0x805be77
+	_replace(func ptr):0x805bf42
+	_insertBefore(func ptr):0x805c10d
+	_insertAfter(func ptr):0x805c2f6
+	_getIndex(func ptr):0x805c4da
+	_get(func ptr):0x805c5af
+	_allocMoreMemory(func ptr):0x805c681
+	_insertAtIndex(func ptr):0x805c707
+	_size: 8
+	_delta: 8
+	data[0-2]:
+NamedObject (ptr): 0x80c5240
+Class (ptr): 0x80c5240
+Class (ptr): 0x80c5240
+	sizeOfSelf: 32
+	_deleteSelf: True
+	type: RegisterFactory_RegisterConstructorFunction
+	_delete (func ptr): 0x805b63c
+	_print (func ptr): 0x805b67c
+	name: NamedObject_Register
+	nameAllocationType: NON_GLOBAL
+NamedObject (ptr): 0x80c5288
+Class (ptr): 0x80c5288
+Class (ptr): 0x80c5288
+	sizeOfSelf: 32
+	_deleteSelf: True
+	type: RegisterFactory_RegisterConstructorFunction
+	_delete (func ptr): 0x805b63c
+	_print (func ptr): 0x805b67c
+	name: Variable_Register
+	nameAllocationType: NON_GLOBAL

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testRegisterFactory " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testRegisterFactory.c 2421 2004-12-14 02:09:26Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+typedef struct {
+	__Stg_Object
+} TestObject;
+
+TestObject* TestObject_New( Name name ) {
+	return (TestObject*)_Stg_Object_New(
+		sizeof(TestObject),
+		"Test",
+		_Stg_Object_Delete,
+		_Stg_Object_Print,
+		NULL, 
+		name,
+		NON_GLOBAL );
+}
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testRegisterFactory" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		RegisterFactory* factory;
+
+		NamedObject_Register* reg;
+
+		factory = RegisterFactory_New();
+
+		RegisterFactory_Register( factory, NamedObject_Register_Type, (void*)NamedObject_Register_New );
+		RegisterFactory_Register( factory, Variable_Register_Type, (void*)Variable_Register_New );
+
+		reg = (NamedObject_Register*)RegisterFactory_Create( factory, NamedObject_Register_Type );
+
+		NamedObject_Register_Add( reg, TestObject_New( "a" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "b" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "c" ) );
+	
+		Print( factory, stream );
+	
+		Stg_Class_Delete( reg );
+		Stg_Class_Delete( factory );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x8064960
+	dictionary (ptr): 0x805b468
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c7d0
+		_entryTbl[0]:
+			varName (ptr): 0x805bb10
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8064c48
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc00
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c088
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c328
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8064960
+Stg_Component (ptr): 0x8064960
+Stg_Object (ptr): 0x8064960
+	Stg_Class (ptr): 0x8064960
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f9079d
+		_print (func ptr): 0xb7f907e3
+		_copy (func ptr): 0xb7f90ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8fdb6
+	_construct (func ptr): 0xb7f8c58a
+	_build (func ptr): 0xb7f8c58f
+	_initialise (func ptr): 0xb7f8c906
+	_execute (func ptr): 0xb7f8c9ca
+	_destroy (func ptr): 0xb7f8c9fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f90e62
+	_getVariableCount (func ptr): 0xb7f90e91
+	_getVariableIndex (func ptr): 0xb7f90ea8
+	_getValueIndex (func ptr): 0xb7f90eef
+	_getValueCount (func ptr): 0xb7f90ef7
+	_getValue (func ptr): 0xb7f90f0e
+	variable_Register (ptr): 0x8066248
+	conFunc_Register (ptr): 0x8065548
+	_set (ptr): 0x805c820
+	indexCount: 14
+	indexTbl (ptr): 0x805c860
+		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
+	vcVarCountTbl (ptr): 0x805c8a8
+		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
+	vcTbl (ptr): 0x805c8f0
+		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
+	valueCount: 4
+	valueTbl (ptr): 0x80650b8
+		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): 0x805c328
+				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, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.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
+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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.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, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.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
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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 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 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649f8
+	dictionary (ptr): 0x805b500
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c890
+		_entryTbl[0]:
+			varName (ptr): 0x8065150
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba90
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bcb8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c140
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3e0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649f8
+Stg_Component (ptr): 0x80649f8
+Stg_Object (ptr): 0x80649f8
+	Stg_Class (ptr): 0x80649f8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7fc179d
+		_print (func ptr): 0xb7fc17e3
+		_copy (func ptr): 0xb7fc1ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fc0db6
+	_construct (func ptr): 0xb7fbd58a
+	_build (func ptr): 0xb7fbd58f
+	_initialise (func ptr): 0xb7fbd906
+	_execute (func ptr): 0xb7fbd9ca
+	_destroy (func ptr): 0xb7fbd9fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7fc1e62
+	_getVariableCount (func ptr): 0xb7fc1e91
+	_getVariableIndex (func ptr): 0xb7fc1ea8
+	_getValueIndex (func ptr): 0xb7fc1eef
+	_getValueCount (func ptr): 0xb7fc1ef7
+	_getValue (func ptr): 0xb7fc1f0e
+	variable_Register (ptr): 0x80662f0
+	conFunc_Register (ptr): 0x80655f0
+	_set (ptr): 0x805c8e0
+	indexCount: 14
+	indexTbl (ptr): 0x805c920
+		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
+	vcVarCountTbl (ptr): 0x805c968
+		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
+	vcTbl (ptr): 0x805c9b0
+		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
+	valueCount: 4
+	valueTbl (ptr): 0x8065160
+		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): 0x805c3e0
+				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, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.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
+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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.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, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.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
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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 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 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x8064a00
+	dictionary (ptr): 0x805b508
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c898
+		_entryTbl[0]:
+			varName (ptr): 0x8065158
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba98
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bcc0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c148
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3e8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8064a00
+Stg_Component (ptr): 0x8064a00
+Stg_Object (ptr): 0x8064a00
+	Stg_Class (ptr): 0x8064a00
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f0c79d
+		_print (func ptr): 0xb7f0c7e3
+		_copy (func ptr): 0xb7f0cca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0bdb6
+	_construct (func ptr): 0xb7f0858a
+	_build (func ptr): 0xb7f0858f
+	_initialise (func ptr): 0xb7f08906
+	_execute (func ptr): 0xb7f089ca
+	_destroy (func ptr): 0xb7f089fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f0ce62
+	_getVariableCount (func ptr): 0xb7f0ce91
+	_getVariableIndex (func ptr): 0xb7f0cea8
+	_getValueIndex (func ptr): 0xb7f0ceef
+	_getValueCount (func ptr): 0xb7f0cef7
+	_getValue (func ptr): 0xb7f0cf0e
+	variable_Register (ptr): 0x80662f8
+	conFunc_Register (ptr): 0x80655f8
+	_set (ptr): 0x805c8e8
+	indexCount: 14
+	indexTbl (ptr): 0x805c928
+		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
+	vcVarCountTbl (ptr): 0x805c970
+		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
+	vcTbl (ptr): 0x805c9b8
+		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
+	valueCount: 4
+	valueTbl (ptr): 0x8065168
+		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): 0x805c3e8
+				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, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.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
+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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.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, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.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
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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 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 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649d8
+	dictionary (ptr): 0x805b4e0
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c870
+		_entryTbl[0]:
+			varName (ptr): 0x8065130
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c120
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649d8
+Stg_Component (ptr): 0x80649d8
+Stg_Object (ptr): 0x80649d8
+	Stg_Class (ptr): 0x80649d8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f9079d
+		_print (func ptr): 0xb7f907e3
+		_copy (func ptr): 0xb7f90ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8fdb6
+	_construct (func ptr): 0xb7f8c58a
+	_build (func ptr): 0xb7f8c58f
+	_initialise (func ptr): 0xb7f8c906
+	_execute (func ptr): 0xb7f8c9ca
+	_destroy (func ptr): 0xb7f8c9fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f90e62
+	_getVariableCount (func ptr): 0xb7f90e91
+	_getVariableIndex (func ptr): 0xb7f90ea8
+	_getValueIndex (func ptr): 0xb7f90eef
+	_getValueCount (func ptr): 0xb7f90ef7
+	_getValue (func ptr): 0xb7f90f0e
+	variable_Register (ptr): 0x80662d0
+	conFunc_Register (ptr): 0x80655d0
+	_set (ptr): 0x805c8c0
+	indexCount: 14
+	indexTbl (ptr): 0x805c900
+		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
+	vcVarCountTbl (ptr): 0x805c948
+		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
+	vcTbl (ptr): 0x805c990
+		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
+	valueCount: 4
+	valueTbl (ptr): 0x8065140
+		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): 0x805c3c0
+				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, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.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
+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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.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, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.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
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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 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 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649d8
+	dictionary (ptr): 0x805b4e0
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c870
+		_entryTbl[0]:
+			varName (ptr): 0x8065130
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c120
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649d8
+Stg_Component (ptr): 0x80649d8
+Stg_Object (ptr): 0x80649d8
+	Stg_Class (ptr): 0x80649d8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7edd79d
+		_print (func ptr): 0xb7edd7e3
+		_copy (func ptr): 0xb7eddca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7edcdb6
+	_construct (func ptr): 0xb7ed958a
+	_build (func ptr): 0xb7ed958f
+	_initialise (func ptr): 0xb7ed9906
+	_execute (func ptr): 0xb7ed99ca
+	_destroy (func ptr): 0xb7ed99fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7edde62
+	_getVariableCount (func ptr): 0xb7edde91
+	_getVariableIndex (func ptr): 0xb7eddea8
+	_getValueIndex (func ptr): 0xb7eddeef
+	_getValueCount (func ptr): 0xb7eddef7
+	_getValue (func ptr): 0xb7eddf0e
+	variable_Register (ptr): 0x80662d0
+	conFunc_Register (ptr): 0x80655d0
+	_set (ptr): 0x805c8c0
+	indexCount: 14
+	indexTbl (ptr): 0x805c900
+		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
+	vcVarCountTbl (ptr): 0x805c948
+		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
+	vcTbl (ptr): 0x805c990
+		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
+	valueCount: 4
+	valueTbl (ptr): 0x8065140
+		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): 0x805c3c0
+				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, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.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
+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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.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, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.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
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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 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 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649d8
+	dictionary (ptr): 0x805b4e0
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c870
+		_entryTbl[0]:
+			varName (ptr): 0x8065130
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c120
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649d8
+Stg_Component (ptr): 0x80649d8
+Stg_Object (ptr): 0x80649d8
+	Stg_Class (ptr): 0x80649d8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f3679d
+		_print (func ptr): 0xb7f367e3
+		_copy (func ptr): 0xb7f36ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f35db6
+	_construct (func ptr): 0xb7f3258a
+	_build (func ptr): 0xb7f3258f
+	_initialise (func ptr): 0xb7f32906
+	_execute (func ptr): 0xb7f329ca
+	_destroy (func ptr): 0xb7f329fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f36e62
+	_getVariableCount (func ptr): 0xb7f36e91
+	_getVariableIndex (func ptr): 0xb7f36ea8
+	_getValueIndex (func ptr): 0xb7f36eef
+	_getValueCount (func ptr): 0xb7f36ef7
+	_getValue (func ptr): 0xb7f36f0e
+	variable_Register (ptr): 0x80662d0
+	conFunc_Register (ptr): 0x80655d0
+	_set (ptr): 0x805c8c0
+	indexCount: 14
+	indexTbl (ptr): 0x805c900
+		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
+	vcVarCountTbl (ptr): 0x805c948
+		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
+	vcTbl (ptr): 0x805c990
+		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
+	valueCount: 4
+	valueTbl (ptr): 0x8065140
+		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): 0x805c3c0
+				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, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.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
+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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.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, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.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
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 5.00, 6.00, 7.00, 8.00, 9.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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 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 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 False False False False False False False False False False False False 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 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 XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,189 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testSetVC.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.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;
+}
+
+
+int main(int argc, char *argv[])
+{
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	Variable*			var[7];
+	Variable_Register*		variable_Register;
+	VariableCondition*		vc;
+	ConditionFunction*		quadCF;
+	ConditionFunction_Register*	conFunc_Register;
+	
+	double*		array[7];
+	Index		arraySize = 4*4*4;
+	char*		vcKey = "SetVC";
+	char*		varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+	
+	Index	i, j, k;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	io_handler = XML_IO_Handler_New();
+
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/setVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+	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(4));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(4));
+	
+	/* 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, arraySize, "array[]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &arraySize, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double , arraySize*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &arraySize, (void**)&array[6], 0,
+		"a", "b", "c", "d", "e" );
+	Variable_Register_Add(variable_Register, var[6]);
+	Variable_Register_BuildAll(variable_Register);
+	
+	/* Create AllVC */
+	vc = (VariableCondition*)SetVC_New( "SetVC", vcKey, variable_Register, conFunc_Register, dictionary );
+	Build( vc, 0, False );
+	
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*4*4*4);
+	memset(array[6], 0, sizeof(double)*4*4*4*5);
+	VariableCondition_Apply(vc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		printf("Testing for %s\n", vcKey);
+		Print(vc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2f", j, array[j][0]);
+			for (k = 1; k < 4*4*4; k++)
+				printf(", %.2f", array[j][k]);
+		}
+		printf("\nvar[6]: %.2f", array[6][0]);
+		for (j = 1; j < 4*4*4*5; j++)
+			printf(", %.2f", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < 4*4*4; k++)
+				printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < 4*4*4; 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(dictionary);
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805a7a0
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805ae18
+Stg_Component (ptr): 0x805ae48
+Stg_Object (ptr): 0x805ae48
+	Stg_Class (ptr): 0x805ae48
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805ae48)
+	offsetCount: 1
+	offsets (ptr): 0x805acd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ac48
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805b318
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c010
+		dataSizes[0]: 1
+	components (ptr): 0x805b328
+		components[0] (ptr): (nil)
+	structSize: 1
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ac30
+	arrayPtrPtr (ptr): 0xbfb0149c
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805b338
+Stg_Object (ptr): 0x805b338
+	Stg_Class (ptr): 0x805b338
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805b338)
+	offsetCount: 1
+	offsets (ptr): 0x805b628
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b638
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805b648
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805c020
+		dataSizes[0]: 3
+	components (ptr): 0x805b658
+		components[0] (ptr): 0x805b670
+		components[0]: a
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805b670
+Stg_Object (ptr): 0x805b670
+	Stg_Class (ptr): 0x805b670
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805b670)
+	offsetCount: 1
+	offsets (ptr): 0x805b958
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b968
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805b978
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c030
+		dataSizes[0]: 1
+	components (ptr): 0x805b988
+		components[0] (ptr): (nil)
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805b998
+Stg_Object (ptr): 0x805b998
+	Stg_Class (ptr): 0x805b998
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805b998)
+	offsetCount: 1
+	offsets (ptr): 0x805bc80
+		offsets[0]: 1
+	dataTypes (ptr): 0x805bc90
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805bca0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c040
+		dataSizes[0]: 1
+	components (ptr): 0x805bcb0
+		components[0] (ptr): (nil)
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805bcc0
+Stg_Object (ptr): 0x805bcc0
+	Stg_Class (ptr): 0x805bcc0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805bcc0)
+	offsetCount: 1
+	offsets (ptr): 0x805bfa8
+		offsets[0]: 2
+	dataTypes (ptr): 0x805bfb8
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805bfc8
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c050
+		dataSizes[0]: 1
+	components (ptr): 0x805bfd8
+		components[0] (ptr): (nil)
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Class (ptr): 0x805a7a0
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7eda561
+	_print (func ptr): 0xb7eda5a1
+	_copy (func ptr): 0xb7eda6ca
+Setting value 85
+~~~Scalar~~~
+i=0: 1 1 1 1 1
+i=1: 1 1 1 1 1
+i=2: 1 1 1 1 1
+i=3: 1 1 1 1 1
+i=4: 1 1 1 1 1
+i=5: 1 1 1 1 1
+i=6: 1 1 1 1 1
+i=7: 1 1 1 1 1
+i=8: 1 1 1 1 1
+i=9: 1 1 1 1 1
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value -86
+~~~Scalar~~~
+i=0: 1 1 1 1 1
+i=1: 1 1 1 1 1
+i=2: 1 1 1 1 1
+i=3: 1 1 1 1 1
+i=4: 1 1 1 1 1
+i=5: 1 1 1 1 1
+i=6: 1 1 1 1 1
+i=7: 1 1 1 1 1
+i=8: 1 1 1 1 1
+i=9: 1 1 1 1 1
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable-Char " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+** 	Tests the Char macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Char.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef char Triple[3];
+
+		char* array;
+		Triple* structArray;
+		Index length = 10;
+
+		/* List of values to test the variable with.
+		 * Values to test are hex 5's and a's because they are a series of 0101 and 1010 respectively so they test
+		 * each bit in memory to read/set.
+		 */
+		long int testValues[] = { 0x55, 0xaa };
+		
+		Index testValueCount = 2;
+		Index test_I;
+		long int testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( char, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Char,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Char,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %d\n", (signed char)(char)testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueChar( var, i, testValue );
+
+				Variable_SetValueAtChar( vec, i, 0, testValue );
+				Variable_SetValueAtChar( vec, i, 1, testValue );
+				Variable_SetValueAtChar( vec, i, 2, testValue );
+			}
+
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d\n",
+						i,
+						Variable_GetValueChar( var, i ) == (char)(char)testValue,
+						Variable_GetValueCharAsShort( var, i ) == (short)(char)testValue,
+						Variable_GetValueCharAsInt( var, i ) == (int)(char)testValue,
+						Variable_GetValueCharAsFloat( var, i ) == (float)(char)testValue,
+						Variable_GetValueCharAsDouble( var, i ) == (double)(char)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtChar( vec, i, 0 ) == (char)(char)testValue,
+						Variable_GetValueAtCharAsShort( vec, i, 0 ) == (short)(char)testValue,
+						Variable_GetValueAtCharAsInt( vec, i, 0 ) == (int)(char)testValue,
+						Variable_GetValueAtCharAsFloat( vec, i, 0 ) == (float)(char)testValue,
+						Variable_GetValueAtCharAsDouble( vec, i, 0 ) == (double)(char)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtChar( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtChar( vec, i, 1 ) == (char)(char)testValue,
+						Variable_GetValueAtCharAsShort( vec, i, 1 ) == (short)(char)testValue,
+						Variable_GetValueAtCharAsInt( vec, i, 1 ) == (int)(char)testValue,
+						Variable_GetValueAtCharAsFloat( vec, i, 1 ) == (float)(char)testValue,
+						Variable_GetValueAtCharAsDouble( vec, i, 1 ) == (double)(char)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtChar( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtChar( vec, i, 2 ) == (char)(char)testValue,
+						Variable_GetValueAtCharAsShort( vec, i, 2 ) == (short)(char)testValue,
+						Variable_GetValueAtCharAsInt( vec, i, 2 ) == (int)(char)testValue,
+						Variable_GetValueAtCharAsFloat( vec, i, 2 ) == (float)(char)testValue,
+						Variable_GetValueAtCharAsDouble( vec, i, 2 ) == (double)(char)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtChar( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805b7a0
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805bf48
+Stg_Component (ptr): 0x805bf78
+Stg_Object (ptr): 0x805bf78
+	Stg_Class (ptr): 0x805bf78
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805bf78)
+	offsetCount: 1
+	offsets (ptr): 0x805bcd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805bc48
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805c430
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d128
+		dataSizes[0]: 8
+	components (ptr): 0x805c440
+		components[0] (ptr): (nil)
+	structSize: 8
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805bde8
+	arrayPtrPtr (ptr): 0xbfcdcdec
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805c450
+Stg_Object (ptr): 0x805c450
+	Stg_Class (ptr): 0x805c450
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805c450)
+	offsetCount: 1
+	offsets (ptr): 0x805c740
+		offsets[0]: 0
+	dataTypes (ptr): 0x805c750
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805c760
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805d138
+		dataSizes[0]: 24
+	components (ptr): 0x805c770
+		components[0] (ptr): 0x805c788
+		components[0]: a
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805c788
+Stg_Object (ptr): 0x805c788
+	Stg_Class (ptr): 0x805c788
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805c788)
+	offsetCount: 1
+	offsets (ptr): 0x805ca70
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ca80
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805ca90
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d148
+		dataSizes[0]: 8
+	components (ptr): 0x805caa0
+		components[0] (ptr): (nil)
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805cab0
+Stg_Object (ptr): 0x805cab0
+	Stg_Class (ptr): 0x805cab0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805cab0)
+	offsetCount: 1
+	offsets (ptr): 0x805cd98
+		offsets[0]: 8
+	dataTypes (ptr): 0x805cda8
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805cdb8
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d158
+		dataSizes[0]: 8
+	components (ptr): 0x805cdc8
+		components[0] (ptr): (nil)
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805cdd8
+Stg_Object (ptr): 0x805cdd8
+	Stg_Class (ptr): 0x805cdd8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805cdd8)
+	offsetCount: 1
+	offsets (ptr): 0x805d0c0
+		offsets[0]: 16
+	dataTypes (ptr): 0x805d0d0
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805d0e0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d168
+		dataSizes[0]: 8
+	components (ptr): 0x805d0f0
+		components[0] (ptr): (nil)
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Class (ptr): 0x805b7a0
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7fb6561
+	_print (func ptr): 0xb7fb65a1
+	_copy (func ptr): 0xb7fb66ca
+Setting value 123456789.000000
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value 0.987654
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable-Double " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,204 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the Double macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Double.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef double Triple[3];
+
+		double* array;
+		Triple* structArray;
+		Index length = 10;
+
+		double testValues[] = { 123456789.0, 0.987654321 };
+		Index testValueCount = 2;
+		Index test_I;
+		double testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( double, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Double,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Double,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %lf\n", (double)(double)testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueDouble( var, i, testValue );
+
+				Variable_SetValueAtDouble( vec, i, 0, testValue );
+				Variable_SetValueAtDouble( vec, i, 1, testValue );
+				Variable_SetValueAtDouble( vec, i, 2, testValue );
+			}
+
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d \n",
+						i,
+						Variable_GetValueDouble( var, i ) == (double)(double)testValue,
+						Variable_GetValueDoubleAsChar( var, i ) == (char)(double)testValue,
+						Variable_GetValueDoubleAsShort( var, i ) == (short)(double)testValue,
+						Variable_GetValueDoubleAsInt( var, i ) == (int)(double)testValue,
+						Variable_GetValueDoubleAsFloat( var, i ) == (float)(double)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtDouble( vec, i, 0 ) == (double)(double)testValue,
+						Variable_GetValueAtDoubleAsChar( vec, i, 0 ) == (char)(double)testValue,
+						Variable_GetValueAtDoubleAsShort( vec, i, 0 ) == (short)(double)testValue,
+						Variable_GetValueAtDoubleAsInt( vec, i, 0 ) == (int)(double)testValue,
+						Variable_GetValueAtDoubleAsFloat( vec, i, 0 ) == (float)(double)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtDouble( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtDouble( vec, i, 1 ) == (double)(double)testValue,
+						Variable_GetValueAtDoubleAsChar( vec, i, 1 ) == (char)(double)testValue,
+						Variable_GetValueAtDoubleAsShort( vec, i, 1 ) == (short)(double)testValue,
+						Variable_GetValueAtDoubleAsInt( vec, i, 1 ) == (int)(double)testValue,
+						Variable_GetValueAtDoubleAsFloat( vec, i, 1 ) == (float)(double)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtDouble( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtDouble( vec, i, 2 ) == (double)(double)testValue,
+						Variable_GetValueAtDoubleAsChar( vec, i, 2 ) == (char)(double)testValue,
+						Variable_GetValueAtDoubleAsShort( vec, i, 2 ) == (short)(double)testValue,
+						Variable_GetValueAtDoubleAsInt( vec, i, 2 ) == (int)(double)testValue,
+						Variable_GetValueAtDoubleAsFloat( vec, i, 2 ) == (float)(double)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtDouble( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805ae70
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805aea8
+Stg_Component (ptr): 0x805aed8
+Stg_Object (ptr): 0x805aed8
+	Stg_Class (ptr): 0x805aed8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805aed8)
+	offsetCount: 1
+	offsets (ptr): 0x805acd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ac48
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805b390
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c088
+		dataSizes[0]: 4
+	components (ptr): 0x805b3a0
+		components[0] (ptr): (nil)
+	structSize: 4
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805a7a0
+	arrayPtrPtr (ptr): 0xbfe4822c
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805b3b0
+Stg_Object (ptr): 0x805b3b0
+	Stg_Class (ptr): 0x805b3b0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805b3b0)
+	offsetCount: 1
+	offsets (ptr): 0x805b6a0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b6b0
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805b6c0
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805c098
+		dataSizes[0]: 12
+	components (ptr): 0x805b6d0
+		components[0] (ptr): 0x805b6e8
+		components[0]: a
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805b6e8
+Stg_Object (ptr): 0x805b6e8
+	Stg_Class (ptr): 0x805b6e8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805b6e8)
+	offsetCount: 1
+	offsets (ptr): 0x805b9d0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b9e0
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805b9f0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0a8
+		dataSizes[0]: 4
+	components (ptr): 0x805ba00
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805ba10
+Stg_Object (ptr): 0x805ba10
+	Stg_Class (ptr): 0x805ba10
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805ba10)
+	offsetCount: 1
+	offsets (ptr): 0x805bcf8
+		offsets[0]: 4
+	dataTypes (ptr): 0x805bd08
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805bd18
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0b8
+		dataSizes[0]: 4
+	components (ptr): 0x805bd28
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805bd38
+Stg_Object (ptr): 0x805bd38
+	Stg_Class (ptr): 0x805bd38
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805bd38)
+	offsetCount: 1
+	offsets (ptr): 0x805c020
+		offsets[0]: 8
+	dataTypes (ptr): 0x805c030
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805c040
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0c8
+		dataSizes[0]: 4
+	components (ptr): 0x805c050
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Class (ptr): 0x805ae70
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7f1f561
+	_print (func ptr): 0xb7f1f5a1
+	_copy (func ptr): 0xb7f1f6ca
+Setting value 123456792.000000
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value 0.987654
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable-Float " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,204 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the Float macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Float.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef float Triple[3];
+
+		float* array;
+		Triple* structArray;
+		Index length = 10;
+
+		float testValues[] = { 123456789.0, 0.987654321 };
+		Index testValueCount = 2;
+		Index test_I;
+		float testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( float, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Float,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Float,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %f\n", testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueFloat( var, i, testValue );
+
+				Variable_SetValueAtFloat( vec, i, 0, testValue );
+				Variable_SetValueAtFloat( vec, i, 1, testValue );
+				Variable_SetValueAtFloat( vec, i, 2, testValue );
+			}
+			
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d \n",
+						i,
+						Variable_GetValueFloat( var, i ) == (float)(float)testValue,
+						Variable_GetValueFloatAsChar( var, i ) == (float)(char)testValue,
+						Variable_GetValueFloatAsShort( var, i ) == (float)(short)testValue,
+						Variable_GetValueFloatAsInt( var, i ) == (float)(int)testValue,
+						Variable_GetValueFloatAsDouble( var, i ) == (double)(float)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtFloat( vec, i, 0 ) == (float)(float)testValue,
+						Variable_GetValueAtFloatAsChar( vec, i, 0 ) == (char)(float)testValue,
+						Variable_GetValueAtFloatAsShort( vec, i, 0 ) == (short)(float)testValue,
+						Variable_GetValueAtFloatAsInt( vec, i, 0 ) == (int)(float)testValue,
+						Variable_GetValueAtFloatAsDouble( vec, i, 0 ) == (double)(float)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtFloat( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtFloat( vec, i, 1 ) == (float)(float)testValue,
+						Variable_GetValueAtFloatAsChar( vec, i, 1 ) == (char)(float)testValue,
+						Variable_GetValueAtFloatAsShort( vec, i, 1 ) == (short)(float)testValue,
+						Variable_GetValueAtFloatAsInt( vec, i, 1 ) == (int)(float)testValue,
+						Variable_GetValueAtFloatAsDouble( vec, i, 1 ) == (double)(float)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtFloat( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtFloat( vec, i, 2 ) == (float)(float)testValue,
+						Variable_GetValueAtFloatAsChar( vec, i, 2 ) == (char)(float)testValue,
+						Variable_GetValueAtFloatAsShort( vec, i, 2 ) == (short)(float)testValue,
+						Variable_GetValueAtFloatAsInt( vec, i, 2 ) == (int)(float)testValue,
+						Variable_GetValueAtFloatAsDouble( vec, i, 2 ) == (double)(float)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtFloat( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805ae70
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805aea8
+Stg_Component (ptr): 0x805aed8
+Stg_Object (ptr): 0x805aed8
+	Stg_Class (ptr): 0x805aed8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fae4a0
+		_print (func ptr): 0xb7fae538
+		_copy (func ptr): 0xb7fae921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fad986
+	_construct (func ptr): 0xb7faf5c2
+	_build (func ptr): 0xb7faf0a2
+	_initialise (func ptr): 0xb7faf5b8
+	_execute (func ptr): 0xb7faf5bd
+	_destroy (func ptr): 0xb7fafb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805aed8)
+	offsetCount: 1
+	offsets (ptr): 0x805acd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ac48
+		dataTypes[0]: 3
+	dataTypeCounts (ptr): 0x805b390
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c088
+		dataSizes[0]: 4
+	components (ptr): 0x805b3a0
+		components[0] (ptr): (nil)
+	structSize: 4
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805a7a0
+	arrayPtrPtr (ptr): 0xbffd684c
+	arraySize: 10
+	arraySizePtr (ptr): 0xbffd6844
+	allocateSelf = False
+Stg_Component (ptr): 0x805b3b0
+Stg_Object (ptr): 0x805b3b0
+	Stg_Class (ptr): 0x805b3b0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fae4a0
+		_print (func ptr): 0xb7fae538
+		_copy (func ptr): 0xb7fae921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fad986
+	_construct (func ptr): 0xb7faf5c2
+	_build (func ptr): 0xb7faf0a2
+	_initialise (func ptr): 0xb7faf5b8
+	_execute (func ptr): 0xb7faf5bd
+	_destroy (func ptr): 0xb7fafb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805b3b0)
+	offsetCount: 1
+	offsets (ptr): 0x805b6a0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b6b0
+		dataTypes[0]: 3
+	dataTypeCounts (ptr): 0x805b6c0
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805c098
+		dataSizes[0]: 12
+	components (ptr): 0x805b6d0
+		components[0] (ptr): 0x805b6e8
+		components[0]: a
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbffd6848
+	arraySize: 10
+	arraySizePtr (ptr): 0xbffd6844
+	allocateSelf = False
+Stg_Component (ptr): 0x805b6e8
+Stg_Object (ptr): 0x805b6e8
+	Stg_Class (ptr): 0x805b6e8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fae4a0
+		_print (func ptr): 0xb7fae538
+		_copy (func ptr): 0xb7fae921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fad986
+	_construct (func ptr): 0xb7faf5c2
+	_build (func ptr): 0xb7faf0a2
+	_initialise (func ptr): 0xb7faf5b8
+	_execute (func ptr): 0xb7faf5bd
+	_destroy (func ptr): 0xb7fafb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805b6e8)
+	offsetCount: 1
+	offsets (ptr): 0x805b9d0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b9e0
+		dataTypes[0]: 3
+	dataTypeCounts (ptr): 0x805b9f0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0a8
+		dataSizes[0]: 4
+	components (ptr): 0x805ba00
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbffd6848
+	arraySize: 10
+	arraySizePtr (ptr): 0xbffd6844
+	allocateSelf = False
+Stg_Component (ptr): 0x805ba10
+Stg_Object (ptr): 0x805ba10
+	Stg_Class (ptr): 0x805ba10
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fae4a0
+		_print (func ptr): 0xb7fae538
+		_copy (func ptr): 0xb7fae921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fad986
+	_construct (func ptr): 0xb7faf5c2
+	_build (func ptr): 0xb7faf0a2
+	_initialise (func ptr): 0xb7faf5b8
+	_execute (func ptr): 0xb7faf5bd
+	_destroy (func ptr): 0xb7fafb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805ba10)
+	offsetCount: 1
+	offsets (ptr): 0x805bcf8
+		offsets[0]: 4
+	dataTypes (ptr): 0x805bd08
+		dataTypes[0]: 3
+	dataTypeCounts (ptr): 0x805bd18
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0b8
+		dataSizes[0]: 4
+	components (ptr): 0x805bd28
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbffd6848
+	arraySize: 10
+	arraySizePtr (ptr): 0xbffd6844
+	allocateSelf = False
+Stg_Component (ptr): 0x805bd38
+Stg_Object (ptr): 0x805bd38
+	Stg_Class (ptr): 0x805bd38
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fae4a0
+		_print (func ptr): 0xb7fae538
+		_copy (func ptr): 0xb7fae921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fad986
+	_construct (func ptr): 0xb7faf5c2
+	_build (func ptr): 0xb7faf0a2
+	_initialise (func ptr): 0xb7faf5b8
+	_execute (func ptr): 0xb7faf5bd
+	_destroy (func ptr): 0xb7fafb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805bd38)
+	offsetCount: 1
+	offsets (ptr): 0x805c020
+		offsets[0]: 8
+	dataTypes (ptr): 0x805c030
+		dataTypes[0]: 3
+	dataTypeCounts (ptr): 0x805c040
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0c8
+		dataSizes[0]: 4
+	components (ptr): 0x805c050
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbffd6848
+	arraySize: 10
+	arraySizePtr (ptr): 0xbffd6844
+	allocateSelf = False
+Stg_Class (ptr): 0x805ae70
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7fb0561
+	_print (func ptr): 0xb7fb05a1
+	_copy (func ptr): 0xb7fb06ca
+Setting value 1431655765
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value -1431655766
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable-Int " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,208 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the Int macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Int.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef int Triple[3];
+
+		int* array;
+		Triple* structArray;
+		Index length = 10;
+
+		/* List of values to test the variable with.
+		 * Values to test are hex 5's and a's because they are a series of 0101 and 1010 respectively so they test
+		 * each bit in memory to read/set.
+		 */
+		long int testValues[] = { 0x55555555, 0xaaaaaaaa };
+		Index testValueCount = 2;
+		Index test_I;
+		long int testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( int, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Int,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Int,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %d\n", (int)(int)testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueInt( var, i, testValue );
+
+				Variable_SetValueAtInt( vec, i, 0, testValue );
+				Variable_SetValueAtInt( vec, i, 1, testValue );
+				Variable_SetValueAtInt( vec, i, 2, testValue );
+			}
+
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d \n",
+						i,
+						Variable_GetValueInt( var, i ) == (int)(int)testValue,
+						Variable_GetValueIntAsChar( var, i ) == (char)(int)testValue,
+						Variable_GetValueIntAsShort( var, i ) == (short)(int)testValue,
+						Variable_GetValueIntAsFloat( var, i ) == (float)(int)testValue,
+						Variable_GetValueIntAsDouble( var, i ) == (double)(int)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtInt( vec, i, 0 ) == (int)(int)testValue,
+						Variable_GetValueAtIntAsChar( vec, i, 0 ) == (char)(int)testValue,
+						Variable_GetValueAtIntAsShort( vec, i, 0 ) == (short)(int)testValue,
+						Variable_GetValueAtIntAsFloat( vec, i, 0 ) == (float)(int)testValue,
+						Variable_GetValueAtIntAsDouble( vec, i, 0 ) == (double)(int)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtInt( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtInt( vec, i, 1 ) == (int)(int)testValue,
+						Variable_GetValueAtIntAsChar( vec, i, 1 ) == (char)(int)testValue,
+						Variable_GetValueAtIntAsShort( vec, i, 1 ) == (short)(int)testValue,
+						Variable_GetValueAtIntAsFloat( vec, i, 1 ) == (float)(int)testValue,
+						Variable_GetValueAtIntAsDouble( vec, i, 1 ) == (double)(int)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtInt( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtInt( vec, i, 2 ) == (int)(int)testValue,
+						Variable_GetValueAtIntAsChar( vec, i, 2 ) == (char)(int)testValue,
+						Variable_GetValueAtIntAsShort( vec, i, 2 ) == (short)(int)testValue,
+						Variable_GetValueAtIntAsFloat( vec, i, 2 ) == (float)(int)testValue,
+						Variable_GetValueAtIntAsDouble( vec, i, 2 ) == (double)(int)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtInt( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805a7a0
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805ae50
+Stg_Component (ptr): 0x805ae80
+Stg_Object (ptr): 0x805ae80
+	Stg_Class (ptr): 0x805ae80
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f3e4a0
+		_print (func ptr): 0xb7f3e538
+		_copy (func ptr): 0xb7f3e921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3d986
+	_construct (func ptr): 0xb7f3f5c2
+	_build (func ptr): 0xb7f3f0a2
+	_initialise (func ptr): 0xb7f3f5b8
+	_execute (func ptr): 0xb7f3f5bd
+	_destroy (func ptr): 0xb7f3fb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805ae80)
+	offsetCount: 1
+	offsets (ptr): 0x805acd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ac48
+		dataTypes[0]: 2
+	dataTypeCounts (ptr): 0x805b338
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c030
+		dataSizes[0]: 2
+	components (ptr): 0x805b348
+		components[0] (ptr): (nil)
+	structSize: 2
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfd6753c
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfd67534
+	allocateSelf = False
+Stg_Component (ptr): 0x805b358
+Stg_Object (ptr): 0x805b358
+	Stg_Class (ptr): 0x805b358
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f3e4a0
+		_print (func ptr): 0xb7f3e538
+		_copy (func ptr): 0xb7f3e921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3d986
+	_construct (func ptr): 0xb7f3f5c2
+	_build (func ptr): 0xb7f3f0a2
+	_initialise (func ptr): 0xb7f3f5b8
+	_execute (func ptr): 0xb7f3f5bd
+	_destroy (func ptr): 0xb7f3fb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805b358)
+	offsetCount: 1
+	offsets (ptr): 0x805b648
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b658
+		dataTypes[0]: 2
+	dataTypeCounts (ptr): 0x805b668
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805c040
+		dataSizes[0]: 6
+	components (ptr): 0x805b678
+		components[0] (ptr): 0x805b690
+		components[0]: a
+	structSize: 6
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ae08
+	arrayPtrPtr (ptr): 0xbfd67538
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfd67534
+	allocateSelf = False
+Stg_Component (ptr): 0x805b690
+Stg_Object (ptr): 0x805b690
+	Stg_Class (ptr): 0x805b690
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f3e4a0
+		_print (func ptr): 0xb7f3e538
+		_copy (func ptr): 0xb7f3e921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3d986
+	_construct (func ptr): 0xb7f3f5c2
+	_build (func ptr): 0xb7f3f0a2
+	_initialise (func ptr): 0xb7f3f5b8
+	_execute (func ptr): 0xb7f3f5bd
+	_destroy (func ptr): 0xb7f3fb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805b690)
+	offsetCount: 1
+	offsets (ptr): 0x805b978
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b988
+		dataTypes[0]: 2
+	dataTypeCounts (ptr): 0x805b998
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c050
+		dataSizes[0]: 2
+	components (ptr): 0x805b9a8
+		components[0] (ptr): (nil)
+	structSize: 6
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ae08
+	arrayPtrPtr (ptr): 0xbfd67538
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfd67534
+	allocateSelf = False
+Stg_Component (ptr): 0x805b9b8
+Stg_Object (ptr): 0x805b9b8
+	Stg_Class (ptr): 0x805b9b8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f3e4a0
+		_print (func ptr): 0xb7f3e538
+		_copy (func ptr): 0xb7f3e921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3d986
+	_construct (func ptr): 0xb7f3f5c2
+	_build (func ptr): 0xb7f3f0a2
+	_initialise (func ptr): 0xb7f3f5b8
+	_execute (func ptr): 0xb7f3f5bd
+	_destroy (func ptr): 0xb7f3fb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805b9b8)
+	offsetCount: 1
+	offsets (ptr): 0x805bca0
+		offsets[0]: 2
+	dataTypes (ptr): 0x805bcb0
+		dataTypes[0]: 2
+	dataTypeCounts (ptr): 0x805bcc0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c060
+		dataSizes[0]: 2
+	components (ptr): 0x805bcd0
+		components[0] (ptr): (nil)
+	structSize: 6
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ae08
+	arrayPtrPtr (ptr): 0xbfd67538
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfd67534
+	allocateSelf = False
+Stg_Component (ptr): 0x805bce0
+Stg_Object (ptr): 0x805bce0
+	Stg_Class (ptr): 0x805bce0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f3e4a0
+		_print (func ptr): 0xb7f3e538
+		_copy (func ptr): 0xb7f3e921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3d986
+	_construct (func ptr): 0xb7f3f5c2
+	_build (func ptr): 0xb7f3f0a2
+	_initialise (func ptr): 0xb7f3f5b8
+	_execute (func ptr): 0xb7f3f5bd
+	_destroy (func ptr): 0xb7f3fb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805bce0)
+	offsetCount: 1
+	offsets (ptr): 0x805bfc8
+		offsets[0]: 4
+	dataTypes (ptr): 0x805bfd8
+		dataTypes[0]: 2
+	dataTypeCounts (ptr): 0x805bfe8
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c070
+		dataSizes[0]: 2
+	components (ptr): 0x805bff8
+		components[0] (ptr): (nil)
+	structSize: 6
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ae08
+	arrayPtrPtr (ptr): 0xbfd67538
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfd67534
+	allocateSelf = False
+Stg_Class (ptr): 0x805a7a0
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7f40561
+	_print (func ptr): 0xb7f405a1
+	_copy (func ptr): 0xb7f406ca
+Setting value 21845
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value -21846
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable-Short " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,208 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the Short macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Short.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef short Triple[3];
+
+		short* array;
+		Triple* structArray;
+		Index length = 10;
+
+		/* List of values to test the variable with.
+		 * Values to test are hex 5's and a's because they are a series of 0101 and 1010 respectively so they test
+		 * each bit in memory to read/set.
+		 */
+		long int testValues[] = { 0x5555, 0xaaaa };
+		Index testValueCount = 2;
+		Index test_I;
+		long int testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( short, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Short,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Short,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %d\n", (short)(short)testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueShort( var, i, testValue );
+
+				Variable_SetValueAtShort( vec, i, 0, testValue );
+				Variable_SetValueAtShort( vec, i, 1, testValue );
+				Variable_SetValueAtShort( vec, i, 2, testValue );
+			}
+
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d \n",
+						i,
+						Variable_GetValueShort( var, i ) == (short)(short)testValue,
+						Variable_GetValueShortAsChar( var, i ) == (char)(short)testValue,
+						Variable_GetValueShortAsInt( var, i ) == (int)(short)testValue,
+						Variable_GetValueShortAsFloat( var, i ) == (float)(short)testValue,
+						Variable_GetValueShortAsDouble( var, i ) == (double)(short)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtShort( vec, i, 0 ) == (short)(short)testValue,
+						Variable_GetValueAtShortAsChar( vec, i, 0 ) == (char)(short)testValue,
+						Variable_GetValueAtShortAsInt( vec, i, 0 ) == (int)(short)testValue,
+						Variable_GetValueAtShortAsFloat( vec, i, 0 ) == (float)(short)testValue,
+						Variable_GetValueAtShortAsDouble( vec, i, 0 ) == (double)(short)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtShort( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtShort( vec, i, 1 ) == (short)(short)testValue,
+						Variable_GetValueAtShortAsChar( vec, i, 1 ) == (char)(short)testValue,
+						Variable_GetValueAtShortAsInt( vec, i, 1 ) == (int)(short)testValue,
+						Variable_GetValueAtShortAsFloat( vec, i, 1 ) == (float)(short)testValue,
+						Variable_GetValueAtShortAsDouble( vec, i, 1 ) == (double)(short)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtShort( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtShort( vec, i, 2 ) == (short)(short)testValue,
+						Variable_GetValueAtShortAsChar( vec, i, 2 ) == (char)(short)testValue,
+						Variable_GetValueAtShortAsInt( vec, i, 2 ) == (int)(short)testValue,
+						Variable_GetValueAtShortAsFloat( vec, i, 2 ) == (float)(short)testValue,
+						Variable_GetValueAtShortAsDouble( vec, i, 2 ) == (double)(short)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtShort( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,4 @@
+Variable construction is working fine.
+Variable building is working fine.
+Scalar-double Variable accessing is working fine.
+Vector-double Variable accessing is working fine.

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testVariable.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef double VectorD[3];
+		typedef double VectorF[3];
+		typedef struct {
+			int		mass;
+			VectorF		force;
+			short		num;
+			char*		info;
+		} Particle;
+		
+		Variable_Register*	vr;
+		Variable_Index		var_I;
+		
+		double*			temperature;
+		VectorD*		velocity;
+		Particle*		particle;
+		Index			aSize[3] = { 16, 16, 16 };
+		int			i;
+		
+		Particle		tmpParticle;
+		Name			pNames[] = {
+						"mass",
+						"force",
+						"info" };
+		SizeT			pOffsets[] = { 0, 0, 0 };	/* Init later... */
+		Variable_DataType	pDataTypes[] = {
+						Variable_DataType_Int,
+						Variable_DataType_Float,
+						Variable_DataType_Pointer, };
+		Index			pDtCounts[] = { 1, 3, 1 };
+		static SizeT		pSize = sizeof(Particle);
+		
+		pOffsets[0] = (ArithPointer)&tmpParticle.mass - (ArithPointer)&tmpParticle;
+		pOffsets[1] = (ArithPointer)&tmpParticle.force - (ArithPointer)&tmpParticle;
+		pOffsets[2] = (ArithPointer)&tmpParticle.info - (ArithPointer)&tmpParticle;
+
+		/* Construction phase --------------------------------------------------------------------------------------------*/
+		vr = Variable_Register_New();
+		Variable_NewScalar( "temperature", Variable_DataType_Double, &aSize[0], (void**)&temperature, vr );
+		Variable_NewVector( "velocity", Variable_DataType_Double, 3, &aSize[1], (void**)&velocity, vr, "vx", "vy", "vz" );
+		Variable_New( "particle", 3, pOffsets, pDataTypes, pDtCounts, pNames, &pSize, &aSize[2], (void**)&particle, vr );
+		
+		Journal_Printf( stream, "Variable construction is working fine.\n" );
+
+		/* Build phase ---------------------------------------------------------------------------------------------------*/
+		temperature = Memory_Alloc_Array( double, aSize[0], "temperature" );
+		velocity = Memory_Alloc_Array( VectorD, aSize[1], "velocity" );
+		particle = Memory_Alloc_Array( Particle, aSize[2], "array" );
+		
+		Variable_Register_BuildAll( vr );
+		/*for( var_I = 0; var_I < vr->count; var_I++ ) {
+			Print( vr->_variable[var_I], stream );
+		}*/
+		
+		Journal_Printf( stream, "Variable building is working fine.\n" );
+		
+		/* Initialise phase ----------------------------------------------------------------------------------------------*/
+		
+		/* Execution phase -----------------------------------------------------------------------------------------------*/
+		
+		/* Test the Get and Set of a scalar double....................................................................... */
+		/* Fill the temperature array with a known pattern of kinda random (bit filling) numbers. */
+		for( i = 0; i < aSize[0]; i++ ) {
+			temperature[i] = 1.0f / (aSize[0]+2) * (i+1); 
+		}
+		
+		/* Check that Variable_GetValueDouble on the temperature Variable returns the right numbers */
+		for( i = 0; i < aSize[0]; i++ ) {
+			Variable*		var = Variable_Register_GetByName( vr, "temperature" );
+			const double		tmp = 1.0f / (aSize[0]+2) * (i+1);
+			
+			Journal_Firewall( 
+				Variable_GetValueDouble( var, i ) == tmp,
+				Journal_Register( Error_Type, "testVariable" ),
+				"Variable_GetValueDouble FAILED to get the correct value!\n" );
+		}
+		
+		/* Fill the temperature Variable with another known pattern of kinda random (bit filling) numbers */
+		for( i = 0; i < aSize[0]; i++ ) {
+			Variable*		var = Variable_Register_GetByName( vr, "temperature" );
+			
+			Variable_SetValueDouble( var, i, 1.0f - ( 1.0f / (aSize[0]+2) * (i+1) ) );
+		}
+		
+		/* Check that Variable_SetValueDouble on the temperature Variable set the right numbers */
+		for( i = 0; i < aSize[0]; i++ ) {
+			const double		tmp = 1.0f - 1.0f / (aSize[0]+2) * (i+1);
+			
+			Journal_Firewall( 
+				temperature[i] == tmp,
+				Journal_Register( Error_Type, "testVariable" ),
+				"Variable_SetValueDouble FAILED to set the correct value!\n" );
+		}
+		
+		Journal_Printf( stream, "Scalar-double Variable accessing is working fine.\n" );
+		
+		
+		/* Test the Get and Set of a vector double....................................................................... */
+		/* Fill the velocity array with a known pattern of kinda random (bit filling) numbers. */
+		for( i = 0; i < aSize[1]; i++ ) {
+			int			d;
+			
+			for( d = 0; d < 3; d++ ) {
+				velocity[i][d] = 1.0f / ((aSize[1]*3)+2) * (i*3+d+1); 
+			}
+		}
+		
+		/* Check that Variable_GetPtrDouble on the velocity Variable returns the right numbers */
+		for( i = 0; i < aSize[1]; i++ ) {
+			Variable*		var = Variable_Register_GetByName( vr, "velocity" );
+			int			d;
+			
+			for( d = 0; d < 3; d++ ) {
+				const double 		tmp = 1.0f / ((aSize[1]*3)+2) * (i*3+d+1);
+				
+				Journal_Firewall( 
+					Variable_GetValueAtDouble( var, i, d ) == tmp,
+					Journal_Register( Error_Type, "testVariable" ),
+					"Variable_GetValueDouble FAILED to get the correct value!\n" );
+			}
+		}
+		
+		/* Fill the variable Variable with another known pattern of kinda random (bit filling) numbers */
+		for( i = 0; i < aSize[1]; i++ ) {
+			Variable*		var = Variable_Register_GetByName( vr, "velocity" );
+			int			d;
+			
+			for( d = 0; d < 3; d++ ) {
+				Variable_SetValueAtDouble( var, i, d, 1.0f - ( 1.0f / ((aSize[1]*3)+2) * (i*3+d+1) ) );
+			}
+		}
+		
+		/* Check that Variable_SetValueDouble on the temperature Variable set the right numbers */
+		for( i = 0; i < aSize[1]; i++ ) {
+			int			d;
+			
+			for( d = 0; d < 3; d++ ) {
+				const double		tmp = 1.0f - ( 1.0f / ((aSize[1]*3)+2) * (i*3+d+1) );
+				
+				Journal_Firewall( 
+					velocity[i][d] == tmp,
+					Journal_Register( Error_Type, "testVariable" ),
+					"Variable_SetValueDouble FAILED to set the correct value!\n" );
+			}
+		}
+		
+		Journal_Printf( stream, "Vector-double Variable accessing is working fine.\n" );
+		
+/* TODO: try out vx, vy, vz, complex tests */
+		
+		/* Destruction phase ---------------------------------------------------------------------------------------------*/
+		
+		/* HACK: manually delete all the created Variables */
+		for( var_I = 0; var_I < vr->count; var_I++ ) {
+			Stg_Class_Delete( vr->_variable[var_I] );
+		}
+		
+		Memory_Free( particle );
+		Memory_Free( velocity );
+		Memory_Free( temperature );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+2.000000
+2.000000
+2.000000

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariableAllVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testSetVC.c 2421 2004-12-14 02:09:26Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main(int argc, char *argv[])
+{
+	int		rank;
+	int		procCount;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+
+	Dictionary_Entry_Value* info;
+	Dictionary_Entry_Value* varList;
+	Dictionary_Entry_Value* varValue;
+	
+	Variable_Register*		variable_Register;
+	ConditionFunction_Register*	conFunc_Register;
+
+	VariableAllVC* vc;
+
+	double*		data;
+	Index		length = 3;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	data = Memory_Alloc_Array( double, length, "test" );
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	dictionary = Dictionary_New();
+
+	info = Dictionary_Entry_Value_NewStruct();
+	varList = Dictionary_Entry_Value_NewList();
+	varValue = Dictionary_Entry_Value_NewStruct();
+
+	Dictionary_Entry_Value_AddMember( varValue, "name", Dictionary_Entry_Value_FromString( "test" ) );
+	Dictionary_Entry_Value_AddMember( varValue, "type", Dictionary_Entry_Value_FromString( "double" ) );
+	Dictionary_Entry_Value_AddMember( varValue, "value", Dictionary_Entry_Value_FromDouble( 2.0 ) );
+
+	Dictionary_Entry_Value_AddElement( varList, varValue );
+
+	Dictionary_Entry_Value_AddMember( info, "variables", varList );
+
+	Dictionary_Add( dictionary, "VariableAllVC", info );
+	
+	
+	conFunc_Register = ConditionFunction_Register_New();
+	
+	variable_Register = Variable_Register_New();
+	
+	Variable_NewScalar(
+		"test",
+		Variable_DataType_Double,
+		&length,
+		(void*)&data,
+		variable_Register );
+		
+	Variable_Register_BuildAll(variable_Register);
+	
+	vc = VariableAllVC_New( "variableAllVC", "VariableAllVC", variable_Register, conFunc_Register, dictionary, NULL );
+	
+	Build( vc, 0, False );
+	
+	VariableCondition_Apply(vc, NULL);
+	
+	if (rank == 0) {
+		int i;
+
+		for (i = 0; i < length; ++i )  {
+			Journal_Printf( stream, "%lf\n", data[i] );
+		}
+	}
+
+	Memory_Free( data );
+
+	Stg_Class_Delete(vc);
+		
+	Stg_Class_Delete(variable_Register);
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(dictionary);
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCondition_Register.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCondition_Register.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCondition_Register.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariableCondition_Register " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCondition_Register.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,158 @@
+Passed test Variable creation: Can we make the test variables properly
+Stg_Class (ptr): 0x80f586c
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: MockContext
+	_delete (func ptr): 0x804d226
+	_print (func ptr): 0x804d2b3
+	_copy (func ptr): 0x804d74f
+self->scalars (ptr): 0x80f58ac
+0.000000
+1.000000
+2.000000
+3.000000
+4.000000
+5.000000
+6.000000
+7.000000
+8.000000
+9.000000
+self->vectors (ptr): 0x80f58dc
+0.000000 0.000000 0.000000
+1.000000 1.000000 1.000000
+2.000000 2.000000 2.000000
+3.000000 3.000000 3.000000
+4.000000 4.000000 4.000000
+5.000000 5.000000 5.000000
+6.000000 6.000000 6.000000
+7.000000 7.000000 7.000000
+8.000000 8.000000 8.000000
+9.000000 9.000000 9.000000
+self->stuff (ptr): 0x80f59d4
+0.000000 0
+1.000000 1
+2.000000 2
+3.000000 3
+4.000000 4
+5.000000 5
+6.000000 6
+7.000000 7
+8.000000 8
+9.000000 9
+Variable Scalar: arrayptr (ptr) 0x80f58ac
+Variable Vector: arrayptr (ptr) 0x80f58dc
+Variable x: arrayptr (ptr) 0x80f58dc
+Variable y: arrayptr (ptr) 0x80f58dc
+Variable z: arrayptr (ptr) 0x80f58dc
+Variable Complex: arrayptr (ptr) 0x80f59d4
+Variable complexY: arrayptr (ptr) 0x80f59d4
+Variable complexZ: arrayptr (ptr) 0x80f59d4
+scalar[0]: 0.000000
+scalar[1]: 1.000000
+scalar[2]: 2.000000
+scalar[3]: 3.000000
+scalar[4]: 4.000000
+scalar[5]: 5.000000
+scalar[6]: 6.000000
+scalar[7]: 7.000000
+scalar[8]: 8.000000
+scalar[9]: 9.000000
+vector[0]: 0.000000 0.000000 0.000000
+vector[1]: 1.000000 1.000000 1.000000
+vector[2]: 2.000000 2.000000 2.000000
+vector[3]: 3.000000 3.000000 3.000000
+vector[4]: 4.000000 4.000000 4.000000
+vector[5]: 5.000000 5.000000 5.000000
+vector[6]: 6.000000 6.000000 6.000000
+vector[7]: 7.000000 7.000000 7.000000
+vector[8]: 8.000000 8.000000 8.000000
+vector[9]: 9.000000 9.000000 9.000000
+complex[0]: 0.000000 0
+complex[1]: 1.000000 1
+complex[2]: 2.000000 2
+complex[3]: 3.000000 3
+complex[4]: 4.000000 4
+complex[5]: 5.000000 5
+complex[6]: 6.000000 6
+complex[7]: 7.000000 7
+complex[8]: 8.000000 8
+complex[9]: 9.000000 9
+Passed test Variable Copying: Can the variable register and variables be copied
+Stg_Class (ptr): 0x80f6a5c
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: MockContext
+	_delete (func ptr): 0x804d226
+	_print (func ptr): 0x804d2b3
+	_copy (func ptr): 0x804d74f
+self->scalars (ptr): 0x80f6b0c
+0.000000
+1.000000
+2.000000
+3.000000
+4.000000
+5.000000
+6.000000
+7.000000
+8.000000
+9.000000
+self->vectors (ptr): 0x80f6c4c
+0.000000 0.000000 0.000000
+1.000000 1.000000 1.000000
+2.000000 2.000000 2.000000
+3.000000 3.000000 3.000000
+4.000000 4.000000 4.000000
+5.000000 5.000000 5.000000
+6.000000 6.000000 6.000000
+7.000000 7.000000 7.000000
+8.000000 8.000000 8.000000
+9.000000 9.000000 9.000000
+self->stuff (ptr): 0x80f6d9c
+0.000000 0
+1.000000 1
+2.000000 2
+3.000000 3
+4.000000 4
+5.000000 5
+6.000000 6
+7.000000 7
+8.000000 8
+9.000000 9
+Variable Scalar: arrayptr (ptr) 0x80f6b0c
+Variable Vector: arrayptr (ptr) 0x80f6c4c
+Variable x: arrayptr (ptr) 0x80f6c4c
+Variable y: arrayptr (ptr) 0x80f6c4c
+Variable z: arrayptr (ptr) 0x80f6c4c
+Variable Complex: arrayptr (ptr) 0x80f6d9c
+Variable complexY: arrayptr (ptr) 0x80f6d9c
+Variable complexZ: arrayptr (ptr) 0x80f6d9c
+scalar[0]: 0.000000
+scalar[1]: 1.000000
+scalar[2]: 2.000000
+scalar[3]: 3.000000
+scalar[4]: 4.000000
+scalar[5]: 5.000000
+scalar[6]: 6.000000
+scalar[7]: 7.000000
+scalar[8]: 8.000000
+scalar[9]: 9.000000
+vector[0]: 0.000000 0.000000 0.000000
+vector[1]: 1.000000 1.000000 1.000000
+vector[2]: 2.000000 2.000000 2.000000
+vector[3]: 3.000000 3.000000 3.000000
+vector[4]: 4.000000 4.000000 4.000000
+vector[5]: 5.000000 5.000000 5.000000
+vector[6]: 6.000000 6.000000 6.000000
+vector[7]: 7.000000 7.000000 7.000000
+vector[8]: 8.000000 8.000000 8.000000
+vector[9]: 9.000000 9.000000 9.000000
+complex[0]: 0.000000 0
+complex[1]: 1.000000 1
+complex[2]: 2.000000 2
+complex[3]: 3.000000 3
+complex[4]: 4.000000 4
+complex[5]: 5.000000 5
+complex[6]: 6.000000 6
+complex[7]: 7.000000 7
+complex[8]: 8.000000 8
+complex[9]: 9.000000 9

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariableCopy " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,356 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testVariable.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define VECTOR_DATA_COUNT (3)
+typedef double Triple[VECTOR_DATA_COUNT];
+
+struct ComplexStuff{
+	int x;
+	float y;
+	char z; /* variablise the y and z member */
+};
+typedef struct ComplexStuff ComplexStuff;
+
+#define __MockContext \
+	__Stg_Class \
+	float* scalars; \
+	Index scalarCount; \
+	Triple* vectors; \
+	Index vectorCount; \
+	ComplexStuff* stuff; \
+	Index stuffCount; \
+	SizeT complexStuffSize; \
+	Variable_Register* vr;
+
+struct MockContext { __MockContext };
+typedef struct MockContext MockContext;
+
+void _MockContext_Delete( void* mock );
+void _MockContext_Print( void* mock, Stream* stream );
+void* _MockContext_Copy( void* mock, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+MockContext* MockContext_New( Index scalarCount, Index vectorCount, Index stuffCount ) {
+	MockContext* self;
+	
+	self = (MockContext*)_Stg_Class_New(
+		sizeof( MockContext ),
+		"MockContext",
+		_MockContext_Delete,
+		_MockContext_Print,
+		_MockContext_Copy );
+
+	self->scalarCount = scalarCount;
+	self->scalars = Memory_Alloc_Array( float, self->scalarCount, "scalars" );
+
+	self->vectorCount = vectorCount;
+	self->vectors = Memory_Alloc_Array( Triple, self->vectorCount, "vectors" );
+
+	self->stuffCount = stuffCount;
+	self->stuff = Memory_Alloc_Array( ComplexStuff, self->stuffCount, "stuff" );
+
+	self->complexStuffSize = sizeof( ComplexStuff );
+	
+	self->vr = Variable_Register_New();
+
+	Variable_NewScalar(
+		"Scalar",
+		Variable_DataType_Float,
+		&(self->scalarCount),
+		(void**)&(self->scalars),
+		self->vr );
+
+	Variable_NewVector(
+		"Vector",
+		Variable_DataType_Double,
+		VECTOR_DATA_COUNT,
+		&(self->vectorCount),
+		(void**)&(self->vectors),
+		self->vr,
+		"x",
+		"y",
+		"z" );
+	{
+		ComplexStuff tmp;
+		SizeT dataOffsets[] = { 0, 0 };
+		Variable_DataType dataTypes[] = { Variable_DataType_Float, Variable_DataType_Char };
+		Index dataTypeCounts[] = { 1, 1 };
+		Name dataNames[] = { "complexY", "complexZ" };
+		
+		dataOffsets[0] = (ArithPointer)&tmp.y - (ArithPointer)&tmp;
+		dataOffsets[1] = (ArithPointer)&tmp.z - (ArithPointer)&tmp;
+
+		Variable_New(
+			"Complex",
+			2,
+			dataOffsets,
+			dataTypes,
+			dataTypeCounts,
+			dataNames,
+			&(self->complexStuffSize),
+			&(self->stuffCount),
+			(void**)&(self->stuff),
+			self->vr );
+	}
+
+	Variable_Register_BuildAll( self->vr );
+
+	return self;
+}
+
+void _MockContext_Delete( void* mock ) {
+	MockContext* self = (MockContext*)mock;
+
+	Index var_I;
+
+	for ( var_I = 0; var_I < self->vr->count; ++var_I ) {
+		Stg_Class_Delete( self->vr->_variable[var_I] );
+	}
+
+	Memory_Free( self->scalars );
+	Memory_Free( self->vectors );
+	Memory_Free( self->stuff );
+
+	Stg_Class_Delete( self->vr );
+
+	_Stg_Class_Delete( self );
+}
+void _MockContext_Print( void* mock, Stream* stream ) {
+	MockContext* self = (MockContext*)mock;
+	int ii;
+	Index var_I;
+
+	Variable* scalar;
+	Variable* vector;
+	Variable* complexStuff;
+
+	scalar = Variable_Register_GetByName( self->vr, "Scalar" );
+	vector = Variable_Register_GetByName( self->vr, "Vector" );
+	complexStuff = Variable_Register_GetByName( self->vr, "Complex" );
+	
+	_Stg_Class_Print( self, stream );
+	Journal_Printf( stream, "self->scalars (ptr): %p\n", self->scalars );
+	for ( ii = 0; ii < self->scalarCount; ++ii ) {
+		Journal_Printf( stream, "%f\n", self->scalars[ii] );
+	}
+	
+	Journal_Printf( stream, "self->vectors (ptr): %p\n", self->vectors );
+	for ( ii = 0; ii < self->vectorCount; ++ii ) {
+		Journal_Printf( 
+			stream, 
+			"%f %f %f\n", 
+			self->vectors[ii][0], 
+			self->vectors[ii][1],
+			self->vectors[ii][2] );
+	}
+	
+	Journal_Printf( stream, "self->stuff (ptr): %p\n", self->stuff );
+	for ( ii = 0; ii < self->stuffCount; ++ii ) {
+		Journal_Printf( stream, "%f %c\n", self->stuff[ii].y, self->stuff[ii].z );
+	}
+	
+
+	for ( var_I = 0; var_I < self->vr->count; ++var_I ) {
+		Journal_Printf( 
+			stream, 
+			"Variable %s: arrayptr (ptr) %p\n", 
+			Variable_Register_GetByIndex( self->vr, var_I )->name,
+			Variable_Register_GetByIndex( self->vr, var_I )->arrayPtr );
+	}
+
+	for ( ii = 0; ii < self->scalarCount; ++ii ) {
+		Journal_Printf( stream, "scalar[%d]: %f\n", ii, Variable_GetValueFloat( scalar, ii ) );
+	}
+	for ( ii = 0; ii < self->vectorCount; ++ii ) {
+		Journal_Printf( 
+			stream, 
+			"vector[%d]: %f %f %f\n", 
+			ii, 
+			Variable_GetValueAtDouble( vector, ii, 0 ),
+			Variable_GetValueAtDouble( vector, ii, 1 ),
+			Variable_GetValueAtDouble( vector, ii, 2 ) );
+	}
+	for ( ii = 0; ii < self->stuffCount; ++ii ) {
+		ComplexStuff* stuff = Variable_GetStructPtr( complexStuff, ii );
+		Journal_Printf(
+			stream,
+			"complex[%d]: %f %c\n",
+			ii,
+			stuff->y,
+			stuff->z );
+	}
+}
+void* _MockContext_Copy( void* mock, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	MockContext* self = (MockContext*)mock;
+	MockContext* newContext;
+
+	newContext = (MockContext*)_Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newContext );
+
+	newContext->scalarCount = self->scalarCount;
+	newContext->vectorCount = self->vectorCount;
+	newContext->stuffCount = self->stuffCount;
+	newContext->complexStuffSize = self->complexStuffSize;
+
+	/* Indicate the area of memory which is given for data so that Variables can attach to it */
+	PtrMap_Append( ptrMap, &(self->scalars), &(newContext->scalars) );
+	PtrMap_Append( ptrMap, &(self->vectors), &(newContext->vectors) );
+	PtrMap_Append( ptrMap, &(self->stuff), &(newContext->stuff) );
+	
+	PtrMap_Append( ptrMap, &(self->scalarCount), &(newContext->scalarCount) );
+	PtrMap_Append( ptrMap, &(self->vectorCount), &(newContext->vectorCount) );
+	PtrMap_Append( ptrMap, &(self->stuffCount), &(newContext->stuffCount) );
+	PtrMap_Append( ptrMap, &(self->complexStuffSize), &(newContext->complexStuffSize) );
+
+
+	newContext->scalars = Memory_Alloc_Array( float, self->scalarCount, "scalars" );
+	PtrMap_Append( ptrMap, self->scalars, newContext->scalars );
+	/* usually copy contents but let variables do it */
+	
+	newContext->vectors = Memory_Alloc_Array( Triple, self->vectorCount, "vectors" );
+	PtrMap_Append( ptrMap, self->vectors, newContext->vectors );
+	/* usually copy contents but let variables do it */
+
+	newContext->stuff = Memory_Alloc_Array( ComplexStuff, self->stuffCount, "stuff" );
+	PtrMap_Append( ptrMap, self->stuff, newContext->stuff );
+	/* usually copy contents but let variables do it */
+	
+
+	newContext->vr = Stg_Class_Copy( self->vr, NULL, deep, nameExt, ptrMap );
+
+	return newContext;
+}
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/Variable" );
+
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		MockContext* context;
+		MockContext* contextCopy;
+		int ii;
+
+		Variable* scalar;
+		Variable* vector;
+		Variable* complexStuff;
+
+		context = MockContext_New( 10, 10, 10 );
+		
+		scalar = Variable_Register_GetByName( context->vr, "Scalar" );
+		vector = Variable_Register_GetByName( context->vr, "Vector" );
+		complexStuff = Variable_Register_GetByName( context->vr, "Complex" );
+	
+		RegressionTest_Check( 
+			scalar != NULL &&
+			vector != NULL &&
+			complexStuff != NULL,
+			stream,
+			"Variable creation",
+			"Can we make the test variables properly" );
+			
+		for ( ii = 0; ii < context->scalarCount; ++ii ) {
+			Variable_SetValueFloat( scalar, ii, (float)ii );
+		}
+		for ( ii = 0; ii < context->vectorCount; ++ii ) {
+			Variable_SetValueAtDouble( vector, ii, 0, (double)ii );
+			Variable_SetValueAtDouble( vector, ii, 1, (double)ii );
+			Variable_SetValueAtDouble( vector, ii, 2, (double)ii );
+		}
+		for ( ii = 0; ii < context->stuffCount; ++ii ) {
+			ComplexStuff* stuff = Variable_GetStructPtr( complexStuff, ii );
+			stuff->y = (float)ii;
+			stuff->z = '0' + ii;
+		}
+		Print( context, stream );
+	
+		/* No name extension! otherwise Variable_Register_GetByName() will fail */
+		contextCopy = (MockContext*)Stg_Class_Copy( context, NULL, True, NULL, NULL );
+
+		RegressionTest_Check(
+			contextCopy != NULL,
+			stream,
+			"Variable Copying",
+			"Can the variable register and variables be copied" );
+
+		Print( contextCopy, stream );
+
+		Stg_Class_Delete( context );
+		Stg_Class_Delete( contextCopy );
+	}
+
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	RegressionTest_Finalise();
+	
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+Dumping scalar
+Dumping vector

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariableDumpStream " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,142 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ClassName.c 786 2004-02-10 12:31:53Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	Stream*		dumpStream;
+
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef double Triple[3];
+
+		double* array;
+		Triple* structArray;
+		Index length = 10;
+		
+		Variable* var;
+		Variable* vec;
+
+		Variable_Register* reg;
+
+		int i;
+
+		array = Memory_Alloc_Array( double, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Double,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Double,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+
+		Variable_Register_BuildAll( reg );
+
+		for ( i = 0; i < length; ++i ) {
+			Variable_SetValueDouble( var, i, 123.456 );
+
+			Variable_SetValueAtDouble( vec, i, 0, 1.2 );
+			Variable_SetValueAtDouble( vec, i, 1, 3.4 );
+			Variable_SetValueAtDouble( vec, i, 2, 5.6 );
+		}
+
+		dumpStream = Journal_Register( VariableDumpStream_Type, "scalar dump" );
+		VariableDumpStream_SetVariable( dumpStream, var, 1, 0, "data/scalardump.dat" );
+
+		Journal_Printf( stream, "Dumping scalar\n" );
+		Journal_Dump( dumpStream, NULL );
+
+		dumpStream = Journal_Register( VariableDumpStream_Type, "vector dump" );
+		VariableDumpStream_SetVariable( dumpStream, vec, 1, 0, "data/vectordump.dat" );
+
+		Journal_Printf( stream, "Dumping vector\n" );
+		Journal_Dump( dumpStream, NULL );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+Variable_ValueCompare( orig, compare ) = 0.030987
+Variable_ValueCompareWithinTolerance( orig, compare, tolerance ) = True

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariableValueCompare  " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testVariableValueCompare.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "test" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Variable*           orig;
+		Variable*           compare;
+		double*             data;
+		double*             data2;
+		Index               arrayCount      = 150;
+		Index               componentCount  = 4;
+		Index               index;
+		double              amp             = 0.1;
+		double              tolerance       = 0.04;
+		Variable_Register*	vr;
+
+		data = Memory_Alloc_Array( double, arrayCount * componentCount, "test" );
+		data2 = Memory_Alloc_Array( double, arrayCount * componentCount, "test" );
+		for( index = 0; index < arrayCount * componentCount; index++ ) {
+			data[index] = 1.0f / (arrayCount+2) * (index+1); 
+			data2[ index ] = data[ index ] + amp * cos( index );
+		}		
+		
+		vr = Variable_Register_New();
+		orig = Variable_NewVector( 
+				"orig", 
+				Variable_DataType_Double, 
+				componentCount,
+				&arrayCount,
+				(void**)&data,
+				vr,
+				"orig1",
+				"orig2",
+				"orig3",
+				"orig4" );
+		compare = Variable_NewVector( 
+				"compare", 
+				Variable_DataType_Double, 
+				componentCount,
+				&arrayCount,
+				(void**)&data2,
+				vr,
+				"compare1",
+				"compare2",
+				"compare3",
+				"compare4" );
+		Build( orig, 0, False );
+		Build( compare, 0, False );
+
+		Journal_PrintDouble( stream, Variable_ValueCompare( orig, compare ) );
+		Journal_PrintBool( stream, Variable_ValueCompareWithinTolerance( orig, compare, tolerance ) );
+
+		Memory_Free( data );
+		Memory_Free( data2 );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,13 @@
+Add test:
+
+GetIndex test:
+	name: testVar0 - index: 0
+	name: testVar1 - index: 1
+	name: testVar2 - index: 2
+	name: testVar3 - index: 3
+	name: testVar4 - index: 4
+	name: testVar5 - index: 5
+	name: testVar6 - index: 6
+	name: testVar7 - index: 7
+	name: testVar8 - index: 8
+	name: testVar9 - index: 9

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testVariable_Register " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testVariable_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define ARRAY_SIZE	4
+#define STRUCT_SIZE	4
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register (Info_Type, "myStream");	
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Variable_Register*	reg;
+		Variable*		var[10];
+		double			array[ARRAY_SIZE];
+		Index			arraySize = ARRAY_SIZE;
+		char*			name[10] = {"testVar0", "testVar1", "testVar2", "testVar3",
+						"testVar4", "testVar5", "testVar6", "testVar7",
+						"testVar8", "testVar9"};
+		Index			i;
+
+		for (i = 0; i < 10; i++) {
+			var[i] = Variable_NewVector( name[i], Variable_DataType_Double, 4, &arraySize, (void**)&array, 0 );
+		}
+
+		reg = Variable_Register_New();
+
+		printf("Add test:\n");
+		for (i = 0; i < 10; i++)
+		{
+			Variable_Register_Add(reg, var[i]);
+			/*Print(reg, stream);*/
+		}
+
+		printf("\nGetIndex test:\n");
+		for (i = 0; i < 10; i++)
+			printf("\tname: %s - index: %u\n", name[i], Variable_Register_GetIndex(reg, name[i]));
+
+		Stg_Class_Delete(reg);
+		for (i = 0; i < 10; i++)	
+			Stg_Class_Delete(var[i]);
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainDiscretisationIndex
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests

Added: long/3D/SNAC/trunk/StGermain/Base/Container/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,287 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Array.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "Array.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+/* Textual name of this class */
+const Type Array_Type = "Array";
+
+
+Array* Array_New( SizeT elementSize, Index count ) {
+	return _Array_New( 
+		sizeof(Array), 
+		Array_Type, 
+		_Array_Delete, 
+		_Array_Print, 
+		_Array_Copy, 
+		elementSize,
+		count );
+}
+
+
+void Array_Init( Array* self, SizeT elementSize, Index count ) {
+	/* General info */
+	self->type = Array_Type;
+	self->_sizeOfSelf = sizeof(Array);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Array_Delete;
+	self->_print = _Array_Print;
+	self->_copy = _Array_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Array info */
+	_Array_Init( self, elementSize, count );
+}
+
+
+Array* _Array_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		SizeT						elementSize, 
+		Index						count )
+{
+	Array* self;
+	
+	/* Allocate memory */
+	self = (Array*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* Array info */
+	_Array_Init( self, elementSize, count );
+	
+	return self;
+}
+
+
+void _Array_Init( Array* self, SizeT elementSize, Index count ) {
+	/* General and Virtual info should already be set */
+	
+	/* Array info */
+	self->elementSize = elementSize;
+	self->count = count;
+	self->owner = self;
+	self->ptr = Memory_Alloc_Array( char, self->elementSize * self->count, Array_Type );
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Allocating memory for the actualy data in Array failed!\n" );
+}
+
+
+void _Array_Delete( void* array ) {
+	Array* self = (Array*)array;
+
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s\" delete a pointer of value NULL\n", Array_Type );
+	
+	/* Stg_Class_Delete the class itself */
+	if( self->ptr && self->owner == self )
+		Memory_Free( self->ptr );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Array_Print( void* array, Stream* stream ) {
+	Array* self = (Array*)array;
+	
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s\" print a pointer of value NULL\n", Array_Type );
+
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Array (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* Array info */
+	Journal_Printf( stream, "\telementSize: %d\n", self->elementSize );
+	Journal_Printf( stream, "\tcount: %d\n", self->count );
+	Journal_Printf( stream, "\towner (ptr): %p\n", self->owner );
+	Journal_Printf( stream, "\tptr (ptr): %p\n", self->ptr );
+}
+
+
+void* _Array_Copy( void* array, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap  ) {
+	Array*			self = (Array*)array;
+	Array*			newArray;
+	
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s\" copy a pointer of value NULL\n", Array_Type );
+	
+	/* Copy parent */
+	newArray = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newArray->elementSize = self->elementSize;
+	newArray->count = self->count;
+	
+	if( deep ) {
+		newArray->ptr = Memory_Alloc_Array( char, self->elementSize * self->count, Array_Type );
+		Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, Array_Type ), 
+			"Allocating memory for the actualy data in Array failed!\n" );
+		
+		newArray->owner = newArray;
+		memcpy( newArray->ptr, self->ptr, newArray->elementSize * newArray->count );
+	}
+	else {
+		newArray->owner = self;
+		newArray->ptr = self->ptr;
+	}
+	
+	return newArray;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+SizeT Array_ElementSizeFunc( void* array ) {
+	Array* self = (Array*)array;
+
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_ElementSize\" a pointer of value NULL\n", Array_Type );
+	
+	return Array_ElementSizeMacro( self );
+}
+
+
+Index Array_CountFunc( void* array ) {
+	Array* self = (Array*)array;
+		
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_Count\" a pointer of value NULL\n", Array_Type );
+	
+	return Array_CountMacro( self );
+}
+
+
+Bool Array_IOwnFunc( void* array ) {
+	Array* self = (Array*)array;
+		
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_IOwn\" a pointer of value NULL\n", Array_Type );
+	
+	return Array_IOwnMacro( self );
+}
+
+
+void* Array_OwnerFunc( void* array ) {
+	Array* self = (Array*)array;
+	
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_Owner\" a pointer of value NULL\n", Array_Type );
+	
+	return Array_OwnerMacro( self );
+}
+
+
+void* Array_PtrFunc( void* array ) {
+	Array* self = (Array*)array;
+	
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_Ptr\" a pointer of value NULL\n", Array_Type );
+	
+	return Array_PtrMacro( self );
+}
+
+
+void* Array_AtFunc( void* array, Index index ) {
+	Array* self = (Array*)array;
+		
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_At\" a pointer of value NULL\n", Array_Type );
+	
+	/* Bounds check... important that it is done right here... the macro purposely calls the func on failure such that the
+	   func can firewall (not-nice in macro). */
+	Journal_Firewall( 
+		index < Array_Count( self ),  
+		Journal_Register( ErrorStream_Type, Array_Type ), 
+		"Attempting to \"%s_At\" an array with an index out of bounds (index: %u. count: %u)\n", 
+		Array_Type, 
+		index, 
+		Array_Count( self ) );
+	
+	return Array_AtMacro( self, index );
+}
+
+
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	An Array implements a typical static/dynamic c-styled array whilst also maintaining information about the number of elements
+**	in the array and the size of each element. It creates the actual array on construction and has copying implemented.
+**
+** Assumptions:
+**	The array content is of non-pointer form... i.e. if the array content also needs a custom copying behaviour then one needs
+**	to replace the Copy implementation with the smarts.
+**
+** Invariants:
+**
+** Comments:
+**	Copy in the deep and shallow forms work. In the shallow case, the data points to the source's data. It is safe to delete,
+**	as a check is done to see if it owns the data first. The deep case will copy the source's data.
+**	
+**	TODO: If MACRO_AS_FUNC and DEBUG is enabled, then the functions also check that the if we don't own the data we'll check to
+**	ensure it hasn't been de-allocated.
+**
+** $Id: Array.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_Array_h__
+#define __Base_Container_Array_h__
+	
+
+	/** Textual name of this class */
+	extern const Type Array_Type;
+
+	/** Array class contents */
+	#define __Array \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Array info ... */ \
+		SizeT					elementSize; \
+		Index					count; \
+		Array*					owner; \
+		void*					ptr;
+
+	/** Defines key information about an object/struct extension - see Array.h. */
+	struct Array { __Array };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Create a new Array */
+	Array* Array_New( SizeT elementSize, Index count );
+	
+	/* Initialise a Array */
+	void Array_Init( Array* self, SizeT elementSize, Index count );
+	
+	/* Creation implementation */
+	Array* _Array_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		SizeT						elementSize, 
+		Index						count );
+	
+	/* Initialisation implementation functions */
+	void _Array_Init( Array* self, SizeT elementSize, Index count );
+	
+	/* Class_Delete() implementation */
+	void _Array_Delete( void* array );
+	
+	/* Stg_Class_Print() implementation */
+	void _Array_Print( void* array, Stream* stream );
+	
+	/** Stg_Class_Copy() implementation: derivatives should call this in their implementation */
+	void* _Array_Copy( void* array, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Obtain the element size of the array */
+	#define Array_ElementSizeMacro( self ) \
+		( (self)->elementSize )
+	SizeT Array_ElementSizeFunc( void* array );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the element size of the array */
+		#define Array_ElementSize Array_ElementSizeFunc
+	#else
+		/** Obtain the element size of the array */
+		#define Array_ElementSize Array_ElementSizeMacro
+	#endif
+	
+	/* Obtain the number of elements in the array */
+	#define Array_CountMacro( self ) \
+		( (self)->count )
+	Index Array_CountFunc( void* array );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the number of elements in the array */
+		#define Array_Count Array_CountFunc
+	#else
+		/** Obtain the number of elements in the array */
+		#define Array_Count Array_CountMacro
+	#endif
+	
+	/* Do I own the array (memory allocation)? */
+	#define Array_IOwnMacro( self ) \
+		( (self)->owner == (self) )
+	Bool Array_IOwnFunc( void* array );
+	#ifdef MACRO_AS_FUNC
+		/** Do I own the array (memory allocation)? */
+		#define Array_IOwn Array_IOwnFunc
+	#else
+		/** Do I own the array (memory allocation)? */
+		#define Array_IOwn Array_IOwnMacro
+	#endif
+	
+	/* Who owns the array (memory allocation)? */
+	#define Array_OwnerMacro( self ) \
+		( (self)->owner )
+	void* Array_OwnerFunc( void* array );
+	#ifdef MACRO_AS_FUNC
+		/** Who owns the array (memory allocation)? */
+		#define Array_Owner Array_OwnerFunc
+	#else
+		/** Who owns the array (memory allocation)? */
+		#define Array_Owner Array_OwnerMacro
+	#endif
+	
+	/* Obtain the array pointer */
+	#define Array_PtrMacro( self ) \
+		( (self)->ptr )
+	void* Array_PtrFunc( void* array );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the array pointer */
+		#define Array_Ptr Array_PtrFunc
+	#else
+		/** Obtain the array pointer */
+		#define Array_Ptr Array_PtrMacro
+	#endif
+	
+	/* Obtain an element of the array */
+	#define Array_AtMacro( self, index ) \
+		( index < Array_Count( (self) ) ? \
+			(void*)((ArithPointer)Array_Ptr( (self) ) +  (self)->elementSize * (index) ) : \
+			Array_AtFunc( (self), (index) ) )
+	void* Array_AtFunc( void* array, Index index );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain an element of the array */
+		#define Array_At Array_AtFunc
+	#else
+		/** Obtain an element of the array */
+		#define Array_At Array_AtMacro
+	#endif
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Container_Array_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,701 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: BTreeNode.c 2038 2004-11-15 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type BTree_Type = "BTree";
+
+BTree *_BTree_New(
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy
+		)
+{
+	BTree *self = NULL;
+
+	/** BTree has to be malloced instead of using Class_New, because Class_New uses Memory_Alloc, but the Memory module will not have been
+	 *  initialized at this stage */
+	
+	self = (BTree*)malloc( _sizeOfSelf );
+	memset( self, 0, _sizeOfSelf );
+	
+	self->_sizeOfSelf = _sizeOfSelf;
+	self->_deleteSelf = True;
+	self->type = type;
+	self->_delete = _delete;
+	self->_print = _print;
+	self->_copy = _copy;
+	
+	return self;
+}
+
+BTree *BTree_New( 
+		BTree_compareFunction*		compareFunction,
+		BTree_dataCopyFunction*		dataCopyFunction,
+		BTree_dataDeleteFunction*	dataDeleteFunction,
+		BTree_dataPrintFunction*	dataPrintFunction,
+		BTreeProperty				property)
+{
+	
+	BTree* self;
+	
+	/* Allocate memory */
+	assert ( compareFunction );
+	
+	self = _BTree_New(
+			sizeof(BTree),
+			BTree_Type,
+			_BTree_DeleteFunc,
+			_BTree_PrintFunc,
+			NULL
+			);
+	/* General info */
+	
+	/* Virtual functions */
+	
+	self->compareFunction = compareFunction;
+	self->dataCopyFunction = dataCopyFunction;
+	self->dataDeleteFunction = dataDeleteFunction;
+	self->dataPrintFunction = dataPrintFunction;
+	self->property = property;
+
+	BTree_Init( self );	
+	return self;
+}
+
+void _BTree_Init( BTree* self )
+{
+
+	assert(self);
+	self->root = NIL;
+}
+
+void BTree_Init( BTree *self )
+{
+	_BTree_Init( self );
+}
+
+void BTree_LeftRotate( BTree *tree, BTreeNode *x ) 
+{
+ 
+	BTreeNode *root;
+	BTreeNode *y;
+	 
+	assert( tree );
+	assert( x );
+	
+	y = x->right;
+	root = tree->root;
+ 
+ 
+	if (x == NIL){
+	}
+	
+	/* establish x->right link */
+	x->right = y->left;
+	if ( y->left != NIL ) y->left->parent = x;
+ 
+	/* establish y->parent link */
+	if (y != NIL) {
+		y->parent = x->parent;
+	}
+	
+	if ( x->parent ) {
+		if (x == x->parent->left)
+		{
+             x->parent->left = y;
+		}
+		else{
+             x->parent->right = y;
+		}
+	} 
+	else{
+		tree->root = y;
+	}
+ 
+	/* link x and y */
+	y->left = x;
+	if (x != NIL){
+		x->parent = y;
+	}
+ }
+ 
+void BTree_RightRotate( BTree *tree, BTreeNode *x ) {
+ 
+	BTreeNode *root;
+	BTreeNode *y;
+	
+	assert( tree );
+	assert( x );
+	
+	y = x->left;
+	root = tree->root;
+ 
+ 
+	if( x == NIL ){
+	}
+
+	/* establish x->left link */
+	x->left = y->right;
+	if (y->right != NIL){
+		y->right->parent = x;
+	}
+		
+	/* establish y->parent link */
+	if (y != NIL) {
+		y->parent = x->parent;
+	}
+	
+	if( x->parent ){
+		if (x == x->parent->right){
+			x->parent->right = y;
+		}
+        else{
+             x->parent->left = y;
+		}
+	}
+	else{
+		tree->root = y;
+	}
+ 
+	/* link x and y */
+	y->right = x;
+	if (x != NIL){
+		x->parent = y;
+	}
+}
+
+void BTree_InsertFix (BTree *tree, BTreeNode *x){
+	
+	BTreeNode *y = NIL, *root;
+
+	assert ( tree );
+	assert ( x );
+
+	root = tree->root;
+	
+	while ( ( x != root ) && ( x->parent->color == BTREE_NODE_RED ) ){
+    	if ( x->parent == x->parent->parent->left ) {
+			/* If x's parent is a left, y is x's right 'uncle' */
+			y = x->parent->parent->right;
+			
+			if ( y->color == BTREE_NODE_RED ) {
+				/* case 1 - change the colours */
+				x->parent->color = BTREE_NODE_BLACK;
+				y->color = BTREE_NODE_BLACK;
+				x->parent->parent->color = BTREE_NODE_RED;
+				/* Move x up the tree */
+				x = x->parent->parent;
+			}
+			else{
+				/* y is a BTREE_NODE_BLACK node */
+				if ( x == x->parent->right ) {
+					/* and x is to the right  */
+					/* case 2 - move x up and rotate */
+					x = x->parent;
+					BTree_LeftRotate( tree, x );
+				}
+				/* case 3 */
+				x->parent->color = BTREE_NODE_BLACK;
+				x->parent->parent->color = BTREE_NODE_RED;
+				BTree_RightRotate( tree, x->parent->parent );
+			}
+		}
+		else if ( x->parent == x->parent->parent->right ){
+			
+			/* If x's parent is a right, y is x's right 'uncle' */ 
+			y = x->parent->parent->left;
+			
+				if ( y->color == BTREE_NODE_RED ) {
+					/* case 1 - change the colours */
+					x->parent->color = BTREE_NODE_BLACK;
+					y->color = BTREE_NODE_BLACK;
+					x->parent->parent->color = BTREE_NODE_RED;
+					/* Move x up the tree */
+					x = x->parent->parent;
+				}
+				else{
+					/* y is a BTREE_NODE_BLACK node */
+					if ( x == x->parent->left ) {
+						/* and x is to the right  */
+						/* case 2 - move x up and rotate */ 
+						x = x->parent;
+						BTree_RightRotate( tree, x );
+					}
+					/* case 3 */
+					x->parent->color = BTREE_NODE_BLACK;
+					x->parent->parent->color = BTREE_NODE_RED;
+					BTree_LeftRotate( tree, x->parent->parent );
+				}
+		}
+		else{
+
+		}
+	}
+
+	/* Colour the root BTREE_NODE_BLACK */
+	tree->root->color = BTREE_NODE_BLACK;
+}
+/* The BTree_Insert function assumes that the compare function accepts two void pointers to NodeData as arguments */
+int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT sizeOfData ){
+	
+	BTreeNode *curr, *spot, *newNode;
+
+	assert ( tree );
+	assert ( newNodeData );
+	/*assert ( sizeOfData > 0 ); removed for PtrSet - Luke */
+	
+	curr = tree->root;
+	
+	newNode = BTreeNode_New();
+	newNode->sizeOfData = sizeOfData;
+	
+	if ( tree->dataCopyFunction ){
+		tree->dataCopyFunction ( &newNode->data, newNodeData, newNode->sizeOfData);
+	}
+	else{
+		newNode->data = newNodeData;
+	}
+	
+	spot = NULL;
+	while ( curr != NIL ){
+		spot = curr;
+		if ( tree->compareFunction( newNode->data, curr->data ) > 0 ){
+			curr = curr->right;
+		}
+		else if( tree->compareFunction( newNode->data, curr->data ) == 0 ){
+			if( tree->property == BTREE_ALLOW_DUPLICATES ){
+				curr = curr->right;
+			}
+			else{
+				if( tree->dataDeleteFunction )
+					tree->dataDeleteFunction( newNode->data );
+				free( newNode );
+				return 0;
+			}
+		}
+		else
+		{
+			curr = curr->left;
+		}
+	}
+
+	if (spot){
+		
+		newNode->parent = spot;
+		if ( tree->compareFunction( newNode->data, spot->data ) < 0 ){
+			spot->left = newNode;
+		}
+		else{
+			spot->right = newNode;
+		}
+	}
+	else{
+		tree->root = newNode;
+	}
+
+	BTree_InsertFix ( tree, newNode );
+	++tree->nodeCount;
+#if	0
+	printf ("nodeCount from insert%d\n", tree->nodeCount);
+#endif
+	return 1;
+}
+
+void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction )
+{
+	assert( tree );
+	assert( compareFunction );
+	
+	tree->compareFunction = compareFunction;
+}
+
+BTreeNode *BTree_FindNode( BTree *tree, void *data ){
+	BTreeNode *curr = NIL;
+	int result;
+
+	assert ( tree );
+
+	if ( data == NULL ){
+		return NULL;
+	}
+	
+	curr = tree->root;
+
+#if 0
+	printf ( "[Finding Node---------\n" );
+#endif
+	
+	while (curr != NIL){
+		result = tree->compareFunction ( (void*) curr->data, (void*) data );
+		if ( result == 0 ){
+			
+#if 0
+			printf ( "\tFound node after %d hops\n\n", hops );
+#endif			
+
+#if 0
+	printf ( "Finding Node---------]\n" );
+#endif
+
+			return curr;
+		}
+		else{
+			if ( result > 0 ){
+				curr = curr->left;
+			}
+			else{
+				curr = curr->right;
+			}
+		}
+	}
+#if 0
+	printf ( "Finding Node---------]\n" );
+#endif
+	return NULL;
+}
+
+BTreeNode *BTree_FindNodeAndHops( BTree *tree, void *data, int *hops ){
+	BTreeNode *curr = NIL;
+	int result;
+
+	assert ( tree );
+	assert( hops );
+
+	if ( data == NULL ){
+		return NULL;
+	}
+	
+	curr = tree->root;
+	*hops = 0;
+
+#if 0
+	printf ( "[Finding Node---------\n" );
+#endif
+	
+	while (curr != NIL){
+		result = tree->compareFunction ( (void*) curr->data, (void*) data );
+		if ( result == 0 ){
+			
+#if 0
+			printf ( "\tFound node after %d hops\n\n", hops );
+#endif			
+
+#if 0
+	printf ( "Finding Node---------]\n" );
+#endif
+
+			return curr;
+		}
+		else{
+			(*hops)++;
+			
+			if ( result > 0 ){
+				curr = curr->left;
+			}
+			else{
+				curr = curr->right;
+			}
+		}
+	}
+#if 0
+	printf ( "\tFailed to find node after %d hops\n\n", hops );
+#endif
+#if 0
+	printf ( "Finding Node---------]\n" );
+#endif
+	return NULL;
+}
+
+void BTree_DeleteFixup( BTree *tree, BTreeNode *x ) {
+ 
+	BTreeNode *root, *w;
+
+	assert( tree );
+	assert ( x );
+	
+	root = tree->root;
+	while ( x != root && x->color == BTREE_NODE_BLACK ) {
+		if ( x == x->parent->left ) {
+			w = x->parent->right;
+			if ( w->color == BTREE_NODE_RED ) {
+				w->color = BTREE_NODE_BLACK;
+				x->parent->color = BTREE_NODE_RED;
+				BTree_LeftRotate ( tree, x->parent );
+				w = x->parent->right;
+			}
+			if ( w->left->color == BTREE_NODE_BLACK && w->right->color == BTREE_NODE_BLACK ) {
+				w->color = BTREE_NODE_RED;
+				x = x->parent;
+			} else {
+				if ( w->right->color == BTREE_NODE_BLACK ) {
+					w->left->color = BTREE_NODE_BLACK;
+					w->color = BTREE_NODE_RED;
+					BTree_RightRotate ( tree, w );
+					w = x->parent->right;
+				}
+				w->color = x->parent->color;
+				x->parent->color = BTREE_NODE_BLACK;
+				w->right->color = BTREE_NODE_BLACK;
+				BTree_LeftRotate ( tree, x->parent );
+				x = root;
+			}
+		} else {
+			w = x->parent->left;
+			if ( w->color == BTREE_NODE_RED ) {
+				w->color = BTREE_NODE_BLACK;
+				x->parent->color = BTREE_NODE_RED;
+				BTree_RightRotate ( tree, x->parent );
+				w = x->parent->left;
+			}
+			if ( w->right->color == BTREE_NODE_BLACK && w->left->color == BTREE_NODE_BLACK ) {
+				w->color = BTREE_NODE_RED;
+				x = x->parent;
+			} else {
+				if ( w->left->color == BTREE_NODE_BLACK ) {
+					w->right->color = BTREE_NODE_BLACK;
+					w->color = BTREE_NODE_RED;
+					BTree_LeftRotate ( tree, w );
+					w = x->parent->left;
+				}
+				w->color = x->parent->color;
+				x->parent->color = BTREE_NODE_BLACK;
+				w->left->color = BTREE_NODE_BLACK;
+				BTree_RightRotate ( tree, x->parent );
+				x = root;
+			}
+		}
+	}
+	x->color = BTREE_NODE_BLACK;
+}
+ 
+void BTree_DeleteNode( BTree *tree, BTreeNode *z ) {
+	BTreeNode *x, *y;
+ 
+	assert( tree );
+	
+	if ( !z || z == NIL ) return;
+ 
+	assert ( z );
+	
+	if ( z->left == NIL || z->right == NIL ) {
+		/* y has a NIL node as a child */
+		y = z;
+	} else {
+		/* find tree successor with a NIL node as a child */
+		y = z->right;
+		while ( y->left != NIL ) y = y->left;
+	}
+ 
+	/* x is y's only child */
+	if ( y->left != NIL )
+		x = y->left;
+	else
+		x = y->right;
+ 
+	/* remove y from the parent chain */
+	x->parent = y->parent;
+	
+	if ( y->parent ){
+		if ( y == y->parent->left ){
+			y->parent->left = x;
+		}
+		else{
+			y->parent->right = x;
+		}
+	}
+	else{
+		tree->root = x;
+	}
+ 
+	if ( y != z ){
+		if ( tree->dataCopyFunction ){
+		   	tree->dataCopyFunction ( &z->data, y->data, y->sizeOfData );
+		}
+		else{
+			z->data = y->data;
+		}
+	}
+ 
+ 
+	if ( y->color == BTREE_NODE_BLACK ){
+		BTree_DeleteFixup ( tree, x );
+	}
+ 
+	if ( tree->dataDeleteFunction ){
+		tree->dataDeleteFunction( (void*) y->data );
+	}
+	free ( y );
+	--tree->nodeCount;
+#if	0
+	printf ("nodeCount from delete %d\n", tree->nodeCount);
+#endif
+}
+
+void BTree_ParseTreeNode( BTreeNode *root, BTree_parseFunction *parseFunction, void *args ){
+
+	assert ( root );
+	assert ( parseFunction );
+	
+	if ( root == NIL ){
+		return;
+	}
+	
+	BTree_ParseTreeNode( root->left, parseFunction, args );
+	
+	assert ( root->data );
+	parseFunction ( root->data, args );
+	
+	BTree_ParseTreeNode( root->right, parseFunction, args );
+}
+
+void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args ){
+
+	assert ( tree );
+	assert ( parseFunction );
+	
+	if ( tree->root == NIL ){
+		return;
+	}
+	
+	BTree_ParseTreeNode(tree->root, parseFunction, args);
+}
+
+void* BTree_GetData( BTreeNode *node )
+{
+	if ( node == NULL ){
+		return NULL;
+	}
+	else{
+		return (void*) node->data;
+	}
+}
+
+void _BTree_DeleteFunc_Helper( BTreeNode *node, BTree_dataDeleteFunction *nodeDataDeleteFunc )
+{
+	BTreeNode *left = NULL;
+	BTreeNode *right = NULL;
+	
+	if( node != NULL ){
+		if ( node == NIL ){
+			return;
+		}
+	
+		left = node->left;
+		right = node->right;
+		
+		_BTree_DeleteFunc_Helper( left, nodeDataDeleteFunc );
+		
+		if( node->data != NULL ){
+			if( nodeDataDeleteFunc != NULL ){
+				nodeDataDeleteFunc( node->data );
+			}
+			/** The BTree_Delete function will not attempt to delete any NodeData unless a nodeDataDeleteFunction is explicitly specified by the user */
+#if 0
+			else{
+				free( node->data );
+			}
+#endif
+		}
+		free( node );
+
+		_BTree_DeleteFunc_Helper( right, nodeDataDeleteFunc );
+	}
+}
+
+void _BTree_DeleteFunc( void *self )
+{
+	BTree *tree = NULL;
+	
+	tree = (BTree*) self;
+	assert( tree );
+
+	_BTree_DeleteFunc_Helper( tree->root, tree->dataDeleteFunction );
+	tree->nodeCount = 0;
+	/* freeing the tree instead of using class_delete, because it was initially malloced */
+	free( tree );
+}
+
+void _BTree_PrintFunc_Helper( BTreeNode *node, BTree_dataPrintFunction *nodeDataPrintFunc, Stream *myStream )
+{
+	if( node != NULL ){
+		if ( node == NIL ){
+			return;
+		}
+		assert( myStream );
+
+		_BTree_PrintFunc_Helper( node->left, nodeDataPrintFunc, myStream );
+		if( node->data != NULL ){
+			if( nodeDataPrintFunc != NULL ){
+				nodeDataPrintFunc( node->data, myStream );
+			}
+			else{
+				Journal_Printf( myStream, "\tData - (ptr): (%p)\n", node->data );
+			}
+		}
+		_BTree_PrintFunc_Helper( node->right, nodeDataPrintFunc, myStream );
+	}
+}
+
+void _BTree_PrintFunc( void *self, Stream *myStream )
+{
+	BTree *tree = NULL;
+
+	tree = (BTree*) self;
+	assert( tree );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) tree, myStream );
+
+	/* general info */
+	Journal_Printf( myStream, "BTree (ptr): (%p)\n", tree );
+	
+	_BTree_PrintFunc_Helper( tree->root, tree->dataPrintFunction, myStream );
+	/* Virtual Info */
+
+	/* BTree Info */
+	
+}
+
+void BTree_Delete( void* tree ) {
+	Stg_Class_Delete( tree );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,161 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: BTree.h 2087 2004-11-15 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __Base_Foundation__BTree_h__
+#define __Base_Foundation__BTree_h__
+
+#define MAX_DEPTH 100
+
+	/** Textual name for BTree class. */
+	extern const Type BTree_Type;
+	
+	/** Virtual Function Pointers */
+		/** This is a function type to be provided by the user for doing comparisons on node data */
+	typedef int		(BTree_compareFunction)		( void *, void * );
+		
+		/** This is a function type to be provided by the user for copying node data, when a new node is being created */
+	typedef void	(BTree_dataCopyFunction)	( void **, void *, SizeT );
+		
+		/** This is a function type to be provided by the user for deleting node data, when node is being deleted */
+	typedef void	(BTree_dataDeleteFunction)	( void * );
+
+		/** This is a function type to be provided by the user for printing the contents of a node's data */
+	typedef void	(BTree_dataPrintFunction)	( void *, Stream * );
+	
+		/** This is a function type to be provided by the user, which can be applied to each node on the tree later on.
+		 * The first argument is the data stored inside a node and the second argument can be a single argument or a 
+		 * struct of arguments that needs to be passed to the user-supplied function */
+	typedef void	(BTree_parseFunction)		( void *, void * );
+	
+	/** \def __BTree See __BTree */
+	#define __BTree \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* BTree info */ \
+		BTreeNode					*root; \
+		BTree_compareFunction*		compareFunction; \
+		BTree_dataCopyFunction*		dataCopyFunction; \
+		BTree_dataDeleteFunction*	dataDeleteFunction; \
+		BTree_dataPrintFunction*	dataPrintFunction; \
+		BTreeProperty				property; \
+		Index						nodeCount;
+		
+	struct BTree { __BTree };
+	
+
+	/** Constructor interface. */
+	BTree* BTree_New( 
+		BTree_compareFunction*		compareFunction,
+		BTree_dataCopyFunction*		dataCopyFunction,
+		BTree_dataDeleteFunction*	dataDeleteFunction,
+		BTree_dataPrintFunction*	dataPrintFunction,
+		BTreeProperty				property);
+	
+	BTree *_BTree_New(
+			SizeT					_sizeOfSelf,
+			Type					type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print,
+			Stg_Class_CopyFunction*		_copy
+			);
+	
+	/** Init interface. */
+	void _BTree_Init( BTree* self );
+	
+	void BTree_Init( BTree* self );
+
+	/** Stg_Class_Delete Interface */
+	void _BTree_DeleteFunc_Helper( BTreeNode *, BTree_dataDeleteFunction * );
+	void _BTree_DeleteFunc( void *self );
+
+	/** Print Interface */
+	void _BTree_PrintFunc_Helper( BTreeNode *, BTree_dataPrintFunction *, Stream * );
+	void _BTree_PrintFunc( void *, Stream * );
+	
+	/** Stg_Class_Delete interface. */
+	
+	/** Print interface. */
+
+	/** Public functions */
+		/** Inserts a new node into the tree */
+	int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT );
+		
+		/** Sets the compare function to be used by the tree */
+	void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction );
+	
+		/** Attempts to find a node in the tree */
+	BTreeNode *BTree_FindNode( BTree *tree, void *data );
+	
+		/** This function is similar to the one above and returns the number of hops needed to reach the target node */
+	BTreeNode *BTree_FindNodeAndHops( BTree *tree, void *data, int *hops );
+	
+		/** Deletes a node from the tree */
+	void BTree_DeleteNode( BTree *tree, BTreeNode *z );
+		
+		/** Parses the tree and executes a user-supplied function */
+	void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args );
+	
+		/*Parses the tree downwards from a given node in the tree*/
+	void BTree_ParseTreeNode( BTreeNode *root, BTree_parseFunction *parseFunction, void *args );
+
+		/* Returns the data stored inside a node in the tree */
+	void *BTree_GetData( BTreeNode *node );
+
+	/** Private Functions */
+	
+		/** Left Rotates a Node in the tree */
+	void BTree_LeftRotate ( BTree *tree, BTreeNode *x );
+
+		/** Right Rotates a Node in the tree */
+	void BTree_RightRotate ( BTree *tree, BTreeNode *y );
+
+		/** Fixes up the tree to preserve the RedBlack-ness of the tree after node insertion*/
+	void BTree_InsertFix (BTree *tree, BTreeNode *x);
+
+		/** Fixes up the tree to preserve the RedBlack-ness of the tree after node deletion*/
+	void BTree_DeleteFixUp( BTree *tree, BTreeNode *x );
+	
+		/** Added ss alias to Stg_Class_Delete for forward declaraion wrappers */
+	void BTree_Delete( void* tree );
+	
+#endif /* __Base_Foundation__BTree_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,178 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: BTreeIterator.c 2038 2005-04-16 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+#include "BTreeIterator.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type BTreeIterator_Type = "BTreeIterator";
+
+BTreeIterator *_BTreeIterator_New(
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy
+		)
+{
+	BTreeIterator *self = NULL;
+
+	/** BTreeIterator has to be malloced instead of using Class_New, because Class_New uses Memory_Alloc, 
+	 *  but the Memory module will not have been initialized at this stage */
+	
+	self = (BTreeIterator*)malloc( _sizeOfSelf );
+	memset( self, 0, _sizeOfSelf );
+	
+	self->_sizeOfSelf = _sizeOfSelf;
+	self->_deleteSelf = True;
+	self->type = type;
+	self->_delete = _delete;
+	self->_print = _print;
+	self->_copy = _copy;
+	
+	return self;
+}
+
+BTreeIterator *BTreeIterator_New( BTree *tree )
+{
+	
+	BTreeIterator* self;
+	
+	assert( tree );
+	self = _BTreeIterator_New(
+			sizeof(BTreeIterator),
+			BTreeIterator_Type,
+			_BTreeIterator_DeleteFunc,
+			_BTreeIterator_PrintFunc,
+			NULL
+			);
+	/* General info */
+	
+	/* Virtual functions */
+	
+	self->tree = tree;
+	
+	BTreeIterator_Init( self );	
+	return self;
+}
+
+void _BTreeIterator_Init( BTreeIterator* self )
+{
+
+	assert(self);
+	self->depth = 0;
+}
+
+void BTreeIterator_Init( BTreeIterator *self )
+{
+	_BTreeIterator_Init( self );
+}
+
+void *BTreeIterator_First( BTreeIterator *self  )
+{
+	BTreeNode *node = NULL;
+	assert( self );
+	assert( self->tree );
+
+	self->depth = -1;
+
+	node = self->tree->root;
+	while( node != NIL ){
+		self->depth++;
+		self->stack[self->depth] = node;
+		node = node->left;
+	}
+	
+	if( self->depth < 0 ){
+		return NULL;
+	}
+	return self->stack[self->depth]->data;
+}
+
+void *BTreeIterator_Next( BTreeIterator *self )
+{
+	BTreeNode *node = NULL;
+	
+	assert( self );
+	assert( self->tree );
+
+	if( self->depth < 0 ){
+		return NULL;
+	}
+	
+	node = self->stack[self->depth];
+	self->depth--;
+	node = node->right;
+	
+	while( node != NIL ){
+		self->depth ++;
+		self->stack[self->depth] = node;
+		node = node->left;
+	}
+
+	if( self->depth < 0 ){
+		return NULL;
+	}
+	else{
+		return self->stack[self->depth]->data;
+	}
+}
+
+void _BTreeIterator_DeleteFunc( void *self )
+{
+	if( self ){
+		free( self );
+		/* freeing the Iterator instead of using class_delete, because it was initially malloced */
+	}
+}
+
+void _BTreeIterator_PrintFunc( void *self, Stream *myStream )
+{
+	BTreeIterator *iterator = NULL;
+
+	iterator = (BTreeIterator*) self;
+	assert( iterator );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) iterator, myStream );
+
+	/* general info */
+	Journal_Printf( myStream, "BTreeIterator (ptr): (%p)\n", iterator );
+	Journal_Printf( myStream, "\tTree (ptr): (%p)\n", iterator->tree );
+	Journal_Printf( myStream, "\tDepth : %d\n", iterator->depth );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,90 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: BTreeIterator.h 2087 2005-4-16 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __Base_Foundation__BTreeIterator_h__
+#define __Base_Foundation__BTreeIterator_h__
+
+#define MAX_DEPTH 100
+
+	/** Textual name for BTreeIterator class. */
+	extern const Type BTreeIterator_Type;
+	
+	/** Virtual Function Pointers */
+	
+	/** \def __BTreeIterator_Iterator See __BTree_Iterator */
+	#define __BTreeIterator \
+		__Stg_Class \
+		BTree						*tree; \
+		int							depth; \
+		BTreeNode					*stack[MAX_DEPTH];
+	
+	struct BTreeIterator { __BTreeIterator };
+	
+
+	/** Constructor interface. */
+	BTreeIterator* BTreeIterator_New( BTree *tree );
+	
+	BTreeIterator *_BTreeIterator_New(
+			SizeT					_sizeOfSelf,
+			Type					type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print,
+			Stg_Class_CopyFunction*		_copy
+			);
+	
+	/** Init interface. */
+	void _BTreeIterator_Init( BTreeIterator *self );
+	
+	void BTreeIterator_Init( BTreeIterator *self );
+
+	/** Stg_Class_Delete Interface */
+	void _BTreeIterator_DeleteFunc( void *self );
+
+	/** Print Interface */
+	void _BTreeIterator_PrintFunc( void *, Stream * );
+	
+	/** Public Functions **/
+		/* Returns the data stored inside the Tree's first node ( will be used for iterating through the tree ) */
+	void *BTreeIterator_First( BTreeIterator *self );
+		
+	/* Returns the data stored inside the Tree's next node ( will be used for iterating through the tree ) */
+	void *BTreeIterator_Next( BTreeIterator *self );
+	
+#endif /* __Base_Foundation__BTreeIterator_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: BTreeNode.c 2038 2004-11-15 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "BTreeNode.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type BTreeNode_Type = "BTreeNode";
+
+BTreeNode terminal = { BTREE_NODE_BLACK, NULL, 0, NIL, NIL, NULL };
+
+BTreeNode* BTreeNode_New( void )
+{
+	BTreeNode* self;
+	
+	/* Allocate memory */
+	self = ( BTreeNode* ) malloc ( sizeof( BTreeNode ) );
+	memset ( self, 0, sizeof ( BTreeNode ) );
+
+	assert ( self );
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* NamedObject info */
+	self->parent = NULL;
+	self->left = NIL;
+	self->right = NIL;
+	self->color = BTREE_NODE_RED;
+	_BTreeNode_Init( self );
+	
+	return self;
+}
+
+void _BTreeNode_Init( BTreeNode* self ){
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* BTreeNode info */
+	assert ( self );
+	self->data = NULL;
+	self->sizeOfData = 0;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: BTreeNode.h 2087 2004-11-15 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __Base_Foundation__BTreeNode_h__
+#define __Base_Foundation__BTreeNode_h__
+
+	/** Textual name for BTreeNode class. */
+	extern const Type BTreeNode_Type;
+
+	/** \def __BTreeNode See BTreeNode */
+	#define __BTreeNode \
+		/* General info */ \
+		\
+		/* Virtual info */ \
+		\
+		/* BTree info */ \
+		Color				color; \
+		void 				*data; \
+		SizeT				sizeOfData; \
+		struct BTreeNode	*left; \
+		struct BTreeNode	*right; \
+		struct BTreeNode	*parent; 
+
+	struct BTreeNode { __BTreeNode };
+
+
+	extern BTreeNode terminal;
+	#define NIL &terminal
+
+
+	/** Constructor interface. */
+	BTreeNode *BTreeNode_New ( void );
+	
+	/** Init interface. */
+	void _BTreeNode_Init( BTreeNode *self );
+	
+	/** Stg_Class_Delete interface. */
+	
+	/** Print interface. */
+
+#endif /* __Base_Foundation__BTreeNode_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Container.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Container.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Container.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	External header file to this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Container.h 3784 2006-09-06 10:01:39Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_h__
+#define __Base_Container_h__
+	
+	#include "units.h"
+	#include "types.h"
+	#include "BTreeNode.h"
+	#include "BTree.h"
+	#include "BTreeIterator.h"
+	#include "IndexSet.h"
+	#include "PtrMap.h"
+	#include "IndexMap.h"
+	#include "List.h"
+	#include "HashTable.h"
+	#include "Array.h"
+	#include "UniqueList.h"
+	#include "LinkedListNode.h"
+	#include "LinkedList.h"
+	#include "LinkedListIterator.h"
+	#include "Set.h"
+	#include "PtrSet.h"
+	#include "Map.h"
+	#include "Heap.h"
+	#include "MaxHeap.h"
+	#include "MPIRoutines.h"
+	#include "UIntMap.h"
+	#include "MemoryPool.h"
+	#include "RangeSet.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Base_Container_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool BaseContainer_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_Container_Finalise_h__
+#define __Base_Container_Finalise_h__
+	
+	Bool BaseContainer_Finalise( void );
+	
+#endif /* __Base_Container_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,605 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: HashTable.c 2038 2005-4-13 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "HashTable.h"
+#include "PtrMap.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type HashTable_Type = "HashTable";
+#define MAX_ENTRIES 255
+#define SM_HEAP_TABLE_SIZE 256
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+HashTable* _HashTable_New(
+			SizeT							_sizeOfSelf,
+			Type							type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print,
+			Stg_Class_CopyFunction*		_copy
+			)
+{
+	HashTable *self = NULL;
+
+	self = (HashTable*)_Stg_Class_New(
+							_sizeOfSelf,
+							type,
+							_delete,
+							_print,
+							_copy);
+	return self;
+}
+
+HashTable* HashTable_New(
+			HashTable_dataCopyFunction*		dataCopyFunction,
+			HashTable_dataPrintFunction*	dataPrintFunction,
+			HashTable_dataDeleteFunction*	dataDeleteFunction,
+			KeyType keyType)
+{
+	
+	HashTable* self;
+	
+	/* General info */
+	self = _HashTable_New( 
+		   					sizeof(HashTable),
+							HashTable_Type,
+							_HashTable_DeleteFunc,
+							_HashTable_PrintFunc,
+							_HashTable_CopyFunc);
+
+	/* List info */
+	/* At the moment only String keys are supported */
+	/*TODO 
+	 * add a hash function for hashing numeric keys */
+
+	if( keyType == HASHTABLE_STRING_KEY ){
+		self->hashFunction = hashStringFunction;
+	}
+	else if(  keyType == HASHTABLE_POINTER_KEY ){
+		self->hashFunction = hashPtrFunction;
+	}
+
+	self->dataCopyFunction = dataCopyFunction;
+	self->dataPrintFunction = dataPrintFunction;
+	self->dataDeleteFunction = dataDeleteFunction;
+	self->keyType = keyType;
+	
+	/* Virtual functions */
+	HashTable_Init( self );
+	return self;
+}
+
+void _HashTable_Init( HashTable* self ){
+	/* General info */
+	
+	assert( self );
+	_Stg_Class_Init ((Stg_Class*) self);
+	
+	self->max = MAX_ENTRIES;
+	self->entries = Memory_Alloc_Array_Unnamed(HashTable_Entry*, sizeof( HashTable_Entry* ) * (self->max+1) );
+	memset( self->entries, 0, sizeof( HashTable_Entry* ) * (self->max+1) );
+
+	/* Dictionary info */
+}
+
+void HashTable_Init( HashTable *self )
+{
+	assert( self );
+	_HashTable_Init (self);
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual Functions
+*/
+void _HashTable_PrintFunc ( void *ht, Stream *stream )
+{
+	HashTable *self = NULL;
+	
+	self = (HashTable*) ht;
+	assert( self );
+	assert( stream );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) self, stream );
+
+	/* general info */
+	Journal_Printf( stream, "HashTable (ptr): (%p)\n", self );
+
+	/* Virtual Info */
+
+	/* HashTable Info */
+	Journal_Printf( stream, "\tEntryCount\t\t - %d\n", self->count );
+	Journal_Printf( stream, "\tHashTable KeyType\t - %s\n", (self->keyType == HASHTABLE_STRING_KEY)?"STRING":"INTEGER" );
+	
+	Journal_Printf( stream, "\tHashTable data\t - \n");
+	if (self->dataPrintFunction)
+		HashTable_ParseTable( self, (HashTable_parseFunction*)self->dataPrintFunction, (void*)stream );
+}
+
+void _HashTable_DeleteFunc( void *ht )
+{
+	HashTable *self = NULL;
+	HashTable_Entry *he = NULL, *heTemp = NULL;
+	int i = 0;
+
+	self = (HashTable*)ht;
+	assert (self);
+	
+	for( i=0; i<self->max; i++ ){
+		he = self->entries[i];
+		
+		if(he){
+			while( he ){
+				if( self->dataDeleteFunction ){
+					self->dataDeleteFunction( (void*) he->data );
+				}
+				if( self->keyType == HASHTABLE_POINTER_KEY){
+					/* TODO: anything to be freed here? */
+				}
+				else{
+					Memory_Free( (char*)he->key );
+				}
+				
+				heTemp = he->next;
+				Memory_Free( he ); /** Freeing the Entry without calling the Class_Delete function, because HashTable_Entry does not inherit __Class */
+
+				he = heTemp;
+			}
+		}
+	}
+	Memory_Free( self->entries );
+	_Stg_Class_Delete( self );
+}
+
+void* _HashTable_CopyFunc( void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	HashTable* self = (HashTable*)source;
+	HashTable* newTable;
+	HashTable_Index* hi;
+	void* key;
+
+	newTable = _Stg_Class_Copy( self, NULL, deep, nameExt, ptrMap ) ;
+
+	newTable->hashFunction = self->hashFunction;
+	newTable->dataCopyFunction = self->dataCopyFunction;
+	newTable->dataPrintFunction = self->dataPrintFunction;
+	newTable->dataDeleteFunction = self->dataDeleteFunction;
+
+	newTable->count = self->count;
+	newTable->max = self->max;
+	newTable->keyType = self->keyType;
+
+	newTable->entries = Memory_Alloc_Array_Unnamed(HashTable_Entry*, sizeof( HashTable_Entry* ) * (self->max+1) );
+	memset( newTable->entries, 0, sizeof( HashTable_Entry* ) * (self->max+1) );
+
+	for ( hi = HashTable_First( self ); hi; hi = HashTable_Next( hi ) ) {
+		void* dataPtr = PtrMap_Find( ptrMap, hi->curr->data );
+		if ( dataPtr == NULL ) {
+			if ( self->dataCopyFunction ) {
+				/* data copy */
+				dataPtr = self->dataCopyFunction( hi->curr->data, NULL, deep, nameExt, ptrMap );
+			}
+			else {
+				dataPtr = hi->curr->data;
+			}
+		}
+		key = PtrMap_Find( ptrMap, (void*)hi->curr->key );
+		if ( key == NULL ) {
+			/* Assume a const key so just assign */
+			key = (void*)hi->curr->key;
+		}
+			
+		HashTable_InsertEntry( newTable, key, hi->curr->keyLength, dataPtr, hi->curr->dataSize );
+	}
+	
+	return newTable;
+}
+
+static unsigned char hashtab[SM_HEAP_TABLE_SIZE] =
+{
+	161, 71, 77,187, 15,229,  9,176,221,119,239, 21, 85,138,203, 86,
+	102, 65, 80,199,235, 32,140, 96,224, 78,126,127,144,  0, 11,179,
+	64, 30,120, 23,225,226, 33, 50,205,167,130,240,174, 99,206, 73,
+	231,210,189,162, 48, 93,246, 54,213,141,135, 39, 41,192,236,193,
+	157, 88, 95,104,188, 63,133,177,234,110,158,214,238,131,233, 91,
+	125, 82, 94, 79, 66, 92,151, 45,252, 98, 26,183,  7,191,171,106,
+	145,154,251,100,113,  5, 74, 62, 76,124, 14,217,200, 75,115,190,
+	103, 28,198,196,169,219, 37,118,150, 18,152,175, 49,136,  6,142,
+	89, 19,243,254, 47,137, 24,166,180, 10, 40,186,202, 46,184, 67,
+	148,108,181, 81, 25,241, 13,139, 58, 38, 84,253,201, 12,116, 17,
+	195, 22,112, 69,255, 43,147,222,111, 56,194,216,149,244, 42,173,
+	232,220,249,105,207, 51,197,242, 72,211,208, 59,122,230,237,170,
+	165, 44, 68,123,129,245,143,101,  8,209,215,247,185, 57,218, 53,
+	114,121,  3,128,  4,204,212,146,  2,155, 83,250, 87, 29, 31,159,
+	60, 27,107,156,227,182,  1, 61, 36,160,109, 97, 90, 20,168,132,
+	223,248, 70,164, 55,172, 34, 52,163,117, 35,153,134, 16,178,228
+};
+
+/*
+**  PTRHASH -- hash a pointer value
+**
+**Parameters:
+**p -- pointer.
+**
+**Returns:
+**hash value.
+**
+**  ptrhash hashes a pointer value to a uniformly distributed random
+**  number between 0 and 255.
+**
+**  This hash algorithm is based on Peter K. Pearson,
+**  "Fast Hashing of Variable-Length Text Strings",
+**  in Communications of the ACM, June 1990, vol 33 no 6.
+*/
+
+unsigned int hashPtrFunction( const void *p, const unsigned int keyLen )
+{
+	int h;
+	unsigned long n = (unsigned long)p;
+
+	/* NOTE: these #if makes keyLen unused */
+
+#if defined(SYSTEM_SIZEOF_LONG) && SYSTEM_SIZEOF_LONG == 8
+	h = hashtab[n & 0xFF];
+	h = hashtab[h ^ ((n >> 8) & 0xFF)];
+	h = hashtab[h ^ ((n >> 16) & 0xFF)];
+	h = hashtab[h ^ ((n >> 24) & 0xFF)];
+	h = hashtab[h ^ ((n >> 32) & 0xFF)];
+	h = hashtab[h ^ ((n >> 40) & 0xFF)];
+	h = hashtab[h ^ ((n >> 48) & 0xFF)];
+	h = hashtab[h ^ ((n >> 56) & 0xFF)];
+#else
+	/* Else assume 32 bit system. Watch this get invalidated one day =) */
+	h = hashtab[n & 0xFF];
+	h = hashtab[h ^ ((n >> 8) & 0xFF)];
+	h = hashtab[h ^ ((n >> 16) & 0xFF)];
+	h = hashtab[h ^ ((n >> 24) & 0xFF)];
+#endif
+		
+	return h;
+}
+
+unsigned int hashStringFunction( const void *voidKey, const unsigned int keyLen )
+{
+    /*
+     * This is the popular `times 33' hash algorithm which is used by
+     * perl and also appears in Berkeley DB. This is one of the best
+     * known hash functions for strings because it is both computed
+     * very fast and distributes very well.
+     *
+     * The originator may be Dan Bernstein but the code in Berkeley DB
+     * cites Chris Torek as the source. The best citation I have found
+     * is "Chris Torek, Hash function for text in C, Usenet message
+     * <27038 at mimsy.umd.edu> in comp.lang.c , October, 1990." in Rich
+     * Salz's USENIX 1992 paper about INN which can be found at
+     * <http://citeseer.nj.nec.com/salz92internetnews.html>.
+     *
+     * The magic of number 33, i.e. why it works better than many other
+     * constants, prime or not, has never been adequately explained by
+     * anyone. So I try an explanation: if one experimentally tests all
+     * multipliers between 1 and 256 (as I did while writing a low-level
+     * data structure library some time ago) one detects that even
+     * numbers are not useable at all. The remaining 128 odd numbers
+     * (except for the number 1) work more or less all equally well.
+     * They all distribute in an acceptable way and this way fill a hash
+     * table with an average percent of approx. 86%.
+     *
+     * If one compares the chi^2 values of the variants (see
+     * Bob Jenkins ``Hashing Frequently Asked Questions'' at
+     * http://burtleburtle.net/bob/hash/hashfaq.html for a description
+     * of chi^2), the number 33 not even has the best value. But the
+     * number 33 and a few other equally good numbers like 17, 31, 63,
+     * 127 and 129 have nevertheless a great advantage to the remaining
+     * numbers in the large set of possible multipliers: their multiply
+     * operation can be replaced by a faster operation based on just one
+     * shift plus either a single addition or subtraction operation. And
+     * because a hash function has to both distribute good _and_ has to
+     * be very fast to compute, those few numbers should be preferred.
+     *
+     *                  -- Ralf S. Engelschall <rse at engelschall.com>
+     */
+	
+	/*
+	 * The above comment and the hash algorithm has been taken from 
+	 * subversion's hashFunction.
+	 */
+	
+	unsigned int hash = 0;
+	unsigned char *key;
+	unsigned char *p = (unsigned char*) 0;
+	unsigned int i = 0;
+	
+	key = (unsigned char*)voidKey;
+
+	hash = 0;
+	for( p=key, i=keyLen; i; i--, p++ ){
+		hash = hash * 33 + *p;
+	}
+
+	return hash;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+int HashTable_InsertEntry ( HashTable *ht, const void *voidKey, unsigned int keyLen, void *data, SizeT dataSize )
+{
+	unsigned int hash = 0;
+	HashTable_Entry *he = NULL, **hep = NULL;
+	unsigned char *key;
+	int count;
+	
+	assert( ht );
+	assert( data );
+	assert( ht->hashFunction );
+
+	key = (unsigned char*) voidKey;
+	
+	if( ht->keyType == HASHTABLE_POINTER_KEY ){
+		hash = ht->hashFunction( voidKey, sizeof( void* )  );
+		
+		count = 0;
+		for (hep = &ht->entries[hash], he = *hep;
+			he; hep = &he->next, he = *hep) {
+		
+			if (he->hash == (unsigned int)hash
+				&& ((void*)he->key == (void*)voidKey)){
+         
+				fprintf( stdout, "trying to enter duplicate keys\n" );
+				return 0;
+			}
+			count++;
+    		}
+	}
+	else{
+		hash = ht->hashFunction( voidKey, keyLen  );
+	
+
+		while( (hash & ht->max) > ht->max - 1 ){
+			expandArray( ht );
+		}
+	
+		count = 0;
+		for (hep = &ht->entries[hash & ht->max], he = *hep;
+			he; hep = &he->next, he = *hep) {
+		
+			if (he->hash == hash
+				&& he->keyLength == keyLen
+				&& memcmp(he->key, key, keyLen) == 0){
+         
+				fprintf( stderr, "trying to enter duplicate keys\n" );
+				return 0;
+			}
+			count++;
+    		}
+	}
+	
+	he = Memory_Alloc( HashTable_Entry , "HashTable_Entry");
+	memset( he, 0, sizeof( HashTable_Entry ) );
+	he->next = NULL;
+	he->hash = hash;
+	
+	if( ht->keyType== HASHTABLE_POINTER_KEY){
+		he->key = (void*)key;
+	}
+	else{
+		he->key = StG_Strdup( (char *)key );
+	}
+	
+	he->keyLength = keyLen;
+
+	he->data = data;
+	he->dataSize = dataSize;
+	ht->count++;
+	*hep = he;
+		
+	return count; /*returning the number of collisions incurred. Ideally should be 1*/
+}
+
+int HashTable_InsertEntryCopyData ( HashTable *ht, const void *voidKey, unsigned int keyLen, void *data, SizeT dataSize ) {
+	void* dataToInsert = data;
+	if ( ht->dataCopyFunction ) {
+		dataToInsert = ht->dataCopyFunction( data, NULL, True, NULL, NULL );
+	}
+	return HashTable_InsertEntry( ht, voidKey, keyLen, dataToInsert, dataSize );
+}
+
+void *HashTable_FindEntryFunction( HashTable *ht, const void *voidKey, unsigned int keyLen )
+{
+	unsigned char *key;
+	unsigned int hash = 0;
+	HashTable_Entry *he = NULL, **hep = NULL;
+	
+	assert( ht );
+	assert( ht->hashFunction );
+
+	if( ht->keyType == HASHTABLE_POINTER_KEY  ){
+		hash = ht->hashFunction( voidKey, sizeof( void* )  );
+		
+		for (hep = &ht->entries[hash], he = *hep;
+			he; hep = &he->next, he = *hep) {
+		
+			if (he->hash == hash
+				&& ((void*)he->key == (void*)voidKey)){
+         
+				break;
+			}
+		}
+	}
+	else{
+		key = (unsigned char*)voidKey;
+		hash = ht->hashFunction( voidKey, keyLen );
+
+		for (hep = &ht->entries[hash & ht->max], he = *hep;
+			he; hep = &he->next, he = *hep) {
+		
+			if (he->hash == hash
+				&& he->keyLength == keyLen
+				&& memcmp(he->key, key, keyLen) == 0){
+         
+				break;
+			}
+	    	}
+	}
+
+	if( he ){
+		return (void*)he->data;
+	}
+	
+	return NULL;
+}
+
+int HashTable_DeleteEntry( HashTable* ht, const void *voidKey, unsigned int keyLen ) {
+	unsigned char*    key;
+	unsigned int      hash = 0;
+	HashTable_Entry*  he   = NULL; 
+	HashTable_Entry** hep  = NULL;
+	
+	assert( ht );
+	assert( ht->hashFunction );
+
+	key = (unsigned char*)voidKey;
+	assert( key );
+	hash = ht->hashFunction( voidKey, keyLen );
+
+	for (hep = &ht->entries[hash & ht->max], he = *hep; he; hep = &he->next, he = *hep) {
+		if ( he->hash == hash && he->keyLength == keyLen && memcmp(he->key, key, keyLen) == 0){
+			break;
+		}
+	}
+
+	if( he ) {
+		*hep = he->next;
+		ht->count--;
+		if( ht->dataDeleteFunction ){
+			ht->dataDeleteFunction( he->data );
+		}
+		else{
+			/* Leaving the data inside the entry */
+		}
+		
+		Memory_Free( he );
+		return 1;
+	}
+
+	return 0;
+}
+
+int HashTable_ReplaceEntry( HashTable *ht, const void *voidKey, unsigned int keyLen, void *data, SizeT dataSize ) {
+	if ( HashTable_FindEntryFunction( ht, voidKey, keyLen ) ) {
+		HashTable_DeleteEntry( ht, voidKey, keyLen );
+	}
+	return HashTable_InsertEntry( ht, voidKey, keyLen, data, dataSize );
+}
+
+void HashTable_ParseTable( HashTable *ht, HashTable_parseFunction *parseFunction, void *args )
+{
+	HashTable *self = NULL;
+	HashTable_Entry *he = NULL;
+	int i = 0;
+
+	self = (HashTable*)ht;
+	assert( self );
+	assert( parseFunction );
+	
+	for( i=0; i<self->max; i++ ){
+		he = self->entries[i];
+		
+		if(he){
+			while( he ){
+				parseFunction( he->data, args );
+				he = he->next;
+			}
+		}
+	}
+}
+
+void expandArray( HashTable *ht )
+{
+	unsigned int newMax = 0;
+	HashTable_Entry **newArray = NULL;
+	HashTable_Index *hi = NULL;
+
+	assert( ht );
+	
+	newMax = ht->max * 2 + 1;
+	newArray = Memory_Alloc_Array_Unnamed(HashTable_Entry*, sizeof( HashTable_Entry* ) * newMax );
+	if( !newArray ){
+		Journal_Firewall(0, Journal_Register(ErrorStream_Type,"HashTable"), "Out of memory in '%s'\n", __func__ );
+	}
+	memset( newArray, 0, sizeof( HashTable_Entry* ) * newMax );
+	
+    for (hi = HashTable_First( ht ); hi; hi = HashTable_Next( hi )) {
+        unsigned int i = hi->curr->hash & newMax;
+        hi->curr->next = newArray[i];
+        newArray[i] = hi->curr;
+    }
+	
+	ht->entries = newArray;
+	ht->max = newMax;
+}
+
+HashTable_Index* HashTable_Next( HashTable_Index *hi )
+{
+	assert( hi );
+	
+	hi->curr= hi->next;
+	while (!hi->curr) {
+		if (hi->index > hi->ht->max - 1)
+			return NULL;
+
+		hi->curr= hi->ht->entries[hi->index++];
+	}
+	hi->next = hi->curr->next;
+
+	return hi;
+}
+
+HashTable_Index* HashTable_First( HashTable *ht )
+{
+	HashTable_Index *hi;
+    
+	assert( ht );
+	hi = &ht->iterator;
+
+	hi->ht = ht;
+	hi->index = 0;
+	hi->curr= NULL;
+	hi->next = NULL;
+    
+	return HashTable_Next( hi );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: HashTable.h 2087 2005-4-13 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __HashTable_h__
+#define __HashTable_h__
+
+	/** Textual name for List class. */
+	extern const Type HashTable_Type;
+	
+	/** Virtual Function Pointers */
+	
+		/** Hash function */	
+	typedef unsigned int (HashTable_keyHashFunction)	( const void*, const unsigned int );
+	
+		/** This is a function type to be provided by the user for copying node data, when a new entry is being created */
+/*	typedef void	(HashTable_dataCopyFunction)		( void **, void *, SizeT );*/
+	typedef Stg_Class_CopyFunction HashTable_dataCopyFunction;
+
+		/** This is a function type to be provided by the user for printing the contents of a entry's data */
+	typedef void	(HashTable_dataPrintFunction)		( void *, void * );
+		
+		/** This is a function type to be provided by the user for deleting node data, when an entry is being deleted */
+	typedef void	(HashTable_dataDeleteFunction)		( void * );
+	
+		/** This is a function type to be provided by the user, which can be applied to each node on the tree later on.
+		 * The first argument is the data stored inside a node and the second argument can be a single argument or a 
+		 * struct of arguments that need to be passed to the user-supplied function */
+	typedef void	(HashTable_parseFunction)			( void *, void * );
+
+	/** \def HashTable_Entry see __HashTable_Entry */
+	#define __HashTable_Entry \
+		struct HashTable_Entry	 	*next; \
+		unsigned int 			hash; \
+		const void 			*key; \
+		size_t 				keyLength; \
+		void				*data; \
+		size_t				dataSize;	
+
+	struct HashTable_Entry { __HashTable_Entry };
+
+	/** \def HashTable_Index see __HashTable_Index */
+	#define __HashTable_Index \
+		struct HashTable	 		*ht; \
+		struct HashTable_Entry		*curr, *next; \
+		unsigned int 				index;
+
+	struct HashTable_Index { __HashTable_Index };
+
+	/** \def __HashTable See __HashTable */
+	#define __HashTable \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* HashTable info */ \
+		HashTable_keyHashFunction	*hashFunction; \
+		HashTable_dataCopyFunction*	dataCopyFunction; \
+		HashTable_dataPrintFunction*	dataPrintFunction; \
+		HashTable_dataDeleteFunction*	dataDeleteFunction; \
+		struct HashTable_Entry		**entries; \
+		struct HashTable_Index		iterator; \
+		unsigned int			count; \
+		unsigned int			max; \
+		KeyType				keyType;
+		
+
+	struct HashTable { __HashTable };
+
+	/** Constructor interface. */
+	HashTable* HashTable_New(
+				HashTable_dataCopyFunction*	dataCopyFunction,
+				HashTable_dataPrintFunction*	dataPrintFunction,
+				HashTable_dataDeleteFunction*	dataDeleteFunction,
+				KeyType keyType);
+
+	HashTable* _HashTable_New(
+				SizeT				_sizeOfSelf,
+				Type				type,
+				Stg_Class_DeleteFunction*	_delete,
+				Stg_Class_PrintFunction*	_print,
+				Stg_Class_CopyFunction*		_copy
+				);
+
+	
+	/** Init interface. */
+	void HashTable_Init( HashTable* self );
+	
+	void _HashTable_Init( HashTable* self );
+	
+	/** Delete interface. */
+		/** Class delete function */
+	void _HashTable_DeleteFunc ( void *ht );
+	
+	/** Print interface. */
+		/** Class print function */
+	void _HashTable_PrintFunc ( void *ht, Stream* stream );
+
+	void* _HashTable_CopyFunc( void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	/** Public functions */
+	/** Inserts a new entry into the hashTable  */
+	int HashTable_InsertEntry ( HashTable *ht, const void *voidKey, unsigned int keyLen, void *data, SizeT dataSize );
+		
+	/** Public functions */
+	/** Inserts a new entry into the hashTable copying the data with the copy function if any */
+	int HashTable_InsertEntryCopyData ( HashTable *ht, const void *voidKey, unsigned int keyLen, void *data, SizeT dataSize );
+		
+	/** Attempts to find a key and returns the data within, if found */
+	void *HashTable_FindEntryFunction( HashTable *ht, const void *voidKey, unsigned int keyLen );
+		
+	#define HashTable_FindEntry( ht, voidKey, keyLen, type ) \
+		(type*) HashTable_FindEntryFunction( ht, voidKey, keyLen );
+	
+	/** Deletes a node from the list with the node-data being passed in as a parameter */
+	int HashTable_DeleteEntry( HashTable *ht, const void *voidKey, unsigned int keyLen );
+
+	/** Replaces the data contents for given key */
+	int HashTable_ReplaceEntry( HashTable *ht, const void *voidKey, unsigned int keyLen, void *data, SizeT dataSize );
+		
+	/** Parses the list and executes a user-supplied function */
+	void HashTable_ParseTable( HashTable *ht, HashTable_parseFunction *parseFunction, void *args );
+	
+	unsigned int hashStringFunction( const void *voidKey, const unsigned int keyLen );
+	unsigned int hashPtrFunction( const void *p, const unsigned int keyLen );
+	
+	void expandArray( HashTable * );
+	
+	struct HashTable_Index* HashTable_Next( struct HashTable_Index *hi );
+	struct HashTable_Index* HashTable_First( struct HashTable *ht );
+
+#endif /* __HashTable_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,149 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: HashTableIterator.c 2038 2005-04-16 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "HashTable.h"
+#include "HashTableIterator.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type HashTableIterator_Type = "HashTableIterator";
+
+HashTableIterator *_HashTableIterator_New(
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy
+		)
+{
+	HashTableIterator *self = NULL;
+
+	/** using Class_New as Memory module has been initialized at this stage */
+	
+	self = (HashTableIterator*)_StG_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy );
+	
+	return self;
+}
+
+HashTableIterator *HashTableIterator_New( HashTable *ht )
+{
+	
+	HashTableIterator* self;
+	
+	assert( ht );
+	self = _HashTableIterator_New(
+			sizeof(HashTableIterator),
+			HashTableIterator_Type,
+			_HashTableIterator_DeleteFunc,
+			_HashTableIterator_PrintFunc,
+			NULL
+			);
+	/* General info */
+	
+	/* Virtual functions */
+	self->ht = ht;
+	
+	_HashTableIterator_Init( self );	
+	return self;
+}
+
+void _HashTableIterator_Init( HashTableIterator* self )
+{
+
+}
+
+void _HashTableIterator_DeleteFunc( void *self )
+{
+	if( self ){
+		_Stg_Class_Delete( self );
+	}
+}
+
+void _HashTableIterator_PrintFunc( void *self, Stream *myStream )
+{
+	HashTableIterator *iterator = NULL;
+
+	iterator = (HashTableIterator*) self;
+	assert( iterator );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) iterator, myStream );
+
+	/* general info */
+	Journal_Printf( myStream, "HashTableIterator (ptr): (%p)\n", iterator );
+	Journal_Printf( myStream, "\tHashTable (ptr): (%p)\n", iterator->ht );
+}
+
+HashTable_Entry *HashTableIterator_First( HashTableIterator *hi )
+{
+	int i = 0;
+	
+	assert( hi );
+	assert( hi->ht );
+
+	for( i=0; i<hi->ht->max; i++ ){
+		if( hi->ht->entries[i] ){
+			hi->curr = hi->ht->entries[i];
+			hi->index = i+1;
+			return hi->curr;
+		}
+	}
+
+	return NULL;
+}
+	
+HashTable_Entry *HashTableIterator_Next( HashTableIterator *hi )
+{
+	int i = 0;
+	
+	assert( hi );
+	assert( hi->ht );
+	
+	for( i=hi->index; i<hi->ht->max; i++ ){
+		if( hi->ht->entries[i] ){
+			hi->curr = hi->ht->entries[i];
+			hi->index = i+1;
+			return hi->curr;
+		}
+	}
+
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	HashTableIterator class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: HashTableIterator.h 2087 2005-4-16 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __Base_Foundation__HashTableIterator_h__
+#define __Base_Foundation__HashTableIterator_h__
+
+	/** Textual name for HashTableIterator class. */
+	extern const Type HashTableIterator_Type;
+	
+	/** Virtual Function Pointers */
+	
+	/** \def __HashTableIterator_Iterator See __HashTable_Iterator */
+	#define __HashTableIterator \
+		__Stg_Class \
+		HashTable		*ht; \
+		HashTable_Entry	*curr; \
+		int				index;
+	
+	struct HashTableIterator { __HashTableIterator };
+	
+
+	/** Constructor interface. */
+	HashTableIterator* HashTableIterator_New( HashTable *ht );
+	
+	HashTableIterator *_HashTableIterator_New(
+			SizeT					_sizeOfSelf,
+			Type					type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print,
+			Stg_Class_CopyFunction*		_copy
+			);
+	
+	/** Init interface. */
+	void _HashTableIterator_Init( HashTableIterator *self );
+	
+	/** Stg_Class_Delete Interface */
+	void _HashTableIterator_DeleteFunc( void *self );
+
+	/** Print Interface */
+	void _HashTableIterator_PrintFunc( void *, Stream * );
+
+	HashTable_Entry *HashTableIterator_First( HashTableIterator *hi );
+	
+	HashTable_Entry *HashTableIterator_Next( HashTableIterator *hi );
+	
+#endif /* __Base_Foundation__HashTableIterator_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,179 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Heap.c 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "Heap.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type Heap_Type = "Heap";
+
+_Heap* _Heap_New(
+				SizeT							_sizeOfSelf,
+				Type							type,
+				Stg_Class_DeleteFunction*			_delete,
+				Stg_Class_PrintFunction*			_print,
+				Stg_Class_CopyFunction*				_copy,
+				Heap_HeapifyFunction				*heapify,
+				Heap_ExtractFunction				*extract,
+				Heap_InsertFunction					*insert,
+				Heap_KeySwapFunction*				keySwapFunction,
+				Heap_CompareFunction				*compareFunction,
+				Heap_ExtendArrayFunc				*extendArray,
+				void						**keys,
+				int							keyLength,
+				int							numArrayElements )
+{
+	_Heap *self = NULL;
+
+	self = (_Heap*)_Stg_Class_New(
+							_sizeOfSelf,
+							type,
+							_delete,
+							_print,
+							_copy);
+
+	assert( heapify );
+	assert( extract );
+	assert( insert );
+	assert( compareFunction );
+	assert( keySwapFunction );
+	assert( keys );
+	assert( extendArray );
+	
+	self->heapify = heapify;
+	self->extract = extract;
+	self->insert = insert;
+	self->keySwap = keySwapFunction;
+	self->compare = compareFunction;
+	self->extendArray = extendArray;
+	self->numArrayElements = numArrayElements;
+	self->keys = keys;
+	self->keyLength = keyLength;
+	
+	_Heap_Init( self );
+	
+	return self;
+}
+
+void _Heap_Init( _Heap* self )
+{
+	assert( self );
+	
+	self->numHeapElements = self->numArrayElements;
+
+	_Heap_BuildHeap( self );
+}
+
+void _Heap_BuildHeap( _Heap *heap )
+{
+	int i = 0;
+	
+	assert( heap );
+	assert( heap->heapify );
+	
+	for( i=heap->numArrayElements/2+1; i>=1; i--  ){
+		heap->heapify( heap, i );
+	}
+}
+
+void _Heap_Heapify( _Heap *heap, int index )
+{
+	
+}
+
+void* _Heap_Extract( _Heap *heap )
+{
+	return NULL;
+}
+
+void _Heap_Insert( _Heap *heap, void* key )
+{
+	
+}
+	
+void _Heap_DeleteFunc ( void *heap )
+{
+	_Heap *self = ( _Heap* ) heap;
+
+	assert( self );
+
+	Memory_Free( self->keys );
+	_Stg_Class_Delete( self );
+}
+	
+void _Heap_PrintFunc ( void *heap, Stream* stream )
+{
+	_Heap *self = (_Heap*)heap;
+	assert( self );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) self, stream );
+
+	/* general info */
+	Journal_Printf( stream, "Heap (ptr): (%p)\n", self );
+	
+	Journal_Printf( stream, "Heap Elements\t%d\n", self->numHeapElements );
+	Journal_Printf( stream, "Array Elements\t%d\n", self->numArrayElements );
+	Journal_Printf( stream, "Key Length    \t%d\n", self->keyLength );
+}
+	
+/*Private functions*/
+
+int _Heap_Parent( _Heap *heap, int i )
+{
+	return i/2;
+}
+
+int _Heap_Left( _Heap *heap, int i )
+{
+	return 2*i;
+}
+
+int _Heap_Right( _Heap *heap, int i )
+{
+	return 2*i+1;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+** This class creates a heap data structure from a given set of keys. It receives
+** an array of pointer to the keys and few function pointers to achieve the task.
+** The class assumes ownership of the array of the keys, alters the order of the
+** keys as the heap is built, and deletes the keys array when the destructor is
+** called on the class.
+** The _Heap_Insert function is useful for inserting new items into the heap after
+** it has been built, which entails the extension of the initial array. The user
+** supplied function 'extendArray' is invoked on such occasions for extending the
+** initial array.
+** 
+** $Id: Heap.h 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __Heap_h__
+#define __Heap_h__
+
+	/** Textual name for List class. */
+	extern const Type Heap_Type;
+	
+	/** Virtual Function Pointers */
+	
+	typedef void (Heap_HeapifyFunction) ( struct _Heap*, int );
+	typedef void* (Heap_ExtractFunction) ( struct _Heap* );
+	typedef void (Heap_InsertFunction) ( struct _Heap*, void* );
+	typedef void (Heap_KeySwapFunction) ( void**, void** );
+	typedef int (Heap_CompareFunction) ( void*, void* );
+	typedef void** (Heap_ExtendArrayFunc) ( int, void *** );
+	
+	/** \def __List See __List */
+	#define __Heap \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Heap info */ \
+		Heap_HeapifyFunction*		heapify; \
+		Heap_ExtractFunction*		extract; \
+		Heap_InsertFunction*		insert; \
+		Heap_KeySwapFunction*		keySwap; \
+		Heap_CompareFunction*		compare; \
+		Heap_ExtendArrayFunc*		extendArray; \
+		int							numHeapElements; \
+		void						**keys; \
+		int							keyLength; \
+		int							numArrayElements;
+	struct _Heap { __Heap };
+
+	_Heap* _Heap_New(
+				SizeT							_sizeOfSelf,
+				Type							type,
+				Stg_Class_DeleteFunction*			_delete,
+				Stg_Class_PrintFunction*			_print,
+				Stg_Class_CopyFunction*				_copy,
+				Heap_HeapifyFunction				*heapify,
+				Heap_ExtractFunction				*extract,
+				Heap_InsertFunction					*insert,
+				Heap_KeySwapFunction*				KeySwapFunction,
+				Heap_CompareFunction				*compareFunction,
+				Heap_ExtendArrayFunc				*extendArray,
+				void						**keys,
+				int							keyLength,
+				int							numArrayElements
+				);
+
+	
+	void _Heap_Init( _Heap* self );
+	
+	void _Heap_BuildHeap( _Heap *heap );
+
+	void _Heap_Heapify( _Heap *heap, int index );
+
+	void* _Heap_Extract( _Heap *heap );
+
+	void _Heap_Insert( _Heap *heap, void* key );
+	
+	/** Stg_Class_Delete interface. */
+		/** Stg_Class delete function */
+	void _Heap_DeleteFunc ( void *heap );
+	
+	/** Print interface. */
+		/** Stg_Class print function */
+	void _Heap_PrintFunc ( void *heap, Stream* stream );
+
+	/* Private functions */
+	int _Heap_Parent( _Heap *heap, int i );
+	
+	int _Heap_Left( _Heap *heap, int i );
+	
+	int _Heap_Right( _Heap *heap, int i );
+
+#endif /* __Heap_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: IndexMap.c 2192 2004-10-15 02:45:38Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "IndexMap.h"
+#include "PtrMap.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type IndexMap_Type = "IndexMap";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IndexMap* IndexMap_New_Param(
+		unsigned					delta )
+{
+	return _IndexMap_New( 
+		sizeof(IndexMap), 
+		IndexMap_Type, 
+		_IndexMap_Delete, 
+		_IndexMap_Print, 
+		_IndexMap_Copy, 
+		delta );
+}
+
+
+void IndexMap_Init(
+		IndexMap*					self,
+		unsigned					delta )
+{
+	/* General info */
+	self->type = IndexMap_Type;
+	self->_sizeOfSelf = sizeof(IndexMap);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _IndexMap_Delete;
+	self->_print = _IndexMap_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* IndexMap info */
+	_IndexMap_Init( self, delta );
+}
+
+
+IndexMap* _IndexMap_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		unsigned					delta )
+{
+	IndexMap*			self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IndexMap) );
+	self = (IndexMap*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* IndexMap info */
+	_IndexMap_Init( self, delta );
+	
+	return self;
+}
+
+
+void _IndexMap_Init(
+		IndexMap*				self,
+		unsigned				delta )
+{
+	/* General and Virtual info should already be set */
+	
+	/* IndexMap info */
+	assert( self );
+	
+	self->delta = delta;
+	self->maxTuples = self->delta;
+	self->tupleTbl = Memory_Alloc_Array( IndexMapTuple, self->maxTuples, "IndexMap->tupleTbl" );
+	assert( self->tupleTbl ); /* TODO change this to a firewall, or something */
+	self->tupleCnt = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IndexMap_Delete( void* indexMap ) {
+	IndexMap*			self = (IndexMap*)indexMap;
+	
+	/* Stg_Class_Delete the class itself */
+	assert( self );
+	
+	if( self->tupleTbl ) {
+		Memory_Free( self->tupleTbl );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _IndexMap_Print( void* indexMap, Stream* stream ) {
+	IndexMap*		self = (IndexMap*)indexMap;
+	unsigned		tuple_I;
+	
+	/* Set the Journal for printing informations */
+	Stream*			myStream;
+	myStream = Journal_Register( InfoStream_Type, "IndexMapStream" );
+
+	/* Print parent */
+	assert( self );
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( myStream, "IndexMap (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* IndexMap info */
+	for( tuple_I = 0; tuple_I < self->tupleCnt; tuple_I++ ) {
+		Journal_Printf( myStream, "\ttuple[%d]: %d -> %d\n", tuple_I, self->tupleTbl[tuple_I].key, self->tupleTbl[tuple_I].idx );
+	}
+}
+
+
+void* _IndexMap_Copy( void* indexMap, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	IndexMap*	self = (IndexMap*)indexMap;
+	IndexMap*	newIndexMap;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newIndexMap = _Stg_Class_Copy( self, dest, deep, nameExt, map );
+	
+	newIndexMap->dictionary = self->dictionary;
+	newIndexMap->delta = self->delta;
+	newIndexMap->maxTuples = self->maxTuples;
+	newIndexMap->tupleCnt = self->tupleCnt;
+	
+	if( deep ) {
+		if( (newIndexMap->tupleTbl = PtrMap_Find( map, self->tupleTbl )) == NULL && self->tupleTbl ) {
+			newIndexMap->tupleTbl = Memory_Alloc_Array( IndexMapTuple, self->maxTuples, "IndexMap->tupleTbl" );
+			memcpy( newIndexMap->tupleTbl, self->tupleTbl, sizeof(IndexMapTuple) * self->maxTuples );
+			PtrMap_Append( map, self->tupleTbl, newIndexMap->tupleTbl );
+		}
+	}
+	else {
+		newIndexMap->tupleTbl = self->tupleTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newIndexMap;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void IndexMap_Append( void* indexMap, Index key, Index idx ) {
+	IndexMap*		self = (IndexMap*)indexMap;
+	unsigned		newTupleCnt;
+	
+	assert( self && key != -1 && idx != -1 );
+	
+	if( IndexMap_Find( self, key ) != -1 ) {
+		return;
+	}
+	
+	newTupleCnt = self->tupleCnt + 1;
+	if( newTupleCnt >= self->maxTuples ) {
+		unsigned		factor;
+		IndexMapTuple*		newTuples;
+		
+		factor = ceil( (float)(newTupleCnt - self->maxTuples) / (float)self->delta );
+		self->maxTuples += factor * self->delta;
+		
+		newTuples = Memory_Alloc_Array( IndexMapTuple, self->maxTuples, "IndexMap->tupleTbl" );
+		assert( newTuples ); /* TODO change this */
+		if( self->tupleTbl ) {
+			memcpy( newTuples, self->tupleTbl, sizeof(IndexMapTuple) * self->tupleCnt );
+			Memory_Free( self->tupleTbl );
+		}
+		self->tupleTbl = newTuples;
+	}
+	
+	self->tupleTbl[self->tupleCnt].key = key;
+	self->tupleTbl[self->tupleCnt].idx = idx;
+	self->tupleCnt = newTupleCnt;
+}
+
+
+Index IndexMap_Find( void* indexMap, Index key ) {
+	IndexMap*		self = (IndexMap*)indexMap;
+	unsigned		tuple_I;
+	
+	assert( self );
+	
+	if( key != -1 ) {
+		for( tuple_I = 0; tuple_I < self->tupleCnt; tuple_I++ ) {
+			if( self->tupleTbl[tuple_I].key == key )
+				return self->tupleTbl[tuple_I].idx;
+		}
+	}
+	
+	return -1;
+}
+
+
+void IndexMap_Remap( void* indexMap, void* mapThrough ) {
+	IndexMap*	self = (IndexMap*)indexMap;
+	Index		tuple_I;
+	
+	for( tuple_I = 0; tuple_I < self->tupleCnt; tuple_I++ ) {
+		self->tupleTbl[tuple_I].idx = IndexMap_Find( mapThrough, self->tupleTbl[tuple_I].idx );
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: IndexMap.h 2225 1970-01-02 13:48:23Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_IndexMap_h__
+#define __Base_Container_IndexMap_h__
+	
+	
+	/** Textual name of this class */
+	extern const Type IndexMap_Type;
+
+	/* Virtual function types */
+	
+	/** IndexMap class contents */
+	typedef struct IndexMapTuple {
+		Index			key;
+		Index			idx;
+	} IndexMapTuple;
+	
+	#define __IndexMap \
+		/* General info */ \
+		__Stg_Class \
+		\
+		Dictionary*				dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* IndexMap info ... */ \
+		unsigned				delta; \
+		unsigned				maxTuples; \
+		unsigned				tupleCnt; \
+		IndexMapTuple*				tupleTbl;
+
+	struct IndexMap { __IndexMap };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a default IndexMap */
+	#define INDEXMAP_DEFAULT_DELTA		10
+	
+	#define IndexMap_New() \
+		IndexMap_New_Param( INDEXMAP_DEFAULT_DELTA )
+	
+	/* Create a IndexMap */
+	IndexMap* IndexMap_New_Param( 
+		unsigned					delta );
+	
+	/* Creation implementation */
+	IndexMap* _IndexMap_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		unsigned					delta );
+	
+	
+	/* Initialise a IndexMap */
+	void IndexMap_Init(
+		IndexMap*					self,
+		unsigned					delta );
+	
+	/* Initialisation implementation functions */
+	void _IndexMap_Init(
+		IndexMap*					self,
+		unsigned					delta );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete mesh implementation */
+	void _IndexMap_Delete( void* indexMap );
+	
+	/* Print mesh implementation */
+	void _IndexMap_Print( void* indexMap, Stream* stream );
+	
+	/* Copy implementation */
+	#define IndexMap_Copy( self ) \
+		(IndexMap*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define IndexMap_DeepCopy( self ) \
+		(IndexMap*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _IndexMap_Copy( void* indexMap, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	
+	#define IndexMap_Size( self ) \
+		(self)->tupleCnt
+	
+	void IndexMap_Append( void* indexMap, Index key, Index idx );
+	
+	Index IndexMap_Find( void* indexMap, Index key );
+	
+	void IndexMap_Remap( void* indexMap, void* mapThrough );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+
+#endif /* __Base_Container_IndexMap_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,379 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: IndexSet.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "IndexSet.h"
+
+#include <mpi.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type IndexSet_Type = "IndexSet";
+
+/** Macro to calculate container membership */
+#define IS_MEMBER( indexSet, index ) \
+	((indexSet)->_container[(index) / (sizeof(char) * 8 )] & (1 << ((index) % (sizeof(char) * 8))))
+
+IndexSet* IndexSet_New( IndexSet_Index size ) {
+	return _IndexSet_New( sizeof(IndexSet), IndexSet_Type, _IndexSet_Delete, _IndexSet_Print, _IndexSet_Copy, _IndexSet_Duplicate, size );
+}
+
+void IndexSet_Init( IndexSet* self, IndexSet_Index size ) {
+	/* General info */
+	self->type = IndexSet_Type;
+	self->_sizeOfSelf = sizeof(IndexSet);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _IndexSet_Delete;
+	self->_print = _IndexSet_Print;
+	self->_copy = _IndexSet_Copy;
+	self->_duplicate = _IndexSet_Duplicate;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* IndexSet info */
+	_IndexSet_Init( self, size );
+}
+
+
+IndexSet* _IndexSet_New( 
+		SizeT				sizeOfSelf, 
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*		_copy, 
+		IndexSet_DuplicateFunction*	_duplicate,
+		IndexSet_Index			size )
+{
+	IndexSet* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(IndexSet) );
+	self = (IndexSet*)_Stg_Class_New( sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_duplicate = _duplicate;
+	
+	/* IndexSet info */
+	_IndexSet_Init( self, size );
+	
+	return self;
+}
+
+
+void _IndexSet_Init( IndexSet* self, IndexSet_Index size ) {
+	/* General and Virtual info should already be set */
+	
+	/* IndexSet info */
+	self->size = size;
+	self->_containerSize = self->size / (sizeof(char) * 8) + (self->size % (sizeof(char) * 8) ? 1 : 0);
+	self->_container = Memory_Alloc_Array( BitField, self->_containerSize, "IndexSet->_container");
+	memset( self->_container, 0, sizeof(char) * self->_containerSize );
+	self->membersCount = 0;
+	self->error = Journal_Register( ErrorStream_Type, self->type );
+}
+
+
+void _IndexSet_Delete( void* indexSet ) {
+	IndexSet* self = (IndexSet*)indexSet;
+	
+	if( self->_container ) {
+		Memory_Free( self->_container );
+	}
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete( self );
+}
+
+
+void _IndexSet_Print( void* indexSet, Stream* stream ) {
+	IndexSet* self = (IndexSet*)indexSet;
+	
+	/* Set the Journal for printing informations */
+	Stream* indexSetStream = Journal_Register( InfoStream_Type, "IndexSetStream");
+	
+	/* General info */
+	Journal_Printf( indexSetStream, "IndexSet (%p):\n", self );
+	
+	/* Virtual info */
+	
+	/* IndexSet */
+	Journal_Printf( indexSetStream, "\tsize: %u\n", self->size );
+	Journal_Printf( indexSetStream, "\t_containerSize: %lu\n", self->_containerSize );
+	Journal_Printf( indexSetStream, "\t_container: %p\n", self->_container );
+
+	if( self->_container ) {
+		IndexSet_Index		index_I;
+		
+		for( index_I = 0; index_I < self->size; index_I++ ) {
+			Index			containerIndex;
+			char			indexMask;
+			
+			containerIndex = index_I / (sizeof(char) * 8);
+			indexMask = 1 << (index_I % (sizeof(char) * 8));
+			
+			if( self->_container[containerIndex] & indexMask ) {
+				Journal_Printf( indexSetStream, "\t\tindex %u: In set.\n", index_I );
+			}
+			else {
+				Journal_Printf( indexSetStream, "\t\tindex %u: Not in set.\n", index_I );
+			}
+		}
+	}
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+}
+
+
+void* _IndexSet_Copy( void* indexSet, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	IndexSet*	self = (IndexSet*)indexSet;
+	IndexSet*	newIndexSet;
+	
+	newIndexSet = (IndexSet*)_Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newIndexSet->_duplicate = self->_duplicate;
+	
+	newIndexSet->size = self->size;
+	newIndexSet->_containerSize = self->_containerSize;
+	newIndexSet->_container = Memory_Alloc_Array( char, newIndexSet->_containerSize, "IndexSet->_container" );
+	memcpy( newIndexSet->_container, self->_container, sizeof(char) * newIndexSet->_containerSize );
+	newIndexSet->membersCount = self->membersCount;
+	newIndexSet->error = self->error;
+	
+	return (void*)newIndexSet;
+}
+
+
+void IndexSet_Add( void* indexSet, Index index ) {
+	IndexSet* self = (IndexSet*)indexSet;
+
+	#ifdef CAUTIOUS
+		Journal_Firewall( index < self->size, self->error, "Error- %s: index %u outside current size %d. Aborting.\n",
+			__func__, index, self->size);
+	#endif
+	
+	self->_container[index / (sizeof(char) * 8)] |= (1 << (index % (sizeof(char) * 8)));
+	self->membersCount = (unsigned)-1;
+}
+
+
+void IndexSet_Remove( void* indexSet, Index index ) {
+	IndexSet* self = (IndexSet*)indexSet;
+
+	#ifdef CAUTIOUS
+		Journal_Firewall( index < self->size, self->error, "Error- %s: index %u outside current size %d. Aborting.\n",
+			__func__, index, self->size);
+	#endif
+	
+	self->_container[index / (sizeof(char) * 8)] &= ~(1 << (index % (sizeof(char) * 8)));
+	self->membersCount = (unsigned)-1;
+}
+
+Bool IndexSet_IsMember( void* indexSet, Index index ) {
+	IndexSet* self = (IndexSet*)indexSet;
+
+	#ifdef CAUTIOUS
+		Journal_Firewall( index < self->size, self->error, "Error- %s: index %u outside current size %d. Aborting.\n",
+			__func__, index, self->size);
+	#endif
+	
+	return IS_MEMBER( self, index );
+}
+
+
+IndexSet_Index IndexSet_GetIndexOfNthMember( void* indexSet, const Index nthMember ) {
+	IndexSet*		self = (IndexSet*)indexSet;
+	int		membersSoFar = -1;
+	IndexSet_Index	index_I;
+	
+	for( index_I = 0; index_I < self->size; index_I++ ) {
+		if( IS_MEMBER( self, index_I ) ) {
+			membersSoFar++;
+			if ( nthMember == membersSoFar ) {
+				return index_I;
+			}
+		}
+	}
+
+	return IndexSet_Invalid( self );
+}
+
+
+IndexSet_Index IndexSet_UpdateMembersCount( void* indexSet ) {
+	IndexSet*		self = (IndexSet*)indexSet;
+	IndexSet_Index		index_I;
+
+	if (self->membersCount == (unsigned)-1 ) {
+		self->membersCount = 0;
+		for( index_I = 0; index_I < self->size; index_I++ ) {
+			if( IS_MEMBER( self, index_I ) ) {
+				self->membersCount++;
+			}
+		}
+	}
+
+	return self->membersCount;
+}
+
+
+void IndexSet_GetMembers( void* indexSet, IndexSet_Index* countPtr, Index** arrayPtr ) {
+	IndexSet*		self = (IndexSet*)indexSet;
+	
+	*countPtr = IndexSet_UpdateMembersCount( self );
+	if( *countPtr ) {
+		*arrayPtr = Memory_Alloc_Array( Index, (*countPtr), "IndexSet members" );
+		IndexSet_GetMembers2( self, *arrayPtr );
+	}
+	else {
+		*arrayPtr = NULL;
+	}
+}	
+
+
+void IndexSet_GetMembers2( void* indexSet, Index* const array ) {
+	IndexSet*		self = (IndexSet*)indexSet;
+	IndexSet_Index		index_I;
+	unsigned int		array_I;
+
+	for( array_I = 0, index_I = 0; index_I < self->size; index_I++ ) {
+		if( IS_MEMBER( self, index_I ) ) {
+			array[array_I] = index_I;
+			array_I++;
+		}
+	}
+}
+
+
+void IndexSet_GetVacancies( void* indexSet, IndexSet_Index* countPtr, Index** arrayPtr ) {
+	IndexSet*		self = (IndexSet*)indexSet;
+	IndexSet_Index		index_I;
+	unsigned int		array_I;
+
+	IndexSet_UpdateMembersCount( self );
+	*countPtr = self->size - self->membersCount;
+	
+	*arrayPtr = Memory_Alloc_Array( Index, (*countPtr), "IndexSet vacancies" );
+	for( array_I = 0, index_I = 0; index_I < self->size; index_I++ ) {
+		if( !IS_MEMBER( self, index_I) ) {
+			(*arrayPtr)[array_I] = index_I;
+			array_I++;
+		}
+	}
+}
+
+
+void IndexSet_Merge_OR(void* indexSet, void* indexSetTwo )
+{
+	IndexSet*	self = (IndexSet*)indexSet;
+	IndexSet*	secondSet = (IndexSet*)indexSetTwo;
+	Index		size;
+	Index		i;
+	
+	size = self->size <= secondSet->size ? self->_containerSize : secondSet->_containerSize;
+	
+	for (i = 0; i < size; i++)
+		self->_container[i] |= secondSet->_container[i];
+	
+	self->membersCount = (unsigned int)-1;
+}
+
+
+void IndexSet_Merge_AND(void* indexSet, void* indexSetTwo )
+{
+	IndexSet*	self = (IndexSet*)indexSet;
+	IndexSet*	secondSet = (IndexSet*)indexSetTwo;
+	Index		size;
+	Index		i;
+	
+	size = self->size <= secondSet->size ? self->_containerSize : secondSet->_containerSize;
+	
+	for (i = 0; i < size; i++)
+		self->_container[i] &= secondSet->_container[i];
+	
+	self->membersCount = (unsigned int)-1;
+}
+
+
+void IndexSet_AddAll( void* indexSet )
+{
+	IndexSet*	self = (IndexSet*)indexSet;
+	Index		i;
+	
+	for( i = 0; i < self->_containerSize; i++)
+		self->_container[i] |= 0xFF;
+
+	self->membersCount = self->size;
+}
+
+
+void IndexSet_RemoveAll( void* indexSet )
+{
+	IndexSet*	self = (IndexSet*)indexSet;
+	Index		i;
+	
+	for( i = 0; i < self->_containerSize; i++)
+		self->_container[i] &= 0x00;
+
+	self->membersCount = 0;
+}
+
+
+IndexSet* IndexSet_Duplicate( void* indexSet ) {
+	IndexSet*	self = (IndexSet*)indexSet;
+	IndexSet*	newSelf = 0;
+	
+	if( self  ) {
+		newSelf = _IndexSet_New( self->_sizeOfSelf, self->type, self->_delete, self->_print, NULL, self->_duplicate, self->size );
+		self->_duplicate( self, newSelf );
+	}
+	return newSelf;
+}
+
+
+void _IndexSet_Duplicate( void* indexSet, void* newIndexSet ){
+	/* self->containerSize and self->container are set by _IndexSet_Init */
+	IndexSet*	self = (IndexSet*)indexSet;
+	IndexSet*	newSet = (IndexSet*)newIndexSet;
+	memcpy( ((IndexSet*)newIndexSet)->_container, ((IndexSet*)indexSet)->_container, sizeof(char)*((IndexSet*)indexSet)->_containerSize );
+	newSet->membersCount = self->membersCount;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,188 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Memory-efficient class faciliting a set of Boolean values for a
+**	group of indices.
+**
+** Assumptions:
+**
+** Comments:
+**	The Boolean values are stored using single bits in a bit field.
+**	The total count of values in the set is currently fixed.
+**	IndexSet_GetMembers() and IndexSet_GetVacancies() is potentially a CPU-hog
+**	if called very frequently on a large set. If this becomes a problem, the
+**	client code's algorithm may need to be improved with a lookup or hash
+**	table: see MeshDecomp .
+**
+**
+** $Id: IndexSet.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_IndexSet_h__
+#define __Base_Container_IndexSet_h__
+	
+
+	/** Virtual function template */
+	typedef		void	(IndexSet_DuplicateFunction)		( void* indexSet, void* newIndexSet );
+	
+	
+	/** Textual name of this class */
+	extern const Type IndexSet_Type;
+	
+	
+	/** IndexSet define (see IndexSet::) */
+	#define __IndexSet \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		IndexSet_DuplicateFunction*	_duplicate; \
+		\
+		/* IndexSet info */ \
+		Stream*				error; \
+		/** Number of items in the set. Currently fixed. */ \
+		IndexSet_Index			size; \
+		/** Total size of the container in bytes */ \
+		SizeT				_containerSize; \
+		/** The set of boolean-repesenting bytes */ \
+		char*				_container; \
+		/** Counter of 'Trues' in set, is reset to unsigned -1 when Add or Remove is called. */ \
+		IndexSet_Index			membersCount;					
+
+	/**	Memory-efficient class faciliting a set of Boolean values for a
+	**	group of indices. See IndexSet.h for documentation of member functions & the module. */
+	struct IndexSet { __IndexSet };
+	
+	/** Macro to test if a returned index represents invalid */
+	#define IndexSet_Invalid( self ) \
+		(self)->size
+	
+	/** Create a IndexSet:: of the given size. All values are
+	initially False.*/
+	IndexSet* IndexSet_New( IndexSet_Index size );
+	
+	/** IndexSet_New() for when user created the class already. */
+	void IndexSet_Init( IndexSet* self, IndexSet_Index size );
+	
+	/** IndexSet_New() implementation. */
+	IndexSet* _IndexSet_New( 
+		SizeT				_sizeOfSelf, 
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*		_copy, 
+		IndexSet_DuplicateFunction*	_duplicate,
+		IndexSet_Index			size );
+	
+	/** IndexSet_Init() implementation. */
+	void _IndexSet_Init( IndexSet* self, IndexSet_Index size );
+	
+	/** Stg_Class_Delete() implementation.  */
+	void _IndexSet_Delete( void* indexIndexSet );
+	
+	/** Stg_Class_Print() implementation. */
+	void _IndexSet_Print( void* indexIndexSet, Stream* stream );
+	
+	/* Copy */
+	#define IndexSet_Copy( self ) \
+		(IndexSet*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define IndexSet_DeepCopy( self ) \
+		(IndexSet*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _IndexSet_Copy( void* indexSet, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** "Add" an index - i.e., set a particular index into the set's value as
+	True. If true already, value is unchanged. */
+	void IndexSet_Add( void* indexSet, Index index );
+	
+	/** "Remove" an index - i.e., set a particular index into the set's value
+	as False. If false already, value is unchanged. */
+	void IndexSet_Remove( void* indexSet, Index index );
+	
+	/** Is the index a member of this set? (is its index in the set currently
+	True?) */
+	Bool IndexSet_IsMember( void* indexSet, Index index );
+	
+	/** Gets the current number of index members */
+	IndexSet_Index IndexSet_UpdateMembersCount( void* indexSet );
+	
+	/** Returns the index of the Nth member in the set. Returns IndexSet_Invalid if there
+	are less members than requested. Note that first member's index is found by passing
+	0 for nthMember. */
+	IndexSet_Index IndexSet_GetIndexOfNthMember( void* indexSet, const Index nthMember );
+	
+	/** Updates an array, already correctly allocated to the size returned by 
+	IndexSet_UpdateMemebersCount(), to contain the array of all indices that are 
+	currently True in the set. Use in preference to IndexSet_GetMembers() if memory
+	tracing is important. */
+	void IndexSet_GetMembers2( void* indexSet, Index* const array );
+
+	/** Return a dynamically allocated array of all indices in the set that
+	are currently True. Note that the time is proportional to the number
+	of elements in the set, so use with some caution for large sets. */
+	void IndexSet_GetMembers( void* indexSet, IndexSet_Index* countPtr, Index** arrayPtr );
+	
+	/** Return a dynamically allocated array of all indices in the set that
+	are currently False. The same speed issue as applies for
+	IndexSet_GetMembers() applies for this function. */
+	void IndexSet_GetVacancies( void* indexSet, IndexSet_Index* countPtr, Index** arrayPtr );
+	
+	/** Do a binary OR on each pair of corresponding members of 2 given sets,
+	and save the result to the first set. Note that if the sets are different
+	lengths, the OR operation is only applied up to the shorter of the 2
+	lengths. Thus if the second set is shorter, there will be some uncompared
+	values at the end of the first set.
+	*/
+	void IndexSet_Merge_OR( void* indexSet, void* merger );
+	
+	/** Do a binary AND on each pair of corresponding members of 2 given sets,
+	and save the result to the first set. Note that if the sets are different
+	lengths, the AND operation is only applied up to the shorter of the 2
+	lengths. Thus if the second set is shorter, there will be some uncompared
+	values at the end of the first set.
+	*/
+	void IndexSet_Merge_AND( void* indexSet, void* merger );
+	
+	/** Sets every index in the set as True. */
+	void IndexSet_AddAll( void* indexSet );
+	
+	/** Sets every index in the set as False. */
+	void IndexSet_RemoveAll( void* indexSet );
+	
+	/** Returns a pointer to a dynamically allocated copy of the current set.*/
+	IndexSet* IndexSet_Duplicate( void* indexSet );
+	
+	/** IndexSet_Duplicate() implementation. */
+	void _IndexSet_Duplicate( void* indexSet, void* newIndexSet );
+	
+	/** Prints message and exits properly when bad access/write detected. */
+	void _IndexSet_Abort( IndexSet* indexSet, const char* const funcName, IndexSet_Index index );
+
+#endif /* __Base_Container_IndexSet_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool BaseContainer_Init( int* argc, char** argv[] ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_Container_Init_h__
+#define __Base_Container_Init_h__
+	
+	Bool BaseContainer_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_Container_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,390 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: List.c 2038 2004-11-15 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "LinkedListNode.h"
+#include "LinkedList.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type LinkedList_Type = "LinkedList";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+LinkedList* _LinkedList_New(
+			SizeT							_sizeOfSelf,
+			Type							type,
+			Stg_Class_DeleteFunction*			_delete,
+			Stg_Class_PrintFunction*			_print,
+			Stg_Class_CopyFunction*				_copy
+			)
+{
+	LinkedList *self = NULL;
+
+	self = (LinkedList*)_Stg_Class_New(
+							_sizeOfSelf,
+							type,
+							_delete,
+							_print,
+							_copy);
+	return self;
+}
+
+LinkedList* LinkedList_New( 
+		LinkedList_compareFunction*		compareFunction,
+		LinkedList_dataCopyFunction*	dataCopyFunction,
+		LinkedList_dataPrintFunction*	dataPrintFunction,
+		LinkedList_dataDeleteFunction*	dataDeleteFunction,
+		Order listOrder )
+{
+	
+	LinkedList* self;
+	
+	/* General info */
+	assert ( compareFunction );
+	
+	self = _LinkedList_New( 
+		   					sizeof(LinkedList),
+							LinkedList_Type,
+							_LinkedList_DeleteFunc,
+							_LinkedList_PrintFunc,
+							NULL);
+
+	/* List info */
+	self->compareFunction = compareFunction;
+	self->dataCopyFunction = dataCopyFunction;
+	self->dataPrintFunction = dataPrintFunction;
+	self->dataDeleteFunction = dataDeleteFunction;
+	self->listOrder = listOrder;
+	
+	/* Virtual functions */
+	LinkedList_Init( self );
+	return self;
+}
+
+void _LinkedList_Init( LinkedList* self ){
+	/* General info */
+	
+	assert( self );
+	_Stg_Class_Init ((Stg_Class*) self);
+	
+	self->head = NULL;
+	self->nodeCount = 0;
+	/* Dictionary info */
+}
+
+void LinkedList_Init( LinkedList *self )
+{
+	assert( self );
+	_LinkedList_Init (self);
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual Functions
+*/
+void _LinkedList_PrintFunc ( void *list, Stream *stream )
+{
+	LinkedList *self = NULL;
+	
+	self = (LinkedList*) list;
+	assert( self );
+	assert( stream );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) self, stream );
+
+	/* general info */
+	Journal_Printf( stream, "LinkedList (ptr): (%p)\n", self );
+
+	/* Virtual Info */
+
+	/* LinkedList Info */
+	Journal_Printf( stream, "\tNodeCount\t\t - %d\n", self->nodeCount );
+	Journal_Printf( stream, "\tLinkedList Order\t - %s\n", (self->listOrder == LINKEDLIST_SORTED)?"SORTED":"UNSORTED" );
+	
+	Journal_Printf( stream, "\tLinkedList data\t - \n");
+	if (self->dataPrintFunction)
+		LinkedList_ParseList( self, (LinkedList_parseFunction*)self->dataPrintFunction, (void*)stream );
+}
+
+int LinkedList_DeleteAllNodes( LinkedList *list )
+{
+	LinkedList *self = NULL;
+	LinkedListNode *curr = NULL, *temp = NULL;
+
+	self = (LinkedList*)list;
+	assert (self);
+
+	curr = self->head;
+	while (curr != NULL){
+		temp = curr->next;
+
+		if (self->dataDeleteFunction){
+			self->dataDeleteFunction( curr->data );
+		}
+		else{
+			Memory_Free(curr->data);
+		}
+		Memory_Free( curr ); /** Freeing the Node without calling the Stg_Class_Delete function, because LinkedList_Node does not inherit __Stg_Class */
+		
+		curr = temp;
+		--self->nodeCount;
+	}
+	self->head = NULL;
+
+	return 0;
+}
+
+void _LinkedList_DeleteFunc( void *list )
+{
+	LinkedList *self = NULL;
+	
+	self = (LinkedList*)list;
+	assert (self);
+	
+	LinkedList_DeleteAllNodes( self );
+	
+	_Stg_Class_Delete( self );
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+void LinkedList_InsertNode ( LinkedList *list, void *newNodeData, SizeT dataSize)
+{
+	LinkedListNode *curr = NULL, *prev = NULL;
+	LinkedListNode *newNode = NULL;
+	
+	assert (list);
+	
+	newNode = LinkedListNode_New();
+	if(list->dataCopyFunction){
+		list->dataCopyFunction(&newNode->data, newNodeData, dataSize);
+	}
+	else{
+		newNode->data = newNodeData;
+	}
+
+	if( list->listOrder == LINKEDLIST_SORTED ){
+		curr = list->head;
+		prev = NULL;
+		while(curr != NULL){
+			if (list->compareFunction(newNodeData, curr->data) < 0){
+				break;
+			}
+			prev = curr;
+			curr = curr->next;
+		}
+		
+		if (prev == NULL){
+			newNode->next = list->head;
+			list->head = newNode;
+		}
+		else {
+			prev->next = newNode;
+			newNode->next = curr;
+		}
+	}
+	else{
+		if (list->head == NULL){
+			list->head = newNode;
+		}
+		else{
+			newNode->next = list->head;
+			list->head = newNode;
+		}
+	}
+	++list->nodeCount;
+}
+
+LinkedListNode *LinkedList_FindNode( LinkedList *list, void *data )
+{
+	LinkedListNode *curr = NULL;
+
+	assert (list);
+
+	curr = list->head;
+
+	while(curr != NULL){
+		if (list->compareFunction(curr->data, data) == 0){
+			return curr;
+		}
+		curr = curr->next;
+	}
+	return NULL;
+}
+
+int LinkedList_DeleteNode( LinkedList *list, void *nodeData )
+{
+	LinkedListNode *curr = NULL, *prev = NULL, *targetNode = NULL;
+	
+
+	assert (list);
+
+	curr = list->head;
+	prev = NULL;
+	while(curr != NULL){
+		if (curr->data && nodeData){
+			if (list->compareFunction(curr->data, nodeData) == 0){
+				targetNode = curr;
+				break;
+			}
+		}
+		prev = curr;
+		curr = curr->next;
+	}
+
+	if (targetNode != NULL){
+		if (list->dataDeleteFunction){
+			list->dataDeleteFunction(targetNode->data);
+		}
+		else{
+			Memory_Free(targetNode->data);
+		}
+
+		if(prev == NULL){
+			list->head = targetNode->next;
+		}
+		else{
+			prev->next = targetNode->next;
+		}
+		
+		Memory_Free(targetNode);
+		--list->nodeCount;
+		return 1;
+	}
+	else{
+		
+	}
+
+	return 0;
+}
+
+void LinkedList_ParseList( LinkedList *list, LinkedList_parseFunction *parseFunction, void *args )
+{
+	LinkedListNode *curr;
+
+	assert(list);
+	assert(parseFunction);
+
+	curr = list->head;
+	while(curr != NULL){
+		parseFunction(curr->data, args);
+		curr = curr->next;
+	}
+}
+
+char* LinkedList_ReturnArrayFunc( LinkedList *list, SizeT dataSize )
+{
+	LinkedListNode *curr = NULL;
+	char *array = NULL;
+	int counter = 0;
+
+	assert( list );
+	
+	array = Memory_Alloc_Array_Unnamed(char, list->nodeCount * dataSize );
+	assert( array );
+	
+	curr = list->head;
+	while(curr != NULL){
+		memcpy(&array[(counter++)*dataSize], curr->data, dataSize);
+		curr = curr->next;
+	}
+
+	return array;
+}
+
+void LinkedList_SetCompareFunction ( LinkedList *list, LinkedList_compareFunction *compareFunction )
+{
+	assert (list);
+	assert (compareFunction);
+
+	list->compareFunction = compareFunction;
+}
+
+void LinkedList_ParseListNode( LinkedListNode *root, LinkedList_parseFunction *parseFunction, void *args )
+{
+	LinkedListNode *curr;
+
+	assert(root);
+	assert(parseFunction);
+
+	curr = root;
+	while(curr != NULL){
+		parseFunction(curr->data, args);
+		curr = curr->next;
+	}
+}
+
+void *LinkedList_FindNodeDataFunc( LinkedList *list, void *data )
+{
+	LinkedListNode *curr = NULL;
+
+	assert (list);
+
+	curr = list->head;
+
+	while(curr != NULL){
+		if (list->compareFunction(curr->data, data) == 0){
+			return curr->data;
+		}
+		curr = curr->next;
+	}
+	return NULL;
+}
+
+void *LinkedList_ReturnNodeDataAtFunc( LinkedList *list, int index )
+{
+	LinkedListNode *curr = NULL;
+	int nodeIndex = 0;
+
+	assert (list);
+
+	curr = list->head;
+
+	while(curr != NULL){
+		
+		if (index == nodeIndex++){
+			return curr->data;
+		}
+		else if (nodeIndex > index){
+			break;
+		}
+		curr = curr->next;
+	}
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: LinkedList.h 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __LinkedList_h__
+#define __LinkedList_h__
+
+	/** Textual name for List class. */
+	extern const Type LinkedList_Type;
+	
+	/** Virtual Function Pointers */
+		/** This is a function type to be provided by the user for doing comparisons on node data */
+	typedef int		(LinkedList_compareFunction)		( void *, void * );
+		
+		/** This is a function type to be provided by the user for copying node data, when a new node is being created */
+	typedef void	(LinkedList_dataCopyFunction)		( void **, void *, SizeT );
+
+		/** This is a function type to be provided by the user for printing the contents of a Node's data */
+	typedef void	(LinkedList_dataPrintFunction)		( void *, void * );
+		
+		/** This is a function type to be provided by the user for deleting node data, when a new node is being deleted */
+	typedef void	(LinkedList_dataDeleteFunction)		( void * );
+	
+		/** This is a function type to be provided by the user, which can be applied to each node on the tree later on.
+		 * The first argument is the data stored inside a node and the second argument can be a single argument or a 
+		 * struct of arguments that need to be passed to the user-supplied function */
+	typedef void	(LinkedList_parseFunction)			( void *, void * );
+	
+	/** \def __List See __List */
+	#define __LinkedList \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* List info */ \
+		LinkedListNode					*head; \
+		LinkedList_compareFunction*		compareFunction; \
+		LinkedList_dataCopyFunction*	dataCopyFunction; \
+		LinkedList_dataPrintFunction*	dataPrintFunction; \
+		LinkedList_dataDeleteFunction*	dataDeleteFunction; \
+		Order							listOrder; \
+		Index						nodeCount;
+
+	struct LinkedList { __LinkedList };
+
+	/** Constructor interface. */
+	LinkedList* LinkedList_New( 
+				LinkedList_compareFunction*		compareFunction,
+				LinkedList_dataCopyFunction*	dataCopyFunction,
+				LinkedList_dataPrintFunction*	dataPrintFunction,
+				LinkedList_dataDeleteFunction*	dataDeleteFunction,
+				Order listOrder);
+
+	LinkedList* _LinkedList_New(
+				SizeT							_sizeOfSelf,
+				Type							type,
+				Stg_Class_DeleteFunction*			_delete,
+				Stg_Class_PrintFunction*			_print,
+				Stg_Class_CopyFunction*				_copy
+				);
+
+	
+	/** Init interface. */
+	void LinkedList_Init( LinkedList* self );
+	
+	void _LinkedList_Init( LinkedList* self );
+	
+	/** Stg_Class_Delete interface. */
+		/** Stg_Class delete function */
+	void _LinkedList_DeleteFunc ( void *list );
+	
+	/** Print interface. */
+		/** Stg_Class print function */
+	void _LinkedList_PrintFunc ( void *list, Stream* stream );
+
+	/** Public functions */
+		/** Inserts a new node into the tree conserving the list's (Ascending) order */
+	void LinkedList_InsertNode ( LinkedList *list, void *newNodeData, SizeT );
+		
+		/** Sets the compare function to be used by the tree */
+	void LinkedList_SetCompareFunction ( LinkedList *list, LinkedList_compareFunction *compareFunction );
+	
+		/** Attempts to find a node in the list and returns the node if found*/
+	LinkedListNode *LinkedList_FindNode( LinkedList *list, void *data );
+		
+	/** Attempts to find a node data in the list and returns the node data if found*/
+	void *LinkedList_FindNodeDataFunc( LinkedList *list, void *data );
+#define LinkedList_FindNodeData( list, data, type ) \
+		(type*) LinkedList_FindNodeDataFunc( list, data )
+	
+	/** Attempts to find a node data in the list at a particular position and returns the node data if found*/
+	void *LinkedList_ReturnNodeDataAtFunc( LinkedList *list, int index );
+#define LinkedList_ReturnNodeDataAt( list, index, type ) \
+		(type*) LinkedList_ReturnNodeDataAtFunc( list, index )
+	
+	/** Deletes a node from the list with the node-data being passed in as a parameter */
+	int LinkedList_DeleteNode( LinkedList *list, void *nodeData );
+	
+	int LinkedList_DeleteAllNodes( LinkedList *list );
+		
+		/** Parses the list and executes a user-supplied function */
+	void LinkedList_ParseList( LinkedList *list, LinkedList_parseFunction *parseFunction, void *args );
+	
+		/** Parses the list downwards from a given node in the list */
+	void LinkedList_ParseListNode( LinkedListNode *root, LinkedList_parseFunction *parseFunction, void *args );
+
+		/** Creates an array of all the nodes' data and returns it */
+	char* LinkedList_ReturnArrayFunc( LinkedList *list, SizeT dataSize );
+
+#define LinkedList_ReturnArray( list, type ) \
+		(type*) LinkedList_ReturnArrayFunc( list, sizeof(type) )
+
+	/** Private Functions */
+	
+	
+#endif /* __LinkedList_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: LinkedListIterator.c 2038 2005-04-16 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "LinkedListNode.h"
+#include "LinkedList.h"
+#include "LinkedListIterator.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type LinkedListIterator_Type = "LinkedListIterator";
+
+LinkedListIterator *_LinkedListIterator_New(
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy
+		)
+{
+	LinkedListIterator *self = NULL;
+
+	/** LinkedListIterator using Class_New, because  Memory module has been initialized */
+	
+	self = (LinkedListIterator*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy );
+	
+	return self;
+}
+
+LinkedListIterator *LinkedListIterator_New( LinkedList *list )
+{
+	
+	LinkedListIterator* self;
+	
+	assert( list );
+	self = _LinkedListIterator_New(
+			sizeof(LinkedListIterator),
+			LinkedListIterator_Type,
+			_LinkedListIterator_DeleteFunc,
+			_LinkedListIterator_PrintFunc,
+			NULL
+			);
+	/* General info */
+	
+	/* Virtual functions */
+	assert( list );
+	self->list = list;
+	
+	_LinkedListIterator_Init( self );	
+	return self;
+}
+
+void _LinkedListIterator_Init( LinkedListIterator* self )
+{
+
+}
+
+void _LinkedListIterator_DeleteFunc( void *self )
+{
+	if( self ){
+		_Stg_Class_Delete( self );
+	}
+}
+
+void _LinkedListIterator_PrintFunc( void *self, Stream *myStream )
+{
+	LinkedListIterator *iterator = NULL;
+
+	iterator = (LinkedListIterator*) self;
+	assert( iterator );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) iterator, myStream );
+
+	/* general info */
+	Journal_Printf( myStream, "LinkedListIterator (ptr): (%p)\n", iterator );
+	Journal_Printf( myStream, "\tlist (ptr): (%p)\n", iterator->list );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	LinkedListIterator class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: LinkedListIterator.h 2087 2005-4-16 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __Base_Foundation__LinkedListIterator_h__
+#define __Base_Foundation__LinkedListIterator_h__
+
+	/** Textual name for LinkedListIterator class. */
+	extern const Type LinkedListIterator_Type;
+	
+	/** Virtual Function Pointers */
+	
+	/** \def __LinkedListIterator_Iterator See __LinkedList_Iterator */
+	#define __LinkedListIterator \
+		__Stg_Class \
+		LinkedList		*list; \
+		LinkedListNode	*curr;
+	
+	struct LinkedListIterator { __LinkedListIterator };
+	
+
+	/** Constructor interface. */
+	LinkedListIterator* LinkedListIterator_New( LinkedList *list );
+	
+	LinkedListIterator *_LinkedListIterator_New(
+			SizeT					_sizeOfSelf,
+			Type					type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print,
+			Stg_Class_CopyFunction*		_copy
+			);
+	
+	/** Init interface. */
+	void _LinkedListIterator_Init( LinkedListIterator *self );
+	
+	/** Stg_Class_Delete Interface */
+	void _LinkedListIterator_DeleteFunc( void *self );
+
+	/** Print Interface */
+	void _LinkedListIterator_PrintFunc( void *, Stream * );
+	
+#endif /* __Base_Foundation__LinkedListIterator_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: ListNode.c 2038 2005-2-25 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "LinkedListNode.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type LinkedListNode_Type = "LinkedListNode";
+
+LinkedListNode* LinkedListNode_New( void )
+{
+	LinkedListNode* self;
+	
+	/* Allocate memory */
+	self = Memory_Alloc( LinkedListNode, "LinkedListNode" );
+	memset ( self, 0, sizeof ( LinkedListNode ) );
+
+	assert( self );
+	/* General info */
+	
+	/* Virtual functions */
+	
+	self->next = NULL;
+	_LinkedListNode_Init( self );
+	
+	return self;
+}
+
+void _LinkedListNode_Init( LinkedListNode* self ){
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ListNode info */
+		assert( self );
+	self->data = NULL;
+	self->sizeOfData = 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Linked List class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: LinkedListNode.h 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __LinkedListNode_h__
+#define __LinkedListNode_h__
+
+	/** Textual name for ListNode class. */
+	extern const Type LinkedListNode_Type;
+
+	/** \def __ListNode See ListNode */
+	#define __LinkedListNode \
+		/* General info */ \
+		\
+		/* Virtual info */ \
+		\
+		/* ListNode info */ \
+		void 				*data; \
+		SizeT				sizeOfData; \
+		struct LinkedListNode		*next; 
+
+	struct LinkedListNode { __LinkedListNode };
+
+
+	/** Constructor interface. */
+	LinkedListNode *LinkedListNode_New ( void );
+	
+	/** Init interface. */
+	void _LinkedListNode_Init( LinkedListNode *self );
+	
+	/** Stg_Class_Delete interface. */
+	
+	/** Print interface. */
+
+#endif /* __LinkedListNode_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/List.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/List.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/List.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,236 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: List.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "List.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type List_Type = "List";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+List* List_New_Param(
+		SizeT						elementSize, 
+		unsigned					delta )
+{
+	return _List_New( 
+		sizeof(List), 
+		List_Type, 
+		_List_Delete, 
+		_List_Print, 
+		NULL, 
+		_List_Append,
+		_List_Mutate, 
+		elementSize,
+		delta );
+}
+
+
+void List_Init(
+		List*						self,
+		SizeT						elementSize, 
+		unsigned					delta )
+{
+	/* General info */
+	self->type = List_Type;
+	self->_sizeOfSelf = sizeof(List);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _List_Delete;
+	self->_print = _List_Print;
+	self->_copy = NULL;
+	self->_append = _List_Append;
+	self->_mutate = _List_Mutate;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* List info */
+	_List_Init( self, elementSize, delta );
+}
+
+
+List* _List_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		List_AppendFunc*				_append,
+		List_MutateFunc*				_mutate, 
+		SizeT						elementSize, 
+		unsigned					delta )
+{
+	List*			self;
+	
+	/* Allocate memory */
+	self = (List*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->_append = _append;
+	self->_mutate = _mutate;
+	
+	/* List info */
+	_List_Init( self, elementSize, delta );
+	
+	return self;
+}
+
+
+void _List_Init(
+		List*						self,
+		SizeT						elementSize, 
+		unsigned					delta )
+{
+	/* General and Virtual info should already be set */
+	
+	/* List info */
+	self->elementSize = elementSize;
+	self->delta = delta;
+	self->maxElements = self->delta;
+	self->elements = Memory_Alloc_Bytes_Unnamed( self->elementSize * self->maxElements, char);
+	assert( self->elements ); 
+	self->elementCnt = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _List_Delete( void* list ) {
+	List*			self = (List*)list;
+	
+	/* Stg_Class_Delete the class itself */
+	if( self->elements )
+		Memory_Free( self->elements );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _List_Print( void* list, Stream* stream ) {
+	List*			self = (List*)list;
+	
+	/* Set the Journal for printing informations */
+	Stream*			myStream;
+	myStream = Journal_Register( InfoStream_Type, "ListStream" );
+
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( myStream, "List (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* List info */
+	Journal_Printf( myStream, "\telementSize: %d\n", self->elementSize );
+	Journal_Printf( myStream, "\tdelta: %d\n", self->delta );
+	Journal_Printf( myStream, "\tmaxElements: %d\n", self->maxElements );
+	Journal_Printf( myStream, "\telementCnt: %d\n", self->elementCnt );
+	Journal_Printf( myStream, "\telements (ptr): %p\n", self->elements );
+}
+
+
+unsigned _List_Append( void* list, void* data ) {
+	List*			self = (List*)list;
+	
+	List_Resize( self, self->elementCnt + 1 );
+	memcpy( &((unsigned char*)self->elements)[self->elementSize * (self->elementCnt - 1)], data,
+		sizeof(unsigned char) * self->elementSize );
+	
+	return self->elementCnt - 1;
+}
+
+
+void _List_Mutate( void* list, unsigned index, void* data ) {
+	List*		self = (List*)list;
+	
+	memcpy( &((unsigned char*)self->elements)[self->elementSize * index], data,
+		sizeof(unsigned char) * self->elementSize );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void List_Resize( void* list, unsigned size ) {
+	List*		self = (List*)list;
+	
+	if( size >= self->maxElements ) {
+		unsigned		factor;
+		void*			newElements;
+		
+		factor = ceil( (float)(size - self->maxElements) / (float)self->delta );
+		self->maxElements += factor * self->delta;
+		
+		newElements = Memory_Alloc_Bytes_Unnamed( self->elementSize * self->maxElements, char );
+		assert( newElements ); 
+		if( self->elements ) {
+			memcpy( newElements, self->elements, self->elementSize * self->elementCnt );
+			Memory_Free( self->elements );
+		}
+		self->elements = newElements;
+	}
+	else if( size < self->elementCnt ) {
+		Journal_Firewall( 0, Journal_Register( ErrorStream_Type, "List" ), "error in '%s'\n", __func__); 
+	}
+	
+	self->elementCnt = size;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/List.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/List.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/List.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,161 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: List.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_List_h__
+#define __Base_Container_List_h__
+	
+
+	/** Textual name of this class */
+	extern const Type List_Type;
+
+	/* Virtual function types */
+	typedef	unsigned		(List_AppendFunc)	( void* list, void* data );
+	typedef void			(List_MutateFunc)	( void* list, unsigned index, void* data );
+	
+	/** List class contents */
+	#define __List \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		List_AppendFunc*			_append; \
+		List_MutateFunc*			_mutate; \
+		\
+		/* List info ... */ \
+		SizeT					elementSize; \
+		unsigned				delta; \
+		unsigned				maxElements; \
+		unsigned				elementCnt; \
+		void*					elements;
+
+	struct List { __List };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a List */
+	#define List_New( elementSize ) \
+		List_New_Param( elementSize, 10 )
+	
+	List* List_New_Param( 
+		SizeT						elementSize, 
+		unsigned					delta );
+	
+	/* Creation implementation */
+	List* _List_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		List_AppendFunc*				_append,
+		List_MutateFunc*				_mutate, 
+		SizeT						elementSize, 
+		unsigned					delta );
+	
+	
+	/* Initialise a List */
+	void List_Init(
+		List*						self,
+		SizeT						elementSize, 
+		unsigned					delta );
+	
+	/* Initialisation implementation functions */
+	void _List_Init(
+		List*						self,
+		SizeT						elementSize, 
+		unsigned					delta );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete mesh implementation */
+	void _List_Delete( void* list );
+	
+	/* Print mesh implementation */
+	void _List_Print( void* list, Stream* stream );
+	
+	/* Append implementation */
+	unsigned _List_Append( void* list, void* data );
+	
+	/* Mutate implementation */
+	void _List_Mutate( void* list, unsigned index, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	
+	/* Use this to get the current size of the list */
+	#define List_Size( self ) ((self)->elementCnt)
+	
+	/* Use this to check if a given index is within the list's bounds */
+	#define List_IsValidIndex( self, index ) (index < (self)->elementCnt)
+	
+	/* This guy gives access to the list's elements directly.  This is kind of dangerous
+	   as inherited lists, such as UniqueList, rely on elements only being added with one
+	   of 'Append', 'Prepend' or 'Insert*'. */
+	#define List_ElementAt( self, type, index ) (((type*)((List*)self)->elements)[index])
+	
+	/* Used to resize the list's maximum size */
+	void List_Resize( void* list, unsigned size );
+	
+	/* The standard means of adding an element to the list. */
+	#define List_Append( self, data ) (self)->_append( self, data )
+	
+	/* Modify the content of list element */
+	#define List_Mutate( self, index, data ) \
+		(self)->_mutate( self, index, data )
+	
+	/* Get the list's array */
+	#define List_Array( self, type ) \
+		(type*)(self)->elements
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+
+#endif /* __Base_Container_List_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MPIRoutines.c 2276 2004-11-04 02:01:18Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "MPIRoutines.h"
+
+
+void MPIArray_Bcast( unsigned* arraySize, void** array, size_t itemSize, 
+		     unsigned root, MPI_Comm comm )
+{
+	unsigned	nProcs;
+	unsigned	rank;
+
+	/* Sanity check. */
+	assert( !arraySize || array );
+
+	/* Get basic MPI info. */
+	MPI_Comm_size( comm, (int*)&nProcs );
+	MPI_Comm_rank( comm, (int*)&rank );
+
+	/* Send array sizes and allocate. */
+	MPI_Bcast( arraySize, 1, MPI_UNSIGNED, root, comm );
+	if( rank != root )
+		*array = Memory_Alloc_Array_Bytes_Unnamed( itemSize, *arraySize, "unknown" );
+
+	/* Send array. */
+	MPI_Bcast( *array, itemSize * (*arraySize), MPI_BYTE, root, comm );
+}
+
+
+void MPIArray_Gather( unsigned arraySize, void* array, 
+		      unsigned** dstSizes, void*** dstArrays, 
+		      size_t itemSize, unsigned root, MPI_Comm comm )
+{
+	unsigned	nProcs;
+	unsigned	rank;
+	unsigned*	tmpSizes;
+	unsigned*	disps;
+	unsigned	netSize;
+	Stg_Byte*	tmpArray;
+	unsigned	p_i;
+
+	/* Get basic MPI info. */
+	MPI_Comm_size( comm, (int*)&nProcs );
+	MPI_Comm_rank( comm, (int*)&rank );
+
+	/*
+	** Send a 1D array of arbitrary length to root process in supplied communicator.  This means we also
+	** need to receive arrays of arbitrary length from all others.  As the array from this proc is already stored
+	** elsewhere we will remove it from the received array, setting its length to zero.
+	*/
+	if( rank == root )
+		*dstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	else
+		*dstSizes = NULL;
+	MPI_Gather( &arraySize, 1, MPI_UNSIGNED, *dstSizes, 1, MPI_UNSIGNED, root, comm );
+
+	/* Factor in 'itemSize'. */
+	if( rank == root ) {
+		tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		for( p_i = 0; p_i < nProcs; p_i++ )
+			tmpSizes[p_i] = (*dstSizes)[p_i] * itemSize;
+
+		/* Allocate space for the coming arrays and build a displacement list. */
+		disps = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		disps[0] = 0;
+		netSize = (*dstSizes)[0];
+		for( p_i = 1; p_i < nProcs; p_i++ ) {
+			disps[p_i] = disps[p_i - 1] + tmpSizes[p_i - 1];
+			netSize += (*dstSizes)[p_i];
+		}
+
+		if( netSize )
+			tmpArray = Memory_Alloc_Array_Bytes_Unnamed( itemSize, netSize, "unknown" );
+		else
+			tmpArray = NULL;
+	}
+	else {
+		tmpArray = NULL;
+		tmpSizes = NULL;
+		disps = NULL;
+	}
+
+	/* Send/receive array/s. */
+	MPI_Gatherv( array, arraySize * itemSize, MPI_BYTE, 
+		     tmpArray, (int*)tmpSizes, (int*)disps, MPI_BYTE, 
+		     root, comm );
+
+	/* Free the displacements and temporary-sizes. */
+	FreeArray( disps );
+	FreeArray( tmpSizes );
+
+	/* Convert result to 2D array. */
+	if( rank == root )
+		Array_1DTo2D( nProcs, *dstSizes, tmpArray, dstArrays, itemSize );
+}
+
+void MPIArray_Allgather( unsigned arraySize, void* array, 
+			 unsigned** dstSizes, void*** dstArrays, 
+			 size_t itemSize, MPI_Comm comm )
+{
+	unsigned	nProcs;
+	unsigned	rank;
+	unsigned*	tmpSizes;
+	void*		tmpArray1D;
+	unsigned*	disps;
+	unsigned	netSize;
+	unsigned	p_i;
+
+	/* Get basic MPI info. */
+	MPI_Comm_size( comm, (int*)&nProcs );
+	MPI_Comm_rank( comm, (int*)&rank );
+
+	/*
+	** Send a 1D array of arbitrary length to all other processes in the supplied communicator.  This means we also
+	** need to receive arrays of arbitrary length from all others.  As the array from this proc is already stored
+	** elsewhere we will remove it from the received array, setting its length to zero.
+	*/
+	*dstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	MPI_Allgather( &arraySize, 1, MPI_UNSIGNED, *dstSizes, 1, MPI_UNSIGNED, comm );
+
+	/* Factor in 'itemSize'. */
+	tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	for( p_i = 0; p_i < nProcs; p_i++ )
+		tmpSizes[p_i] = (*dstSizes)[p_i] * itemSize;
+		
+	/* Allocate space for the coming arrays and build a displacement list. */
+	disps = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	disps[0] = 0;
+	netSize = (*dstSizes)[0];
+	for( p_i = 1; p_i < nProcs; p_i++ ) {
+		disps[p_i] = disps[p_i - 1] + tmpSizes[p_i - 1];
+		netSize += (*dstSizes)[p_i];
+	}
+
+	if( netSize )
+		tmpArray1D = Memory_Alloc_Array_Bytes_Unnamed( itemSize, netSize, "unknown" );
+	else
+		tmpArray1D = NULL;
+
+	/* Send/receive array/s. */
+	MPI_Allgatherv( array, arraySize * itemSize, MPI_BYTE, 
+			tmpArray1D, (int*)tmpSizes, (int*)disps, 
+			MPI_BYTE, comm );
+
+	/* Free the displacements and temp-sizes. */
+	FreeArray( disps );
+	FreeArray( tmpSizes );
+
+	/* Unpack the 1D array into the 2D destination. */
+	Array_1DTo2D( nProcs, *dstSizes, tmpArray1D, dstArrays, itemSize );
+
+	/* Free resources. */
+	FreeArray( tmpArray1D );
+}
+
+void MPIArray2D_Alltoall( unsigned* arraySizes, void** arrays, 
+			  unsigned** dstSizes, void*** dstArrays, 
+			  size_t itemSize, MPI_Comm comm )
+{
+	unsigned	nProcs;
+	unsigned	rank;
+	unsigned*	tmpDstSizes;
+	unsigned*	tmpDstArray1D;
+	unsigned*	dstDisps;
+	unsigned	netSize;
+	unsigned*	tmpSizes;
+	void*		tmpSrcArray1D;
+	unsigned*	disps;
+	unsigned	p_i;
+
+	/* Get basic MPI info. */
+	MPI_Comm_size( comm, (int*)&nProcs );
+	MPI_Comm_rank( comm, (int*)&rank );
+
+	/*
+	** Blah, blah, sick of comments.
+	*/
+	*dstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	MPI_Alltoall( arraySizes, 1, MPI_UNSIGNED, *dstSizes, 1, MPI_UNSIGNED, comm );
+
+	/* Copy sizes into a new array and modify to include 'itemSize'. */
+	tmpDstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	for( p_i = 0; p_i < nProcs; p_i++ )
+		tmpDstSizes[p_i] = (*dstSizes)[p_i] * itemSize;
+
+	/* Allocate space for the coming arrays and build a displacement list. */
+	dstDisps = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	dstDisps[0] = 0;
+	netSize = (*dstSizes)[0];
+	for( p_i = 1; p_i < nProcs; p_i++ ) {
+		dstDisps[p_i] = dstDisps[p_i - 1] + tmpDstSizes[p_i - 1];
+		netSize += (*dstSizes)[p_i];
+	}
+
+	if( netSize )
+		tmpDstArray1D = Memory_Alloc_Array_Bytes_Unnamed( itemSize, netSize, "unknown" );
+	else
+		tmpDstArray1D = NULL;
+
+	/* Pack the supplied 2D array into a 1D array and send/receive. */
+	Array_2DTo1D( nProcs, arraySizes, arrays, &tmpSrcArray1D, sizeof(unsigned), &disps );
+
+	/* Generate a temporary set of sizes to include 'itemSize'. Modify 'dists' while we're at it. */
+	tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		disps[p_i] *= itemSize;
+		tmpSizes[p_i] = arraySizes[p_i] * itemSize;
+	}
+
+	/* Send/recv. */
+	MPI_Alltoallv( tmpSrcArray1D, (int*)tmpSizes, (int*)disps, MPI_BYTE, 
+		       tmpDstArray1D, (int*)tmpDstSizes, (int*)dstDisps, MPI_BYTE, 
+		       comm );
+
+	/* Free memory. */
+	FreeArray( tmpSizes );
+	FreeArray( disps );
+	FreeArray( dstDisps );
+	FreeArray( tmpDstSizes );
+	FreeArray( tmpSrcArray1D );
+
+	/* Unpack the 1D array into the 2D destination. */
+	Array_1DTo2D( nProcs, *dstSizes, tmpDstArray1D, dstArrays, itemSize );
+
+	/* Free resources. */
+	FreeArray( tmpDstArray1D );
+}
+
+void Array_1DTo2D( unsigned nBlocks, unsigned* sizes, void* srcArray, 
+		   void*** dstArrays, size_t itemSize )
+{
+	Stg_Byte**		tmp;
+	unsigned*	tmpSizes;
+	unsigned	curPos = 0;
+	unsigned	b_i;
+
+	if( nBlocks == 0 ) {
+		*dstArrays = NULL;
+		return;
+	}
+
+	/* Calculate sizes. */
+	tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nBlocks );
+	for( b_i = 0; b_i < nBlocks; b_i++ )
+		tmpSizes[b_i] = sizes[b_i] * (unsigned)itemSize;
+
+	/* Allocate. */
+	tmp = Memory_Alloc_2DComplex_Unnamed( Stg_Byte, nBlocks, tmpSizes );
+	for( b_i = 0; b_i < nBlocks; b_i++ ) {
+		if( sizes[b_i] == 0 )
+			continue;
+
+		memcpy( tmp[b_i], (Stg_Byte*)srcArray + curPos, tmpSizes[b_i] );
+		curPos += tmpSizes[b_i];
+	}
+
+	/* Free memory. */
+	FreeArray( tmpSizes );
+
+	*dstArrays = (void**)tmp;
+}
+
+void Array_2DTo1D( unsigned nBlocks, unsigned* sizes, void** srcArrays, 
+		   void** dstArray, size_t itemSize, unsigned** disps )
+{
+	if( nBlocks == 0 ) {
+		dstArray = NULL;
+		disps = NULL;
+		return;
+	}
+	
+	/*
+	** Dump a 2D array into a 1D array and build a displacement array to accompany it.
+	*/
+	
+	{
+		unsigned	netSize;
+		unsigned	b_i;
+		unsigned*	tmpDisps;
+		
+		tmpDisps = Memory_Alloc_Array_Unnamed( unsigned, nBlocks );
+		
+		tmpDisps[0] = 0;
+		netSize = sizes[0];
+		for( b_i = 1; b_i < nBlocks; b_i++ ) {
+			tmpDisps[b_i] = tmpDisps[b_i - 1] + sizes[b_i - 1];
+			netSize += sizes[b_i];
+		}
+		
+		if( netSize > 0 ) {
+			void*	tmpArray;
+			char*	dest;
+			
+			tmpArray = Memory_Alloc_Array_Bytes_Unnamed( itemSize, netSize, "unknown" );
+
+			for( b_i = 0; b_i < nBlocks; b_i++ ) {
+				dest = tmpArray;
+				dest += (tmpDisps[b_i] * itemSize);
+				memcpy( dest, srcArrays[b_i], itemSize * sizes[b_i] );
+			}
+			
+			*dstArray = tmpArray;
+		}
+		else {
+			*dstArray = NULL;
+		}
+		
+		*disps = tmpDisps;
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Collection of commonly used functions	
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: MPIRoutines.h 2276 2004-11-04 02:01:18Z AlanLo $
+**
+**/
+
+#ifndef __Base_Foundation_MPIRoutines_h__
+#define __Base_Foundation_MPIRoutines_h__
+
+
+void MPIArray_Bcast( unsigned* arraySize, void** array, size_t itemSize, 
+		     unsigned root, MPI_Comm comm );
+
+void MPIArray_Gather( unsigned arraySize, void* array, 
+		      unsigned** dstSizes, void*** dstArrays, 
+		      size_t itemSize, unsigned root, MPI_Comm comm );
+
+void MPIArray_Allgather( unsigned arraySize, void* array, 
+			 unsigned** dstSizes, void*** dstArrays, 
+			 size_t itemSize, MPI_Comm comm );
+
+void MPIArray2D_Alltoall( unsigned* arraySizes, void** arrays, 
+			  unsigned** dstSizes, void*** dstArrays, 
+			  size_t itemSize, MPI_Comm comm );
+
+void Array_1DTo2D( unsigned nBlocks, unsigned* sizes, void* srcArray, 
+		   void*** dstArrays, size_t itemSize );
+
+void Array_2DTo1D( unsigned nBlocks, unsigned* sizes, void** srcArrays, 
+		   void** dstArray, size_t itemSize, unsigned** disps );
+
+
+#endif /* __Base_Foundation_MPIRoutines_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 3784 2006-09-06 10:01:39Z RaquibulHassan $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseContainer
+def_inc = StGermain/Base/Container
+
+def_srcs = \
+	MPIRoutines.c \
+	IndexSet.c \
+	PtrMap.c \
+	IndexMap.c \
+	List.c \
+	Array.c \
+	UniqueList.c \
+	BTreeNode.c \
+	BTree.c \
+	BTreeIterator.c \
+	UIntMap.c \
+	RangeSet.c \
+	LinkedListNode.c \
+	LinkedList.c \
+	LinkedListIterator.c \
+	HashTable.c \
+	Set.c \
+	PtrSet.c \
+	Map.c \
+	Heap.c \
+	MaxHeap.c \
+	MemoryPool.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	units.h \
+	types.h \
+	MPIRoutines.h \
+	BTreeNode.h \
+	BTree.h \
+	BTreeIterator.h \
+	UIntMap.h \
+	RangeSet.h \
+	LinkedListNode.h \
+	LinkedList.h \
+	LinkedListIterator.h \
+	HashTable.h \
+	IndexSet.h \
+	PtrMap.h \
+	IndexMap.h \
+	List.h \
+	Array.h \
+	UniqueList.h \
+	Set.h \
+	PtrSet.h \
+	Map.h \
+	Heap.h \
+	MaxHeap.h \
+	MemoryPool.h \
+	Init.h \
+	Finalise.h \
+	Container.h
+
+def_objlists = 

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,317 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (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: Map.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+#include "Set.h"
+#include "Map.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type Map_Type = "Map";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Map* Map_New_all(
+		Dictionary*					dictionary, 
+		SizeT						keySize, 
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	return _Map_New( 
+		sizeof(Map), 
+		Map_Type, 
+		_Map_Delete, 
+		_Map_Print, 
+		NULL, 
+		_Map_Union, 
+		_Map_Intersection, 
+		_Map_Subtraction, 
+		dictionary, 
+		keySize, 
+		valueSize, 
+		compareFunc, 
+		dataCopyFunc, 
+		dataDeleteFunc );
+}
+
+
+void Map_Init(
+		Map*						self,
+		Dictionary*					dictionary, 
+		SizeT						keySize, 
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	/* General info */
+	self->type = Map_Type;
+	self->_sizeOfSelf = sizeof(Map);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _Map_Delete;
+	self->_print = _Map_Print;
+	self->_copy = NULL;
+	self->_unionFunc = _Map_Union;
+	self->_intersectionFunc = _Map_Intersection;
+	self->_subtractionFunc = _Map_Subtraction;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Map info */
+	_Map_Init( self, keySize, valueSize, compareFunc, dataCopyFunc, dataDeleteFunc );
+}
+
+
+Map* _Map_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Map_UnionFunc*					_unionFunc, 
+		Map_IntersectionFunc*				_intersectionFunc, 
+		Map_SubtractionFunc*				_subtractionFunc, 
+		Dictionary*					dictionary, 
+		SizeT						keySize, 
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	Map*	self;
+	
+	/* allocate memory */
+	assert( _sizeOfSelf >= sizeof(Map) );
+	self = (Map*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy );
+	
+	/* general info */
+	self->dictionary = dictionary;
+	
+	/* virtual info */
+	self->_unionFunc = _unionFunc;
+	self->_intersectionFunc = _intersectionFunc;
+	self->_subtractionFunc = _subtractionFunc;
+	
+	/* Map info */
+	_Map_Init( self, keySize, valueSize, compareFunc, dataCopyFunc, dataDeleteFunc );
+	
+	return self;
+}
+
+
+void _Map_Init(
+		Map*						self, 
+		SizeT						keySize, 
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	/* TODO: convert to journal */
+	assert( compareFunc && dataDeleteFunc );
+
+	self->_keySize = keySize;
+	self->_valSize = valueSize;
+	self->_btree = BTree_New( compareFunc, dataCopyFunc, dataDeleteFunc, NULL, BTREE_ALLOW_DUPLICATES );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Map_Delete( void* map ) {
+	Map*	self = (Map*)map;
+	
+	/* delete the class itself */
+	Stg_Class_Delete( self->_btree );
+	
+	/* delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Map_Print( void* map, Stream* stream ) {
+	Map*		self = (Map*)map;
+	Stream*		myStream = Journal_Register( InfoStream_Type, "MapStream" );
+
+	/* print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* general info */
+	Journal_Printf( myStream, "Map (ptr): (%p)\n", self );
+	Journal_Printf( myStream, "\tdictionary (ptr): %p\n", self->dictionary );
+	
+	/* virtual info */
+	
+	/* Map info */
+}
+
+
+void* _Map_Union( void* map, void* operand ) {
+	Map*	self = (Map*)map;
+	Map*	results;
+
+	results = Map_New_all( self->dictionary, 
+			       self->_keySize, 
+			       self->_valSize, 
+			       self->_btree->compareFunction, 
+			       self->_btree->dataCopyFunction, 
+			       self->_btree->dataDeleteFunction );
+
+	BTree_ParseTree( self->_btree, _Map_BTreeUnion, results );
+	BTree_ParseTree( ((Map*)operand)->_btree, _Map_BTreeUnion, results );
+
+	return results;
+}
+
+
+void* _Map_Intersection( void* map, void* operand ) {
+	Map*	self = (Map*)map;
+	Map*	results;
+	void*	pack[2];
+
+	results = Map_New_all( self->dictionary, 
+			       self->_keySize, 
+			       self->_valSize, 
+			       self->_btree->compareFunction, 
+			       self->_btree->dataCopyFunction, 
+			       self->_btree->dataDeleteFunction );
+
+	pack[0] = operand;
+	pack[1] = results;
+	BTree_ParseTree( self->_btree, _Map_BTreeIntersection, pack );
+
+	return results;
+}
+
+
+void* _Map_Subtraction( void* map, void* operand ) {
+	Map*	self = (Map*)map;
+	Map*	results;
+	void*	pack[2];
+
+	results = Map_New_all( self->dictionary, 
+			       self->_keySize, 
+			       self->_valSize, 
+			       self->_btree->compareFunction, 
+			       self->_btree->dataCopyFunction, 
+			       self->_btree->dataDeleteFunction );
+
+	pack[0] = operand;
+	pack[1] = results;
+	BTree_ParseTree( self->_btree, _Map_BTreeSubtraction, pack );
+
+	return results;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+Bool Map_Insert( Map* self, void* keyData, void* valueData ) {
+	MapTuple	tuple;
+
+	tuple.keyData = keyData;
+	tuple.valueData = valueData;
+	if( BTree_FindNode( self->_btree, &tuple ) != NULL ) {
+		return False;
+	}
+
+	BTree_InsertNode( self->_btree, &tuple, sizeof(MapTuple) );
+
+	return True;
+}
+
+
+void Map_Traverse( Map* self, BTree_parseFunction* func, void* args ) {
+	BTree_ParseTree( self->_btree, func, args );
+}
+
+
+void* Map_Find( Map* self, void* keyData ) {
+	MapTuple	tuple;
+	BTreeNode*	node;
+
+	tuple.keyData = keyData;
+	tuple.valueData = NULL;
+	if( (node = BTree_FindNode( self->_btree, &tuple )) != NULL ) {
+		return ((MapTuple*)node->data)->valueData;
+	}
+	else {
+		return NULL;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _Map_BTreeUnion( void* tuple, void* map ) {
+	Map_Insert( (Map*)map, ((MapTuple*)tuple)->keyData, ((MapTuple*)tuple)->valueData );
+}
+
+
+void _Map_BTreeIntersection( void* tuple, void* pack ) {
+	if( BTree_FindNode( ((Map**)pack)[0]->_btree, tuple ) != NULL ) {
+		Map_Insert( ((Map**)pack)[1], ((MapTuple*)tuple)->keyData, ((MapTuple*)tuple)->valueData );
+	}
+}
+
+
+void _Map_BTreeSubtraction( void* tuple, void* pack ) {
+	if( BTree_FindNode( ((Map**)pack)[0]->_btree, tuple ) == NULL ) {
+		Map_Insert( ((Map**)pack)[1], ((MapTuple*)tuple)->keyData, ((MapTuple*)tuple)->valueData );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Map.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_Map_h__
+#define __Base_Container_Map_h__
+	
+
+	/* Textual name of this class */
+	extern const Type Map_Type;
+
+	/* Virtual function types */
+	typedef void* (Map_UnionFunc)( void* map, void* operand );
+	typedef void* (Map_IntersectionFunc)( void* map, void* operand );
+	typedef void* (Map_SubtractionFunc)( void* map, void* operand );
+	
+	/* Support structures */
+	struct MapTuple {
+		void*	keyData;
+		void*	valueData;
+	};
+
+	
+	/** Map class contents */
+	#define __Map \
+		/* General info */ \
+		__Stg_Class \
+		Dictionary*		dictionary; \
+		\
+		/* Virtual info */ \
+		Map_UnionFunc*		_unionFunc; \
+		Map_IntersectionFunc*	_intersectionFunc; \
+		Map_SubtractionFunc*	_subtractionFunc; \
+		\
+		/* Map info ... */ \
+		SizeT		    	_keySize; \
+		SizeT			_valSize; \
+		BTree*			_btree;
+
+	struct Map { __Map };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create an instance */
+	#define Map_New( dictionary, keyType, valueType, compareFunc, dataCopyFunc, dataDeleteFunc ) \
+		Map_New_all( dictionary, sizeof(keyType), sizeof(valueType), compareFunc, dataCopyFunc, dataDeleteFunc )
+	
+	/* Create an instance with all parameters directly specified */
+	Map* Map_New_all( 
+		Dictionary*					dictionary, 
+		SizeT						keySize, 
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	/* Creation implementation */
+	Map* _Map_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Map_UnionFunc*					_unionFunc, 
+		Map_IntersectionFunc*				_intersectionFunc, 
+		Map_SubtractionFunc*				_subtractionFunc, 
+		Dictionary*					dictionary, 
+		SizeT						keySize, 
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	
+	/* Initialise an instance */
+	void Map_Init(
+		Map*						self,
+		Dictionary*					dictionary, 
+		SizeT						keySize,
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	/* Initialisation implementation functions */
+	void _Map_Init(
+		Map*						self, 
+		SizeT						keySize,
+		SizeT						valueSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete implementation */
+	void _Map_Delete(
+		void*						map );
+	
+	/* Print implementation */
+	void _Map_Print(
+		void*						map, 
+		Stream*						stream );
+
+	void* _Map_Union( void* map, void* operand );
+
+	void* _Map_Intersection( void* map, void* operand );
+
+	void* _Map_Subtraction( void* map, void* operand );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	Bool Map_Insert( Map* self, void* keyData, void* valueData );
+
+	#define Map_Union( self, operand ) \
+		(self)->_unionFunc( self, operand )
+
+	#define Map_Intersection( self, operand ) \
+		(self)->_intersectionFunc( self, operand )
+
+	#define Map_Subtraction( self, operand ) \
+		(self)->_subtractionFunc( self, operand )
+
+	void Map_Traverse( Map* self, BTree_parseFunction* func, void* args );
+
+	void* Map_Find( Map* self, void* keyData );
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void _Map_BTreeUnion( void* tuple, void* map );
+
+	void _Map_BTreeIntersection( void* tuple, void* pack );
+
+	void _Map_BTreeSubtraction( void* tuple, void* pack );
+
+	void _Map_BTreeEval( void* keyData, void* pack );
+	
+
+#endif /* __Base_Container_Map_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: MaxHeap.c 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "Heap.h"
+#include "MaxHeap.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type MaxHeap_Type = "MaxHeap";
+
+MaxHeap* MaxHeap_New( void **keys, int keyLength, int numArrayElements, 
+						Heap_KeySwapFunction *keySwap,
+						Heap_CompareFunction *keyCompare,
+						Heap_ExtendArrayFunc *extendArray )
+{
+	return _MaxHeap_New( sizeof( MaxHeap ),
+									MaxHeap_Type,
+									_MaxHeap_DeleteFunc,
+									_MaxHeap_PrintFunc,
+									NULL,
+									MaxHeap_Heapify,
+									MaxHeap_Extract,
+									MaxHeap_InsertFunc,
+									keySwap,
+									keyCompare,
+									extendArray,
+									keys,
+									keyLength,
+									numArrayElements );
+}
+
+MaxHeap* _MaxHeap_New(
+			SizeT							_sizeOfSelf,
+			Type							type,
+			Stg_Class_DeleteFunction*			_delete,
+			Stg_Class_PrintFunction*			_print,
+			Stg_Class_CopyFunction*				_copy,
+			Heap_HeapifyFunction				*heapify,
+			Heap_ExtractFunction				*extract,
+			Heap_InsertFunction					*insert,
+			Heap_KeySwapFunction*				keySwapFunction,
+			Heap_CompareFunction				*compareFunction,
+			Heap_ExtendArrayFunc				*extendArray,
+			void						**keys,
+			int							keyLength,
+			int							numArrayElements )
+{
+	_Heap *heap;
+
+	heap = _Heap_New( _sizeOfSelf,
+						type,
+						_delete,
+						_print,
+						_copy,
+						heapify,
+						extract,
+						insert,
+						keySwapFunction,
+						compareFunction,
+						extendArray,
+						keys,
+						keyLength,
+						numArrayElements );
+
+	_MaxHeap_Init( (MaxHeap*)heap );
+	return ( MaxHeap* )heap;
+}
+
+void _MaxHeap_Init( MaxHeap* self )
+{
+
+}
+	
+void MaxHeap_Heapify( _Heap *heap, int index )
+{
+	int l, r, largest;
+
+	assert( heap );
+	
+	l = _Heap_Left( heap, index );
+	r = _Heap_Right( heap, index );
+
+	if( (l <= heap->numHeapElements) &&
+			(heap->compare( heap->keys[l-1], heap->keys[index-1]) == 1) ){
+		largest = l;
+	}
+	else{
+		largest = index;
+	}
+
+	if( (r <= heap->numHeapElements) &&
+			(heap->compare( heap->keys[r-1], heap->keys[largest-1] ) == 1) ){
+		largest = r;
+	}
+
+	if( largest != index ){
+
+		heap->keySwap( &(heap->keys[index-1]), &(heap->keys[largest-1]) );
+		
+		MaxHeap_Heapify( heap, largest );
+	}
+}
+
+void* MaxHeap_Extract( _Heap *heap )
+{
+	void *max;
+	
+	assert( heap );
+
+	if( heap->numHeapElements < 1 ){
+		fprintf( stderr, "Heap Underflow..!!\n Aborting..!!\n" );
+		assert( 0 );
+	}
+
+	max = heap->keys[0];
+
+	heap->keySwap( &(heap->keys[0]), &(heap->keys[heap->numHeapElements-1]) );
+	heap->numHeapElements -= 1;
+
+	heap->heapify( heap, 1 );
+
+	return max;
+}
+
+	/** Stg_Class_Delete interface. */
+	/** Stg_Class delete function */
+void _MaxHeap_DeleteFunc ( void *heap )
+{
+	MaxHeap *self = (MaxHeap*)heap;
+
+	assert( self );
+
+	_Heap_DeleteFunc( self );
+}
+	
+	/** Print interface. */
+	/** Stg_Class print function */
+void _MaxHeap_PrintFunc ( void *heap, Stream* stream )
+{
+	MaxHeap *self = (MaxHeap*)heap;
+	assert( self );
+
+	/* print parent */
+	_Heap_PrintFunc( (void*) self, stream );
+
+	/* general info */
+	Journal_Printf( stream, "MaxHeap (ptr): (%p)\n", self );
+
+	/* Virtual Info */
+	
+}
+
+	/** Public functions */
+
+void MaxHeap_InsertFunc( _Heap *maxHeap, void *key )
+{
+	int i = 0;
+
+	assert( maxHeap );
+	assert( key );
+
+	if( maxHeap->numHeapElements >= maxHeap->numArrayElements ){
+
+		maxHeap->numArrayElements += 1;		
+		maxHeap->keys = maxHeap->extendArray( maxHeap->numArrayElements, &(maxHeap->keys) );		
+	}
+
+	maxHeap->numHeapElements += 1;
+
+	maxHeap->keys[maxHeap->numHeapElements-1] = key;
+
+	i = maxHeap->numHeapElements;
+	while( ( (i > 1) && (maxHeap->compare( maxHeap->keys[_Heap_Parent( maxHeap, i )-1], maxHeap->keys[i-1] ) == -1) ) ){
+		
+		maxHeap->keySwap( &(maxHeap->keys[i-1]), &(maxHeap->keys[_Heap_Parent( maxHeap, i )-1]) );
+
+		i = _Heap_Parent( maxHeap, i );
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: MaxHeap.h 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __MaxHeap_h__
+#define __MaxHeap_h__
+
+	/** Textual name for List class. */
+	extern const Type MaxHeap_Type;
+	
+	/** \def __List See __List */
+	#define __MaxHeap \
+		/* General info */ \
+		__Heap
+	struct MaxHeap { __MaxHeap };
+	
+	MaxHeap* MaxHeap_New( void **keys, int keyLength, int numArrayElements, 
+						Heap_KeySwapFunction *keySwap,
+						Heap_CompareFunction *keyCompare,
+						Heap_ExtendArrayFunc *extendArray );
+
+	MaxHeap* _MaxHeap_New(
+				SizeT							_sizeOfSelf,
+				Type							type,
+				Stg_Class_DeleteFunction*			_delete,
+				Stg_Class_PrintFunction*			_print,
+				Stg_Class_CopyFunction*				_copy,
+				Heap_HeapifyFunction				*heapify,
+				Heap_ExtractFunction				*extract,
+				Heap_InsertFunction					*insert,
+				Heap_KeySwapFunction*				keySwapFunction,
+				Heap_CompareFunction				*compareFunction,
+				Heap_ExtendArrayFunc				*extendArray,				
+				void						**keys,
+				int							keyLength,
+				int							numArrayElements
+				);
+
+	
+	void _MaxHeap_Init( MaxHeap* self );
+	
+	void MaxHeap_Heapify( _Heap *heap, int index );
+
+	void* MaxHeap_Extract( _Heap *heap );
+
+	/** Stg_Class_Delete interface. */
+		/** Stg_Class delete function */
+	void _MaxHeap_DeleteFunc ( void *heap );
+	
+	/** Print interface. */
+		/** Stg_Class print function */
+	void _MaxHeap_PrintFunc ( void *heap, Stream* stream );
+
+	/** Public functions */
+	
+	void MaxHeap_InsertFunc( _Heap *maxHeap, void *key );
+	
+	#define MaxHeap_Insert( maxHeap, key ) \
+		MaxHeap_InsertFunc( (_Heap*)maxHeap, key );
+
+	/** Private Functions */
+	
+#endif /* __MaxHeap_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: List.c 2038 2004-11-15 07:11:01Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Base/Foundation/Foundation.h>
+#include <Base/IO/IO.h>
+
+#include "types.h"
+#include "MemoryPool.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type MemoryPool_Type = "MemoryPool";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+MemoryPool* _MemoryPool_New(
+			SizeT							_sizeOfSelf,
+			Type							type,
+			Stg_Class_DeleteFunction*			_delete,
+			Stg_Class_PrintFunction*			_print,
+			Stg_Class_CopyFunction*				_copy,
+			int									elementSize,
+			int									numElements
+			)
+{
+	MemoryPool *self = NULL;
+
+	self = (MemoryPool*)_Stg_Class_New(
+							_sizeOfSelf,
+							type,
+							_delete,
+							_print,
+							_copy);
+
+	self->elementSize = elementSize;
+	self->numElements = numElements;
+	self->numElementsFree = numElements;
+
+	return self;
+}
+
+MemoryPool* MemoryPool_NewFunc( SizeT elementSize, int numElements )
+{
+	
+	MemoryPool* self;
+	
+	self = _MemoryPool_New( 
+		   					sizeof(MemoryPool),
+							MemoryPool_Type,
+							_MemoryPool_DeleteFunc,
+							_MemoryPool_PrintFunc,
+							NULL,
+							elementSize,
+							numElements);
+
+	/* Virtual functions */
+	_MemoryPool_Init( self );
+	return self;
+}
+
+void _MemoryPool_Init( MemoryPool* self ){
+	int i = 0;
+	
+	/* General info */
+	
+	assert( self );
+	_Stg_Class_Init ((Stg_Class*) self);
+	
+	self->elements = Memory_Alloc_Bytes_Unnamed( self->elementSize * self->numElements, char );
+	memset( self->elements, 0, self->elementSize * self->numElements );
+
+	self->pool = Memory_Alloc_Bytes_Unnamed( sizeof( char* ) * self->numElements, char* );
+	memset( self->pool, 0, sizeof(char*) * self->numElements );
+	
+	for( i=0; i<self->numElements; i++ ){
+		self->pool[i] = &(self->elements[i*self->elementSize]);
+	}
+}
+
+void *MemoryPool_Init( MemoryPool *self )
+{
+	return NULL;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual Functions
+*/
+void _MemoryPool_PrintFunc ( void *memPool, Stream *stream )
+{
+	MemoryPool *self = NULL;
+	
+	self = (MemoryPool*) memPool;
+	assert( self );
+	assert( stream );
+
+	/* print parent */
+	_Stg_Class_Print( (void*) self, stream );
+
+	/* general info */
+	Journal_Printf( stream, "MemoryPool (ptr): (%p)\n", self );
+
+	/* Virtual Info */
+
+	/* MemoryPool Info */
+	Journal_Printf( stream, "\tElementSize\t\t - %d\n", self->elementSize );
+	Journal_Printf( stream, "\tNumElememts\t\t - %d\n", self->numElements );
+	Journal_Printf( stream, "\tNumElememtsFree\t\t - %d\n", self->numElementsFree );
+}
+
+void _MemoryPool_DeleteFunc( void *memPool )
+{
+	MemoryPool *self = NULL;
+	
+	self = (MemoryPool*)memPool;
+	assert (self);
+	
+	Memory_Free( self->elements );
+	Memory_Free( self->pool );
+	
+	_Stg_Class_Delete( self );
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void *MemoryPool_NewObjectFunc( SizeT elementSize, MemoryPool *memPool )
+{
+	int index = 0;
+	
+	assert( elementSize == memPool->elementSize );
+	
+	index = memPool->numElementsFree - 1;
+
+	if( index < 0 ) return NULL;
+
+	return (void*)(memPool->pool[--memPool->numElementsFree]);
+}
+		
+Bool MemoryPool_DeleteObject( MemoryPool *memPool, void *object )
+{
+	if( 	( object != NULL ) &&
+			((char*)object >= memPool->elements) &&
+			( (char*)object < (memPool->elements + memPool->elementSize * memPool->numElements) ) ){
+		
+		memset( (char*)object, 0, memPool->elementSize );
+		memPool->pool[memPool->numElementsFree++] = (char*)object;
+		return 1;
+	}
+	else{
+		return 0;
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Binary Tree class for objects.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: MemoryPool.h 2087 2005-2-25 02:28:44Z RaquibulHassan $
+**
+**/
+
+#ifndef __MemoryPool_h__
+#define __MemoryPool_h__
+
+	/** Textual name for List class. */
+	extern const Type MemoryPool_Type;
+	
+	/** \def __List See __List */
+	#define __MemoryPool \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* MemoryPool info */ \
+		SizeT	elementSize; \
+		int		numElements; \
+		int		numElementsFree; \
+		char	*elements; \
+		char	**pool;
+
+	struct MemoryPool { __MemoryPool };
+	
+	/** Constructor interface. */
+	#define MemoryPool_New( type, numElements )\
+		MemoryPool_NewFunc( sizeof(type), numElements )
+	
+	MemoryPool* MemoryPool_NewFunc( SizeT elementSize, int numElements );
+
+	MemoryPool* _MemoryPool_New(
+				SizeT							_sizeOfSelf,
+				Type							type,
+				Stg_Class_DeleteFunction*			_delete,
+				Stg_Class_PrintFunction*			_print,
+				Stg_Class_CopyFunction*				_copy,
+				int									elementSize,
+				int									numElements
+				);
+
+	
+	/** Init interface. */
+	void *MemoryPool_Init( MemoryPool* self );
+	
+	void _MemoryPool_Init( MemoryPool* self );
+	
+	/** Stg_Class_Delete interface. */
+		/** Stg_Class delete function */
+	void _MemoryPool_DeleteFunc ( void *memPool );
+	
+	/** Print interface. */
+		/** Stg_Class print function */
+	void _MemoryPool_PrintFunc ( void *memPool, Stream* stream );
+
+	/** Public functions */
+#define MemoryPool_NewObject( type, memPool ) \
+	(type*)MemoryPool_NewObjectFunc( sizeof(type), memPool )
+	
+	void *MemoryPool_NewObjectFunc( SizeT elementSize, MemoryPool *memPool );
+		
+	Bool MemoryPool_DeleteObject( MemoryPool *memPool, void *object );
+	
+	/** Private Functions */
+	
+#endif /* __MemoryPool_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,229 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: PtrMap.c 2192 2004-10-15 02:45:38Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "units.h"
+#include "types.h"
+#include "PtrMap.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type PtrMap_Type = "PtrMap";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+PtrMap* PtrMap_New(
+		unsigned					delta )
+{
+	return _PtrMap_New( 
+		sizeof(PtrMap), 
+		PtrMap_Type, 
+		_PtrMap_Delete, 
+		_PtrMap_Print, 
+		NULL, 
+		delta );
+}
+
+
+void PtrMap_Init(
+		PtrMap*						self,
+		unsigned					delta )
+{
+	/* General info */
+	self->type = PtrMap_Type;
+	self->_sizeOfSelf = sizeof(PtrMap);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _PtrMap_Delete;
+	self->_print = _PtrMap_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* PtrMap info */
+	_PtrMap_Init( self, delta );
+}
+
+
+PtrMap* _PtrMap_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		unsigned					delta )
+{
+	PtrMap*			self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(PtrMap) );
+	self = (PtrMap*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* PtrMap info */
+	_PtrMap_Init( self, delta );
+	
+	return self;
+}
+
+
+void _PtrMap_Init(
+		PtrMap*					self,
+		unsigned				delta )
+{
+	/* General and Virtual info should already be set */
+	
+	/* PtrMap info */
+	assert( self );
+	
+	self->delta = delta;
+	self->maxTuples = self->delta;
+	self->tupleTbl = Memory_Alloc_Array_Unnamed( PtrMapTuple, self->maxTuples );
+	assert( self->tupleTbl ); /* TODO change this to a firewall, or something */
+
+	self->tupleCnt = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _PtrMap_Delete( void* ptrMap ) {
+	PtrMap*			self = (PtrMap*)ptrMap;
+	
+	/* Stg_Class_Delete the class itself */
+	assert( self );
+	
+	if( self->tupleTbl )
+		Memory_Free( self->tupleTbl );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _PtrMap_Print( void* ptrMap, Stream* stream ) {
+	PtrMap*			self = (PtrMap*)ptrMap;
+	
+	/* Set the Journal for printing informations */
+	Stream*			myStream;
+	myStream = Journal_Register( InfoStream_Type, "PtrMapStream" );
+
+	/* Print parent */
+	assert( self );
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( myStream, "PtrMap (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* PtrMap info */
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void PtrMap_Append( void* ptrMap, void* key, void* ptr ) {
+	PtrMap*			self = (PtrMap*)ptrMap;
+	unsigned		newTupleCnt;
+	
+	assert( self && key && ptr );
+	
+	if( PtrMap_Find( self, key ) != NULL ) {
+		return;
+	}
+	
+	newTupleCnt = self->tupleCnt + 1;
+	if( newTupleCnt >= self->maxTuples ) {
+		unsigned		factor;
+		PtrMapTuple*		newTuples;
+		
+		factor = ceil( (float)(newTupleCnt - self->maxTuples) / (float)self->delta );
+		self->maxTuples += factor * self->delta;
+		
+		newTuples = Memory_Alloc_Array_Unnamed( PtrMapTuple, self->maxTuples );
+		assert( newTuples ); /* TODO change this */
+		if( self->tupleTbl ) {
+			memcpy( newTuples, self->tupleTbl, sizeof(PtrMapTuple) * self->tupleCnt );
+			Memory_Free( self->tupleTbl );
+		}
+		self->tupleTbl = newTuples;
+	}
+	
+	self->tupleTbl[self->tupleCnt].key = key;
+	self->tupleTbl[self->tupleCnt].ptr = ptr;
+	self->tupleCnt = newTupleCnt;
+}
+
+
+void* PtrMap_Find( void* ptrMap, void* key ) {
+	PtrMap*			self = (PtrMap*)ptrMap;
+	unsigned		tuple_I;
+	
+	assert( self );
+	
+	if( key ) {
+		for( tuple_I = 0; tuple_I < self->tupleCnt; tuple_I++ ) {
+			if( self->tupleTbl[tuple_I].key == key )
+				return self->tupleTbl[tuple_I].ptr;
+		}
+	}
+	
+	return NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: PtrMap.h 2225 1970-01-02 13:48:23Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_PtrMap_h__
+#define __Base_Container_PtrMap_h__
+	
+
+	/** Textual name of this class */
+	extern const Type PtrMap_Type;
+
+	/* Virtual function types */
+	
+	/** PtrMap class contents */
+	typedef struct PtrMapTuple {
+		void*			key;
+		void*			ptr;
+	} PtrMapTuple;
+	
+	#define __PtrMap \
+		/* General info */ \
+		__Stg_Class \
+		\
+		Dictionary*				dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* PtrMap info ... */ \
+		unsigned				delta; \
+		unsigned				maxTuples; \
+		unsigned				tupleCnt; \
+		PtrMapTuple*				tupleTbl;
+
+	struct PtrMap { __PtrMap };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a PtrMap */
+	PtrMap* PtrMap_New( 
+		unsigned					delta );
+	
+	/* Creation implementation */
+	PtrMap* _PtrMap_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		unsigned					delta );
+	
+	
+	/* Initialise a PtrMap */
+	void PtrMap_Init(
+		PtrMap*						self,
+		unsigned					delta );
+	
+	/* Initialisation implementation functions */
+	void _PtrMap_Init(
+		PtrMap*						self,
+		unsigned					delta );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete mesh implementation */
+	void _PtrMap_Delete( void* ptrMap );
+	
+	/* Print mesh implementation */
+	void _PtrMap_Print( void* ptrMap, Stream* stream );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	
+	void PtrMap_Append( void* ptrMap, void* key, void* ptr );
+	
+	void* PtrMap_Find( void* ptrMap, void* key );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+
+#endif /* __Base_Container_PtrMap_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: PtrSet.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+#include "Set.h"
+#include "PtrSet.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type PtrSet_Type = "PtrSet";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+PtrSet* PtrSet_New(
+		Dictionary*					dictionary )
+{
+	return _PtrSet_New( 
+		sizeof(PtrSet), 
+		PtrSet_Type, 
+		_PtrSet_Delete, 
+		_PtrSet_Print, 
+		NULL, 
+		_PtrSet_Union, 
+		_PtrSet_Intersection, 
+		_PtrSet_Subtraction, 
+		dictionary, 
+		0, 
+		_PtrSet_CompareData, 
+		NULL, 
+		_PtrSet_DeleteData );
+}
+
+
+void PtrSet_Init(
+		PtrSet*						self,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = PtrSet_Type;
+	self->_sizeOfSelf = sizeof(PtrSet);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _PtrSet_Delete;
+	self->_print = _PtrSet_Print;
+	self->_copy = NULL;
+	self->_unionFunc = _PtrSet_Union;
+	self->_intersectionFunc = _PtrSet_Intersection;
+	self->_subtractionFunc = _PtrSet_Subtraction;
+	_Set_Init( (Set*)self, 0, _PtrSet_CompareData, NULL, _PtrSet_DeleteData );
+	
+	/* PtrSet info */
+	_PtrSet_Init( self );
+}
+
+
+PtrSet* _PtrSet_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Set_UnionFunc*					_unionFunc, 
+		Set_IntersectionFunc*				_intersectionFunc, 
+		Set_SubtractionFunc*				_subtractionFunc, 
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	PtrSet*	self;
+	
+	/* allocate memory */
+	assert( _sizeOfSelf >= sizeof(PtrSet) );
+	self = (PtrSet*)_Set_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy, 
+		_unionFunc, 
+		_intersectionFunc, 
+		_subtractionFunc, 
+		dictionary, 
+		elementSize, 
+		compareFunc, 
+		dataCopyFunc, 
+		dataDeleteFunc );
+	
+	/* general info */
+	
+	/* virtual info */
+	
+	/* PtrSet info */
+	_PtrSet_Init( self );
+	
+	return self;
+}
+
+
+void _PtrSet_Init(
+		PtrSet*						self )
+{
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _PtrSet_Delete( void* ptrPtrSet ) {
+	PtrSet*	self = (PtrSet*)ptrPtrSet;
+	
+	/* delete the class itself */
+	
+	/* delete parent */
+	_Set_Delete( self );
+}
+
+
+void _PtrSet_Print( void* ptrPtrSet, Stream* stream ) {
+	PtrSet*		self = (PtrSet*)ptrPtrSet;
+	Stream*		myStream = Journal_Register( InfoStream_Type, "PtrSetStream" );
+
+	/* print parent */
+	_Set_Print( self, stream );
+	
+	/* general info */
+	Journal_Printf( myStream, "PtrSet (ptr): (%p)\n", self );
+	Journal_Printf( myStream, "\tdictionary (ptr): %p\n", self->dictionary );
+	
+	/* virtual info */
+	
+	/* PtrSet info */
+}
+
+
+void* _PtrSet_Union( void* ptrPtrSet, void* operand ) {
+	PtrSet*	self = (PtrSet*)ptrPtrSet;
+	PtrSet*	results;
+
+	results = PtrSet_New( self->dictionary );
+
+	BTree_ParseTree( self->_btree, _Set_BTreeUnion, results );
+	BTree_ParseTree( ((PtrSet*)operand)->_btree, _Set_BTreeUnion, results );
+
+	return results;
+}
+
+
+void* _PtrSet_Intersection( void* ptrPtrSet, void* operand ) {
+	PtrSet*	self = (PtrSet*)ptrPtrSet;
+	PtrSet*	results;
+	void*	pack[2];
+
+	results = PtrSet_New( self->dictionary );
+
+	pack[0] = operand;
+	pack[1] = results;
+	BTree_ParseTree( self->_btree, _Set_BTreeIntersection, pack );
+
+	return results;
+}
+
+
+void* _PtrSet_Subtraction( void* ptrPtrSet, void* operand ) {
+	PtrSet*	self = (PtrSet*)ptrPtrSet;
+	PtrSet*	results;
+	void*	pack[2];
+
+	results = PtrSet_New( self->dictionary );
+
+	pack[0] = operand;
+	pack[1] = results;
+	BTree_ParseTree( self->_btree, _Set_BTreeSubtraction, pack );
+
+	return results;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+int _PtrSet_CompareData( void* left, void* right ) {
+	if( (ArithPointer)left < (ArithPointer)right ) {
+		return -1;
+	}
+	else if( (ArithPointer)left > (ArithPointer)right ) {
+		return 1;
+	}
+	else {
+		return 0;
+	}
+}
+
+
+void _PtrSet_DeleteData( void* data ) {
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: PtrSet.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_PtrSet_h__
+#define __Base_Container_PtrSet_h__
+	
+
+	/* Textual name of this class */
+	extern const Type PtrSet_Type;
+
+	/* Virtual function types */
+	
+	/* Support structures */
+	
+	/** PtrSet class contents */
+	#define __PtrSet \
+		/* General info */ \
+		__Set \
+		\
+		/* Virtual info */ \
+		\
+		/* PtrSet info ... */ \
+
+	struct PtrSet { __PtrSet };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create an instance with all parameters */
+	PtrSet* PtrSet_New( 
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	PtrSet* _PtrSet_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Set_UnionFunc*					_unionFunc, 
+		Set_IntersectionFunc*				_intersectionFunc, 
+		Set_SubtractionFunc*				_subtractionFunc, 
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	
+	/* Initialise an instance */
+	void PtrSet_Init(
+		PtrSet*						self,
+		Dictionary*					dictionary );
+	
+	/* Initialisation implementation functions */
+	void _PtrSet_Init(
+		PtrSet*						self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete implementation */
+	void _PtrSet_Delete(
+		void*						ptrSet );
+	
+	/* Print implementation */
+	void _PtrSet_Print(
+		void*						ptrSet, 
+		Stream*						stream );
+
+	void* _PtrSet_Union( void* ptrSet, void* operand );
+
+	void* _PtrSet_Intersection( void* ptrSet, void* operand );
+
+	void* _PtrSet_Subtraction( void* ptrSet, void* operand );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	#define PtrSet_Insert( self, data ) \
+		Set_Insert( (Set*)self, data )
+
+	#define PtrSet_Union \
+		Set_Union
+
+	#define PtrSet_Intersection \
+		Set_Intersection
+
+	#define PtrSet_Subtraction \
+		Set_Subtraction
+
+	#define PtrSet_Traverse( self, func, args ) \
+		Set_Traverse( (Set*)self, func, args )
+
+	#define PtrSet_Exists( self, data ) \
+		Set_Exists( (Set*)self, data )
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	int _PtrSet_CompareData( void* left, void* right );
+
+	void _PtrSet_DeleteData( void* data );
+
+
+#endif /* __Base_Container_PtrSet_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,424 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: RangeSet.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 "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+#include "RangeSet.h"
+
+
+/* Textual name of this class */
+const Type RangeSet_Type = "RangeSet";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+RangeSet* RangeSet_New() {
+	return _RangeSet_New( sizeof(RangeSet), 
+			      RangeSet_Type, 
+			      _RangeSet_Delete, 
+			      _RangeSet_Print, 
+			      _RangeSet_Copy );
+}
+
+RangeSet* _RangeSet_New( RANGESET_DEFARGS ) {
+	RangeSet* self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(RangeSet) );
+	self = (RangeSet*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* RangeSet info */
+	_RangeSet_Init( self );
+
+	return self;
+}
+
+void _RangeSet_Init( RangeSet* self ) {
+	assert( self );
+
+	self->nInds = 0;
+	self->nRanges = 0;
+	self->ranges = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _RangeSet_Delete( void* rangeSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+
+	RangeSet_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _RangeSet_Print( void* rangeSet, Stream* stream ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	
+	/* Set the Journal for printing informations */
+	Stream* rangeSetStream;
+	rangeSetStream = Journal_Register( InfoStream_Type, "RangeSetStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "RangeSet (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+void* _RangeSet_Copy( void* rangeSet, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	RangeSet*	newRangeSet;
+
+	newRangeSet = RangeSet_New();
+	newRangeSet->nInds = self->nInds;
+	newRangeSet->nRanges = self->nRanges;
+	if( self->nRanges ) {
+		newRangeSet->ranges = Memory_Alloc_Array( RangeSet_Range, self->nRanges, "RangeSet::ranges" );
+		memcpy( newRangeSet->ranges, self->ranges, self->nRanges * sizeof(RangeSet_Range) );
+	}
+
+	return (void*)newRangeSet;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void RangeSet_SetIndices( void* rangeSet, unsigned nInds, unsigned* inds ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	unsigned*	tmpInds;
+	unsigned	curInd = 0;
+
+	assert( self );
+	assert( !nInds || inds );
+
+	RangeSet_Destruct( self );
+	if( !nInds ) return;
+
+	self->nInds = nInds;
+	tmpInds = Memory_Alloc_Array_Unnamed( unsigned, nInds );
+	memcpy( tmpInds, inds, nInds * sizeof(unsigned) );
+	qsort( tmpInds, nInds, sizeof(unsigned), RangeSet_SortCmp );
+
+	while( curInd < nInds ) {
+		RangeSet_Range*	range;
+
+		if( !self->ranges ) {
+			self->ranges = Memory_Alloc_Array( RangeSet_Range, ++self->nRanges, "RangeSet::ranges" );
+		}
+		else {
+			self->ranges = Memory_Realloc_Array( self->ranges, RangeSet_Range, ++self->nRanges );
+		}
+
+		range = self->ranges + self->nRanges - 1;
+
+		range->begin = tmpInds[curInd++];
+		while( curInd < nInds && tmpInds[curInd] == tmpInds[curInd - 1] ) {
+			curInd++;
+			self->nInds--;
+		}
+
+		if( curInd == nInds ) {
+			range->end = range->begin + 1;
+			range->step = 1;
+			break;
+		}
+
+		range->end = tmpInds[curInd++];
+		while( curInd < nInds && tmpInds[curInd] == range->end ) {
+			curInd++;
+			self->nInds--;
+		}
+
+		range->step = range->end - range->begin;
+
+		while( curInd < nInds && tmpInds[curInd] - range->end == range->step ) {
+			range->end = tmpInds[curInd++];
+			while( curInd < nInds && tmpInds[curInd] == range->end ) {
+				curInd++;
+				self->nInds--;
+			}
+		}
+
+		range->end++;
+	}
+
+	FreeArray( tmpInds );
+}
+
+
+void RangeSet_Clear( void* rangeSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+
+	RangeSet_Destruct( self );
+}
+
+
+void RangeSet_Union( void* rangeSet, RangeSet* rSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	unsigned	maxInds;
+	unsigned	nInds = 0;
+	unsigned*	inds;
+	unsigned	r_i;
+
+	assert( self );
+	assert( rSet );
+
+	maxInds = rSet->nInds + self->nInds;
+	inds = Memory_Alloc_Array_Unnamed( unsigned, maxInds );
+	for( r_i = 0; r_i < self->nRanges; r_i++ ) {
+		RangeSet_Range*	range = self->ranges + r_i;
+		unsigned	ind_i;
+
+		for( ind_i = range->begin; ind_i < range->end; ind_i += range->step )
+			inds[nInds++] = ind_i;
+	}
+	for( r_i = 0; r_i < rSet->nRanges; r_i++ ) {
+		RangeSet_Range*	range = rSet->ranges + r_i;
+		unsigned	ind_i;
+
+		for( ind_i = range->begin; ind_i < range->end; ind_i += range->step )
+			inds[nInds++] = ind_i;
+	}
+
+	RangeSet_SetIndices( self, nInds, inds );
+	FreeArray( inds );
+}
+
+
+void RangeSet_Intersection( void* rangeSet, RangeSet* rSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	unsigned	maxInds;
+	unsigned	nInds = 0;
+	unsigned*	inds;
+	unsigned	r_i;
+
+	assert( self );
+	assert( rSet );
+
+	maxInds = (rSet->nInds > self->nInds) ? rSet->nInds : self->nInds;
+	inds = Memory_Alloc_Array_Unnamed( unsigned, maxInds );
+
+	for( r_i = 0; r_i < self->nRanges; r_i++ ) {
+		RangeSet_Range*	range = self->ranges + r_i;
+		unsigned	ind_i;
+
+		for( ind_i = range->begin; ind_i < range->end; ind_i += range->step ) {
+			if( RangeSet_HasIndex( rSet, ind_i ) )
+				inds[nInds++] = ind_i;
+		}
+	}
+
+	RangeSet_SetIndices( self, nInds, inds );
+	FreeArray( inds );
+}
+
+
+void RangeSet_Subtraction( void* rangeSet, RangeSet* rSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	unsigned	maxInds;
+	unsigned	nInds = 0;
+	unsigned*	inds;
+	unsigned	r_i;
+
+	assert( self );
+	assert( rSet );
+
+	maxInds = self->nInds;
+	inds = Memory_Alloc_Array_Unnamed( unsigned, maxInds );
+
+	for( r_i = 0; r_i < self->nRanges; r_i++ ) {
+		RangeSet_Range*	range = self->ranges + r_i;
+		unsigned	ind_i;
+
+		for( ind_i = range->begin; ind_i < range->end; ind_i += range->step ) {
+			if( !RangeSet_HasIndex( rSet, ind_i ) )
+				inds[nInds++] = ind_i;
+		}
+	}
+
+	RangeSet_SetIndices( self, nInds, inds );
+	FreeArray( inds );
+}
+
+
+void RangeSet_Unpickle( void* rangeSet, unsigned nBytes, Stg_Byte* bytes ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+	assert( (nBytes - sizeof(unsigned)) % sizeof(RangeSet_Range) == 0 );
+	assert( !nBytes || bytes );
+
+	RangeSet_Destruct( self );
+
+	if( nBytes ) {
+		self->nInds = ((unsigned*)bytes)[0];
+		if( self->nInds ) {
+			self->nRanges = (nBytes - sizeof(unsigned)) / sizeof(RangeSet_Range);
+			self->ranges = Memory_Alloc_Array( RangeSet_Range, self->nRanges, "RangeSet::ranges" );
+			memcpy( self->ranges, bytes + sizeof(unsigned), nBytes - sizeof(unsigned) );
+		}
+	}
+}
+
+
+void RangeSet_GetIndices( void* rangeSet, unsigned* nInds, unsigned** inds ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	unsigned	r_i;
+
+	assert( self );
+
+	*nInds = 0;
+	if( self->nInds )
+		*inds = Memory_Alloc_Array_Unnamed( unsigned, self->nInds );
+	else
+		*inds = NULL;
+
+	for( r_i = 0; r_i < self->nRanges; r_i++ ) {
+		RangeSet_Range*	range = self->ranges + r_i;
+		unsigned	ind_i;
+
+		for( ind_i = range->begin; ind_i < range->end; ind_i += range->step )
+			(*inds)[(*nInds)++] = ind_i;
+	}
+
+	/* Sanity check. */
+	assert( *nInds == self->nInds );
+}
+
+
+Bool RangeSet_HasIndex( void* rangeSet, unsigned ind ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+	unsigned	r_i;
+
+	assert( self );
+
+	for( r_i = 0; r_i < self->nRanges; r_i++ ) {
+		RangeSet_Range*	range = self->ranges + r_i;
+
+		if( ind >= range->begin && ind < range->end ) {
+			if( !((ind - range->begin) % range->step) )
+				return True;
+		}
+		else if( ind < range->begin )
+			break;
+	}
+
+	return False;
+}
+
+
+unsigned RangeSet_GetNIndices( void* rangeSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+
+	return self->nInds;
+}
+
+
+unsigned RangeSet_GetNRanges( void* rangeSet ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+
+	return self->nRanges;
+}
+
+
+void RangeSet_GetRange( void* rangeSet, unsigned ind, RangeSet_Range* range ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+	assert( ind < self->nRanges );
+	assert( range );
+
+	memcpy( range, self->ranges + ind, sizeof(RangeSet_Range) );
+}
+
+
+void RangeSet_Pickle( void* rangeSet, unsigned* nBytes, Stg_Byte** bytes ) {
+	RangeSet*	self = (RangeSet*)rangeSet;
+
+	assert( self );
+	assert( nBytes );
+	assert( bytes );
+
+	if( self->nInds ) {
+		*nBytes = sizeof(unsigned) + self->nRanges * sizeof(RangeSet_Range);
+		*bytes = Memory_Alloc_Array_Unnamed( Stg_Byte, *nBytes );
+		((unsigned*)*bytes)[0] = self->nInds;
+		if( self->nRanges )
+			memcpy( *bytes + sizeof(unsigned), self->ranges, *nBytes - sizeof(unsigned) );
+	}
+	else {
+		*nBytes = 0;
+		*bytes = NULL;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+int RangeSet_SortCmp( const void* itema, const void* itemb ) {
+	assert( itema && itemb );
+	return *((unsigned*)itema) - *((unsigned*)itemb);
+}
+
+
+void RangeSet_Destruct( RangeSet* self ) {
+	assert( self );
+
+	KillArray( self->ranges );
+	self->nRanges = 0;
+	self->nInds = 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: RangeSet.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_RangeSet_h__
+#define __Base_Container_RangeSet_h__
+
+	/** Textual name of this class */
+	extern const Type RangeSet_Type;
+
+	/** Virtual function types */
+
+	/** Mesh class contents */
+	typedef struct {
+		unsigned	begin;
+		unsigned	end;
+		unsigned	step;
+	} RangeSet_Range;
+
+	#define __RangeSet				\
+		/* General info */			\
+		__Stg_Class				\
+							\
+		/* Virtual info */			\
+							\
+		/* RangeSet info */			\
+		unsigned		nInds;		\
+		unsigned		nRanges;	\
+		RangeSet_Range*		ranges;
+
+	struct RangeSet { __RangeSet };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define RANGESET_DEFARGS		\
+		STG_CLASS_DEFARGS
+
+	#define RANGESET_PASSARGS	\
+		STG_CLASS_PASSARGS
+
+	RangeSet* RangeSet_New();
+	RangeSet* _RangeSet_New( RANGESET_DEFARGS );
+	void _RangeSet_Init( RangeSet* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _RangeSet_Delete( void* rangeSet );
+	void _RangeSet_Print( void* rangeSet, Stream* stream );
+
+	#define RangeSet_Copy( self )					\
+		(RangeSet*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define RangeSet_DeepCopy( self )				\
+		(RangeSet*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _RangeSet_Copy( void* rangeSet, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void RangeSet_SetIndices( void* rangeSet, unsigned nInds, unsigned* inds );
+	void RangeSet_Clear( void* rangeSet );
+	void RangeSet_Union( void* rangeSet, RangeSet* rSet );
+	void RangeSet_Intersection( void* rangeSet, RangeSet* rSet );
+	void RangeSet_Subtraction( void* rangeSet, RangeSet* rSet );
+	void RangeSet_Unpickle( void* rangeSet, unsigned nBytes, Stg_Byte* bytes );
+
+	void RangeSet_GetIndices( void* rangeSet, unsigned* nInds, unsigned** inds );
+	Bool RangeSet_HasIndex( void* rangeSet, unsigned ind );
+	unsigned RangeSet_GetNIndices( void* rangeSet );
+	unsigned RangeSet_GetNRanges( void* rangeSet );
+	void RangeSet_GetRange( void* rangeSet, unsigned ind, RangeSet_Range* range );
+	void RangeSet_Pickle( void* rangeSet, unsigned* nBytes, Stg_Byte** bytes );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	int RangeSet_SortCmp( const void* itema, const void* itemb );
+	void RangeSet_Destruct( RangeSet* self );
+
+#endif /* __Base_Container_RangeSet_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,293 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (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: Set.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+#include "Set.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type Set_Type = "Set";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Set* Set_New_all(
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	return _Set_New( 
+		sizeof(Set), 
+		Set_Type, 
+		_Set_Delete, 
+		_Set_Print, 
+		NULL, 
+		_Set_Union, 
+		_Set_Intersection, 
+		_Set_Subtraction, 
+		dictionary, 
+		elementSize, 
+		compareFunc, 
+		dataCopyFunc, 
+		dataDeleteFunc );
+}
+
+
+void Set_Init(
+		Set*						self,
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	/* General info */
+	self->type = Set_Type;
+	self->_sizeOfSelf = sizeof(Set);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _Set_Delete;
+	self->_print = _Set_Print;
+	self->_copy = NULL;
+	self->_unionFunc = _Set_Union;
+	self->_intersectionFunc = _Set_Intersection;
+	self->_subtractionFunc = _Set_Subtraction;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Set info */
+	_Set_Init( self, elementSize, compareFunc, dataCopyFunc, dataDeleteFunc );
+}
+
+
+Set* _Set_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Set_UnionFunc*					_unionFunc, 
+		Set_IntersectionFunc*				_intersectionFunc, 
+		Set_SubtractionFunc*				_subtractionFunc, 
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	Set*	self;
+	
+	/* allocate memory */
+	assert( _sizeOfSelf >= sizeof(Set) );
+	self = (Set*)_Stg_Class_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy );
+	
+	/* general info */
+	self->dictionary = dictionary;
+	
+	/* virtual info */
+	self->_unionFunc = _unionFunc;
+	self->_intersectionFunc = _intersectionFunc;
+	self->_subtractionFunc = _subtractionFunc;
+	
+	/* Set info */
+	_Set_Init( self, elementSize, compareFunc, dataCopyFunc, dataDeleteFunc );
+	
+	return self;
+}
+
+
+void _Set_Init(
+		Set*						self, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc )
+{
+	/* TODO: convert to journal */
+	assert( compareFunc && dataDeleteFunc );
+
+	self->_elSize = elementSize;
+	self->_btree = BTree_New( compareFunc, dataCopyFunc, dataDeleteFunc, NULL, BTREE_ALLOW_DUPLICATES );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Set_Delete( void* set ) {
+	Set*	self = (Set*)set;
+	
+	/* delete the class itself */
+	Stg_Class_Delete( self->_btree );
+	
+	/* delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Set_Print( void* set, Stream* stream ) {
+	Set*		self = (Set*)set;
+	Stream*		myStream = Journal_Register( InfoStream_Type, "SetStream" );
+
+	/* print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* general info */
+	Journal_Printf( myStream, "Set (ptr): (%p)\n", self );
+	Journal_Printf( myStream, "\tdictionary (ptr): %p\n", self->dictionary );
+	
+	/* virtual info */
+	
+	/* Set info */
+}
+
+
+void* _Set_Union( void* set, void* operand ) {
+	Set*	self = (Set*)set;
+	Set*	results;
+
+	results = Set_New_all( self->dictionary, 
+			       self->_elSize, 
+			       self->_btree->compareFunction, 
+			       self->_btree->dataCopyFunction, 
+			       self->_btree->dataDeleteFunction );
+
+	BTree_ParseTree( self->_btree, _Set_BTreeUnion, results );
+	BTree_ParseTree( ((Set*)operand)->_btree, _Set_BTreeUnion, results );
+
+	return results;
+}
+
+
+void* _Set_Intersection( void* set, void* operand ) {
+	Set*	self = (Set*)set;
+	Set*	results;
+	void*	pack[2];
+
+	results = Set_New_all( self->dictionary, 
+			       self->_elSize, 
+			       self->_btree->compareFunction, 
+			       self->_btree->dataCopyFunction, 
+			       self->_btree->dataDeleteFunction );
+
+	pack[0] = operand;
+	pack[1] = results;
+	BTree_ParseTree( self->_btree, _Set_BTreeIntersection, pack );
+
+	return results;
+}
+
+
+void* _Set_Subtraction( void* set, void* operand ) {
+	Set*	self = (Set*)set;
+	Set*	results;
+	void*	pack[2];
+
+	results = Set_New_all( self->dictionary, 
+			       self->_elSize, 
+			       self->_btree->compareFunction, 
+			       self->_btree->dataCopyFunction, 
+			       self->_btree->dataDeleteFunction );
+
+	pack[0] = operand;
+	pack[1] = results;
+	BTree_ParseTree( self->_btree, _Set_BTreeSubtraction, pack );
+
+	return results;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+Bool Set_Insert( Set* self, void* data ) {
+	if( BTree_FindNode( self->_btree, data ) != NULL ) {
+		return False;
+	}
+
+	BTree_InsertNode( self->_btree, data, self->_elSize );
+
+	return True;
+}
+
+
+void Set_Traverse( Set* self, BTree_parseFunction* func, void* args ) {
+	BTree_ParseTree( self->_btree, func, args );
+}
+
+
+Bool Set_Exists( Set* self, void* data ) {
+	return (BTree_FindNode( self->_btree, data ) != NULL) ? True : False;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _Set_BTreeUnion( void* data, void* set ) {
+	Set_Insert( (Set*)set, data );
+}
+
+
+void _Set_BTreeIntersection( void* data, void* pack ) {
+	if( BTree_FindNode( ((Set**)pack)[0]->_btree, data ) != NULL ) {
+		Set_Insert( ((Set**)pack)[1], data );
+	}
+}
+
+
+void _Set_BTreeSubtraction( void* data, void* pack ) {
+	if( BTree_FindNode( ((Set**)pack)[0]->_btree, data ) == NULL ) {
+		Set_Insert( ((Set**)pack)[1], data );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Set.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_Set_h__
+#define __Base_Container_Set_h__
+	
+
+	/* Textual name of this class */
+	extern const Type Set_Type;
+
+	/* Virtual function types */
+	typedef void* (Set_UnionFunc)( void* set, void* operand );
+	typedef void* (Set_IntersectionFunc)( void* set, void* operand );
+	typedef void* (Set_SubtractionFunc)( void* set, void* operand );
+	
+	/* Support structures */
+	
+	/** Set class contents */
+	#define __Set \
+		/* General info */ \
+		__Stg_Class \
+		Dictionary*		dictionary; \
+		\
+		/* Virtual info */ \
+		Set_UnionFunc*		_unionFunc; \
+		Set_IntersectionFunc*	_intersectionFunc; \
+		Set_SubtractionFunc*	_subtractionFunc; \
+		\
+		/* Set info ... */ \
+		SizeT			_elSize; \
+		BTree*			_btree;
+
+	struct Set { __Set };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/* Create an instance */
+	#define Set_New( dictionary, elementType, compareFunc, dataCopyFunc, dataDeleteFunc ) \
+		Set_New_all( dictionary, sizeof(elementType), compareFunc, dataCopyFunc, dataDeleteFunc )
+
+	/* Create an instance with all parameters */
+	Set* Set_New_all( 
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	/* Creation implementation */
+	Set* _Set_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Set_UnionFunc*					_unionFunc, 
+		Set_IntersectionFunc*				_intersectionFunc, 
+		Set_SubtractionFunc*				_subtractionFunc, 
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	
+	/* Initialise an instance */
+	void Set_Init(
+		Set*						self,
+		Dictionary*					dictionary, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	/* Initialisation implementation functions */
+	void _Set_Init(
+		Set*						self, 
+		SizeT						elementSize, 
+		BTree_compareFunction*				compareFunc, 
+		BTree_dataCopyFunction*				dataCopyFunc, 
+		BTree_dataDeleteFunction*			dataDeleteFunc );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete implementation */
+	void _Set_Delete(
+		void*						set );
+	
+	/* Print implementation */
+	void _Set_Print(
+		void*						set, 
+		Stream*						stream );
+
+	void* _Set_Union( void* set, void* operand );
+
+	void* _Set_Intersection( void* set, void* operand );
+
+	void* _Set_Subtraction( void* set, void* operand );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	Bool Set_Insert( Set* self, void* data );
+
+	#define Set_Union( self, operand ) \
+		(self)->_unionFunc( self, operand )
+
+	#define Set_Intersection( self, operand ) \
+		(self)->_intersectionFunc( self, operand )
+
+	#define Set_Subtraction( self, operand ) \
+		(self)->_subtractionFunc( self, operand )
+
+	void Set_Traverse( Set* self, BTree_parseFunction* func, void* args );
+
+	Bool Set_Exists( Set* self, void* data );
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void _Set_BTreeUnion( void* data, void* set );
+
+	void _Set_BTreeIntersection( void* data, void* pack );
+
+	void _Set_BTreeSubtraction( void* data, void* pack );
+
+
+#endif /* __Base_Container_Set_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,242 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: UIntMap.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 "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "types.h"
+#include "BTreeNode.h"
+#include "BTree.h"
+#include "UIntMap.h"
+
+
+typedef struct {
+	unsigned	curItem;
+	unsigned*	keys;
+	unsigned*	vals;
+} UIntMap_ParseStruct;
+
+
+/* Textual name of this class */
+const Type UIntMap_Type = "UIntMap";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+UIntMap* UIntMap_New() {
+	return _UIntMap_New( sizeof(UIntMap), 
+			     UIntMap_Type, 
+			     _UIntMap_Delete, 
+			     _UIntMap_Print, 
+			     _UIntMap_Copy );
+}
+
+UIntMap* _UIntMap_New( UINTMAP_DEFARGS ) {
+	UIntMap* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(UIntMap) );
+	self = (UIntMap*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* UIntMap info */
+	_UIntMap_Init( self );
+
+	return self;
+}
+
+void _UIntMap_Init( UIntMap* self ) {
+	self->btree = BTree_New( UIntMap_DataCompare, UIntMap_DataCopy, UIntMap_DataDelete, NULL, 
+				  BTREE_NO_DUPLICATES );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _UIntMap_Delete( void* generator ) {
+	UIntMap*	self = (UIntMap*)generator;
+
+	FreeObject( self->btree );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _UIntMap_Print( void* generator, Stream* stream ) {
+	UIntMap*	self = (UIntMap*)generator;
+	
+	/* Set the Journal for printing informations */
+	Stream* generatorStream;
+	generatorStream = Journal_Register( InfoStream_Type, "UIntMapStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "UIntMap (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+void* _UIntMap_Copy( void* generator, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	UIntMap*	self = (UIntMap*)generator;
+	UIntMap*	newUIntMap;
+	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;
+	}
+	
+	newUIntMap = (UIntMap*)_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*)newUIntMap;
+#endif
+
+	return NULL;
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void UIntMap_Insert( void* map, unsigned key, unsigned val ) {
+	UIntMap*	self = (UIntMap*)map;
+	unsigned	data[2];
+
+	assert( self );
+
+	data[0] = key;
+	data[1] = val;
+	BTree_InsertNode( self->btree, data, 2 * sizeof(unsigned) );
+	self->size = self->btree->nodeCount;
+}
+
+void UIntMap_Clear( void* map ) {
+	UIntMap*	self = (UIntMap*)map;
+
+	assert( self );
+
+	FreeObject( self->btree );
+	self->btree = BTree_New( UIntMap_DataCompare, UIntMap_DataCopy, UIntMap_DataDelete, NULL, 
+				  BTREE_NO_DUPLICATES );
+}
+
+Bool UIntMap_HasKey( void* map, unsigned key ) {
+	UIntMap*	self = (UIntMap*)map;
+
+	assert( self );
+
+	return (BTree_FindNode( self->btree, &key ) != NULL) ? True : False;
+}
+
+unsigned UIntMap_Map( void* map, unsigned key ) {
+	UIntMap*	self = (UIntMap*)map;
+	BTreeNode*	node;
+
+	assert( self );
+
+	node = BTree_FindNode( self->btree, &key );
+	assert( node );
+
+	return ((unsigned*)node->data)[1];
+}
+
+void UIntMap_GetItems( void* map, unsigned* nItems, unsigned** keys, unsigned** values ) {
+	UIntMap*		self = (UIntMap*)map;
+	UIntMap_ParseStruct	parseStruct;
+
+	assert( self );
+
+	parseStruct.curItem = 0;
+	parseStruct.keys = Memory_Alloc_Array_Unnamed( unsigned, self->size );
+	parseStruct.vals = Memory_Alloc_Array_Unnamed( unsigned, self->size );
+	BTree_ParseTree( self->btree, UIntMap_ParseNode, &parseStruct );
+
+	*nItems = self->size;
+	*keys = parseStruct.keys;
+	*values = parseStruct.vals;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+int UIntMap_DataCompare( void* left, void* right ) {
+	if( ((unsigned*)left)[0] > ((unsigned*)right)[0] )
+		return 1;
+	else if( ((unsigned*)left)[0] < ((unsigned*)right)[0] )
+		return -1;
+	else
+		return 0;
+}
+
+void UIntMap_DataCopy( void** dstData, void* data, SizeT size ) {
+	*dstData = Memory_Alloc_Array_Unnamed( unsigned, 2 );
+	((unsigned*)(*dstData))[0] = ((unsigned*)data)[0];
+	((unsigned*)(*dstData))[1] = ((unsigned*)data)[1];
+}
+
+void UIntMap_DataDelete( void* data ) {
+	Memory_Free( data );
+}
+
+void UIntMap_ParseNode( void* data, void* _parseStruct ) {
+	UIntMap_ParseStruct*	parseStruct = (UIntMap_ParseStruct*)_parseStruct;
+
+	assert( data );
+	assert( parseStruct );
+
+	parseStruct->keys[parseStruct->curItem] = ((unsigned*)data)[0];
+	parseStruct->vals[parseStruct->curItem++] = ((unsigned*)data)[1];
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: UIntMap.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_UIntMap_h__
+#define __Base_Container_UIntMap_h__
+
+	/** Textual name of this class */
+	extern const Type UIntMap_Type;
+
+	/** Virtual function types */
+
+	/** Mesh class contents */
+	#define __UIntMap				\
+		/* General info */			\
+		__Stg_Class				\
+							\
+		/* Virtual info */			\
+							\
+		/* UIntMap info */			\
+		BTree*		btree;			\
+		size_t		size;
+
+	struct UIntMap { __UIntMap };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define UINTMAP_DEFARGS		\
+		STG_CLASS_DEFARGS
+
+	#define UINTMAP_PASSARGS	\
+		STG_CLASS_PASSARGS
+
+	UIntMap* UIntMap_New();
+	UIntMap* _UIntMap_New( UINTMAP_DEFARGS );
+	void _UIntMap_Init( UIntMap* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _UIntMap_Delete( void* map );
+	void _UIntMap_Print( void* map, Stream* stream );
+
+	#define UIntMap_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define UIntMap_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _UIntMap_Copy( void* map, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void UIntMap_Insert( void* map, unsigned key, unsigned val );
+	void UIntMap_Clear( void* map );
+
+	Bool UIntMap_HasKey( void* map, unsigned key );
+	unsigned UIntMap_Map( void* map, unsigned key );
+	void UIntMap_GetItems( void* map, unsigned* nItems, unsigned** keys, unsigned** values );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	int UIntMap_DataCompare( void* left, void* right );
+	void UIntMap_DataCopy( void** dstData, void* data, SizeT size );
+	void UIntMap_DataDelete( void* data );
+	void UIntMap_ParseNode( void* data, void* _parseStruct );
+
+#endif /* __Base_Container_UIntMap_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: UniqueList.c 2192 2004-10-15 02:45:38Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include "types.h"
+#include "List.h"
+#include "UniqueList.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type UniqueList_Type = "UniqueList";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+UniqueList* UniqueList_New_Param(
+		SizeT						elementSize,
+		unsigned					delta )
+{
+	return _UniqueList_New( 
+		sizeof(UniqueList), 
+		UniqueList_Type, 
+		_UniqueList_Delete, 
+		_UniqueList_Print, 
+		NULL, 
+		_UniqueList_Append, 
+		_List_Mutate, 
+		elementSize,
+		delta );
+}
+
+
+void UniqueList_Init(
+		UniqueList*					self,
+		SizeT						elementSize,
+		unsigned					delta )
+{
+	/* General info */
+	self->type = UniqueList_Type;
+	self->_sizeOfSelf = sizeof(UniqueList);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _UniqueList_Delete;
+	self->_print = _UniqueList_Print;
+	self->_copy = NULL;
+	self->_append = _UniqueList_Append;
+	self->_mutate = _List_Mutate;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_List_Init( (List*)self, elementSize, delta );
+	
+	/* UniqueList info */
+	_UniqueList_Init( self );
+}
+
+
+UniqueList* _UniqueList_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		List_AppendFunc*				_append,
+		List_MutateFunc*				_mutate, 
+		SizeT						elementSize,
+		unsigned					delta )
+{
+	UniqueList*		self;
+	
+	/* allocate memory */
+	assert( _sizeOfSelf >= sizeof(UniqueList) );
+	self = (UniqueList*)_List_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print, 
+		_copy, 
+		_append, 
+		_mutate, 
+		elementSize, 
+		delta );
+	
+	/* general info */
+	
+	/* virtual info */
+	
+	/* UniqueList info */
+	_UniqueList_Init( self );
+	
+	return self;
+}
+
+
+void _UniqueList_Init(
+		UniqueList*					self )
+{
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _UniqueList_Delete( void* uniqueList ) {
+	UniqueList*		self = (UniqueList*)uniqueList;
+	
+	/* delete the class itself */
+	
+	/* delete parent */
+	_List_Delete( self );
+}
+
+
+void _UniqueList_Print( void* uniqueList, Stream* stream ) {
+	UniqueList*		self = (UniqueList*)uniqueList;
+	Stream*		myStream = Journal_Register( InfoStream_Type, "UniqueListStream" );
+
+	/* print parent */
+	_List_Print( self, stream );
+	
+	/* general info */
+	Journal_Printf( myStream, "UniqueList (ptr): (%p)\n", self );
+	
+	/* virtual info */
+	
+	/* UniqueList info */
+}
+
+
+unsigned _UniqueList_Append( void* uniqueList, void* data ) {
+	UniqueList*	self = (UniqueList*)uniqueList;
+	Index		el_I;
+	
+	for( el_I = 0; el_I < UniqueList_Size( self ); el_I++ ) {
+		if( memcmp( &((unsigned char*)self->elements)[self->elementSize * el_I], data, 
+			sizeof(unsigned char) * self->elementSize ) == 0 )
+		{
+			return el_I;
+		}
+	}
+	
+	return _List_Append( self, data );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: UniqueList.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_UniqueList_h__
+#define __Base_Container_UniqueList_h__
+	
+
+	/* Textual name of this class */
+	extern const Type UniqueList_Type;
+
+	/* Virtual function types */
+	
+	/* Support structures */
+	
+	/** UniqueList class contents */
+	#define __UniqueList \
+		/* General info */ \
+		__List \
+		\
+		/* Virtual info */ \
+		\
+		/* UniqueList info ... */
+
+	struct UniqueList { __UniqueList };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create an instance */
+	#define UniqueList_New( elementSize ) \
+		UniqueList_New_Param( elementSize, 10 )
+	
+	UniqueList* UniqueList_New_Param( 
+		SizeT						elementSize,
+		unsigned					delta );
+	
+	/* Creation implementation */
+	UniqueList* _UniqueList_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		List_AppendFunc*				_append,
+		List_MutateFunc*				_mutate, 
+		SizeT						elementSize,
+		unsigned					delta );
+	
+	
+	/* Initialise an instance */
+	void UniqueList_Init(
+		UniqueList*					self,
+		SizeT						elementSize,
+		unsigned					delta );
+	
+	/* Initialisation implementation functions */
+	void _UniqueList_Init(
+		UniqueList*					self );
+	
+	/* Copy an instance */
+	#define UniqueList_Copy( self ) \
+		(UniqueList*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	#define UniqueList_DeepCopy( self ) \
+		(UniqueList*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete implementation */
+	void _UniqueList_Delete(
+		void*						uniqueList );
+	
+	/* Print implementation */
+	void _UniqueList_Print(
+		void*						uniqueList, 
+		Stream*						stream );
+	
+	/* Copy implementation */
+	void* _UniqueList_Copy(
+		void*						uniqueList, 
+		void*						dest, 
+		Bool						deep, 
+		Name						nameExt,
+		PtrMap*						ptrMap );
+	
+	/* Append implementation */
+	unsigned _UniqueList_Append( void* list, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	
+	#define UniqueList_Size \
+		List_Size
+	
+	#define UniqueList_IsValidIndex \
+		List_IsValidIndex
+	
+	#define UniqueList_ElementAt \
+		List_ElementAt
+	
+	#define UniqueList_Resize \
+		List_Resize
+	
+	#define UniqueList_Append \
+		List_Append
+	
+	#define UniqueList_Mutate \
+		List_Mutate
+	
+	#define UniqueList_Array \
+		List_Array
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+
+#endif /* __Base_Container_UniqueList_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseIO ${RPATH_LFLAGS}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake
+
+ifdef SYSTEM_SIZEOF_LONG
+	PROJ_CFLAGS += -DSYSTEM_SIZEOF_LONG=${SYSTEM_SIZEOF_LONG}
+endif
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3789 2006-09-11 03:26:19Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_types_h__
+#define __Base_Container_types_h__
+	
+	/* IndexSet types */
+	typedef Index					IndexSet_Index;
+	
+	/* classes */
+	typedef struct IndexSet				IndexSet;
+	typedef struct PtrMap				PtrMap;
+	typedef struct IndexMap				IndexMap;
+	typedef struct List				List;
+	typedef struct Array				Array;
+	typedef struct LinkedListNode			LinkedListNode;
+	typedef struct LinkedList			LinkedList;
+	typedef struct LinkedListIterator	LinkedListIterator;
+	typedef struct HashTable_Entry		HashTable_Entry;
+	typedef struct HashTable_Index		HashTable_Index;
+	typedef struct HashTable			HashTable;
+	typedef struct UniqueList			UniqueList;
+	typedef struct Set				Set;
+	typedef struct PtrSet				PtrSet;
+	typedef struct Map				Map;
+	typedef struct _Heap			_Heap;
+	typedef struct MaxHeap			MaxHeap;
+	typedef struct UIntMap			UIntMap;
+	typedef struct MemoryPool		MemoryPool;
+	typedef struct RangeSet			RangeSet;
+	typedef unsigned char		Stg_Byte;
+	typedef char					BitField;
+	
+	typedef struct BTreeNode			BTreeNode;
+	typedef struct BTree				BTree;
+	typedef struct BTreeIterator			BTreeIterator;
+
+	typedef struct MapTuple				MapTuple;
+
+	typedef enum Color_t{
+		BTREE_NODE_RED,
+		BTREE_NODE_BLACK
+	}
+	Color;
+
+	typedef enum BTreeProperty_t{
+		BTREE_ALLOW_DUPLICATES,
+		BTREE_NO_DUPLICATES
+	}
+	BTreeProperty;
+
+	typedef enum Order_t{
+		LINKEDLIST_SORTED,
+		LINKEDLIST_UNSORTED
+	}
+	Order;
+
+	typedef enum KeyType_t{
+		HASHTABLE_STRING_KEY,
+		HASHTABLE_INTEGER_KEY,
+		HASHTABLE_POINTER_KEY
+	}
+	KeyType;
+
+#define LinkedListIterator_First( it ) \
+	(it==NULL)?NULL:(it->list == NULL)?NULL:((it->curr = it->list->head)==NULL)?NULL:it->curr->data
+
+#define LinkedListIterator_Next( it ) \
+	(it==NULL)?NULL:(it->curr == NULL)?NULL:((it->curr = it->curr->next)==NULL)?NULL:it->curr->data
+
+#endif /* __Base_Container_types_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/src/units.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/src/units.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/src/units.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: units.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Container_units_h__
+#define __Base_Container_units_h__
+	
+#endif /* __Base_Container_units_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 3890 2006-11-08 21:26:58Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseContainer
+
+def_srcs = \
+	testIndexSet.c \
+	testIndexSet-badAssign.c \
+	testIndexSet-badAccess.c \
+	testPtrMap.c \
+	testIndexMap.c \
+	testList.c \
+	testArray.c \
+	testUniqueList.c \
+	testLinkedList.c \
+	testLinkedListIterator.c \
+	testSet.c \
+	testHashTable.c \
+	testPtrSet.c \
+	testMap.c \
+	testBTree.c \
+	testMaxHeap.c \
+	testMPIRoutines.c \
+	testUIntMap.c \
+	testMemoryPool.c \
+	testRangeSet.c
+
+def_checks = \
+	testIndexSet.0of1.sh \
+	testPtrMap.0of1.sh \
+	testIndexMap.0of1.sh \
+	testList.0of1.sh \
+	testArray.0of1.sh \
+	testLinkedList.0of1.sh \
+	testLinkedListIterator.0of1.sh \
+	testBTree.0of1.sh \
+	testHashTable.0of1.sh \
+	testMPIRoutines.0of1.sh \
+	testMPIRoutines.0of2.sh \
+	testMPIRoutines.1of2.sh \
+	testMPIRoutines.0of3.sh \
+	testMPIRoutines.1of3.sh \
+	testMPIRoutines.2of3.sh \
+	testUIntMap.0of1.sh \
+	testUIntMap.0of2.sh \
+	testUIntMap.1of2.sh \
+	testUIntMap.0of3.sh \
+	testUIntMap.1of3.sh \
+	testUIntMap.2of3.sh \
+	testMemoryPool.0of1.sh \
+	testRangeSet.0of1.sh
+
+ifdef USE_CAUTIOUS
+	def_checks += \
+		testIndexSet-badAssign.0of1.sh \
+		testIndexSet-badAccess.0of1.sh 
+endif
+	

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/dictionary.txt
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/dictionary.txt	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/dictionary.txt	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,100 @@
+antarctic
+escheat
+cardioid
+solidus
+memoir
+piteous
+felt
+frown
+fanout
+allowance
+up
+semester
+threat
+plunge
+head
+sepal
+gumbo
+textile
+slugging
+blurt
+thanksgiving
+apace
+pattern
+stance
+circumspect
+buret
+sudden
+sequent
+monitor
+diabase
+bandstand
+nitride
+clothesmen
+assassin
+firemen
+us
+depression
+bastard
+climatology
+nether
+posthumous
+virile
+caulk
+etude
+germinate
+licensor
+potlatch
+stanch
+crucifixion
+millions
+misshapen
+lottery
+worth
+chert
+observe
+fidelity
+precaution
+intelligentsia
+bleed
+kennel
+town
+cabinet
+univariate
+anatomy
+exogamy
+embolden
+kibitz
+anyplace
+cavort
+clipboard
+divorcee
+melodic
+grillwork
+magnitude
+fiduciary
+electronic
+infantrymen
+wildlife
+excrescent
+steepen
+exhale
+insuppressible
+heal
+drawl
+presentation
+whinny
+free
+involve
+controller
+orchestrate
+amoeba
+eerie
+loin
+jiggle
+biology
+fairy
+buggy
+ephemerides
+arhat
+conscript

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifndef PROJ_ROOT
+	PROJ_ROOT=../../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseContainer -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+Passed test 1: Construct the Array(s)
+Passed test 2: Do we trust Array_Ptr, Array_Count & Array_ElementSize?
+Passed test 3: Do we trust Array_At?
+Passed test 4: Do we trust Array_Copy (Deep and Shallow)?
+Passed test 5: Do we trust Array_Owner/Array_IOwn?
+Passed test 6: Delete the Array(s)

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testArray " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,200 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testArray.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		Stream*			stream;
+		double			sourceArray[] = { 0.1f, 0.2f, 0.3f, 0.4f };
+		Array*			array0; /* Heap (new) */
+		double*			array0Ptr;
+		Array			array1; /* Stack (init) */
+		double*			array1Ptr;
+		Array*			array0deep;
+		Array*			array0shallow;
+		Array*			array1deep;
+		Array*			array1shallow;
+		Index			i;
+		Bool			fail;
+		
+		stream = Journal_Register( Info_Type, "myStream" );
+		
+		
+		/* Test 1: Construct the Array(s) */
+		array0 = Array_New( sizeof(double), 4 );
+		Array_Init( &array1, sizeof(double), 4 );
+		Journal_Printf( stream, "Passed test 1: Construct the Array(s)\n" );
+		
+		/* Test 2: Do we trust Array_Ptr, Array_Count & Array_ElementSize? */
+		if( 
+			Array_Ptr(  array0 ) == array0->ptr &&
+			Array_Ptr(  array0 ) != 0 &&
+			Array_Count(  array0 ) == 4 &&
+			Array_ElementSize(  array0 ) == sizeof(double) &&
+			Array_Ptr( &array1 ) == array1.ptr &&
+			Array_Ptr( &array1 ) != 0 &&
+			Array_Count( &array1 ) == 4 &&
+			Array_ElementSize( &array1 ) == sizeof(double) &&
+			Array_Ptr( array0 ) != Array_Ptr( &array1 ) )
+		{
+			Journal_Printf( stream, "Passed test 2: Do we trust Array_Ptr, Array_Count & Array_ElementSize?\n" );
+		}
+		else {
+			Journal_Firewall( 0, stream, "Failed test 2: Do we trust Array_Ptr, Array_Count & Array_ElementSize?\n" );
+		}
+		
+		
+		/* Test 3: Do we trust Array_At? */
+		array0Ptr = (double*)Array_Ptr( array0 );
+		array1Ptr = (double*)Array_Ptr( &array1 );
+		for( i = 0; i < 4; i++ ) {
+			array0Ptr[i] = sourceArray[i];
+			array1Ptr[i] = sourceArray[i];
+		}
+		
+		fail = False;
+		for( i = 0; i < 4; i++ ) {
+			if( 
+				*((double*)Array_At(  array0, i )) != sourceArray[i] || 
+				*((double*)Array_At( &array1, i )) != sourceArray[i] ) 
+			{
+				fail = True;
+			}
+		}
+		if( fail ) {
+			Journal_Firewall( 0, stream, "Failed test 3: Do we trust Array_At?\n" );
+		}
+		else {
+			Journal_Printf( stream, "Passed test 3: Do we trust Array_At?\n" );
+		}
+		
+		
+		/* Test 4: Do we trust Array_Copy (Deep and Shallow)? */
+		array0deep =	Stg_Class_Copy(  array0, 0, True,  0, 0 );
+		array0shallow =	Stg_Class_Copy(  array0, 0, False, 0, 0 );
+		array1deep =	Stg_Class_Copy( &array1, 0, True,  0, 0 );
+		array1shallow =	Stg_Class_Copy( &array1, 0, False, 0, 0 );
+		
+		Journal_Firewall(
+			array0->ptr != array0deep->ptr &&
+			array0->ptr == array0shallow->ptr &&
+			array1.ptr  != array1deep->ptr &&
+			array1.ptr  == array1shallow->ptr,
+			stream, 
+			"Failed test 4: Do we trust Array_Copy (Deep and Shallow)?\n" );
+		
+		fail = False;
+		for( i = 0; i < 4; i++ ) {
+			if( 
+				*((double*)Array_At( array0deep,    i )) != sourceArray[i] || 
+				*((double*)Array_At( array0shallow, i )) != sourceArray[i] || 
+				*((double*)Array_At( array1deep,    i )) != sourceArray[i] || 
+				*((double*)Array_At( array1shallow, i )) != sourceArray[i] ) 
+			{
+				fail = True;
+			}
+		}
+		if( fail ) {
+			Journal_Firewall( 0, stream, "Failed test 4: Do we trust Array_Copy (Deep and Shallow)?\n" );
+		}
+		else {
+			Journal_Printf( stream, "Passed test 4: Do we trust Array_Copy (Deep and Shallow)?\n" );
+		}
+		
+		
+		/* Test 5: Do we trust Array_Owner/Array_IOwn? */
+		Journal_Firewall(
+			 Array_IOwn( array0 ) &&
+			 Array_IOwn( array0deep ) &&
+			!Array_IOwn( array0shallow ) &&
+			 Array_IOwn( &array1 ) &&
+			 Array_IOwn( array1deep ) &&
+			!Array_IOwn( array1shallow ) &&
+			Array_Owner( array0 ) != Array_Owner( array0deep ) &&
+			Array_Owner( array0 ) == Array_Owner( array0shallow ) &&
+			Array_Owner( &array1 ) != Array_Owner( array1deep ) &&
+			Array_Owner( &array1 ) == Array_Owner( array1shallow ) &&
+			Array_Owner( array0 ) != Array_Owner( &array1 ),
+			stream, 
+			"Failed test 5: Do we trust Array_Owner/Array_IOwn?\n" );
+		Journal_Printf( stream, "Passed test 5: Do we trust Array_Owner/Array_IOwn?\n" );
+		
+		
+		/* Test 6: Delete the Array(s) */
+		Stg_Class_Delete( array1deep );
+		Stg_Class_Delete( array0deep );
+		Stg_Class_Delete( &array1 );
+		Stg_Class_Delete( array0 );
+		Stg_Class_Delete( array1shallow ); /* Purposely do after "owner" has been deleted*/
+		Stg_Class_Delete( array0shallow ); /* Purposely do after "owner" has been deleted*/
+		Journal_Printf( stream, "Passed test 6: Delete the Array(s)\n" );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,275 @@
+Testing basic Insertion, Deletion and Query functions
+Inserting data into the Tree
+
+Printing the tree
+Stg_Class (ptr): 0x806a478
+	sizeOfSelf: 52
+	_deleteSelf: Yes
+	type: BTree
+	_delete (func ptr): 0x8058f78
+	_print (func ptr): 0x80590d9
+	_copy (func ptr): (nil)
+BTree (ptr): (0x806a478)
+	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
+	44
+	45
+	46
+	47
+	48
+	49
+	50
+	51
+	52
+	53
+	54
+	55
+	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
+
+Deleting half the nodes previously inserted into the tree
+
+Printing the tree
+Stg_Class (ptr): 0x806a478
+	sizeOfSelf: 52
+	_deleteSelf: Yes
+	type: BTree
+	_delete (func ptr): 0x8058f78
+	_print (func ptr): 0x80590d9
+	_copy (func ptr): (nil)
+BTree (ptr): (0x806a478)
+	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
+	44
+	45
+	46
+	47
+	48
+	49
+	50
+
+Searching for Node data in the tree
+Looking for - 1, Found..
+Looking for - 2, Found..
+Looking for - 3, Found..
+Looking for - 4, Found..
+Looking for - 5, Found..
+Looking for - 6, Found..
+Looking for - 7, Found..
+Looking for - 8, Found..
+Looking for - 9, Found..
+Looking for - 10, Found..
+Looking for - 11, Found..
+Looking for - 12, Found..
+Looking for - 13, Found..
+Looking for - 14, Found..
+Looking for - 15, Found..
+Looking for - 16, Found..
+Looking for - 17, Found..
+Looking for - 18, Found..
+Looking for - 19, Found..
+Looking for - 20, Found..
+Looking for - 21, Found..
+Looking for - 22, Found..
+Looking for - 23, Found..
+Looking for - 24, Found..
+
+Printing the iterator
+Stg_Class (ptr): 0x806c578
+	sizeOfSelf: 432
+	_deleteSelf: Yes
+	type: BTreeIterator
+	_delete (func ptr): 0x8059522
+	_print (func ptr): 0x805954b
+	_copy (func ptr): (nil)
+BTreeIterator (ptr): (0x806c578)
+	Tree (ptr): (0x806a478)
+	Depth : 0
+
+Iterating over all the nodes and printing them
+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
+44
+45
+46
+47
+48
+49
+50
+
+Deleting all the nodes previously inserted into the tree
+
+Calculating Complexity
+BTree_FindNode has a complexity of O(log n)
+This implies similar complexity for Insertion and Deletion
+
+Calculating the average of all the numbers stored in the tree
+Average calculated corrrectly
+
+Deleting the Tree

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testBTree " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,275 @@
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testBTree.c 2136 2005-04-05 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+#include <math.h>
+
+#define NUM_DATA 100
+#define NUM_DATA_LARGE 100000
+
+typedef struct praseFunctionArguments_t{
+	double result;
+}parseFunctionArguments;
+
+int compareFunction(void *data1, void *data2)
+{
+	int *d1 = NULL, *d2 = NULL;
+
+	d1 = (int*)data1;
+	d2 = (int*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+	
+	if (*d1 > *d2){
+		return  1;
+	}
+	else if (*d1 == *d2){
+		return 0;
+	}
+	else{
+		return -1;
+	}
+}
+
+void dataPrintFunction( void *nodeData, Stream *printStream )
+{
+	assert (nodeData);
+
+	Journal_Printf( printStream, "\t%d\n", *(int*)nodeData );
+}
+
+void dataCopyFunction( void **nodeData, void *newData, SizeT dataSize)
+{
+	*nodeData = malloc( dataSize );
+	memset(*nodeData, 0, dataSize);
+
+	memcpy(*nodeData, newData, dataSize);
+}
+
+void dataDeleteFunction( void *nodeData )
+{
+	if( nodeData != NULL ){
+		free( nodeData );
+	}
+}
+
+void treeParseFunction( void *nodeData, void *args )
+{
+	parseFunctionArguments *arguments = NULL;
+
+	assert( nodeData );
+	arguments = (parseFunctionArguments*) args;
+	assert( arguments );
+
+	arguments->result += *(int*)nodeData;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	
+	BTree *numList = NULL;
+	BTreeNode *node = NULL;
+	int i = 0;
+	int *array[NUM_DATA] = {0};
+	float randomNum, randomMax;
+	Stream *myStream = NULL;
+	int data = 0;
+	void *treeData = NULL;
+	double average = 0, parsedAverage = 0;
+	parseFunctionArguments parseArguments;
+	int idealComplexity = 0, hops = 0;
+	BTreeIterator *iterator = 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		
+		myStream = Journal_Register( InfoStream_Type, "BTreeStream" );
+		numList = BTree_New(
+					compareFunction,
+					dataCopyFunction,
+					dataDeleteFunction,
+					dataPrintFunction,
+					BTREE_ALLOW_DUPLICATES);
+		
+		Journal_Printf( myStream, "Testing basic Insertion, Deletion and Query functions\n" );
+		Journal_Printf( myStream, "Inserting data into the Tree\n");
+		
+		for(i=0; i<NUM_DATA; i++){
+			array[i] = malloc(sizeof(int));
+			randomNum = rand();
+			randomMax = RAND_MAX;
+			*array[i] = NUM_DATA - i;
+			BTree_InsertNode(numList, (void*)array[i], sizeof(int));
+		}
+	
+		Journal_Printf(myStream, "\nPrinting the tree\n");
+		Print( (void*)numList, myStream );
+		
+		Journal_Printf(myStream, "\nDeleting half the nodes previously inserted into the tree\n");
+		for(i=0; i<NUM_DATA/2; i++){
+			node = BTree_FindNode( numList, (void*)array[i] );
+			
+			if( node ){
+				BTree_DeleteNode( numList, node );
+			}
+		}
+		
+		Journal_Printf(myStream, "\nPrinting the tree\n");
+		Print( (void*)numList, myStream );
+		
+		Journal_Printf( myStream, "\nSearching for Node data in the tree\n" );
+		for(i=1; i<NUM_DATA/4; i++){
+			node = BTree_FindNode( numList, array[NUM_DATA - i] );
+			if ( node != NULL ){
+				printf( "Looking for - %d, Found..\n", *(int*)(node->data) );
+			}
+			else{
+				printf( "Failed to find.. %d\n", *array[i] );
+			}
+		}
+
+		iterator = BTreeIterator_New( numList );
+		Journal_Printf( myStream, "\nPrinting the iterator\n" );
+		Print( (void*)iterator, myStream );
+		Journal_Printf( myStream, "\nIterating over all the nodes and printing them\n" );
+		for( treeData = BTreeIterator_First( iterator ); treeData != NULL; treeData = BTreeIterator_Next( iterator ) ){
+			Journal_Printf( myStream, "%d\n", *(int*)treeData );
+		}
+	
+		Journal_Printf(myStream, "\nDeleting all the nodes previously inserted into the tree\n");
+		for(i=0; i<NUM_DATA; i++){
+			node = BTree_FindNode( numList, (void*)array[i] );
+			
+			if( node ){
+				BTree_DeleteNode( numList, node );
+			}
+		}
+
+		average = 0;
+		srand( (unsigned)time( NULL ) );
+		for( i=0; i<NUM_DATA_LARGE; i++ ){
+			data = (int) NUM_DATA_LARGE * (rand() / (RAND_MAX + 1.0));
+			BTree_InsertNode(numList, (void*)&data, sizeof(int));
+			
+			idealComplexity = (int)ceil((log( (double)numList->nodeCount ) / log(2.0)));
+			
+			/* 
+			 * 			n >= 2^(bh) - 1
+			 *  where bh is the black height of the tree 
+			 *  but bh ~ h/2 
+			 *  
+			 *  log( n+1 ) >= (bh/2)
+			 *	bh <= 2log(n+1)
+			 *
+			 *  */	
+			
+			if( (node = BTree_FindNodeAndHops( numList, (void*)&data, &hops )) != NULL ){
+				if( idealComplexity * 2 < hops ){
+					Journal_Printf( myStream, "Complexity exceeds log(n)..\n" );
+					exit( 0 );
+				}
+			}
+			average += data;
+		}
+
+		Journal_Printf( myStream, "\nCalculating Complexity\n" );
+		Journal_Printf( myStream, "BTree_FindNode has a complexity of O(log n)\nThis implies similar complexity for Insertion and Deletion\n" );
+		
+		Journal_Printf( myStream, "\nCalculating the average of all the numbers stored in the tree\n" );
+		average /= NUM_DATA_LARGE;
+		
+		/* Using the parseTreeFunction to parse the entire tree and calculate the average of all the numnbers stored in the tree.
+		 * The parseTreeFunction returns the sum of all the numbers in the tree via parseArguments.result, where parseArguments
+		 * is a user specified struct. */
+
+		parseArguments.result = 0;
+		BTree_ParseTree( numList, treeParseFunction, (void*) &parseArguments );
+		parsedAverage = parseArguments.result / NUM_DATA_LARGE;
+	
+		if( average == parsedAverage ){
+			Journal_Printf( myStream, "Average calculated corrrectly\n" );
+		}
+		else{
+			Journal_Printf( myStream, "Error calculating average..\n" );
+			Journal_Printf( myStream, "Calculated value %lf, actual %lf\n", parsedAverage, average );
+			exit( 0 );
+		}
+		
+		
+		
+		Journal_Printf( myStream, "\nDeleting the Tree\n" );
+		Stg_Class_Delete( (void*)numList );
+
+		for(i=0; i<NUM_DATA; i++){
+			free( array[i] );
+		}
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,451 @@
+Testing hash table with string keys..
+
+Inserting data into the hash table
+
+Incurred 2 collisions while inserting anyplace
+Incurred 2 collisions while inserting electronic
+Incurred 2 collisions while inserting drawl
+Incurred 2 collisions while inserting buggy
+Successfully inserted 100 items into the table
+
+Printing the hash table
+
+Stg_Class (ptr): 0x80cc3cc
+	sizeOfSelf: 72
+	_deleteSelf: Yes
+	type: HashTable
+	_delete (func ptr): 0x805c0a6
+	_print (func ptr): 0x805bf61
+	_copy (func ptr): (nil)
+HashTable (ptr): (0x80cc3cc)
+	EntryCount		 - 100
+	HashTable KeyType	 - STRING
+	HashTable data	 - 
+		cabinet
+		univariate
+		antarctic
+		anatomy
+		exogamy
+		escheat
+		cardioid
+		solidus
+		embolden
+		memoir
+		piteous
+		felt
+		frown
+		fanout
+		kibitz
+		anyplace
+		cavort
+		clipboard
+		divorcee
+		allowance
+		melodic
+		grillwork
+		magnitude
+		fiduciary
+		up
+		semester
+		threat
+		electronic
+		plunge
+		infantrymen
+		wildlife
+		head
+		excrescent
+		steepen
+		sepal
+		exhale
+		insuppressible
+		gumbo
+		heal
+		drawl
+		presentation
+		whinny
+		textile
+		slugging
+		free
+		involve
+		controller
+		orchestrate
+		amoeba
+		blurt
+		eerie
+		thanksgiving
+		loin
+		jiggle
+		biology
+		apace
+		fairy
+		pattern
+		stance
+		buggy
+		circumspect
+		buret
+		sudden
+		sequent
+		monitor
+		diabase
+		ephemerides
+		bandstand
+		nitride
+		arhat
+		clothesmen
+		conscript
+		assassin
+		firemen
+		us
+		depression
+		bastard
+		climatology
+		nether
+		posthumous
+		virile
+		caulk
+		etude
+		germinate
+		licensor
+		potlatch
+		stanch
+		crucifixion
+		millions
+		misshapen
+		lottery
+		worth
+		chert
+		observe
+		fidelity
+		precaution
+		intelligentsia
+		bleed
+		kennel
+		town
+Searching for items in the table:
+
+Looking for antarctic, ...found
+Looking for escheat, ...found
+Looking for cardioid, ...found
+Looking for solidus, ...found
+Looking for memoir, ...found
+Looking for piteous, ...found
+Looking for felt, ...found
+Looking for frown, ...found
+Looking for fanout, ...found
+Looking for allowance, ...found
+Looking for up, ...found
+Looking for semester, ...found
+Looking for threat, ...found
+Looking for plunge, ...found
+Looking for head, ...found
+Looking for sepal, ...found
+Looking for gumbo, ...found
+Looking for textile, ...found
+Looking for slugging, ...found
+Looking for blurt, ...found
+Looking for thanksgiving, ...found
+Looking for apace, ...found
+Looking for pattern, ...found
+Looking for stance, ...found
+Looking for circumspect, ...found
+Looking for buret, ...found
+Looking for sudden, ...found
+Looking for sequent, ...found
+Looking for monitor, ...found
+Looking for diabase, ...found
+Looking for bandstand, ...found
+Looking for nitride, ...found
+Looking for clothesmen, ...found
+Looking for assassin, ...found
+Looking for firemen, ...found
+Looking for us, ...found
+Looking for depression, ...found
+Looking for bastard, ...found
+Looking for climatology, ...found
+Looking for nether, ...found
+Looking for posthumous, ...found
+Looking for virile, ...found
+Looking for caulk, ...found
+Looking for etude, ...found
+Looking for germinate, ...found
+Looking for licensor, ...found
+Looking for potlatch, ...found
+Looking for stanch, ...found
+Looking for crucifixion, ...found
+Looking for millions, ...found
+Looking for misshapen, ...found
+Looking for lottery, ...found
+Looking for worth, ...found
+Looking for chert, ...found
+Looking for observe, ...found
+Looking for fidelity, ...found
+Looking for precaution, ...found
+Looking for intelligentsia, ...found
+Looking for bleed, ...found
+Looking for kennel, ...found
+Looking for town, ...found
+Looking for cabinet, ...found
+Looking for univariate, ...found
+Looking for anatomy, ...found
+Looking for exogamy, ...found
+Looking for embolden, ...found
+Looking for kibitz, ...found
+Looking for anyplace, ...found
+Looking for cavort, ...found
+Looking for clipboard, ...found
+Looking for divorcee, ...found
+Looking for melodic, ...found
+Looking for grillwork, ...found
+Looking for magnitude, ...found
+Looking for fiduciary, ...found
+Looking for electronic, ...found
+Looking for infantrymen, ...found
+Looking for wildlife, ...found
+Looking for excrescent, ...found
+Looking for steepen, ...found
+Looking for exhale, ...found
+Looking for insuppressible, ...found
+Looking for heal, ...found
+Looking for drawl, ...found
+Looking for presentation, ...found
+Looking for whinny, ...found
+Looking for free, ...found
+Looking for involve, ...found
+Looking for controller, ...found
+Looking for orchestrate, ...found
+Looking for amoeba, ...found
+Looking for eerie, ...found
+Looking for loin, ...found
+Looking for jiggle, ...found
+Looking for biology, ...found
+Looking for fairy, ...found
+Looking for buggy, ...found
+Looking for ephemerides, ...found
+Looking for arhat, ...found
+Looking for conscript, ...found
+
+Deleting the Table
+
+Testing hash table with pointer keys..
+
+Inserting data into the hash table
+
+Successfully inserted 100 items into the table
+
+Printing the hash table
+
+Stg_Class (ptr): 0x80ce714
+	sizeOfSelf: 72
+	_deleteSelf: Yes
+	type: HashTable
+	_delete (func ptr): 0x805c0a6
+	_print (func ptr): 0x805bf61
+	_copy (func ptr): (nil)
+HashTable (ptr): (0x80ce714)
+	EntryCount		 - 100
+	HashTable KeyType	 - INTEGER
+	HashTable data	 - 
+		(ptr)0x80cca78
+		(ptr)0x80ce7e8
+		(ptr)0x80cf8b0
+		(ptr)0x80cfa48
+		(ptr)0x80cfa78
+		(ptr)0x80cfac8
+		(ptr)0x80ccfa0
+		(ptr)0x80cf678
+		(ptr)0x80cfb70
+		(ptr)0x80cd698
+		(ptr)0x80cd708
+		(ptr)0x80cddb0
+		(ptr)0x80cf928
+		(ptr)0x80cf6a8
+		(ptr)0x80cdfb8
+		(ptr)0x80cd128
+		(ptr)0x80cfc18
+		(ptr)0x80cd288
+		(ptr)0x80cf9f8
+		(ptr)0x80cd930
+		(ptr)0x80ccae8
+		(ptr)0x80cf650
+		(ptr)0x80cf9d0
+		(ptr)0x80cfbc8
+		(ptr)0x80ccb58
+		(ptr)0x80cf7e8
+		(ptr)0x80ccca8
+		(ptr)0x80cf8d8
+		(ptr)0x80cf9a8
+		(ptr)0x80cf798
+		(ptr)0x80cdba0
+		(ptr)0x80ccb90
+		(ptr)0x80cfc68
+		(ptr)0x80cd890
+		(ptr)0x80cf888
+		(ptr)0x80ce810
+		(ptr)0x80cd198
+		(ptr)0x80cd5a8
+		(ptr)0x80cfa20
+		(ptr)0x80cdaf0
+		(ptr)0x80cdd40
+		(ptr)0x80cd2f8
+		(ptr)0x80cf810
+		(ptr)0x80ce0a0
+		(ptr)0x80cdc90
+		(ptr)0x80cda48
+		(ptr)0x80cfaa0
+		(ptr)0x80cd3d8
+		(ptr)0x80cd9d8
+		(ptr)0x80cd538
+		(ptr)0x80cdf10
+		(ptr)0x80cca40
+		(ptr)0x80cfbf0
+		(ptr)0x80cce40
+		(ptr)0x80cce78
+		(ptr)0x80cf900
+		(ptr)0x80cf7c0
+		(ptr)0x80cd010
+		(ptr)0x80cd778
+		(ptr)0x80cc810
+		(ptr)0x80cd4c8
+		(ptr)0x80cfaf8
+		(ptr)0x80ce7c0
+		(ptr)0x80cf6d0
+		(ptr)0x80cf950
+		(ptr)0x80cfb48
+		(ptr)0x80ccd88
+		(ptr)0x80cf770
+		(ptr)0x80cc800
+		(ptr)0x80cf860
+		(ptr)0x80cf748
+		(ptr)0x80cd210
+		(ptr)0x80cfcb8
+		(ptr)0x80ccd18
+		(ptr)0x80cf838
+		(ptr)0x80ce068
+		(ptr)0x80cf720
+		(ptr)0x80cd7b0
+		(ptr)0x80ccc00
+		(ptr)0x80cd450
+		(ptr)0x80cf6f8
+		(ptr)0x80ce838
+		(ptr)0x80cd368
+		(ptr)0x80cfd10
+		(ptr)0x80ccf30
+		(ptr)0x80cfd38
+		(ptr)0x80cde28
+		(ptr)0x80cfc40
+		(ptr)0x80cfce0
+		(ptr)0x80cda80
+		(ptr)0x80cfb98
+		(ptr)0x80cc9d0
+		(ptr)0x80cfb20
+		(ptr)0x80cd618
+		(ptr)0x80ccdc0
+		(ptr)0x80cfc90
+		(ptr)0x80cce00
+		(ptr)0x80cf978
+		(ptr)0x80cd048
+		(ptr)0x80cdbd8
+Searching for items in the table:
+
+Looking for (ptr)0x80cd708, ...found
+Looking for (ptr)0x80cd698, ...found
+Looking for (ptr)0x80cd618, ...found
+Looking for (ptr)0x80cd5a8, ...found
+Looking for (ptr)0x80cd538, ...found
+Looking for (ptr)0x80cd4c8, ...found
+Looking for (ptr)0x80cd450, ...found
+Looking for (ptr)0x80cd3d8, ...found
+Looking for (ptr)0x80cd368, ...found
+Looking for (ptr)0x80cd2f8, ...found
+Looking for (ptr)0x80cd288, ...found
+Looking for (ptr)0x80cd210, ...found
+Looking for (ptr)0x80cd198, ...found
+Looking for (ptr)0x80cd128, ...found
+Looking for (ptr)0x80ce0a0, ...found
+Looking for (ptr)0x80ce068, ...found
+Looking for (ptr)0x80cd048, ...found
+Looking for (ptr)0x80cd010, ...found
+Looking for (ptr)0x80ccfa0, ...found
+Looking for (ptr)0x80ccf30, ...found
+Looking for (ptr)0x80cdfb8, ...found
+Looking for (ptr)0x80cce78, ...found
+Looking for (ptr)0x80cce40, ...found
+Looking for (ptr)0x80cdf10, ...found
+Looking for (ptr)0x80cce00, ...found
+Looking for (ptr)0x80ccdc0, ...found
+Looking for (ptr)0x80cde28, ...found
+Looking for (ptr)0x80cddb0, ...found
+Looking for (ptr)0x80ccd88, ...found
+Looking for (ptr)0x80cdd40, ...found
+Looking for (ptr)0x80cdc90, ...found
+Looking for (ptr)0x80ccd18, ...found
+Looking for (ptr)0x80cdbd8, ...found
+Looking for (ptr)0x80cdba0, ...found
+Looking for (ptr)0x80ccca8, ...found
+Looking for (ptr)0x80cdaf0, ...found
+Looking for (ptr)0x80cda80, ...found
+Looking for (ptr)0x80ccc00, ...found
+Looking for (ptr)0x80cda48, ...found
+Looking for (ptr)0x80cd9d8, ...found
+Looking for (ptr)0x80ccb90, ...found
+Looking for (ptr)0x80cd930, ...found
+Looking for (ptr)0x80cd890, ...found
+Looking for (ptr)0x80ccb58, ...found
+Looking for (ptr)0x80ccae8, ...found
+Looking for (ptr)0x80cca78, ...found
+Looking for (ptr)0x80cca40, ...found
+Looking for (ptr)0x80cc9d0, ...found
+Looking for (ptr)0x80cd7b0, ...found
+Looking for (ptr)0x80cd778, ...found
+Looking for (ptr)0x80cc800, ...found
+Looking for (ptr)0x80cc810, ...found
+Looking for (ptr)0x80ce7c0, ...found
+Looking for (ptr)0x80ce7e8, ...found
+Looking for (ptr)0x80ce810, ...found
+Looking for (ptr)0x80ce838, ...found
+Looking for (ptr)0x80cf650, ...found
+Looking for (ptr)0x80cf678, ...found
+Looking for (ptr)0x80cf6a8, ...found
+Looking for (ptr)0x80cf6d0, ...found
+Looking for (ptr)0x80cf6f8, ...found
+Looking for (ptr)0x80cf720, ...found
+Looking for (ptr)0x80cf748, ...found
+Looking for (ptr)0x80cf770, ...found
+Looking for (ptr)0x80cf798, ...found
+Looking for (ptr)0x80cf7c0, ...found
+Looking for (ptr)0x80cf7e8, ...found
+Looking for (ptr)0x80cf810, ...found
+Looking for (ptr)0x80cf838, ...found
+Looking for (ptr)0x80cf860, ...found
+Looking for (ptr)0x80cf888, ...found
+Looking for (ptr)0x80cf8b0, ...found
+Looking for (ptr)0x80cf8d8, ...found
+Looking for (ptr)0x80cf900, ...found
+Looking for (ptr)0x80cf928, ...found
+Looking for (ptr)0x80cf950, ...found
+Looking for (ptr)0x80cf978, ...found
+Looking for (ptr)0x80cf9a8, ...found
+Looking for (ptr)0x80cf9d0, ...found
+Looking for (ptr)0x80cf9f8, ...found
+Looking for (ptr)0x80cfa20, ...found
+Looking for (ptr)0x80cfa48, ...found
+Looking for (ptr)0x80cfa78, ...found
+Looking for (ptr)0x80cfaa0, ...found
+Looking for (ptr)0x80cfac8, ...found
+Looking for (ptr)0x80cfaf8, ...found
+Looking for (ptr)0x80cfb20, ...found
+Looking for (ptr)0x80cfb48, ...found
+Looking for (ptr)0x80cfb70, ...found
+Looking for (ptr)0x80cfb98, ...found
+Looking for (ptr)0x80cfbc8, ...found
+Looking for (ptr)0x80cfbf0, ...found
+Looking for (ptr)0x80cfc18, ...found
+Looking for (ptr)0x80cfc40, ...found
+Looking for (ptr)0x80cfc68, ...found
+Looking for (ptr)0x80cfc90, ...found
+Looking for (ptr)0x80cfcb8, ...found
+Looking for (ptr)0x80cfce0, ...found
+Looking for (ptr)0x80cfd10, ...found
+Looking for (ptr)0x80cfd38, ...found
+
+Deleting the Table

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHashTable " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testHashTable.c 2136 2005-02-28 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+void deleteFunction( void *data ){
+	assert( data );
+
+	Memory_Free( data );
+}
+
+void printFunction( void *data, void *stream ){
+	
+	assert( data );
+	assert( stream );
+
+	Journal_Printf( (Stream*)stream, "\t\t%s", (void*)data );
+}
+
+void ptrPrintFunction( void *data, void *stream ){
+	
+	assert( data );
+	assert( stream );
+
+	Journal_Printf( (Stream*)stream, "\t\t(ptr)%p\n", (void*)data );
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	HashTable		*table;
+	HashTable		*ptrTable;
+	Stream *myStream = 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		FILE *dataFile = NULL;
+		char buffer[512];
+		int result = 0;
+		int sum = 0;
+		int count = 0;
+		char *data = NULL;
+		char *searchResult = NULL;
+		void *dataRefs[200];
+		
+		myStream = Journal_Register( InfoStream_Type, "hashTableStream" );
+
+		table = HashTable_New( NULL, printFunction, NULL, HASHTABLE_STRING_KEY );
+		
+		Journal_Printf( myStream, "Testing hash table with string keys..\n\n" );
+		Journal_Printf( myStream, "Inserting data into the hash table\n\n" );
+		
+		dataFile = fopen( "dictionary.txt", "r+" );
+		memset( buffer, 0, sizeof( buffer ) );
+		while( (fgets( buffer, sizeof(buffer), dataFile ) != NULL) ){
+			data = StG_Strdup(buffer);
+			result = HashTable_InsertEntry( table, (void*)data, strlen(buffer), (void*)data, strlen(buffer));
+			if( result > 1 ){
+				Journal_Printf( myStream, "Incurred %d collisions while inserting %s", result, buffer );
+			}
+			sum += result;
+			memset( buffer, 0, sizeof( buffer ) );
+		}
+		fclose( dataFile );
+		
+		Journal_Printf( myStream, "Successfully inserted %d items into the table\n\n", table->count );
+
+		if( sum == table->count ){
+			Journal_Printf( myStream, "0 collisions\n\n" );
+		}
+		
+		Journal_Printf( myStream, "Printing the hash table\n\n" );
+		Print( table, myStream );
+
+		Journal_Printf( myStream, "Searching for items in the table:\n\n" );
+		
+		dataFile = fopen( "dictionary.txt", "r+" );
+		memset( buffer, 0, sizeof( buffer ) );
+		count = 0;
+		while( (fgets( buffer, sizeof(buffer), dataFile ) != NULL) ){
+			searchResult = (char*)HashTable_FindEntry( table, (void*)buffer, strlen(buffer), char* );
+			assert( searchResult );
+			if( !strcmp( buffer, searchResult ) ){
+				searchResult[strlen(searchResult)-1] = '\0';
+				Journal_Printf( myStream, "Looking for %s, ...found\n", searchResult );
+			}
+			else{
+				Journal_Printf( myStream, "item not found..!!\n" );
+			}
+			memset( buffer, 0, sizeof( buffer ) );
+			count++;
+		}
+		fclose( dataFile );
+	
+		Journal_Printf( myStream, "\nDeleting the Table\n\n" );
+		Stg_Class_Delete( table );
+		
+		ptrTable = HashTable_New( NULL, ptrPrintFunction, NULL, HASHTABLE_POINTER_KEY );
+		
+		Journal_Printf( myStream, "Testing hash table with pointer keys..\n\n" );
+		Journal_Printf( myStream, "Inserting data into the hash table\n\n" );
+		
+		dataFile = fopen( "dictionary.txt", "r+" );
+		memset( buffer, 0, sizeof( buffer ) );
+		count = 0;
+		while( (fgets( buffer, sizeof(buffer), dataFile ) != NULL) ){
+			data = StG_Strdup(buffer);
+			result = HashTable_InsertEntry( ptrTable, (void*)data, sizeof(void*), (void*)data, strlen(buffer));
+			if( result > 1 ){
+				Journal_Printf( myStream, "Incurred %d collisions while inserting (ptr)%p\n", result, data );
+			}
+			sum += result;
+			memset( buffer, 0, sizeof( buffer ) );
+			dataRefs[count++] = data;
+		}
+		fclose( dataFile );
+		
+		Journal_Printf( myStream, "Successfully inserted %d items into the table\n\n", ptrTable->count );
+
+		if( sum == ptrTable->count ){
+			Journal_Printf( myStream, "0 collisions\n\n" );
+		}
+		
+		Journal_Printf( myStream, "Printing the hash table\n\n" );
+		Print( ptrTable, myStream );
+
+		Journal_Printf( myStream, "Searching for items in the table:\n\n" );
+		
+		dataFile = fopen( "dictionary.txt", "r+" );
+		memset( buffer, 0, sizeof( buffer ) );
+		count = 0;
+		while( (fgets( buffer, sizeof(buffer), dataFile ) != NULL) ){
+			searchResult = (char*)HashTable_FindEntry( ptrTable, (void*)dataRefs[count], strlen(buffer), char* );
+			assert( searchResult );
+			if( !strcmp( buffer, searchResult ) ){
+				searchResult[strlen(searchResult)-1] = '\0';
+				Journal_Printf( myStream, "Looking for (ptr)%p, ...found\n", searchResult );
+			}
+			else{
+				Journal_Printf( myStream, "item not found..!!\n" );
+			}
+			memset( buffer, 0, sizeof( buffer ) );
+			count++;
+		}
+		fclose( dataFile );
+	
+		Journal_Printf( myStream, "\nDeleting the Table\n" );
+		Stg_Class_Delete( ptrTable );
+	}
+
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,101 @@
+List Data:
+	looking for 1, found 100
+	looking for 2, found 99
+	looking for 3, found 98
+	looking for 4, found 97
+	looking for 5, found 96
+	looking for 6, found 95
+	looking for 7, found 94
+	looking for 8, found 93
+	looking for 9, found 92
+	looking for 10, found 91
+	looking for 11, found 90
+	looking for 12, found 89
+	looking for 13, found 88
+	looking for 14, found 87
+	looking for 15, found 86
+	looking for 16, found 85
+	looking for 17, found 84
+	looking for 18, found 83
+	looking for 19, found 82
+	looking for 20, found 81
+	looking for 21, found 80
+	looking for 22, found 79
+	looking for 23, found 78
+	looking for 24, found 77
+	looking for 25, found 76
+	looking for 26, found 75
+	looking for 27, found 74
+	looking for 28, found 73
+	looking for 29, found 72
+	looking for 30, found 71
+	looking for 31, found 70
+	looking for 32, found 69
+	looking for 33, found 68
+	looking for 34, found 67
+	looking for 35, found 66
+	looking for 36, found 65
+	looking for 37, found 64
+	looking for 38, found 63
+	looking for 39, found 62
+	looking for 40, found 61
+	looking for 41, found 60
+	looking for 42, found 59
+	looking for 43, found 58
+	looking for 44, found 57
+	looking for 45, found 56
+	looking for 46, found 55
+	looking for 47, found 54
+	looking for 48, found 53
+	looking for 49, found 52
+	looking for 50, found 51
+	looking for 51, found 50
+	looking for 52, found 49
+	looking for 53, found 48
+	looking for 54, found 47
+	looking for 55, found 46
+	looking for 56, found 45
+	looking for 57, found 44
+	looking for 58, found 43
+	looking for 59, found 42
+	looking for 60, found 41
+	looking for 61, found 40
+	looking for 62, found 39
+	looking for 63, found 38
+	looking for 64, found 37
+	looking for 65, found 36
+	looking for 66, found 35
+	looking for 67, found 34
+	looking for 68, found 33
+	looking for 69, found 32
+	looking for 70, found 31
+	looking for 71, found 30
+	looking for 72, found 29
+	looking for 73, found 28
+	looking for 74, found 27
+	looking for 75, found 26
+	looking for 76, found 25
+	looking for 77, found 24
+	looking for 78, found 23
+	looking for 79, found 22
+	looking for 80, found 21
+	looking for 81, found 20
+	looking for 82, found 19
+	looking for 83, found 18
+	looking for 84, found 17
+	looking for 85, found 16
+	looking for 86, found 15
+	looking for 87, found 14
+	looking for 88, found 13
+	looking for 89, found 12
+	looking for 90, found 11
+	looking for 91, found 10
+	looking for 92, found 9
+	looking for 93, found 8
+	looking for 94, found 7
+	looking for 95, found 6
+	looking for 96, found 5
+	looking for 97, found 4
+	looking for 98, found 3
+	looking for 99, found 2
+	looking for 100, found 1

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIndexMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testIndexMap.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		IndexMap*		map;
+		Index			idx;
+		Stream*			stream;
+		
+		stream = Journal_Register( Info_Type, "myStream" );
+		
+		map = IndexMap_New();
+		for( idx = 0; idx < 100; idx++ )
+			IndexMap_Append( map, idx + 1, 100 - idx );
+		
+		printf( "List Data:\n" );
+		for( idx = 0; idx < 100; idx++ )
+			printf( "\tlooking for %d, found %d\n", idx + 1, IndexMap_Find( map, idx + 1 ) );
+		
+		Stg_Class_Delete( map );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,4 @@
+Watching rank: 0
+* Test Construction *
+* Test Access(IsMember) over limit *
+Error- IndexSet_IsMember: index 24 outside current size 24. Aborting.

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIndexSet-badAccess " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testIndexSet-badAccess.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	/* Tell the Journal_Firewall to Clean exit, rather than assert */
+	Stream_SetFileBranch( Journal_GetTypedStream( ErrorStream_Type ), stJournal->stdOut );
+	stJournal->firewallProducesAssert = False;
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		IndexSet*			is;
+		
+		printf( "Watching rank: %i\n", rank );
+		
+		printf( "* Test Construction *\n" );
+		is = IndexSet_New( 24 );
+
+		printf( "* Test Access(IsMember) over limit *\n" );
+		IndexSet_IsMember( is, 24 );
+		printf( "* Shouldn't get here\n" );
+
+		Stg_Class_Delete( is );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,4 @@
+Watching rank: 0
+* Test Construction *
+* Test Insertion(Add) over limit *
+Error- IndexSet_Add: index 24 outside current size 24. Aborting.

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIndexSet-badAssign " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,92 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testIndexSet-badAssign.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	/* Tell the Journal_Firewall to Clean exit, rather than assert */
+	Stream_SetFileBranch( Journal_GetTypedStream( ErrorStream_Type ), stJournal->stdOut );
+	stJournal->firewallProducesAssert = False;
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		IndexSet*			is;
+		
+		printf( "Watching rank: %i\n", rank );
+		
+		printf( "* Test Construction *\n" );
+		is = IndexSet_New( 24 );
+		
+		printf( "* Test Insertion(Add) over limit *\n" );
+		IndexSet_Add( is, 24 );
+		printf( "* Shouldn't get here\n" );
+
+		Stg_Class_Delete( is );
+	}
+
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,67 @@
+Watching rank: 0
+* Test Construction *
+* Test Insertion(Add) *
+is->_container[0-3]: 10000001, 10000000, 00000011, 
+* Test removal *
+is->_container[0-3]: 10000001, 10000000, 00000001, 
+* Test IsMember *
+Index: 0, Is member: yes
+Index: 1, Is member: no
+Index: 2, Is member: no
+Index: 3, Is member: no
+Index: 4, Is member: no
+Index: 5, Is member: no
+Index: 6, Is member: no
+Index: 7, Is member: yes
+Index: 8, Is member: yes
+Index: 9, Is member: no
+Index: 10, Is member: no
+Index: 11, Is member: no
+Index: 12, Is member: no
+Index: 13, Is member: no
+Index: 14, Is member: no
+Index: 15, Is member: no
+Index: 16, Is member: no
+Index: 17, Is member: no
+Index: 18, Is member: no
+Index: 19, Is member: no
+Index: 20, Is member: no
+Index: 21, Is member: no
+Index: 22, Is member: no
+Index: 23, Is member: yes
+* Test UpdateMembersCount *
+Members count is now 4
+* Test GetIndexOfNthMember 0*
+Index of member 0=0
+* Test GetIndexOfNthMember 1*
+Index of member 1=7
+* Test GetIndexOfNthMember 2*
+Index of member 2=8
+* Test GetIndexOfNthMember 3*
+Index of member 3=23
+* Test GetIndexOfNthMember 4*
+Index of member 4=24 (invalid)
+* Test GetMembers 1*
+setArray[0-4]: 0, 7, 8, 23, 
+* Test GetMembers 2*
+setArray[0-4]: 0, 7, 8, 23, 
+* Test GetVacancies 1*
+setArray[0-20]: 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 
+* Test GetVacancies 2*
+setArray[0-20]: 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 
+* Test AddAll *
+is->_container[0-3]: 11111111, 11111111, 11111111, 
+* Test RemoveAll *
+is->_container[0-3]: 00000000, 00000000, 00000000, 
+* Test Duplicate *
+* Test Merge_OR *
+Pre_Merge
+is->_container[0-3]: 10000001, 00000000, 00000000, 
+is->_container[0-3]: 00000001, 10000000, 00000010, 
+Post_Merge
+is->_container[0-3]: 10000001, 10000000, 00000010, 
+is->_container[0-3]: 00000001, 10000000, 00000010, 
+Test GetMembers again
+setArray[0-4]: 0, 7, 8, 22, 
+Final remove then GetMembers test
+setArray[0-3]: 0, 8, 22, 

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIndexSet " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,194 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testIndexSet.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+void Print_Container( IndexSet* is ) {
+	unsigned int i;
+
+	printf( "is->_container[0-%lu]: ", is->_containerSize );
+	for( i = 0; i < is->_containerSize; i++ ) {
+		printf( "%u%u%u%u%u%u%u%u, ", is->_container[i] & 0x01 ? 1 : 0, is->_container[i] & 0x02 ? 1 : 0, is->_container[i] & 0x04 ? 1 : 0, is->_container[i] & 0x08 ? 1 : 0, is->_container[i] & 0x10 ? 1 : 0, is->_container[i] & 0x20 ? 1 : 0, is->_container[i] & 0x40 ? 1 : 0, is->_container[i] & 0x80 ? 1 : 0 );
+	}
+	printf( "\n" );
+}	
+
+
+void Print_Member_List( Index* setArray, unsigned int setArraySize ) {
+	int j;
+
+	printf( "setArray[0-%u]: ", setArraySize );
+	for( j = 0; j < setArraySize; j++ ) {
+		printf( "%u, ", setArray[j] );
+	}
+	printf( "\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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		IndexSet*			is;
+		IndexSet*			is2;
+		unsigned int			i;
+		IndexSet_Index 			index;
+		Index*				setArray;
+		unsigned int			setArraySize;
+		
+		printf( "Watching rank: %i\n", rank );
+		
+		printf( "* Test Construction *\n" );
+		is = IndexSet_New( 24 );
+		
+		printf( "* Test Insertion(Add) *\n" );
+		IndexSet_Add( is, 0 );
+		IndexSet_Add( is, 7 );
+		IndexSet_Add( is, 8 );
+		IndexSet_Add( is, 22 );
+		IndexSet_Add( is, 23 );
+		Print_Container( is );
+		
+		printf( "* Test removal *\n" );
+		IndexSet_Remove( is, 1 );
+		IndexSet_Remove( is, 22 );
+		Print_Container( is );
+		
+		printf( "* Test IsMember *\n" );
+		for( i = 0; i < is->size; i++ ){
+			if( IndexSet_IsMember( is, i ) ) {
+				printf( "Index: %u, Is member: yes\n", i );
+			}
+			else {
+				printf( "Index: %u, Is member: no\n", i );
+			}
+		}
+		
+		printf( "* Test UpdateMembersCount *\n" );
+		IndexSet_UpdateMembersCount( is );
+		printf( "Members count is now %d\n", is->membersCount );
+
+		for( i = 0; i <= is->membersCount; i++ ){
+			printf( "* Test GetIndexOfNthMember %d*\n", i );
+			index = IndexSet_GetIndexOfNthMember( is, i );
+			printf( "Index of member %d=%d", i, index );
+			if ( IndexSet_Invalid(is) == index ) {
+				printf(" (invalid)");
+			}
+			printf("\n");
+		}
+
+		for (i=1; i <= 2; i++ ) {	
+			printf( "* Test GetMembers %d*\n", i );
+			IndexSet_GetMembers( is, &setArraySize, &setArray );
+			Print_Member_List( setArray, setArraySize );
+			Memory_Free( setArray );
+		}	
+		
+		for (i=1; i <= 2; i++ ) {	
+			printf( "* Test GetVacancies %d*\n", i );
+			IndexSet_GetVacancies( is, &setArraySize, &setArray );
+			Print_Member_List( setArray, setArraySize );
+			Memory_Free( setArray );
+		}	
+
+		printf( "* Test AddAll *\n" );
+		IndexSet_AddAll( is );
+		Print_Container( is );
+		printf( "* Test RemoveAll *\n" );
+		IndexSet_RemoveAll( is );
+		Print_Container( is );
+		printf( "* Test Duplicate *\n" );
+		is2 = IndexSet_Duplicate( is );
+		printf( "* Test Merge_OR *\n" );
+		IndexSet_Add( is, 0 );
+		IndexSet_Add( is, 7 );
+		IndexSet_Add( is2, 7 );
+		IndexSet_Add( is2, 8 );
+		IndexSet_Add( is2, 22 );
+		printf( "Pre_Merge\n" );
+		Print_Container( is );
+		Print_Container( is2 );
+		IndexSet_Merge_OR( is, is2 );
+		printf( "Post_Merge\n" );
+		Print_Container( is );
+		Print_Container( is2 );
+		printf( "Test GetMembers again\n" );
+		IndexSet_GetMembers( is, &setArraySize, &setArray );
+		Print_Member_List( setArray, setArraySize );
+		Memory_Free( setArray );
+		printf( "Final remove then GetMembers test\n" );
+		IndexSet_Remove( is, 7 );
+		IndexSet_GetMembers( is, &setArraySize, &setArray );
+		Print_Member_List( setArray, setArraySize );
+		Memory_Free( setArray );
+
+		Stg_Class_Delete( is );
+		Stg_Class_Delete( is2 );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,250 @@
+Inserting data into the List
+
+Printing the list
+Stg_Class (ptr): 0x806b498
+	sizeOfSelf: 52
+	_deleteSelf: Yes
+	type: LinkedList
+	_delete (func ptr): 0x8058ff5
+	_print (func ptr): 0x8058eb0
+	_copy (func ptr): (nil)
+LinkedList (ptr): (0x806b498)
+	NodeCount		 - 100
+	LinkedList Order	 - UNSORTED
+	LinkedList data	 - 
+	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
+	44
+	45
+	46
+	47
+	48
+	49
+	50
+	51
+	52
+	53
+	54
+	55
+	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
+
+Deleting half the nodes previously inserted into the list
+
+Printing the list
+Stg_Class (ptr): 0x806b498
+	sizeOfSelf: 52
+	_deleteSelf: Yes
+	type: LinkedList
+	_delete (func ptr): 0x8058ff5
+	_print (func ptr): 0x8058eb0
+	_copy (func ptr): (nil)
+LinkedList (ptr): (0x806b498)
+	NodeCount		 - 50
+	LinkedList Order	 - UNSORTED
+	LinkedList data	 - 
+	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
+	44
+	45
+	46
+	47
+	48
+	49
+	50
+
+Retrieving the data held in the list as an array
+
+Printing the array just retrieved
+arrayData - 1
+arrayData - 2
+arrayData - 3
+arrayData - 4
+arrayData - 5
+arrayData - 6
+arrayData - 7
+arrayData - 8
+arrayData - 9
+arrayData - 10
+arrayData - 11
+arrayData - 12
+arrayData - 13
+arrayData - 14
+arrayData - 15
+arrayData - 16
+arrayData - 17
+arrayData - 18
+arrayData - 19
+arrayData - 20
+arrayData - 21
+arrayData - 22
+arrayData - 23
+arrayData - 24
+arrayData - 25
+arrayData - 26
+arrayData - 27
+arrayData - 28
+arrayData - 29
+arrayData - 30
+arrayData - 31
+arrayData - 32
+arrayData - 33
+arrayData - 34
+arrayData - 35
+arrayData - 36
+arrayData - 37
+arrayData - 38
+arrayData - 39
+arrayData - 40
+arrayData - 41
+arrayData - 42
+arrayData - 43
+arrayData - 44
+arrayData - 45
+arrayData - 46
+arrayData - 47
+arrayData - 48
+arrayData - 49
+arrayData - 50
+
+Searching for Node data in the list
+Looking for - 1, Found..
+Looking for - 3, Found..
+Looking for - 5, Found..
+Looking for - 7, Found..
+Looking for - 9, Found..
+Looking for - 11, Found..
+Looking for - 13, Found..
+Looking for - 15, Found..
+Looking for - 17, Found..
+Looking for - 19, Found..
+Looking for - 21, Found..
+Looking for - 23, Found..
+Looking for - 25, Found..
+
+Deleting the List

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLinkedList " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,178 @@
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLinkedList.c 2136 2005-02-28 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define NUM_DATA 100
+
+int compareFunction(void *data1, void *data2)
+{
+	int *d1 = NULL, *d2 = NULL;
+
+	d1 = (int*)data1;
+	d2 = (int*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+	
+	if (*d1 > *d2){
+		return  1;
+	}
+	else if (*d1 == *d2){
+		return 0;
+	}
+	else{
+		return -1;
+	}
+}
+
+void dataPrintFunction( void *nodeData, void *args )
+{
+	Stream *myStream = NULL;
+	
+	assert (nodeData);
+	myStream = Journal_Register( InfoStream_Type, "LinkedListStream" );
+
+	Journal_Printf( myStream, "\t%d\n", *(int*)nodeData );
+}
+
+void dataCopyFunction( void **nodeData, void *newData, SizeT dataSize)
+{
+	*nodeData = Memory_Alloc_Bytes_Unnamed(dataSize, char);
+	memset(*nodeData, 0, dataSize);
+
+	memcpy(*nodeData, newData, dataSize);
+}
+	
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	
+	LinkedList *numList = NULL;
+	int i = 0;
+	int *array[NUM_DATA] = {0};
+	int *data;
+	int *result = NULL;
+	float randomNum, randomMax;
+	Stream *myStream = 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		
+		myStream = Journal_Register( InfoStream_Type, "LinkedListStream" );
+		numList = LinkedList_New(
+					compareFunction,
+					dataCopyFunction,
+					dataPrintFunction,
+					NULL,
+					LINKEDLIST_UNSORTED);
+
+		Journal_Printf( myStream, "Inserting data into the List\n");
+		
+		for(i=0; i<NUM_DATA; i++){
+			array[i] = Memory_Alloc(int, "TestLinkedList_ArrayEntry");
+			randomNum = rand();
+			randomMax = RAND_MAX;
+			*array[i] = NUM_DATA - i;
+			LinkedList_InsertNode(numList, (void*)array[i], sizeof(int));
+		}
+	
+		Journal_Printf(myStream, "\nPrinting the list\n");
+		Print( (void*)numList, myStream );
+		
+		Journal_Printf(myStream, "\nDeleting half the nodes previously inserted into the list\n");
+		for(i=0; i<NUM_DATA/2; i++){
+			LinkedList_DeleteNode(numList, (void*)array[i]);
+		}
+		
+		Journal_Printf(myStream, "\nPrinting the list\n");
+		Print( (void*)numList, myStream );
+		
+
+		Journal_Printf(myStream, "\nRetrieving the data held in the list as an array\n");
+		data = LinkedList_ReturnArray(numList, int);
+
+		Journal_Printf(myStream, "\nPrinting the array just retrieved\n");
+		for(i=0; i<numList->nodeCount; i++){
+			printf ("arrayData - %d\n", data[i]);
+		}
+	
+		Journal_Printf( myStream, "\nSearching for Node data in the list\n" );
+		for(i=0; i<NUM_DATA/4; i++){
+			i = data[i];
+			if ((result = LinkedList_FindNodeData(numList, &i, int)) != NULL){
+				printf ("Looking for - %d, Found..\n", *result);
+			}
+			else{
+				printf ("Failed to find.. %d\n", i);
+			}
+		}
+	}
+
+	Journal_Printf( myStream, "\nDeleting the List\n" );
+	Stg_Class_Delete( (void*)numList );
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,118 @@
+Inserting data into the List
+
+Printing the list
+Stg_Class (ptr): 0x80cc3cc
+	sizeOfSelf: 52
+	_deleteSelf: Yes
+	type: LinkedList
+	_delete (func ptr): 0x805be4d
+	_print (func ptr): 0x805bd08
+	_copy (func ptr): (nil)
+LinkedList (ptr): (0x80cc3cc)
+	NodeCount		 - 100
+	LinkedList Order	 - UNSORTED
+	LinkedList data	 - 
+	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
+	44
+	45
+	46
+	47
+	48
+	49
+	50
+	51
+	52
+	53
+	54
+	55
+	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
+Calculating sum.. 
+	sum = 25502500.000000
+
+Deleting the List

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLinkedListIterator " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,165 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLinkedListIterator.c 2136 2005-02-28 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define NUM_DATA 100
+
+int compareFunction(void *data1, void *data2)
+{
+	int *d1 = NULL, *d2 = NULL;
+
+	d1 = (int*)data1;
+	d2 = (int*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+	
+	if (*d1 > *d2){
+		return  1;
+	}
+	else if (*d1 == *d2){
+		return 0;
+	}
+	else{
+		return -1;
+	}
+}
+
+void dataPrintFunction( void *nodeData, void *args )
+{
+	Stream *myStream = NULL;
+	
+	assert (nodeData);
+	myStream = Journal_Register( InfoStream_Type, "LinkedListStream" );
+
+	Journal_Printf( myStream, "\t%d\n", *(int*)nodeData );
+}
+
+void dataCopyFunction( void **nodeData, void *newData, SizeT dataSize)
+{
+	*nodeData = Memory_Alloc_Bytes_Unnamed(dataSize, char);
+	memset(*nodeData, 0, dataSize);
+
+	memcpy(*nodeData, newData, dataSize);
+}
+	
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	
+	LinkedList *numList = NULL;
+	LinkedListIterator *iterator = NULL;
+	LinkedListIterator *iterator1 = NULL;
+	int i = 0;
+	int *array[NUM_DATA] = {0};
+	void *result = NULL, *result1 = NULL;
+	double sum;
+	float randomNum, randomMax;
+	Stream *myStream = 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		
+		myStream = Journal_Register( InfoStream_Type, "LinkedListStream" );
+		numList = LinkedList_New(
+					compareFunction,
+					dataCopyFunction,
+					dataPrintFunction,
+					NULL,
+					LINKEDLIST_UNSORTED);
+		
+		iterator = LinkedListIterator_New( numList );
+		iterator1 = LinkedListIterator_New( numList );
+		
+		Journal_Printf( myStream, "Inserting data into the List\n");
+		
+		for(i=0; i<NUM_DATA; i++){
+			array[i] = Memory_Alloc(int, "testLinkedListIterator_ArrayEntry");
+			randomNum = rand();
+			randomMax = RAND_MAX;
+			*array[i] = NUM_DATA - i;
+			LinkedList_InsertNode(numList, (void*)array[i], sizeof(int));
+		}
+	
+		Journal_Printf(myStream, "\nPrinting the list\n");
+		Print( (void*)numList, myStream );
+		
+		Journal_Printf( myStream, "Calculating sum.. \n");
+		sum = 0;
+		for( result = LinkedListIterator_First( iterator ); result; result = LinkedListIterator_Next( iterator ) ){
+			for( result1 = LinkedListIterator_First( iterator1 ); result1; result1 = LinkedListIterator_Next( iterator1 ) ){
+				sum += (double)(*(int*)result) * (*(int*)result1);
+			}
+		}
+		Journal_Printf( myStream, "\tsum = %lf\n", sum );
+	}
+
+	Journal_Printf( myStream, "\nDeleting the List\n" );
+	Stg_Class_Delete( (void*)numList );
+	//Adding because it seems missing ,though probably isn't
+        for(i=0; i<NUM_DATA; i++)
+          Memory_Free(array[i]);
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,114 @@
+Stg_Class (ptr): 0x806a478
+	sizeOfSelf: 52
+	_deleteSelf: Yes
+	type: List
+	_delete (func ptr): 0x805787d
+	_print (func ptr): 0x80578bd
+	_copy (func ptr): (nil)
+List (ptr): (0x806a478)
+	elementSize: 4
+	delta: 10
+	maxElements: 100
+	elementCnt: 100
+	elements (ptr): 0x806a4b0
+List Data:
+	elements[0]: 100
+	elements[1]: 99
+	elements[2]: 98
+	elements[3]: 97
+	elements[4]: 96
+	elements[5]: 95
+	elements[6]: 94
+	elements[7]: 93
+	elements[8]: 92
+	elements[9]: 91
+	elements[10]: 90
+	elements[11]: 89
+	elements[12]: 88
+	elements[13]: 87
+	elements[14]: 86
+	elements[15]: 85
+	elements[16]: 84
+	elements[17]: 83
+	elements[18]: 82
+	elements[19]: 81
+	elements[20]: 80
+	elements[21]: 79
+	elements[22]: 78
+	elements[23]: 77
+	elements[24]: 76
+	elements[25]: 75
+	elements[26]: 74
+	elements[27]: 73
+	elements[28]: 72
+	elements[29]: 71
+	elements[30]: 70
+	elements[31]: 69
+	elements[32]: 68
+	elements[33]: 67
+	elements[34]: 66
+	elements[35]: 65
+	elements[36]: 64
+	elements[37]: 63
+	elements[38]: 62
+	elements[39]: 61
+	elements[40]: 60
+	elements[41]: 59
+	elements[42]: 58
+	elements[43]: 57
+	elements[44]: 56
+	elements[45]: 55
+	elements[46]: 54
+	elements[47]: 53
+	elements[48]: 52
+	elements[49]: 51
+	elements[50]: 50
+	elements[51]: 49
+	elements[52]: 48
+	elements[53]: 47
+	elements[54]: 46
+	elements[55]: 45
+	elements[56]: 44
+	elements[57]: 43
+	elements[58]: 42
+	elements[59]: 41
+	elements[60]: 40
+	elements[61]: 39
+	elements[62]: 38
+	elements[63]: 37
+	elements[64]: 36
+	elements[65]: 35
+	elements[66]: 34
+	elements[67]: 33
+	elements[68]: 32
+	elements[69]: 31
+	elements[70]: 30
+	elements[71]: 29
+	elements[72]: 28
+	elements[73]: 27
+	elements[74]: 26
+	elements[75]: 25
+	elements[76]: 24
+	elements[77]: 23
+	elements[78]: 22
+	elements[79]: 21
+	elements[80]: 20
+	elements[81]: 19
+	elements[82]: 18
+	elements[83]: 17
+	elements[84]: 16
+	elements[85]: 15
+	elements[86]: 14
+	elements[87]: 13
+	elements[88]: 12
+	elements[89]: 11
+	elements[90]: 10
+	elements[91]: 9
+	elements[92]: 8
+	elements[93]: 7
+	elements[94]: 6
+	elements[95]: 5
+	elements[96]: 4
+	elements[97]: 3
+	elements[98]: 2
+	elements[99]: 1

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testList " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testList.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		List*			list;
+		Index			idx;
+		Stream*			stream;
+		
+		stream = Journal_Register( Info_Type, "myStream" );
+		
+		list = List_New( sizeof(unsigned) );
+		for( idx = 0; idx < 100; idx++ ) {
+			List_Resize( list, List_Size( list ) + 1 );
+			List_ElementAt( list, unsigned, idx ) = 100 - idx;
+		}
+		
+		Print( list, stream );
+		
+		printf( "List Data:\n" );
+		for( idx = 0; idx < 100; idx++ )
+			printf( "\telements[%d]: %d\n", idx, List_ElementAt( list, unsigned, idx ) );
+		
+		Stg_Class_Delete( list );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+Testing array broadcast... passed
+Testing array conversion... passed
+Testing array gather... passed
+Testing array gather to all... passed
+Testing array all to all... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+Testing array broadcast... passed
+Testing array conversion... passed
+Testing array gather... passed
+Testing array gather to all... passed
+Testing array all to all... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+Testing array broadcast... passed
+Testing array conversion... passed
+Testing array gather... passed
+Testing array gather to all... passed
+Testing array all to all... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+Testing array broadcast... passed
+Testing array conversion... passed
+Testing array gather... passed
+Testing array gather to all... passed
+Testing array all to all... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+Testing array broadcast... passed
+Testing array conversion... passed
+Testing array gather... passed
+Testing array gather to all... passed
+Testing array all to all... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+Testing array broadcast... passed
+Testing array conversion... passed
+Testing array gather... passed
+Testing array gather to all... passed
+Testing array all to all... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,305 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testMPIRoutines.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+
+Bool testBcast( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testArrayConv( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testGather( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testAllgather( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testAlltoall( unsigned rank, unsigned nProcs, unsigned watch );
+
+int main( int argc, char* argv[] ) {
+	unsigned	rank;
+	unsigned	nProcs;
+	unsigned	watch;
+	Bool		result;
+
+	/* Initialise MPI, get world info. */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, (int*)&nProcs );
+	MPI_Comm_rank( MPI_COMM_WORLD, (int*)&rank );
+
+	/* Initialise StGermain. */
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	/* Watching a particular processor? */
+	watch = (argc >= 2) ? atoi( argv[1] ) : 0;
+
+	/* Run some tests. */
+	result = testBcast( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array broadcast... %s\n", result ? "passed" : "failed" );
+
+	result = testArrayConv( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array conversion... %s\n", result ? "passed" : "failed" );
+
+	result = testGather( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array gather... %s\n", result ? "passed" : "failed" );
+
+	result = testAllgather( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array gather to all... %s\n", result ? "passed" : "failed" );
+
+	result = testAlltoall( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array all to all... %s\n", result ? "passed" : "failed" );
+
+	/* Finalise StGermain. */
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return MPI_SUCCESS;
+}
+
+Bool testArrayConv( unsigned rank, unsigned nProcs, unsigned watch ) {
+	if( rank == watch ) {
+		unsigned	nBlocks = 3;
+		unsigned	sizes[3] = {2, 4, 1};
+		unsigned	src[7] = {0, 1, 2, 3, 4, 5, 6};
+		unsigned**	dst2D;
+		unsigned*	dst1D;
+		unsigned*	disps;
+
+		Array_1DTo2D( nBlocks, sizes, src, (void***)&dst2D, sizeof(unsigned) );
+		if( dst2D[0][0] != 0 || dst2D[0][1] != 1 || 
+		    dst2D[1][0] != 2 || dst2D[1][1] != 3 || dst2D[1][2] != 4 || dst2D[1][3] != 5 || 
+		    dst2D[2][0] != 6 )
+		{
+			FreeArray( dst2D );
+			return False;
+		}
+
+		Array_2DTo1D( nBlocks, sizes, (void**)dst2D, (void*)&dst1D, sizeof(unsigned), &disps );
+		if( dst1D[0] != 0 || dst1D[1] != 1 || dst1D[2] != 2 || dst1D[3] != 3 || 
+		    dst1D[4] != 4 || dst1D[5] != 5 || dst1D[6] != 6 || 
+		    disps[0] != 0 || disps[1] != 2 || disps[2] != 6 )
+		{
+			FreeArray( dst2D );
+			FreeArray( dst1D );
+			FreeArray( disps );
+			return False;
+		}
+
+		FreeArray( dst2D );
+		FreeArray( dst1D );
+		FreeArray( disps );
+
+		sizes[1] = 0;
+		Array_1DTo2D( nBlocks, sizes, src, (void***)&dst2D, sizeof(unsigned) );
+		if( dst2D[0][0] != 0 || dst2D[0][1] != 1 || 
+		    dst2D[2][0] != 2 )
+		{
+			FreeArray( dst2D );
+			return False;
+		}
+
+		Array_2DTo1D( nBlocks, sizes, (void**)dst2D, (void*)&dst1D, sizeof(unsigned), &disps );
+		if( dst1D[0] != 0 || dst1D[1] != 1 || dst1D[2] != 2 || 
+		    disps[0] != 0 || disps[1] != 2 || disps[2] != 2 )
+		{
+			FreeArray( dst2D );
+			FreeArray( dst1D );
+			FreeArray( disps );
+			return False;
+		}
+
+		FreeArray( dst2D );
+		FreeArray( dst1D );
+		FreeArray( disps );
+	}
+
+	return True;
+}
+
+void fillArray( unsigned* array, unsigned size, unsigned rank ) {
+	unsigned	i;
+
+	for( i = 0; i < size; i++ )
+		array[i] = rank * size + i;
+}
+
+Bool testBcast( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	size = 200;
+	unsigned*	src;
+
+	if( rank == 0 ) {
+		src = Memory_Alloc_Array_Unnamed( unsigned, size );
+		fillArray( src, size, rank );
+	}
+
+	MPIArray_Bcast( &size, (void**)&src, sizeof(unsigned), 
+			0, MPI_COMM_WORLD );
+
+	if( rank == watch ) {
+		unsigned	i;
+
+		for( i = 0; i < size; i++ )
+			if( src[i] != i ) break;
+		if( i < size ) {
+			if( rank != 0 )
+				FreeArray( src );
+			return False;
+		}
+	}
+
+	if( rank != 0 )
+		FreeArray( src );
+
+	return True;
+}
+
+Bool testGather( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	size = 200;
+	unsigned	src[200];
+	unsigned*	dstSizes;
+	unsigned**	dstArrays;
+
+	fillArray( src, size, rank );
+	MPIArray_Gather( size, src, &dstSizes, (void***)&dstArrays, sizeof(unsigned), watch, MPI_COMM_WORLD );
+	if( rank == watch ) {
+		unsigned	 i;
+
+		for( i = 0; i < nProcs; i++ )
+			if( dstSizes[i] != size ) break;
+		if( i < nProcs ) {
+			FreeArray( dstSizes );
+			FreeArray( dstArrays );
+			return False;
+		}
+
+		for( i = 0; i < nProcs; i++ ) {
+			unsigned	j;
+
+			for( j = 0; j < size; j++ )
+				if( dstArrays[i][j] != i * size + j ) break;
+			if( j < size ) break;
+		}
+		if( i < nProcs ) {
+			FreeArray( dstSizes );
+			FreeArray( dstArrays );
+			return False;
+		}
+
+		FreeArray( dstSizes );
+		FreeArray( dstArrays );
+	}
+
+	return True;
+}
+
+Bool testAllgather( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	size = 200;
+	unsigned	src[200];
+	unsigned*	dstSizes;
+	unsigned**	dstArrays;
+
+	fillArray( src, size, rank );
+	MPIArray_Allgather( size, src, &dstSizes, (void***)&dstArrays, sizeof(unsigned), MPI_COMM_WORLD );
+	if( rank == watch ) {
+		unsigned	 i;
+
+		for( i = 0; i < nProcs; i++ )
+			if( dstSizes[i] != size ) break;
+		if( i < nProcs ) {
+			FreeArray( dstSizes );
+			FreeArray( dstArrays );
+			return False;
+		}
+
+		for( i = 0; i < nProcs; i++ ) {
+			unsigned	j;
+
+			if( !dstArrays[i] ) break;
+			for( j = 0; j < size; j++ )
+				if( dstArrays[i][j] != size * i + j ) break;
+			if( j < size ) break;
+		}
+		if( i < nProcs ) {
+			FreeArray( dstSizes );
+			FreeArray( dstArrays );
+			return False;
+		}
+	}
+
+	FreeArray( dstSizes );
+	FreeArray( dstArrays );
+
+	return True;
+}
+
+Bool testAlltoall( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned*	srcSizes;
+	unsigned**	srcArrays;
+	unsigned*	dstSizes;
+	unsigned**	dstArrays;
+	unsigned	i;
+
+	srcSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+	srcArrays = Memory_Alloc_2DArray_Unnamed( unsigned, nProcs, 1 );
+	for( i = 0; i < nProcs; i++ ) {
+		srcSizes[i] = 1;
+		srcArrays[i][0] = i;
+	}
+
+	MPIArray2D_Alltoall( srcSizes, (void**)srcArrays, &dstSizes, (void***)&dstArrays, sizeof(unsigned), MPI_COMM_WORLD );
+	FreeArray( srcSizes );
+	FreeArray( srcArrays );
+	if( rank == watch ) {
+		for( i = 0; i < nProcs; i++ )
+			if( dstSizes[i] != 1 || dstArrays[i][0] != rank ) break;
+		if( i < nProcs ) {
+			FreeArray( dstSizes );
+			FreeArray( dstArrays );
+			return False;
+		}
+	}
+
+	FreeArray( dstSizes );
+	FreeArray( dstArrays );
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testMap.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+int mapCompareFunc( void* left, void* right ) {
+	return strcmp( ((MapTuple*)left)->keyData, ((MapTuple*)right)->keyData );
+}
+
+
+void mapCopyFunc( void** newData, void* data, SizeT size ) {
+	*newData = Memory_Alloc_Bytes_Unnamed( size , char);
+	/* TODO: convert to journal */
+	assert( *newData );
+
+	(*(MapTuple**)newData)->keyData = Memory_Alloc_Bytes_Unnamed( strlen( ((MapTuple*)data)->keyData ) + 1 , char);
+	strcpy( (*(MapTuple**)newData)->keyData, ((MapTuple*)data)->keyData );
+
+	(*(MapTuple**)newData)->valueData = Memory_Alloc( int, "MapTuple_newData->valueData" );
+	*(int*)(*(MapTuple**)newData)->valueData = *(int*)((MapTuple*)data)->valueData;
+}
+
+
+void mapDeleteFunc( void* data ) {
+	/* TODO: convert to journal */
+	assert( data );
+	Memory_Free( ((MapTuple*)data)->keyData );
+	Memory_Free( ((MapTuple*)data)->valueData );
+	Memory_Free( data );
+}
+
+
+void printMap( void* data, void* args ) {
+	printf( "(%s, %d)\n", (char*)((MapTuple*)data)->keyData, *(int*)((MapTuple*)data)->valueData );
+}
+
+
+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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		Map*		mapA;
+		Map*		mapB;
+		Map*		mapC;
+		unsigned	int_I;
+		unsigned*	valData;
+		char*		months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "Decemeber" };
+
+		mapA = Map_New( NULL, char*, int, mapCompareFunc, mapCopyFunc, mapDeleteFunc );
+		mapB = Map_New( NULL, char*, int, mapCompareFunc, mapCopyFunc, mapDeleteFunc );
+
+		for( int_I = 0; int_I < 7; int_I++ ) {
+			Map_Insert( mapA, months[int_I], &int_I );
+		}
+
+		for( int_I = 5; int_I < 12; int_I++ ) {
+			Map_Insert( mapB, months[int_I], &int_I );
+		}
+
+		mapC = Map_Union( mapA, mapB );
+		Map_Traverse( mapC, printMap, NULL );
+
+		valData = Map_Find( mapC, months[0] );
+		printf( "%d\n", *valData );
+		valData = Map_Find( mapC, months[3] );
+		printf( "%d\n", *valData );
+
+		Stg_Class_Delete( mapA );
+		Stg_Class_Delete( mapB );
+		Stg_Class_Delete( mapC );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,150 @@
+
+Creating the Heap
+
+Printing the Heap
+Stg_Class (ptr): 0x602b58
+	sizeOfSelf: 64
+	_deleteSelf: Yes
+	type: MaxHeap
+	_delete (func ptr): 0x48ce8
+	_print (func ptr): 0x48d64
+	_copy (func ptr): 0x0
+Heap (ptr): (0x602b58)
+Heap Elements	50
+Array Elements	50
+Key Length    	4
+MaxHeap (ptr): (0x602b58)
+
+Inserting more entries into the Heap
+
+Printing the Heap
+Stg_Class (ptr): 0x602b58
+	sizeOfSelf: 64
+	_deleteSelf: Yes
+	type: MaxHeap
+	_delete (func ptr): 0x48ce8
+	_print (func ptr): 0x48d64
+	_copy (func ptr): 0x0
+Heap (ptr): (0x602b58)
+Heap Elements	100
+Array Elements	100
+Key Length    	4
+MaxHeap (ptr): (0x602b58)
+
+Extracting all the entries in the Heap
+Heap Max 99
+Heap Max 98
+Heap Max 97
+Heap Max 96
+Heap Max 95
+Heap Max 94
+Heap Max 93
+Heap Max 92
+Heap Max 91
+Heap Max 90
+Heap Max 89
+Heap Max 88
+Heap Max 87
+Heap Max 86
+Heap Max 85
+Heap Max 84
+Heap Max 83
+Heap Max 82
+Heap Max 81
+Heap Max 80
+Heap Max 79
+Heap Max 78
+Heap Max 77
+Heap Max 76
+Heap Max 75
+Heap Max 74
+Heap Max 73
+Heap Max 72
+Heap Max 71
+Heap Max 70
+Heap Max 69
+Heap Max 68
+Heap Max 67
+Heap Max 66
+Heap Max 65
+Heap Max 64
+Heap Max 63
+Heap Max 62
+Heap Max 61
+Heap Max 60
+Heap Max 59
+Heap Max 58
+Heap Max 57
+Heap Max 56
+Heap Max 55
+Heap Max 54
+Heap Max 53
+Heap Max 52
+Heap Max 51
+Heap Max 50
+Heap Max 49
+Heap Max 48
+Heap Max 47
+Heap Max 46
+Heap Max 45
+Heap Max 44
+Heap Max 43
+Heap Max 42
+Heap Max 41
+Heap Max 40
+Heap Max 39
+Heap Max 38
+Heap Max 37
+Heap Max 36
+Heap Max 35
+Heap Max 34
+Heap Max 33
+Heap Max 32
+Heap Max 31
+Heap Max 30
+Heap Max 29
+Heap Max 28
+Heap Max 27
+Heap Max 26
+Heap Max 25
+Heap Max 24
+Heap Max 23
+Heap Max 22
+Heap Max 21
+Heap Max 20
+Heap Max 19
+Heap Max 18
+Heap Max 17
+Heap Max 16
+Heap Max 15
+Heap Max 14
+Heap Max 13
+Heap Max 12
+Heap Max 11
+Heap Max 10
+Heap Max 9
+Heap Max 8
+Heap Max 7
+Heap Max 6
+Heap Max 5
+Heap Max 4
+Heap Max 3
+Heap Max 2
+Heap Max 1
+Heap Max 0
+
+Printing the Heap
+Stg_Class (ptr): 0x602b58
+	sizeOfSelf: 64
+	_deleteSelf: Yes
+	type: MaxHeap
+	_delete (func ptr): 0x48ce8
+	_print (func ptr): 0x48d64
+	_copy (func ptr): 0x0
+Heap (ptr): (0x602b58)
+Heap Elements	0
+Array Elements	100
+Key Length    	4
+MaxHeap (ptr): (0x602b58)
+
+Deleting the Heap

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMaxHeap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testLinkedList.c 2136 2005-02-28 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+
+#define NUM_DATA 100
+#define NUM_INITIAL_DATA 50
+
+int *data;
+
+int compareFunction(void *data1, void *data2)
+{
+	int *d1 = NULL, *d2 = NULL;
+
+	d1 = (int*)data1;
+	d2 = (int*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+	
+	if (*d1 > *d2){
+		return  1;
+	}
+	else if (*d1 == *d2){
+		return 0;
+	}
+	else{
+		return -1;
+	}
+}
+
+void** extendArray( int newCount, void ***array )
+{
+	assert( array );
+	//TODO Check if this is executed by creating memory
+	if( (*(int***)array = (int**)realloc(*array, newCount * sizeof( int* ))) == NULL ){
+		Journal_Firewall( 0, Journal_Register(ErrorStream_Type, "testMaxHeap"), "Memory allocation failed in '%s'!!\n Aborting..!!\n", __func__ );
+	
+	}
+	else{
+		return *array;
+	}
+
+	return NULL;
+}
+
+void keySwap( void **a, void **b )
+{
+	int *temp;
+
+	temp = (*((int**)a));
+
+	(*((int**)a)) = (*((int**)b));
+	(*((int**)b)) = temp;
+}
+	
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	int **keys;
+	
+	MaxHeap *heap;
+	int i = 0;
+	Stream *myStream = 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		
+		myStream = Journal_Register( InfoStream_Type, "LinkedListStream" );
+		data = Memory_Alloc_Array_Unnamed( int, NUM_DATA );
+		keys = Memory_Alloc_Array_Unnamed( int*, NUM_INITIAL_DATA );
+		
+		Journal_Printf( myStream, "\nCreating the Heap\n" );
+		for(i=0; i<NUM_INITIAL_DATA; i++){
+			data[i] = i;
+			keys[i] = &(data[i]);
+		}
+		
+		heap = MaxHeap_New(
+					(void**)(keys), sizeof(int),
+					NUM_INITIAL_DATA,
+					keySwap,
+					compareFunction,
+					extendArray );
+
+		Journal_Printf( myStream, "\nPrinting the Heap\n" );
+		Stg_Class_Print( heap, myStream );
+		
+		Journal_Printf( myStream, "\nInserting more entries into the Heap\n" );
+		for( i=50; i<NUM_DATA; i++ ){
+			data[i] = i;
+			MaxHeap_Insert( heap, &(data[i]) );
+		}
+		
+		Journal_Printf( myStream, "\nPrinting the Heap\n" );
+		Stg_Class_Print( heap, myStream );
+		
+		Journal_Printf( myStream, "\nExtracting all the entries in the Heap\n" );
+		for( i=0; i<NUM_DATA; i++ ){
+			printf( "Heap Max %d\n", *(int*)MaxHeap_Extract( (_Heap*)heap ) );
+		}
+		
+		Journal_Printf( myStream, "\nPrinting the Heap\n" );
+		Stg_Class_Print( heap, myStream );
+	
+		Journal_Printf( myStream, "\nDeleting the Heap\n" );
+		Stg_Class_Delete( (void*)heap );
+		
+		Memory_Free( data );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+Testing memory allocation from the Memory Pool.. Passed
+
+Testing out of memory.. Passed
+
+Testing memory deallocations.. Passed
+
+Testing illegal memory deallocations.. Passed
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemoryPool " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,143 @@
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLinkedList.c 2136 2005-02-28 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+typedef struct Plane_t{
+	double normal[3];
+	double k;
+}Plane;
+
+#define CACHE_SIZE 2000
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Plane			*planeRefs[CACHE_SIZE];
+	
+	Stream *myStream = 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		MemoryPool *pool = NULL;
+		Plane *p = NULL;
+		int i = 0, passed = 0;
+
+		pool = MemoryPool_New( Plane, CACHE_SIZE );
+		myStream = Journal_Register( InfoStream_Type, "MemoryPoolStream" );
+
+		passed = 1;
+		Journal_Printf( myStream, "Testing memory allocation from the Memory Pool.. " );
+		for( i=0; i<CACHE_SIZE; i++ ){
+			p = NULL;
+			p = MemoryPool_NewObject( Plane, pool );
+			if( !p ){
+				passed = 0;
+			}
+			else{
+				planeRefs[i] = p;
+			}
+		}
+		Journal_Printf( myStream, "%s\n", passed?"Passed\n":"Failed\n" );
+		
+		passed = 1;
+		Journal_Printf( myStream, "Testing out of memory.. " );
+		for( i=0; i<10; i++ ){
+			p = MemoryPool_NewObject( Plane, pool );
+			if( p ){
+				passed = 0;
+				break;
+			}
+		}
+		Journal_Printf( myStream, "%s\n", passed?"Passed\n":"Failed\n" );
+		
+		passed = 1;
+		Journal_Printf( myStream, "Testing memory deallocations.. " );
+		for( i=0; i<CACHE_SIZE; i++ ){
+			if(!MemoryPool_DeleteObject( pool, planeRefs[i] )){
+				passed = 0;
+				break;
+			}
+		}
+		Journal_Printf( myStream, "%s\n", passed?"Passed\n":"Failed\n" );
+		
+		passed = 1;
+		Journal_Printf( myStream, "Testing illegal memory deallocations.. " );
+		{
+			int *junkRefs[CACHE_SIZE];
+			for( i=0; i<CACHE_SIZE/4; i++ ){
+				junkRefs[i] = (int*)(junkRefs+i+1);
+				
+				if(MemoryPool_DeleteObject( pool, junkRefs[i] )){
+					passed = 0;
+					break;
+				}
+			}
+		}
+		Journal_Printf( myStream, "%s\n", passed?"Passed\n":"Failed\n" );
+	}
+
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,101 @@
+List Data:
+	looking for 0x1, found 0x64
+	looking for 0x2, found 0x63
+	looking for 0x3, found 0x62
+	looking for 0x4, found 0x61
+	looking for 0x5, found 0x60
+	looking for 0x6, found 0x5f
+	looking for 0x7, found 0x5e
+	looking for 0x8, found 0x5d
+	looking for 0x9, found 0x5c
+	looking for 0xa, found 0x5b
+	looking for 0xb, found 0x5a
+	looking for 0xc, found 0x59
+	looking for 0xd, found 0x58
+	looking for 0xe, found 0x57
+	looking for 0xf, found 0x56
+	looking for 0x10, found 0x55
+	looking for 0x11, found 0x54
+	looking for 0x12, found 0x53
+	looking for 0x13, found 0x52
+	looking for 0x14, found 0x51
+	looking for 0x15, found 0x50
+	looking for 0x16, found 0x4f
+	looking for 0x17, found 0x4e
+	looking for 0x18, found 0x4d
+	looking for 0x19, found 0x4c
+	looking for 0x1a, found 0x4b
+	looking for 0x1b, found 0x4a
+	looking for 0x1c, found 0x49
+	looking for 0x1d, found 0x48
+	looking for 0x1e, found 0x47
+	looking for 0x1f, found 0x46
+	looking for 0x20, found 0x45
+	looking for 0x21, found 0x44
+	looking for 0x22, found 0x43
+	looking for 0x23, found 0x42
+	looking for 0x24, found 0x41
+	looking for 0x25, found 0x40
+	looking for 0x26, found 0x3f
+	looking for 0x27, found 0x3e
+	looking for 0x28, found 0x3d
+	looking for 0x29, found 0x3c
+	looking for 0x2a, found 0x3b
+	looking for 0x2b, found 0x3a
+	looking for 0x2c, found 0x39
+	looking for 0x2d, found 0x38
+	looking for 0x2e, found 0x37
+	looking for 0x2f, found 0x36
+	looking for 0x30, found 0x35
+	looking for 0x31, found 0x34
+	looking for 0x32, found 0x33
+	looking for 0x33, found 0x32
+	looking for 0x34, found 0x31
+	looking for 0x35, found 0x30
+	looking for 0x36, found 0x2f
+	looking for 0x37, found 0x2e
+	looking for 0x38, found 0x2d
+	looking for 0x39, found 0x2c
+	looking for 0x3a, found 0x2b
+	looking for 0x3b, found 0x2a
+	looking for 0x3c, found 0x29
+	looking for 0x3d, found 0x28
+	looking for 0x3e, found 0x27
+	looking for 0x3f, found 0x26
+	looking for 0x40, found 0x25
+	looking for 0x41, found 0x24
+	looking for 0x42, found 0x23
+	looking for 0x43, found 0x22
+	looking for 0x44, found 0x21
+	looking for 0x45, found 0x20
+	looking for 0x46, found 0x1f
+	looking for 0x47, found 0x1e
+	looking for 0x48, found 0x1d
+	looking for 0x49, found 0x1c
+	looking for 0x4a, found 0x1b
+	looking for 0x4b, found 0x1a
+	looking for 0x4c, found 0x19
+	looking for 0x4d, found 0x18
+	looking for 0x4e, found 0x17
+	looking for 0x4f, found 0x16
+	looking for 0x50, found 0x15
+	looking for 0x51, found 0x14
+	looking for 0x52, found 0x13
+	looking for 0x53, found 0x12
+	looking for 0x54, found 0x11
+	looking for 0x55, found 0x10
+	looking for 0x56, found 0xf
+	looking for 0x57, found 0xe
+	looking for 0x58, found 0xd
+	looking for 0x59, found 0xc
+	looking for 0x5a, found 0xb
+	looking for 0x5b, found 0xa
+	looking for 0x5c, found 0x9
+	looking for 0x5d, found 0x8
+	looking for 0x5e, found 0x7
+	looking for 0x5f, found 0x6
+	looking for 0x60, found 0x5
+	looking for 0x61, found 0x4
+	looking for 0x62, found 0x3
+	looking for 0x63, found 0x2
+	looking for 0x64, found 0x1

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testPtrMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testPtrMap.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		PtrMap*			map;
+		ArithPointer		idx;
+		Stream*			stream;
+		
+		stream = Journal_Register( Info_Type, "myStream" );
+		
+		map = PtrMap_New( 10 );
+		for( idx = 0; idx < 100; idx++ )
+			PtrMap_Append( map, (void*)(idx + 1), (void*)(100 - idx) );
+		
+		printf( "List Data:\n" );
+		for( idx = 0; idx < 100; idx++ )
+			printf( "\tlooking for 0x%x, found 0x%x\n", (unsigned int)(idx + 1), (unsigned int) ((ArithPointer)PtrMap_Find( map, (void*)(idx + 1) )) );
+		
+		Stg_Class_Delete( map );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testSet.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+void printSet( void* data, void* args ) {
+	printf( "%p\n", data );
+}
+
+
+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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		PtrSet*		setA;
+		PtrSet*		setB;
+		PtrSet*		setC;
+		ArithPointer	int_I;
+
+		setA = PtrSet_New( NULL );
+		setB = PtrSet_New( NULL );
+
+		/* I expect the set to be able to insert 100,000 items in the worst case
+		   scenario in a reasonable amount of time. */
+		for( int_I = 1; int_I < 100000; int_I++ ) {
+			PtrSet_Insert( setA, (void*)int_I );
+		}
+
+		for( int_I = 50000; int_I < 150000; int_I++ ) {
+			PtrSet_Insert( setB, (void*)int_I );
+		}
+
+		setC = PtrSet_Subtraction( setA, setB );
+		PtrSet_Traverse( setC, printSet, NULL );
+
+		Stg_Class_Delete( setA );
+		Stg_Class_Delete( setB );
+		Stg_Class_Delete( setC );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+   Running test 'construct'... passed
+   Running test 'set indices'... passed
+   Running test 'ranges'... passed
+   Running test 'union'... passed
+   Running test 'intersection'... passed
+   Running test 'subtraction'... passed
+   Running test 'pickle'... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testRangeSet " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,327 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testCommTopology.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/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+
+Bool testConstruct( unsigned rank, unsigned nProcs, unsigned watch ) {
+	RangeSet*	set;
+
+	set = RangeSet_New();
+	FreeObject( set );
+
+	return True;
+}
+
+
+Bool testIndices( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool		result = True;
+	unsigned	nInds = 100;
+	unsigned	inds[100];
+	RangeSet*	set;
+	unsigned	nDstInds;
+	unsigned*	dstInds;
+	unsigned	i;
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = i;
+
+	set = RangeSet_New();
+
+	RangeSet_SetIndices( set, nInds, inds );
+	if( rank == watch ) {
+		if( set->nInds != nInds || 
+		    set->nRanges != 1 )
+		{
+			result = False;
+			goto done;
+		}
+	}
+
+	RangeSet_GetIndices( set, &nDstInds, &dstInds );
+	if( rank == watch ) {
+		unsigned	ind_i;
+
+		if( nDstInds != nInds ) {
+			FreeArray( dstInds );
+		}
+
+		for( ind_i = 0; ind_i < nDstInds; ind_i++ ) {
+			if( dstInds[ind_i] != inds[ind_i] )
+				break;
+		}
+		if( ind_i < nDstInds ) {
+			result = False;
+			goto done;
+		}
+	}
+
+done:
+	FreeArray( dstInds );
+	FreeObject(set );
+
+	return result;
+}
+
+
+Bool testRanges( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Bool		result = True;
+	unsigned	nInds = 100;
+	unsigned	inds[100];
+	RangeSet*	set;
+	unsigned	i;
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + i;
+
+	set = RangeSet_New();
+
+	RangeSet_SetIndices( set, nInds, inds );
+	if( rank == watch ) {
+		if( set->nInds != nInds || 
+		    set->nRanges != nInds/10 )
+		{
+			result = False;
+			goto done;
+		}
+
+		for( i = 0; i < nInds; i++ ) {
+			if( set->ranges[i/10].begin != (i/10)*20 || 
+			    set->ranges[i/10].end != (i/10)*20 + 10 || 
+			    set->ranges[i/10].step != 1 )
+			{
+				result = False;
+				goto done;
+			}
+		}
+	}
+
+done:
+	FreeObject( set );
+
+	return result;
+}
+
+
+Bool testUnion( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	nInds = 100;
+	unsigned	inds[100];
+	RangeSet*	set0;
+	RangeSet*	set1;
+	unsigned	i;
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + i;
+	set0 = RangeSet_New();
+	RangeSet_SetIndices( set0, nInds, inds );
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + 100 + i;
+	set1 = RangeSet_New();
+	RangeSet_SetIndices( set1, nInds, inds );
+
+	RangeSet_Union( set0, set1 );
+	FreeObject( set1 );
+	if( rank == watch ) {
+		if( RangeSet_GetNIndices( set0 ) != nInds + nInds / 2 || 
+		    RangeSet_GetNRanges( set0 ) != nInds / 10 + nInds / 20 )
+		{
+			FreeObject( set0 );
+			return False;
+		}
+	}
+
+	FreeObject( set0 );
+
+	return True;
+}
+
+
+Bool testIntersection( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	nInds = 100;
+	unsigned	inds[100];
+	RangeSet*	set0;
+	RangeSet*	set1;
+	unsigned	i;
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + i;
+	set0 = RangeSet_New();
+	RangeSet_SetIndices( set0, nInds, inds );
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + 100 + i;
+	set1 = RangeSet_New();
+	RangeSet_SetIndices( set1, nInds, inds );
+
+	RangeSet_Intersection( set0, set1 );
+	FreeObject( set1 );
+	if( rank == watch ) {
+		if( RangeSet_GetNIndices( set0 ) != nInds / 2 || 
+		    RangeSet_GetNRanges( set0 ) != nInds / 20 )
+		{
+			FreeObject( set0 );
+			return False;
+		}
+	}
+
+	FreeObject( set0 );
+
+	return True;
+}
+
+
+Bool testSubtraction( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	nInds = 100;
+	unsigned	inds[100];
+	RangeSet*	set0;
+	RangeSet*	set1;
+	unsigned	i;
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + i;
+	set0 = RangeSet_New();
+	RangeSet_SetIndices( set0, nInds, inds );
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + 100 + i;
+	set1 = RangeSet_New();
+	RangeSet_SetIndices( set1, nInds, inds );
+
+	RangeSet_Subtraction( set0, set1 );
+	FreeObject( set1 );
+	if( rank == watch ) {
+		if( RangeSet_GetNIndices( set0 ) != nInds / 2 || 
+		    RangeSet_GetNRanges( set0 ) != nInds / 20 )
+		{
+			FreeObject( set0 );
+			return False;
+		}
+	}
+
+	FreeObject( set0 );
+
+	return True;
+}
+
+
+Bool testPickle( unsigned rank, unsigned nProcs, unsigned watch ) {
+	unsigned	nInds = 100;
+	unsigned	inds[100];
+	RangeSet*	set;
+	unsigned	nBytes;
+	Stg_Byte*		bytes;
+	unsigned	i;
+
+	for( i = 0; i < nInds; i++ )
+		inds[i] = (i/10)*10 + i;
+	set = RangeSet_New();
+	RangeSet_SetIndices( set, nInds, inds );
+
+	RangeSet_Pickle( set, &nBytes, &bytes );
+	RangeSet_Clear( set );
+	RangeSet_Unpickle( set, nBytes, bytes );
+
+	if( rank == watch ) {
+		if( set->nInds != nInds || 
+		    set->nRanges != nInds/10 )
+		{
+			FreeObject( set );
+			return False;
+		}
+
+		for( i = 0; i < nInds; i++ ) {
+			if( set->ranges[i/10].begin != (i/10)*20 || 
+			    set->ranges[i/10].end != (i/10)*20 + 10 || 
+			    set->ranges[i/10].step != 1 )
+			{
+				FreeObject( set );
+				return False;
+			}
+		}
+	}
+
+	FreeObject( set );
+
+	return True;
+}
+
+
+#define nTests	7
+
+TestSuite_Test	tests[nTests] = {{"construct", testConstruct, 10}, 
+				 {"set indices", testIndices, 10}, 
+				 {"ranges", testRanges, 10 }, 
+				 {"union", testUnion, 10}, 
+				 {"intersection", testIntersection, 10}, 
+				 {"subtraction", testSubtraction, 10}, 
+				 {"pickle", testPickle, 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;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testSet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testSet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testSet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testSet.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+int compareFunc( void* left, void* right ) {
+	if( *(int*)left < *(int*)right ) {
+		return -1;
+	}
+	else if( *(int*)left > *(int*)right ) {
+		return 1;
+	}
+	else {
+		return 0;
+	}
+}
+
+
+void copyFunc( void** newData, void* data, SizeT size ) {
+	*newData = Memory_Alloc_Bytes_Unnamed( size, char );
+	/* TODO: convert to journal */
+	assert( *newData );
+
+	*(int*)(*newData) = *(int*)data;
+}
+
+
+void deleteFunc( void* data ) {
+	/* TODO: convert to journal */
+	assert( data );
+	Memory_Free( data );
+}
+
+
+void printSet( void* data, void* args ) {
+	printf( "%d\n", *(int*)data );
+}
+
+
+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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		Set*		setA;
+		Set*		setB;
+		Set*		setC;
+		unsigned	int_I;
+
+		setA = Set_New( NULL, int, compareFunc, copyFunc, deleteFunc );
+		setB = Set_New( NULL, int, compareFunc, copyFunc, deleteFunc );
+
+		/* I expect the set to be able to insert 100,000 items in the worst case
+		   scenario in a reasonable amount of time. */
+		for( int_I = 0; int_I < 100000; int_I++ ) {
+			Set_Insert( setA, &int_I );
+		}
+
+		for( int_I = 50000; int_I < 150000; int_I++ ) {
+			Set_Insert( setB, &int_I );
+		}
+
+		setC = Set_Subtraction( setA, setB );
+		Set_Traverse( setC, printSet, NULL );
+
+		Stg_Class_Delete( setA );
+		Stg_Class_Delete( setB );
+		Stg_Class_Delete( setC );
+	}
+	
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Testing array conversion... passed
+Testing array gather... passed
+Testing memory... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testUIntMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Testing array conversion... passed
+Testing array gather... passed
+Testing memory... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testUIntMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Testing array conversion... passed
+Testing array gather... passed
+Testing memory... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testUIntMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Testing array conversion... passed
+Testing array gather... passed
+Testing memory... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testUIntMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Testing array conversion... passed
+Testing array gather... passed
+Testing memory... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testUIntMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Testing array conversion... passed
+Testing array gather... passed
+Testing memory... passed

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testUIntMap " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testMPIRoutines.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+Bool testInsert( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testMap( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testMemory( unsigned rank, unsigned nProcs, unsigned watch );
+
+int main( int argc, char* argv[] ) {
+	unsigned	rank;
+	unsigned	nProcs;
+	unsigned	watch;
+	Bool		result;
+
+	/* Initialise MPI, get world info. */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, (int*)&nProcs );
+	MPI_Comm_rank( MPI_COMM_WORLD, (int*)&rank );
+
+	/* Initialise StGermain. */
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	/* Watching a particular processor? */
+	watch = (argc >= 2) ? atoi( argv[1] ) : 0;
+
+	/* Run some tests. */
+	result = testInsert( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array conversion... %s\n", result ? "passed" : "failed" );
+
+	result = testMap( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing array gather... %s\n", result ? "passed" : "failed" );
+
+	result = testMemory( rank, nProcs, watch );
+	if( rank == watch )
+		printf( "Testing memory... %s\n", result ? "passed" : "failed" );
+
+	/* Finalise StGermain. */
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return MPI_SUCCESS;
+}
+
+void fillMap( UIntMap* map, unsigned size ) {
+	unsigned	i;
+
+	for( i = 0; i < size; i++ )
+		UIntMap_Insert( map, i, size + i );
+}
+
+Bool testInsert( unsigned rank, unsigned nProcs, unsigned watch ) {
+	if( rank == watch ) {
+		unsigned	size = 5;
+		UIntMap*	map = UIntMap_New();
+
+		fillMap( map, size );
+		if( map->size != size ) {
+			FreeObject( map );
+			return False;
+		}
+
+		FreeObject( map );
+	}
+
+	return True;
+}
+
+Bool testMap( unsigned rank, unsigned nProcs, unsigned watch ) {
+	if( rank == watch ) {
+		unsigned	size = 5;
+		UIntMap*	map = UIntMap_New();
+		unsigned	i;
+
+		fillMap( map, size );
+		for( i = 0; i < size; i++ )
+			if( UIntMap_Map( map, i ) != size + i ) break;
+		if( i < size ) {
+			FreeObject( map );
+			return False;
+		}
+
+		FreeObject( map );
+	}
+
+	return True;
+}
+
+Bool testMemory( unsigned rank, unsigned nProcs, unsigned watch ) {
+	if( rank == watch ) {
+		unsigned	size = 5;
+		unsigned	nReps = 10;
+		UIntMap*	map;
+		unsigned	r_i;
+
+		for( r_i = 0; r_i < nReps; r_i++ ) {
+			unsigned	i;
+
+			map = UIntMap_New();
+			fillMap( map, size );
+			for( i = 0; i < size; i++ )
+				if( UIntMap_Map( map, i ) != size + i ) break;
+			if( i < size ) {
+				FreeObject( map );
+				return False;
+			}
+			FreeObject( map );
+		}
+	}
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUniqueList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUniqueList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUniqueList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (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: testList.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	if( rank == procToWatch ) {
+		UniqueList*		list;
+		Index			idx;
+		Stream*			stream;
+		
+		stream = Journal_Register( Info_Type, "myStream" );
+		
+		list = UniqueList_New( sizeof(unsigned) );
+		printf( "Adding:\n" );
+		for( idx = 0; idx < 100; idx++ ) {
+			printf( "\tadding %d at index %d\n", idx, UniqueList_Append( list, &idx ) );
+		}
+		
+		printf( "Adding:\n" );
+		for( idx = 0; idx < 100; idx++ ) {
+			printf( "\tadding %d at index %d\n", idx, UniqueList_Append( list, &idx ) );
+		}
+		
+		Print( list, stream );
+		
+		printf( "List Data:\n" );
+		for( idx = 0; idx < 100; idx++ ) {
+			printf( "\telements[%d]: %d\n", idx, UniqueList_ElementAt( list, unsigned, idx ) );
+		}
+		
+		idx = 1000;
+		UniqueList_Mutate( list, 0, &idx );
+		
+		printf( "Modified list data:\n" );
+		for( idx = 0; idx < 100; idx++ ) {
+			printf( "\telements[%d]: %d\n", idx, UniqueList_ElementAt( list, unsigned, idx ) );
+		}
+		
+		Stg_Class_Delete( list );
+	}
+	
+	BaseFoundation_Finalise();
+	BaseIO_Finalise();
+	BaseContainer_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainBaseContext
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests Python

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Python/Context.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Python/Context.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Python/Context.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,91 @@
+#!/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: Context.py 3870 2006-10-16 13:56:38Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import StGermain.Base.Bindings.Context as bindings
+import StGermain.Base.IO.Dictionary as Dictionary
+
+def copyright():
+    return "StGermain.Base.Context.Context Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+class Context( object ):
+	def Print( self ):
+		return bindings.Print( self._handle )
+	
+	def Construct( self ):
+		self._handle = bindings.Construct( self._handle )
+		return None
+	
+	def Build( self ):
+		return bindings.Build( self._handle )
+	
+	def Initialise( self ):
+		return bindings.Initialise( self._handle )
+	
+	def Execute( self ):
+		return bindings.Execute( self._handle )
+		
+	def Destroy( self ):
+		return bindings.Destroy( self._handle )
+		
+	def Dt( self ):
+		return bindings.Dt( self._handle )
+	
+	def Step( self, dt ):
+		return bindings.Step( self._handle, dt )
+	
+	def __init__( self, handle ):
+		self._handle = handle
+		self.dictionary = Dictionary.Dictionary( bindings.GetDictionary( self._handle ) )
+		return
+
+	def handle(self):
+		return self._handle
+
+	def Delete( self ):
+		return bindings.Delete( self._handle )
+
+	def SetTime( self, time ):	
+		bindings.SetTime( self._handle, time )
+		self.__time = time
+
+	def GetTime( self ):
+		return self.__time
+
+	time = property( GetTime, SetTime, doc="Current sim. time.")
+	
+	def SetStep( self, timeStep ):
+		bindings.SetTimeStep( self._handle, timeStep )
+		self.__timeStep = timeStep
+
+	def GetStep( self ):	
+		return self.__timeStep
+
+	step = property( GetStep, SetStep, doc="Current sim. step.")

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Base/Context
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = 
+
+def_pyc_package = StGermain/Base/Context
+def_pyc = __init__.py Context.py

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.Base.Context 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 $"

Added: long/3D/SNAC/trunk/StGermain/Base/Context/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Base/Context/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1026 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: AbstractContext.c 3857 2006-10-14 18:06:05Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>  /* subsequent files need this */
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "units.h"
+#include "types.h"
+#include "shortcuts.h"
+#include "AbstractContext.h"
+#include "ContextEntryPoint.h"
+#include "DictionaryCheck.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+/* AbstractContext entry point names */
+Type AbstractContext_EP_Construct =		"Context_Construct";
+Type AbstractContext_EP_ConstructExtensions = 	"Context_ConstructExtensions";
+Type AbstractContext_EP_Build = 		"Context_Build";
+Type AbstractContext_EP_Initialise =		"Context_Initialise";
+Type AbstractContext_EP_Execute =		"Context_Execute";
+Type AbstractContext_EP_Destroy =		"Context_Destroy";
+Type AbstractContext_EP_DestroyExtensions = 	"Context_DestroyExtensions";
+
+Type AbstractContext_EP_Dt =			"Context_Dt";
+Type AbstractContext_EP_Step =			"Context_Step";
+Type AbstractContext_EP_UpdateClass =		"Context_UpdateClass";
+Type AbstractContext_EP_Solve =			"Context_Solve";
+Type AbstractContext_EP_Sync =			"Context_Sync";
+Type AbstractContext_EP_FrequentOutput = 	"Context_FrequentOutput";
+Type AbstractContext_EP_Dump =			"Context_Dump";
+Type AbstractContext_EP_DumpClass =		"Context_DumpClass";
+Type AbstractContext_EP_Save =			"Context_Save";
+Type AbstractContext_EP_SaveClass =		"Context_SaveClass";
+
+
+/* Dictionary entry names */
+const Type AbstractContext_Dict_Components =	"components";
+const Type AbstractContext_Dict_Applications =	"application_plugins";
+
+
+/* Class stuff ********************************************************************************************************************/
+
+
+/* Textual name of this class */
+const Type AbstractContext_Type = "Context";
+const Type AbstractContext_Type_Verbose = "Context-verbose";
+
+AbstractContext* _AbstractContext_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						startTime,
+		double						stopTime,
+		MPI_Comm					communicator,
+		Dictionary*					dictionary )
+{
+	AbstractContext* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(AbstractContext) );
+	self = (AbstractContext*)_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->_setDt = _setDt;
+	
+	if( initFlag ){
+		_AbstractContext_Init( self, startTime, stopTime, communicator );
+	}
+	
+	return self;
+}
+
+void _AbstractContext_Init(
+		AbstractContext* 		self,
+		double				startTime,
+		double				stopTime,
+		MPI_Comm			communicator )
+{
+	Stream* debug = Journal_Register( DebugStream_Type, AbstractContext_Type );
+	Dictionary_Entry_Value* dictEntryVal = NULL;
+	Dictionary *componentDict = NULL;
+	char buf[80];
+	
+	/* General and Virtual info should already be set */
+	
+	/* AbstractContext info */
+	self->isConstructed = True;
+	self->communicator = communicator;
+	MPI_Comm_rank( self->communicator, &self->rank );
+	MPI_Comm_size( self->communicator, &self->nproc );
+	self->debug = debug;
+	if( self->rank == 0 ) {
+		Journal_Printf( 
+			debug, 
+			"In: %s: self->communicator: %u, self->nproc: %u, self->rank %u\n", 
+			__func__,
+			self->communicator,
+			self->nproc,
+			self->rank );
+	}
+	self->info = Journal_Register( InfoStream_Type, AbstractContext_Type );
+	self->verbose = Journal_Register( InfoStream_Type, AbstractContext_Type_Verbose );
+	sprintf( buf, "journal.info.%s", AbstractContext_Type_Verbose );
+	if( !Dictionary_Get( self->dictionary, buf ) ) {
+		Journal_Enable_NamedStream( InfoStream_Type, AbstractContext_Type_Verbose, False );
+	}
+	/* Turn off the journal warning debug stream by default: even if debug is enabled in general */
+	if( !Dictionary_Get( self->dictionary, "journal.debug.DictionaryWarning" ) ) {
+		Journal_Enable_NamedStream( DebugStream_Type, "DictionaryWarning", False );
+	}
+	
+	/* Set up the registers and plugin manager */
+	self->CF = 0; /* gets built later */
+	self->objectList = Stg_ObjectList_New();
+	self->condFunc_Register = ConditionFunction_Register_New();
+	self->variable_Register = Variable_Register_New();
+	self->extensionMgr_Register = ExtensionManager_Register_New();
+	self->extensionMgr = ExtensionManager_New_OfExistingObject( self->type, self );
+	ExtensionManager_Register_Add( self->extensionMgr_Register, self->extensionMgr );
+	self->pointer_Register = Stg_ObjectList_New();
+	self->register_Register = Stg_ObjectList_New();
+
+	self->plugins = PluginsManager_New( self->dictionary );
+	PluginsManager_AddDirectory( self->plugins, "StGermain", LIB_DIR );
+	
+	/* Main input parameters */
+	self->frequentOutputEvery = Dictionary_Entry_Value_AsUnsignedInt( 
+		Dictionary_GetDefault( self->dictionary, "outputEvery", Dictionary_Entry_Value_FromUnsignedInt( 1 ) ) );
+	self->dumpEvery = Dictionary_Entry_Value_AsUnsignedInt( 
+		Dictionary_GetDefault( self->dictionary, "dumpEvery", Dictionary_Entry_Value_FromUnsignedInt( 10 ) ) );
+	self->checkpointEvery = Dictionary_Entry_Value_AsUnsignedInt( 
+		Dictionary_GetDefault( self->dictionary, "checkpointEvery", Dictionary_Entry_Value_FromUnsignedInt( 0 ) ) );
+	self->experimentName = StG_Strdup( Dictionary_Entry_Value_AsString( 
+		Dictionary_GetDefault( self->dictionary, "experimentName", Dictionary_Entry_Value_FromString( "experiment" ) ) ) );
+	self->outputPath = StG_Strdup( Dictionary_Entry_Value_AsString( 
+		Dictionary_GetDefault( self->dictionary, "outputPath", Dictionary_Entry_Value_FromString( "./" ) ) ) );
+
+	if ( self->rank == 0 ) {
+		if ( ! Stg_DirectoryExists( self->outputPath ) ) {
+			Bool ret;
+
+			if ( Stg_FileExists( self->outputPath ) ) {
+				Journal_Firewall( 
+					0, 
+					self->info, 
+					"outputPath '%s' is a file an not a directory! Exiting...\n", self->outputPath );
+			}
+			
+			Journal_Printf( self->info, "outputPath '%s' does not exist, attempting to create...\n", self->outputPath );
+			ret = Stg_CreateDirectory( self->outputPath );
+			Journal_Firewall( ret, self->info, "Unable to create non-existing outputPath to '%s'\n", self->outputPath );
+			/* else */
+			Journal_Printf( self->info, "outputPath '%s' successfully created!\n", self->outputPath );
+		}
+	}
+
+	if ( self->rank == 0 ) {
+		XML_IO_Handler* ioHandler;
+		char* inputfileRecord;
+
+		Stream* s = Journal_Register( Info_Type, XML_IO_Handler_Type );
+
+		/* Avoid confusing messages from XML_IO_Handler...turn it off temporarily */
+		Bool isEnabled = Stream_IsEnable( s );
+		Stream_EnableSelfOnly( s, False );
+
+		ioHandler = XML_IO_Handler_New();
+
+		/* Set file name */
+		Stg_asprintf( &inputfileRecord, "%s/%s", self->outputPath, "input.xml" );
+
+		IO_Handler_WriteAllToFile( ioHandler, inputfileRecord, self->dictionary );
+		
+		Stream_EnableSelfOnly( s, isEnabled );
+
+		Stg_Class_Delete( ioHandler );
+		Memory_Free( inputfileRecord );
+	}
+
+
+	/* Note: these try for deprecated keys "start", "end" and "stop" as well as new ones "startTime" and
+		"stopTime" - Main.PatrickSunter - 4 November 2004 */
+	dictEntryVal = Dictionary_Get( self->dictionary, "start" );
+	if ( NULL == dictEntryVal ) {
+		dictEntryVal = Dictionary_GetDefault( self->dictionary, "startTime",
+			Dictionary_Entry_Value_FromDouble( startTime ) );
+	}
+	self->startTime = Dictionary_Entry_Value_AsDouble( dictEntryVal );
+
+	dictEntryVal = Dictionary_Get( self->dictionary, "end" );
+	if ( NULL == dictEntryVal ) {
+		dictEntryVal = Dictionary_Get( self->dictionary, "stop" );
+		if ( NULL == dictEntryVal ) {
+			dictEntryVal = Dictionary_GetDefault( self->dictionary, "stopTime",
+				Dictionary_Entry_Value_FromDouble( stopTime ) );
+		}
+	} 
+	self->stopTime = Dictionary_Entry_Value_AsDouble( dictEntryVal );
+
+	/* maxTimeSteps of 0 means no maximum applied */
+	/* Note: these try for deprecated key "maxLoops" as well as new one "maxTimeSteps" - Main.PatrickSunter - 4 November 2004 */
+	dictEntryVal = Dictionary_Get( self->dictionary, "maxLoops" );
+	if ( NULL == dictEntryVal ) {
+		dictEntryVal = Dictionary_GetDefault( self->dictionary, "maxTimeSteps",
+			Dictionary_Entry_Value_FromUnsignedInt( 0 ) );
+	}
+	self->maxTimeSteps = Dictionary_Entry_Value_AsUnsignedInt( dictEntryVal );
+
+	self->finalTimeStep = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "finalTimeStep", 0 );
+	self->gracefulQuit = False;
+
+
+	// TODO: does this need to be read from checkpoint file???
+	self->currentTime = self->startTime;
+	self->timeStep = 0;
+	self->timeStepSinceJobRestart = 0;
+	
+	/* Read in the checkpointing info */
+	self->restartTimestep = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "restartTimestep", 0 );
+	self->checkPointPrefixString = Dictionary_GetString_WithDefault( self->dictionary, "checkPointPrefixString", "" );
+	if ( self->restartTimestep != 0 ) {
+		double dtFromFile;
+		self->loadFromCheckPoint = True;
+		self->timeStep = self->restartTimestep;
+		_AbstractContext_LoadTimeInfoFromCheckPoint( self, self->restartTimestep, &dtFromFile );
+	}
+	else {
+		self->loadFromCheckPoint = False;
+	}
+
+	/* Build the entryPoint table */
+	self->entryPoint_Register = EntryPoint_Register_New(); 
+	/* For the construct EP, override the run function such that the context/ptrToContext remain in sync in the loop. */
+	self->constructK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Construct, EntryPoint_2VoidPtr_CastType ) );
+	AbstractContext_GetEntryPoint( self, AbstractContext_EP_Construct )->_getRun = _AbstractContext_Construct_EP_GetRun;
+	AbstractContext_GetEntryPoint( self, AbstractContext_EP_Construct )->run = 
+		EntryPoint_GetRun( AbstractContext_GetEntryPoint( self, AbstractContext_EP_Construct ) );
+	self->constructExtensionsK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_ConstructExtensions, EntryPoint_VoidPtr_CastType ) );
+	self->buildK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Build, EntryPoint_VoidPtr_CastType ) );
+	self->initialiseK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Initialise, EntryPoint_VoidPtr_CastType ) );
+	self->executeK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Execute, EntryPoint_VoidPtr_CastType ) );
+	self->destroyK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Destroy, EntryPoint_VoidPtr_CastType ) );
+	self->destroyExtensionsK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_DestroyExtensions, EntryPoint_VoidPtr_CastType ) );
+	
+	self->dtK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Dt, ContextEntryPoint_Dt_CastType ) );
+	self->stepK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Step, ContextEntryPoint_Step_CastType ) );
+	self->solveK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Solve, EntryPoint_VoidPtr_CastType ) );
+	self->updateClassK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_UpdateClass, EntryPoint_Class_VoidPtr_CastType ) );
+	self->syncK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Sync, EntryPoint_VoidPtr_CastType ) );
+	self->frequentOutputK =	Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_FrequentOutput, EntryPoint_VoidPtr_CastType ) );
+	self->dumpK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Dump, EntryPoint_VoidPtr_CastType ) );
+	self->dumpClassK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_DumpClass, EntryPoint_Class_VoidPtr_CastType ) );
+	self->saveK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_Save, EntryPoint_VoidPtr_CastType ) );
+	self->saveClassK = Context_AddEntryPoint( 
+		self, 
+		ContextEntryPoint_New( AbstractContext_EP_SaveClass, EntryPoint_Class_VoidPtr_CastType ) );
+	
+	/* add initial hooks */
+	EntryPoint_Append( 
+		AbstractContext_GetEntryPoint( self, AbstractContext_EP_Construct ),
+		"default", 
+		(Func_Ptr)_AbstractContext_Construct_Hook, 
+		AbstractContext_Type );
+	EntryPoint_Append( 
+		AbstractContext_GetEntryPoint( self, AbstractContext_EP_Execute ),
+		"default", 
+		(Func_Ptr)_AbstractContext_Execute_Hook, 
+		AbstractContext_Type );
+	EntryPoint_Append( 
+		AbstractContext_GetEntryPoint( self, AbstractContext_EP_Step ),
+		"default", 
+		(Func_Ptr)_AbstractContext_Step, 
+		AbstractContext_Type );
+	EntryPoint_Append( 
+		AbstractContext_GetEntryPoint( self, AbstractContext_EP_Save ),
+		"SaveTimeInfo", 
+		(Func_Ptr)_AbstractContext_SaveTimeInfo, 
+		AbstractContext_Type );
+
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->extensionMgr_Register, "ExtensionManager_Register" );
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->variable_Register, "Variable_Register" );
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->condFunc_Register, "ConditionFunction_Register" );
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->entryPoint_Register, "EntryPoint_Register" );
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->pointer_Register, "Pointer_Register" );
+	
+	componentDict = Dictionary_GetDictionary( self->dictionary, "components" );
+
+	/* Add functions to make sure all the live components are built and initialised */
+	EntryPoint_Append( 
+		Context_GetEntryPoint( self, AbstractContext_EP_Build ),
+		"BuildAllLiveComponents", 
+		AbstractContext_BuildAllLiveComponents, 
+		AbstractContext_Type );
+	EntryPoint_Append( 
+		Context_GetEntryPoint( self, AbstractContext_EP_Initialise ),
+		"InitialiseAllLiveComponents", 
+		AbstractContext_InitialiseAllLiveComponents, 
+		AbstractContext_Type );
+
+	/* Check if we have been provided a constant to multiply our calculated dt values by. */
+	self->dtFactor = Dictionary_GetDouble_WithDefault( self->dictionary, "timestepFactor", 1.0 );
+}
+
+void _AbstractContext_Delete( void* abstractContext ) {
+	AbstractContext* self = (AbstractContext*)abstractContext;
+
+	Stg_Class_Delete( self->objectList );
+	Stg_Class_Delete( self->condFunc_Register );
+	Stg_Class_Delete( self->variable_Register );
+
+	Stg_Class_Delete( self->entryPoint_Register );
+
+	Memory_Free( self->experimentName );
+	Memory_Free( self->outputPath );
+	
+	Stg_Class_Delete( self->extensionMgr_Register );
+	Stg_Class_Delete( self->plugins );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _AbstractContext_Print( void* abstractContext, Stream* stream ) {
+	AbstractContext* self = (AbstractContext*)abstractContext;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "AbstractContext (ptr)(%p):\n", self );
+	Journal_Printf( (void*) stream, "\tdictionary (ptr): %p\n", self->dictionary );
+	
+	/* Virtual info */
+	Journal_Printf( (void*) stream, "\t_setDt (ptr): %p\n", self->_setDt );
+	
+	/* AbstractContext info */
+	Journal_Printf( (void*) stream, "\tcommunicator: %i\n", self->communicator );
+	Journal_Printf( (void*) stream, "\tstartTime: %g\n", self->startTime );
+	Journal_Printf( (void*) stream, "\tstopTime: %g\n", self->stopTime );
+	Journal_Printf( (void*) stream, "\tcurrentTime: %g\n", self->currentTime );
+	Journal_Printf( (void*) stream, "\ttimeStep: %u\n", self->timeStep );
+	Journal_Printf( (void*) stream, "\ttimeStepSinceJobRestart: %u\n", self->timeStepSinceJobRestart );
+	Journal_Printf( (void*) stream, "\tmaxTimeSteps: %u\n", self->maxTimeSteps );
+	Journal_Printf( (void*) stream, "\tfinalTimeStep: %u\n", self->finalTimeStep );
+	Journal_Printf( (void*) stream, "\toutputEvery: %u\n", self->frequentOutputEvery );
+	Journal_Printf( (void*) stream, "\tdumpEvery: %u\n", self->dumpEvery );
+	Journal_Printf( (void*) stream, "\tcheckpointEvery: %u\n", self->checkpointEvery );
+	if( self->outputPath ) {
+		Journal_Printf( (void*) stream, "\toutputPath: %s\n", self->outputPath );
+	}
+	else {
+		Journal_Printf( (void*) stream, "\toutputPath: (null)\n" );
+	}
+	Journal_Printf( stream, "\tloadFromCheckPoint: %u\n", self->loadFromCheckPoint );
+	Journal_Printf( stream, "\trestartTimestep: %u\n", self->restartTimestep );
+	Journal_Printf( stream, "\tcheckPointPrefixString: %s\n", self->checkPointPrefixString );
+	
+	Print( self->entryPoint_Register, stream );
+	
+	Journal_Printf( (void*) stream, "\tconstructK: %u\n", self->constructK );
+	Journal_Printf( (void*) stream, "\tconstructExtensionsK: %u\n", self->constructExtensionsK );
+	Journal_Printf( (void*) stream, "\tbuildK: %u\n", self->buildK );
+	Journal_Printf( (void*) stream, "\tinitialiseK: %u\n", self->initialiseK );
+	Journal_Printf( (void*) stream, "\texecuteK: %u\n", self->executeK );
+	Journal_Printf( (void*) stream, "\tdestroyK: %u\n", self->destroyK );
+	Journal_Printf( (void*) stream, "\tdestroyExtensionsK: %u\n", self->destroyExtensionsK );
+	
+	Journal_Printf( (void*) stream, "\tdt: %u\n", self->dtK );
+	Journal_Printf( (void*) stream, "\tstepK: %u\n", self->stepK );
+	Journal_Printf( (void*) stream, "\tsolveK: %u\n", self->solveK );
+	Journal_Printf( (void*) stream, "\tsyncK: %u\n", self->syncK );
+	
+	Print( self->extensionMgr_Register, stream );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+}
+
+
+/* Construct EP override stuff ****************************************************************************************************/
+
+
+Func_Ptr _AbstractContext_Construct_EP_GetRun( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	
+	switch( self->castType ) {
+		case EntryPoint_2VoidPtr_CastType:
+			return (void*) _AbstractContext_Construct_EP_Run;
+		
+		default:
+			return _EntryPoint_GetRun( self );
+	}
+	return 0;
+}
+
+void _AbstractContext_Construct_EP_Run( void* entryPoint, void* data0, void* data1 ) {
+	/* This func should be _EntryPoint_Run_2VoidPtr, but with the synchronisation of context from ptrToContext after each
+	 * hook. */
+	EntryPoint*		self = (EntryPoint*)entryPoint;
+	Hook_Index		hookIndex;
+	AbstractContext* 	context = (AbstractContext*)data0;
+	AbstractContext**	ptrToContext = (AbstractContext**)data1;
+	
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_2VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		((EntryPoint_2VoidPtr_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( context, ptrToContext );
+		
+		/* BIG difference to default run function... we need to "re-sync" the context with the potentially new one. Once
+		    again this is only a HACK due to the implemented contexts NOT being extensions! What's also important, is
+		    that the list of things added to this "the contruct" entry point may have changed, but changed on this "new"
+		    context... need to "re-self" this EP. */
+		context = *ptrToContext;
+		self = KeyHandle( context, context->constructK );
+//context->entryPoint_Register
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+
+/* Component stuff ****************************************************************************************************************/
+
+
+void _AbstractContext_Construct( void* context, Stg_ComponentFactory* cf, void* ptrToContext ) {
+	AbstractContext* 	self = (AbstractContext*)context;
+	AbstractContext**	ptrToSelf = (AbstractContext**)ptrToContext;
+	Bool			isConstructed;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+	Journal_Firewall( 
+		self == *ptrToSelf, 
+		Journal_Register( Error_Type, AbstractContext_Type ), 
+		"ptrToContext is assumed to point to context\n" );
+
+	#ifdef DEBUG
+		Context_WarnIfNoHooks( self, self->buildK, __func__  );
+	#endif
+	
+	/* Pre-mark the phase as complete as a default hook will attempt to build all live components (including this again) */
+	isConstructed = self->isConstructed;
+	self->isConstructed = True;
+
+	/* Construct all the components. There should be quite few in there right now, however, the context will do a plugins
+		load, which will add more and their dependencies. */
+	KeyCall( self, self->constructK, EntryPoint_2VoidPtr_CallCast* )( KeyHandle(self,self->constructK), self, ptrToSelf );
+	self = *ptrToSelf;
+
+	/* Construct the list of plugins. This wont reconstruct the components already constructed in the last step. By seperating
+		the plugins contstruction out of the component construction EP gives an opportunity to do a wrap up before
+		plugins start */
+	PluginsManager_ConstructPlugins( self->plugins, self->CF, ptrToSelf );
+
+	/* Extensions are the last thing we want to do */
+	KeyCall( self, self->constructExtensionsK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->constructExtensionsK), self );
+	
+	if( self->rank == 0 ) 
+		Context_PrintConcise( self, self->verbose );
+
+	if ( True == Dictionary_GetBool_WithDefault( self->dictionary, "showJournalStatus", False ) ) {
+		Journal_PrintConcise();	
+	}	
+	self->isConstructed = isConstructed;
+}
+
+
+void _AbstractContext_Build( void* context, void* data ) {
+	AbstractContext* 	self = (AbstractContext*)context;
+	Bool			isBuilt;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+
+	#ifdef DEBUG
+		Context_WarnIfNoHooks( self, self->buildK, __func__  );
+	#endif
+	
+	/* Pre-mark the phase as complete as a default hook will attempt to build all live components (including this again) */
+	isBuilt = self->isBuilt;
+	self->isBuilt = True;
+	KeyCall( self, self->buildK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->buildK), self );
+	self->isBuilt = isBuilt;
+}
+
+
+void _AbstractContext_Initialise( void* context, void* data ) {
+	AbstractContext*	self = (AbstractContext*)context;
+	Bool			isInitialised;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+
+	#ifdef DEBUG
+		AbstractContext_WarnIfNoHooks( self, self->initialiseK, __func__ );
+	#endif
+	
+	/* Pre-mark the phase as complete as a default hook will attempt to initialise all live components (including this again) */
+	isInitialised = self->isInitialised;
+	self->isInitialised = True;
+	KeyCall( self, self->initialiseK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->initialiseK), self );
+	self->isInitialised = isInitialised;
+}
+
+
+void _AbstractContext_Execute( void* context, void* data ) {
+	AbstractContext* 	self = (AbstractContext*)context;
+	Bool			hasExecuted;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+
+	#if DEBUG
+		AbstractContext_WarnIfNoHooks( self, self->executeK, __func__ );
+	#endif
+	
+	/* Pre-mark the phase as complete as a default hook will attempt to initialise all live components (including this again) */
+	hasExecuted = self->hasExecuted;
+	self->hasExecuted = True;
+	KeyCall( self, self->executeK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->executeK), self );
+	self->hasExecuted = hasExecuted;
+}
+
+
+void _AbstractContext_Destroy( void* context, void* data ) {
+	AbstractContext*	self = (AbstractContext*)context;
+	Bool			isDestroyed;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+
+	/* Pre-mark the phase as complete as a default hook will attempt to initialise all live components (including this again) */
+	isDestroyed = self->isDestroyed;
+	self->isDestroyed = True;
+	KeyCall( self, self->destroyExtensionsK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->destroyExtensionsK), self );
+	KeyCall( self, self->destroyK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->destroyK), self );
+	self->isDestroyed = isDestroyed;
+}
+
+
+/* Context public stuff ***********************************************************************************************************/
+
+
+void AbstractContext_PrintConcise( void* abstractContext, Stream* stream ) {
+	AbstractContext* self = (AbstractContext*)abstractContext;
+	EntryPoint_Index entryPointIndex;
+
+	Journal_Printf( stream, "Context: %s\n", self->type );
+	for( entryPointIndex = 0; entryPointIndex < self->entryPoint_Register->count; entryPointIndex++ ) {
+		EntryPoint_PrintConcise( EntryPoint_Register_At( self->entryPoint_Register, entryPointIndex ), stream );
+	}
+}
+
+
+EntryPoint_Index AbstractContext_AddEntryPoint( 
+		void*				abstractContext,
+		void*				entryPoint )
+{
+	AbstractContext* self = (AbstractContext*)abstractContext;
+
+	return EntryPoint_Register_Add( self->entryPoint_Register, entryPoint );
+}
+
+
+EntryPoint* AbstractContext_GetEntryPoint( 
+		void*				abstractContext,
+		const Name			entryPointName )
+{
+	AbstractContext*	self = (AbstractContext*)abstractContext;
+	EntryPoint_Index	ep_I;
+
+	/* Find the entry point */
+	ep_I = EntryPoint_Register_GetHandle( self->entryPoint_Register, entryPointName );
+	if( ep_I == (unsigned)-1 ) {
+		return 0;
+	}
+	else {
+		return EntryPoint_Register_At( self->entryPoint_Register, ep_I );
+	}
+}
+
+
+Func_Ptr _AbstractContext_Call( void* abstractContext, Name entryPointName, void** epPtr ) {
+	AbstractContext*	self = (AbstractContext*)abstractContext;
+	EntryPoint_Index	ep_I;
+	
+	/* Find the entry point */
+	ep_I = EntryPoint_Register_GetHandle( self->entryPoint_Register, entryPointName );
+	if( ep_I == (unsigned)-1 ) {
+		*epPtr = 0;
+	}
+	else {
+		*epPtr = EntryPoint_Register_At( self->entryPoint_Register, ep_I );
+	}
+	
+	/* ... and run it */
+	if( *epPtr != 0 ) {
+		return ((EntryPoint*) (*epPtr))->run;
+	}
+	return 0;
+}
+
+
+double AbstractContext_Dt( void* context ) {
+	AbstractContext* self = (AbstractContext*)context;
+
+	AbstractContext_ErrorIfNoHooks( self, self->dtK, __func__ );
+	return KeyCall( self, self->dtK, ContextEntryPoint_Dt_CallCast* )( KeyHandle(self,self->dtK), self );
+}
+
+void AbstractContext_Step( void* context, double dt ) {
+	AbstractContext* self = (AbstractContext*)context;
+	#if DEBUG
+		AbstractContext_WarnIfNoHooks( self, self->stepK, __func__ );
+	#endif
+	KeyCall( self, self->stepK, ContextEntryPoint_Step_CallCast* )( KeyHandle(self,self->stepK), self, dt );
+}
+
+
+void AbstractContext_WarnIfNoHooks( void* context, EntryPoint_Index epIndex, const char* caller ) {
+	AbstractContext* self = (AbstractContext*)context;
+	EntryPoint_WarnIfNoHooks( EntryPoint_Register_At( self->entryPoint_Register, epIndex ), caller );
+}
+
+
+void AbstractContext_ErrorIfNoHooks( void* context, EntryPoint_Index epIndex, const char* caller ) {
+	AbstractContext* self = (AbstractContext*)context;
+	EntryPoint_ErrorIfNoHooks( EntryPoint_Register_At( self->entryPoint_Register, epIndex ), caller );
+}
+
+void AbstractContext_FrequentOutput( void* context ) {
+	AbstractContext* self = (AbstractContext*)context;
+
+	KeyCall( self, self->frequentOutputK, EntryPoint_Class_VoidPtr_CallCast* )( 
+			KeyHandle(self,self->frequentOutputK), self );
+}
+
+void AbstractContext_Dump( void* context ) {
+	AbstractContext* self = (AbstractContext*)context;
+
+	KeyCall( self, self->dumpK, EntryPoint_VoidPtr_CallCast* )(      
+			KeyHandle(self,self->dumpK), self );
+	KeyCall( self, self->dumpClassK, EntryPoint_Class_VoidPtr_CallCast* )(
+			KeyHandle(self,self->dumpClassK), self );
+}
+
+void AbstractContext_Save( void* context ) {
+	AbstractContext* self = (AbstractContext*)context;
+
+	KeyCall( self, self->saveK, EntryPoint_VoidPtr_CallCast* )(     
+			KeyHandle(self,self->saveK), self );
+	KeyCall( self, self->saveClassK, EntryPoint_Class_VoidPtr_CallCast* )(      
+			KeyHandle(self,self->saveClassK), self );
+}
+
+
+void AbstractContext_BuildAllLiveComponents( void* context ) {
+	AbstractContext*       self = (AbstractContext*) context;	
+	
+	/* Build all on Live Stg_Component Register */
+	if ( self->CF && self->CF->LCRegister )
+		LiveComponentRegister_BuildAll( self->CF->LCRegister, self );
+}
+
+
+void AbstractContext_InitialiseAllLiveComponents( void* context ) {
+	AbstractContext*       self = (AbstractContext*) context;	
+	
+	/* Build all on Live Stg_Component Register */
+	if ( self->CF && self->CF->LCRegister )
+		LiveComponentRegister_InitialiseAll( self->CF->LCRegister, self );
+}
+
+
+/* Context hooks ******************************************************************************************************************/
+
+
+void _AbstractContext_Construct_Hook( void* context, void* ptrToContext ) {
+	AbstractContext*		self = (AbstractContext*)context;
+	AbstractContext**		ptrToSelf = (AbstractContext**)ptrToContext;
+	Dictionary*			componentDict;
+	Dictionary_Entry_Value*		apps;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+	
+	/* Obtain the components info from the global dictionary. Check that the dictionary has unique entry names. */
+	if( (componentDict = Dictionary_GetDictionary( self->dictionary, AbstractContext_Dict_Components )) == NULL ) { 
+		componentDict = Dictionary_New();
+	}
+	CheckDictionaryKeys( componentDict, "Component dictionary must have unique names\n" );
+	
+	/* The component factory should be specific to this context, so create it here unless is already exists (i.e. desired
+	   behaviour has been purposely overridden). Add ourself to the global live register. */
+	if( !self->CF ) {
+		self->CF = Stg_ComponentFactory_New( self->dictionary, componentDict, self->register_Register );
+	}
+	LiveComponentRegister_Add( self->CF->LCRegister, (Stg_Component*)self );
+	
+	/* Obtain the applications  info from the global dictionary. Boot them up. */
+	if( (apps = Dictionary_Get( self->dictionary, AbstractContext_Dict_Applications )) != NULL ) {
+		int index; /* needs to be signed */
+		
+		/* Go through the list of entries, and attempt to load each plugin. NOTE: this will call the "Init" of the
+		   application module. */
+		for( index = 0; index < Dictionary_Entry_Value_GetCount( apps ); index++ ) {
+			Dictionary_Entry_Value* application;
+			
+			application = Dictionary_Entry_Value_GetElement( apps, index );
+
+			Journal_Firewall(
+				PluginsManager_LoadPlugin( self->plugins, application->as.typeString, self ),
+				Journal_Register( Error_Type, AbstractContext_Type ),
+				"Error: Application Plugin %s not found. Ensure it is"
+					" a valid plugin, and has been built.\n",
+					application->as.typeString );
+		}
+		
+		/* Now that the plugins are loaded (i.e. ALL application environments enabled), now RE-construct the context in the
+		   reverse order. Ensuring that only the first (i.e. largest context) plugin builds a new context.
+ 		   NOTE: This mechanism completely sucks! The way Contexts are replaced is crap but works for now. It shows that
+		   Context's should be implemented as extensions! */
+		for( index = Dictionary_Entry_Value_GetCount( apps ) - 1; index >= 0; index-- ) {
+			Dictionary_Entry_Value* application;
+			
+			application = Dictionary_Entry_Value_GetElement( apps, index );
+
+			Journal_Firewall(
+				PluginsManager_ConstructPlugin( self->plugins, application->as.typeString, self->CF, ptrToSelf ),
+				Journal_Register( Error_Type, AbstractContext_Type ),
+				"Error: Application Plugin %s could not be constructed."
+					" Ensure it has a valid construction function.\n",
+				      	application->as.typeString );
+			
+			if( self !=  (AbstractContext*)self->CF->LCRegister->componentList->data[0] ) {
+				((AbstractContext*)self->CF->LCRegister->componentList->data[0])->plugins = self->plugins;
+				self = (AbstractContext*)self->CF->LCRegister->componentList->data[0];
+				Journal_Firewall( 
+					(Bool)ptrToSelf, 
+					Journal_Register( Error_Type, AbstractContext_Type ), 
+					"Pointer to the context is needed, but set to NULL.\n" );
+				*ptrToSelf = self;
+			}
+		}
+	}
+	
+	/* Load the plugins ?? */
+	PluginsManager_Load( self->plugins, context, self->dictionary );
+
+	Stg_ComponentFactory_CreateComponents( self->CF );
+	Stg_ComponentFactory_ConstructComponents( self->CF, ptrToSelf );
+}
+
+
+void _AbstractContext_Execute_Hook( Context* context ) {
+	AbstractContext*   self = (AbstractContext*)context;
+	double             dt = 0;
+	double             dtLoadedFromFile = 0;
+	
+	if (self->maxTimeSteps) {
+		Journal_Printf( self->info, "Run until %u timeSteps have been run\n", self->maxTimeSteps );
+	}
+	if (self->finalTimeStep ) {
+		if (self->maxTimeSteps ) {
+			Journal_Printf( self->info, "or " );
+		}	
+		else {
+			Journal_Printf( self->info, "Run " );
+		}
+		Journal_Printf( self->info, "until absolute time step %u reached\n", self->stopTime );
+	}
+	
+	if (self->stopTime) {
+		if (self->maxTimeSteps || self->finalTimeStep ) {
+			Journal_Printf( self->info, "or " );
+		}	
+		else {
+			Journal_Printf( self->info, "Run " );
+		}
+		Journal_Printf( self->info, "until simulation time passes %g.\n", self->stopTime );
+	}
+	
+	self->timeStepSinceJobRestart = 1;
+
+	/* Set timeStep to 0 if not restarting, so that incrementing timestep below affects both
+		regular and restart mode -- PatrickSunter - 18 June 2006 */
+	if ( False == self->loadFromCheckPoint ) {
+		self->timeStep = 0;
+		self->currentTime = self->startTime;
+	}
+	
+	self->timeStep++;
+
+	while( !self->gracefulQuit ) {
+		if ( ( True == self->loadFromCheckPoint ) &&
+			( self->timeStep == self->restartTimestep + 1 ) )
+		{ 
+			/* Note: when checkpointing time info, we called AbstractContext_Dt( self )
+			at the end of the step we were restarting from, which should be equivalent to the
+			call here - and that calculation may be dependent on the solver info for that step,
+			so we need to reload it here */
+			_AbstractContext_LoadTimeInfoFromCheckPoint( self, self->restartTimestep, &dtLoadedFromFile );
+			dt = dtLoadedFromFile;
+		}	
+		else {
+			dt = self->dtFactor * AbstractContext_Dt( self );
+		}
+
+		AbstractContext_Step( self, dt );
+
+		self->currentTime += dt;
+
+		if ( self->frequentOutputEvery ) {
+			if ( self->timeStep % self->frequentOutputEvery == 0 )
+				AbstractContext_FrequentOutput( self );
+		}	
+		if ( self->dumpEvery ) {
+			if ( self->timeStep % self->dumpEvery == 0 )
+				AbstractContext_Dump( self );
+		}	
+		if ( self->checkpointEvery ) {
+			if ( self->timeStep % self->checkpointEvery == 0 )
+				AbstractContext_Save( self );
+		}	
+
+		if (self->maxTimeSteps && (self->timeStepSinceJobRestart >= self->maxTimeSteps)) break;
+		if (self->finalTimeStep && (self->timeStep >= self->finalTimeStep)) break;
+		if (self->stopTime && (self->currentTime >= self->stopTime)) break; 
+		self->timeStep++;
+		self->timeStepSinceJobRestart++;
+	}
+}
+
+
+void _AbstractContext_Step( Context* context, double dt ) {
+	AbstractContext* self = (AbstractContext*)context;
+	
+	/* This will make it clear where the timestep starts when several procs
+	 * running. Figure this 1 synchronisation is ok since we are likely to
+	 * have just synchronised while calculating timestep anyway. */
+	MPI_Barrier( self->communicator );
+	Journal_DPrintf( self->debug, "In: %s\n", __func__ );
+	Journal_Printf( self->info, "TimeStep = %d, Start time = %.6g + %.6g prev timeStep dt\n",
+		self->timeStep, self->currentTime, dt );
+
+	if (self->loadFromCheckPoint) {
+		Journal_Printf( self->info, "TimeStep since job restart = %d\n", self->timeStepSinceJobRestart );
+	}
+
+	#ifdef DEBUG
+		Context_WarnIfNoHooks( self, self->solveK, __func__ );	
+	#endif
+
+	self->_setDt( self, dt );
+	KeyCall( self, self->solveK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->solveK), self );
+	KeyCall( self, self->updateClassK, EntryPoint_Class_VoidPtr_CallCast* )( KeyHandle(self,self->updateClassK), self );
+	KeyCall( self, self->syncK, EntryPoint_VoidPtr_CallCast* )( KeyHandle(self,self->syncK), self );
+}
+
+
+void _AbstractContext_LoadTimeInfoFromCheckPoint( Context* self, Index timeStep, double* dtLoadedFromFile ) {
+	char*                  timeInfoFileName = NULL;
+	FILE*                  timeInfoFile;		
+	Stream*                errorStr = Journal_Register( Error_Type, self->type );
+
+	timeInfoFileName = AbstractContext_GetTimeInfoFileNameForGivenTimeStep( self, timeStep ); 
+	timeInfoFile = fopen( timeInfoFileName, "r" );
+	Journal_Firewall( NULL != timeInfoFile, errorStr, "Error- in %s(), Couldn't find checkpoint time info file with "
+		"filename \"%s\" - aborting.\n", __func__, timeInfoFileName );
+
+	/* set currentTime and Dt loaded from file */
+	fscanf( timeInfoFile, "%lg", &self->currentTime );
+	fscanf( timeInfoFile, "%lg", dtLoadedFromFile );
+	fclose( timeInfoFile );
+	Memory_Free( timeInfoFileName );
+}
+		
+
+void _AbstractContext_SaveTimeInfo( Context* context ) {
+	AbstractContext*       self = context;	
+	char*                  timeInfoFileName = NULL;
+	FILE*                  timeInfoFile;	
+
+	/* Only the master process needs to write this file */
+	if ( 0 != self->rank ) return;
+
+	timeInfoFileName = AbstractContext_GetTimeInfoFileNameForGivenTimeStep( self, self->timeStep ); 
+	
+	timeInfoFile = fopen( timeInfoFileName, "w" );
+
+	if ( False == timeInfoFile ) {
+		Stream*    errorStr = Journal_Register( Error_Type, self->type );
+		Journal_Printf( errorStr, "Error- in %s(), Couldn't create checkpoint time info file with "
+		"filename \"%s\" - aborting.\n", __func__, timeInfoFileName );
+		exit(EXIT_FAILURE);
+	}
+
+	/* set currentTime and Dt loaded from file */
+	fprintf( timeInfoFile, "%lg ", context->currentTime );
+	fprintf( timeInfoFile, "%lg\n", AbstractContext_Dt( context ) );
+	fclose( timeInfoFile );
+	Memory_Free( timeInfoFileName );
+}
+
+
+Bool AbstractContext_CheckPointExists( void* context, Index timeStep ) {
+	AbstractContext*       self = context;	
+	char*                  timeInfoFileName = NULL;
+	struct stat            statInfo;
+	int                    statResult;
+
+	timeInfoFileName = AbstractContext_GetTimeInfoFileNameForGivenTimeStep( self, self->timeStep ); 
+	statResult = stat( timeInfoFileName, &statInfo );
+
+	if ( 0 == statResult ) {
+		return True;
+	}
+	else {
+		return False;
+	}
+}
+
+
+char* AbstractContext_GetTimeInfoFileNameForGivenTimeStep( void* context, Index timeStep ) {
+	AbstractContext*       self = context;	
+	char*                  timeInfoFileName = NULL;
+	Index                  timeInfoStrLen = 0;
+
+	timeInfoStrLen = strlen(self->outputPath) + 1 + 8 + 1 + 5 + 1 + 3 + 1;
+	if ( strlen(self->checkPointPrefixString) > 0 ) {
+		timeInfoStrLen += strlen(self->checkPointPrefixString) + 1;
+	}
+	timeInfoFileName = Memory_Alloc_Array( char, timeInfoStrLen, "timeInfoFileName" );
+
+	if ( strlen(self->checkPointPrefixString) > 0 ) {
+		sprintf( timeInfoFileName, "%s/%s.", self->outputPath, self->checkPointPrefixString );
+	}
+	else {
+		sprintf( timeInfoFileName, "%s/", self->outputPath );
+	}
+	sprintf( timeInfoFileName, "%stimeInfo.%.5u.dat", timeInfoFileName, timeStep );
+
+	return timeInfoFileName;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,281 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "modellers"/"solvers" are laid out and execute.
+**
+** Assumptions:
+**
+** Comments:
+**	This is a class, of which subclasses can be defined, which can override default methods.
+**	Currently built with only MeshPIC_Context in mind (for Snac).
+**
+** $Id: AbstractContext.h 3857 2006-10-14 18:06:05Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Context_AbstractContext_h__
+#define __Base_Context_AbstractContext_h__
+	
+
+	/* Templates of virtual functions */
+	typedef void		(AbstractContext_SetDt)				( void* self, double dt );
+	
+	
+	/* Context_CallInfo info */
+	#define __Base_Context_CallInfo \
+		void*					functionPointer; \
+		void*					entryPoint;
+	struct Context_CallInfo { __Base_Context_CallInfo };
+	
+	
+	/* AbstractContext entry point names */
+	extern Type AbstractContext_EP_Construct;
+	extern Type AbstractContext_EP_ConstructExtensions;
+	extern Type AbstractContext_EP_Build;
+	extern Type AbstractContext_EP_Initialise;
+	extern Type AbstractContext_EP_Execute;
+	extern Type AbstractContext_EP_Destroy;
+	extern Type AbstractContext_EP_DestroyExtensions;
+	extern Type AbstractContext_EP_Dt;
+	extern Type AbstractContext_EP_Step;
+	extern Type AbstractContext_EP_UpdateClass;
+	extern Type AbstractContext_EP_Solve;
+	extern Type AbstractContext_EP_Sync;
+	extern Type AbstractContext_EP_FrequentOutput;
+	extern Type AbstractContext_EP_Dump;
+	extern Type AbstractContext_EP_DumpClass;
+	extern Type AbstractContext_EP_Save;
+	extern Type AbstractContext_EP_SaveClass;
+	
+	/* Textual name of this class */
+	extern const Type AbstractContext_Type;
+	extern const Type AbstractContext_Type_Verbose; /* Use for a particular info stream */
+	
+	/* AbstractContext info */
+	#define __AbstractContext \
+		/* General info */ \
+		__Stg_Component \
+		Dictionary*				dictionary; \
+		\
+		/* Virtual info */ \
+		AbstractContext_SetDt*			_setDt; \
+		\
+		/* AbstractContext info */ \
+		MPI_Comm				communicator; \
+		int					rank; \
+		int					nproc; \
+		/** Start time for the simulation. */ \
+		double					startTime; \
+		/** Stop time for the simulation. Note that if this is 0, the sim will keep running unless a 
+		max loops criterion is met. */ \
+		double					stopTime; \
+		double					currentTime; \
+		unsigned int				timeStep; \
+		double					dtFactor; \
+		/** This additional timestep is necessary for checkpoint restart runs, so it can be compared against
+			maxTimeSteps (which is now relative to job restart).*/ \
+		unsigned int				timeStepSinceJobRestart; \
+		/** Maximum number of time steps to run for. If set to 0, then this will  be ignored. */ \
+		unsigned int				maxTimeSteps; \
+		/** Final Time Step: last time step to run till, no matter if maxTimeSteps still has some
+		     left in a checkpoint restart run. If 0 (the default), not active. */ \
+		unsigned int				finalTimeStep; \
+		Bool					gracefulQuit; \
+		unsigned int				frequentOutputEvery; \
+		unsigned int				dumpEvery; \
+		unsigned int				checkpointEvery; \
+		Name                                    experimentName; \
+		char*					outputPath; \
+		Bool                                    loadFromCheckPoint;      \
+		unsigned int                            restartTimestep;         \
+		char*                                   checkPointPrefixString;  \
+		Stream*					info; \
+		Stream*					verbose; \
+		Stream*					debug; \
+		\
+		/* These are stored keys to entrypoints in the table, used for O(1) lookup (i.e. speed) */ \
+		/* Contexts "are" Components implemented by entrypoints... there's an entry point per component phase */ \
+		EntryPoint_Index			constructK; \
+		EntryPoint_Index			constructExtensionsK; \
+		EntryPoint_Index			buildK; \
+		EntryPoint_Index			initialiseK; \
+		EntryPoint_Index			executeK; \
+		EntryPoint_Index			destroyK; \
+		EntryPoint_Index			destroyExtensionsK; \
+		\
+		/* The following are not really part of an abstract context, and will one day be refactored somewhere else */ \
+		EntryPoint_Index			dtK; \
+		EntryPoint_Index			stepK; \
+		EntryPoint_Index			updateClassK; \
+		EntryPoint_Index			solveK; \
+		EntryPoint_Index			syncK; \
+		EntryPoint_Index			frequentOutputK; \
+		EntryPoint_Index			dumpK; \
+		EntryPoint_Index			dumpClassK; \
+		EntryPoint_Index			saveK; \
+		EntryPoint_Index			saveClassK; \
+		\
+		Stg_ObjectList*				objectList; \
+		ConditionFunction_Register*		condFunc_Register; \
+		Variable_Register*			variable_Register; \
+		Pointer_Register*			pointer_Register; \
+		EntryPoint_Register*			entryPoint_Register; \
+		ExtensionManager_Register*		extensionMgr_Register; \
+		ExtensionManager*			extensionMgr; \
+		Register_Register*			register_Register; \
+		Stg_ComponentFactory*			CF; \
+		PluginsManager*				plugins;
+		
+	struct AbstractContext { __AbstractContext };
+	
+	/* Class stuff ************************************************************************************************************/
+	
+	/* No "AbstractContext_New" and "AbstractContext_Init" as this is an abstract class */
+	
+	/* Creation implementation / Virtual constructor */
+	AbstractContext* _AbstractContext_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						startTime,
+		double						stopTime,
+		MPI_Comm					communicator,
+		Dictionary*					dictionary );
+	
+	/* Initialisation implementation */
+	void _AbstractContext_Init( 
+		AbstractContext* 		self,
+		double				startTime,
+		double				stopTime,
+		MPI_Comm			communicator );
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _AbstractContext_Delete( void* abstractContext );
+	
+	/* Print implementation */
+	void _AbstractContext_Print( void* abstractContext, Stream* stream );
+	
+	
+	/* Component stuff ********************************************************************************************************/
+	
+	
+	/* Construct the context ... connect and validate component connections, and initialise non-bulk internal values */
+	void _AbstractContext_Construct( void* context, Stg_ComponentFactory* cf, void* data );
+	
+	/* Build the context ... allocates memory (builds arrays) */
+	void _AbstractContext_Build( void* context, void* data );
+	
+	/* Initialise the context ... initialises memory (fills arrays with initial values) */
+	void _AbstractContext_Initialise( void* context, void* data );
+	
+	/* Run the context ... perform the task this component is supposed to perform */
+	void _AbstractContext_Execute( void* context, void* data );
+	
+	/* Destroy the context ... clean up / un build */
+	void _AbstractContext_Destroy( void* context, void* data );
+	
+	
+	/* Context public methods *************************************************************************************************/
+	
+	
+	/* Print entry points utility */
+	void AbstractContext_PrintConcise( void* abstractContext, Stream* stream );
+	
+	EntryPoint_Index AbstractContext_AddEntryPoint( void* abstractContext, void* entryPoint );
+	
+	/* Add an entry point. "castType" is ignored unless this is a new entry point. Returns a key to the entry. */
+	EntryPoint* AbstractContext_GetEntryPoint( void* abstractContext, const Name entryPointName ); 
+	
+	/* Runs the AbstractContext_EP_FrequentOutput Entry Point */
+	void AbstractContext_FrequentOutput( void* context ) ;
+	
+	/* Runs the AbstractContext_EP_Dump and AbstractContext_EP_DumpClass Entry Points */
+	void AbstractContext_Dump( void* context ) ;
+	
+	/* Runs the AbstractContext_EP_Save Entry Point */
+	void AbstractContext_Save( void* context ) ;
+
+	/* Run an entry point... resolving from name (slower) */
+	#define AbstractContext_Call( self, name, cast, handle )	((cast)_AbstractContext_Call( self, name, &handle ))
+	Func_Ptr _AbstractContext_Call( void* abstractContext, Name name, void** handle );
+	
+	/* Run an entry point... resolving using key (slower) */
+	#define AbstractContext_KeyHandle( self, key ) \
+		EntryPoint_Register_At( (self)->entryPoint_Register, key )
+	#define AbstractContext_KeyCall( self, key, cast ) \
+		((cast)(EntryPoint_Register_At( (self)->entryPoint_Register, key )->run))
+	
+	/* Obtain the Dt */
+	double AbstractContext_Dt( void* context );
+	
+	/* Step the solver */
+	void AbstractContext_Step( void* context, double dt );
+	
+	/* function to warn if no hooks to an entrypoint defined */
+	void AbstractContext_WarnIfNoHooks( void* context, EntryPoint_Index epIndex, const char* caller );
+	
+	/* function to error if no hooks to an entrypoint defined */
+	void AbstractContext_ErrorIfNoHooks( void* context, EntryPoint_Index epIndex, const char* caller );
+	
+	void AbstractContext_BuildAllLiveComponents( void* context ) ;
+	void AbstractContext_InitialiseAllLiveComponents( void* context ) ;
+
+	Bool AbstractContext_CheckPointExists( void* context, Index timeStep );
+	char* AbstractContext_GetTimeInfoFileNameForGivenTimeStep( void* context, Index timeStep );
+	
+	/* Context private methods ************************************************************************************************/
+	
+	
+	/* Default construction hook, and overrides for the EP to handle the context/ptrToContext synchronisation */
+	void _AbstractContext_Construct_Hook( void* context, void* ptrToContext );
+	Func_Ptr _AbstractContext_Construct_EP_GetRun( void* entryPoint );
+	void _AbstractContext_Construct_EP_Run( void* entryPoint, void* data0, void* data1 );
+	
+	/* Default construction hook */
+	void _AbstractContext_Execute_Hook( Context* context );
+	
+	/* Step the solver implementation */
+	void _AbstractContext_Step( Context* context, double dt );
+	
+	void _AbstractContext_LoadTimeInfoFromCheckPoint( Context* self, Index timeStep, double* dtLoadedFromFile );
+	void _AbstractContext_SaveTimeInfo( Context* context );
+
+#endif /* __Base_Context_AbstractContext_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">AbstractContext</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Context/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>

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Context.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Context.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Context.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Context.h 3617 2006-06-02 05:16:10Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Context_h__
+#define __Base_Context_h__
+	
+	#include "units.h"
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "ContextEntryPoint.h"
+	#include "AbstractContext.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	#include "DictionaryCheck.h"
+	
+#endif /* __Base_Context_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,165 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ContextEntryPoint.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "units.h"
+#include "types.h"
+#include "shortcuts.h"
+#include "ContextEntryPoint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdarg.h>
+
+/* Textual name of this class */
+const Type ContextEntryPoint_Type = "ContextEntryPoint";
+
+
+ContextEntryPoint* ContextEntryPoint_New( const Name name, unsigned int castType ) {
+	return _ContextEntryPoint_New( sizeof(ContextEntryPoint), ContextEntryPoint_Type, _EntryPoint_Delete, 
+		_EntryPoint_Print, NULL, _ContextEntryPoint_GetRun, name, castType );
+}
+
+void ContextEntryPoint_Init( void* contextEntryPoint, Name name, unsigned int castType ) {
+	ContextEntryPoint* self = (ContextEntryPoint*)contextEntryPoint;
+	
+	/* General info */
+	self->type = ContextEntryPoint_Type;
+	self->_sizeOfSelf = sizeof(ContextEntryPoint);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _EntryPoint_Delete;
+	self->_print = _EntryPoint_Print;
+	self->_copy = NULL;
+	self->_getRun = _ContextEntryPoint_GetRun;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, GLOBAL );
+	_EntryPoint_Init( (EntryPoint*)self, castType );
+	
+	/* ContextEntryPoint info */
+	_ContextEntryPoint_Init( self );
+}
+
+ContextEntryPoint* _ContextEntryPoint_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		EntryPoint_GetRunFunction*	_getRun,
+		Name				name,
+		unsigned int			castType )
+{
+	ContextEntryPoint* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ContextEntryPoint) );
+	self = (ContextEntryPoint*)_EntryPoint_New( _sizeOfSelf, type, _delete, _print, _copy, 
+		_getRun, name, castType );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ContextEntryPoint info */
+	_ContextEntryPoint_Init( self );
+	
+	return self;
+}
+
+void _ContextEntryPoint_Init( ContextEntryPoint* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* ContextEntryPoint info */
+}
+
+
+Func_Ptr _ContextEntryPoint_GetRun( void* contextEntryPoint ) {
+	ContextEntryPoint* self = (ContextEntryPoint*)contextEntryPoint;
+	
+	switch( self->castType ) {
+		case ContextEntryPoint_Dt_CastType:
+			return (Func_Ptr)_ContextEntryPoint_Run_Dt;
+		
+		case ContextEntryPoint_Step_CastType:
+			return (Func_Ptr)_ContextEntryPoint_Run_Step;
+		
+		default:
+			return (Func_Ptr)_EntryPoint_GetRun( self );
+	}
+}
+
+
+double _ContextEntryPoint_Run_Dt( void* contextEntryPoint, void* data0 ) {
+	ContextEntryPoint* self = (ContextEntryPoint*)contextEntryPoint;
+	Hook_Index hookIndex;
+	double result = 0.0;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _ContextEntryPoint_Run_Dt, self->name );
+	#endif
+
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		result = ((ContextEntryPoint_Dt_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0 );
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+
+	return result;
+}
+
+void _ContextEntryPoint_Run_Step( void* contextEntryPoint, void* data0, double data1 ) {
+	ContextEntryPoint* self = (ContextEntryPoint*)contextEntryPoint;
+	Hook_Index hookIndex;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _ContextEntryPoint_Run_Step, self->name );
+	#endif
+
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		((ContextEntryPoint_Step_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0, data1 );
+	}
+
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Context specific entry points.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ContextEntryPoint.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Context_ContextEntryPoint_h__
+#define __Base_Context_ContextEntryPoint_h__
+	
+	/* Templates for default entry point type */
+	typedef double			(ContextEntryPoint_Dt_Cast)		( void* context );
+	typedef double			(ContextEntryPoint_Dt_CallCast)		( void* entryPoint, void* context );
+	typedef void			(ContextEntryPoint_Step_Cast)		( void* context, double dt );
+	typedef void			(ContextEntryPoint_Step_CallCast)	( void* entryPoint, void* context, double dt );
+	#define 			ContextEntryPoint_Dt_CastType		(EntryPoint_CastType_MAX+1)
+	#define 			ContextEntryPoint_Step_CastType		(ContextEntryPoint_Dt_CastType+1)
+	#define 			ContextEntryPoint_CastType_MAX		(ContextEntryPoint_Step_CastType+1)
+	
+	/** Textual name of this class */
+	extern const Type ContextEntryPoint_Type;
+	
+	/** ContextEntryPoint info */
+	#define __ContextEntryPoint \
+		/* General info */ \
+		__EntryPoint \
+		\
+		/* Virtual info */ \
+		\
+		/* ContextEntryPoint info */
+	struct ContextEntryPoint { __ContextEntryPoint };
+	
+	/* Create a new ContextEntryPoint */
+	ContextEntryPoint* ContextEntryPoint_New( Name name, unsigned int castType );
+	
+	/* Initialise an ContextEntryPoint */
+	void ContextEntryPoint_Init( void* contextEntryPoint, Name name, unsigned int castType );
+	
+	/* Creation implementation */
+	ContextEntryPoint* _ContextEntryPoint_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		EntryPoint_GetRunFunction*	_getRun,
+		Name				name,
+		unsigned int			castType );
+	
+	/* Initialisation implementation */
+	void _ContextEntryPoint_Init( ContextEntryPoint* self );
+	
+	
+	/* Default GetRun implementation */
+	Func_Ptr _ContextEntryPoint_GetRun( void* contextEntryPoint );
+	
+	/* Context entry point run... one void* arguement passed, double returned. */
+	double _ContextEntryPoint_Run_Dt( void* contextEntryPoint, void* data0 );
+	
+	/* Context entry point run... one void* arguement passed, one double arguement passed */
+	void _ContextEntryPoint_Run_Step( void* contextEntryPoint, void* data0, double data1 );
+	
+#endif /* __Base_Context_ContextEntryPoint_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: AbstractContext.c 3562 2006-05-11 10:43:48Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "units.h"
+#include "types.h"
+#include "shortcuts.h"
+#include "ContextEntryPoint.h"
+#include <mpi.h>  /* subsequent files need this */
+#include "DictionaryCheck.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+
+void CheckDictionaryKeys( Dictionary* dictionary, char* errorMessage)
+{
+	Dictionary_Index index_I, index_J;
+	/* Put in the Journal_Firewall stream */
+	Stream* errStream = Journal_Register( Error_Type, "DictionaryCheck");
+	int errCount;
+	int** keyIndexArray;
+
+
+	keyIndexArray = Memory_Alloc_2DArray( int, ((dictionary->count)*(dictionary->count - 1)), 
+					2, "Key Index Array" );
+	/* Iterate through the whole dictionary*/
+	errCount = 0;
+	for ( index_I = 0; index_I < dictionary->count; ++index_I )
+	{
+		/*For Each key, search through dictionary to see if there is another 
+		key the same*/
+		for (index_J = index_I+1; index_J < dictionary->count; ++index_J ) {
+			if (index_J != index_I)
+			{
+				/* If there are two keys with the same name */
+				if ( (0 == strcasecmp( dictionary->entryPtr[index_I]->key, 
+					dictionary->entryPtr[index_J]->key)) )
+				{
+
+					//preserve indexes index_I, index_J
+					keyIndexArray[errCount][0] = index_I;
+					keyIndexArray[errCount][1] = index_J;					
+					//increment counter
+					errCount++;
+					
+				}
+			}
+			
+		}
+	}
+	/*if keyIndexArray is not empty, then do a print to error stream 
+	for each problem then call Journal_Firewall */
+	
+
+	if (errCount > 0) {
+		Index errIndex;
+		Journal_Printf(errStream, errorMessage);
+		Journal_Printf(errStream,"Error found in dictionary (ptr) %p:\n",dictionary);
+		Journal_Printf(errStream,"The following keys were repeated:\n");
+		Stream_Indent(errStream);
+		for (errIndex = 0; errIndex < errCount; errIndex++) {
+
+			Journal_Printf(errStream, "\"%s\"\n",					 
+				dictionary->entryPtr[keyIndexArray[errIndex][1]]->key );
+		}
+		//Do I need this one here if Journal_Firewall exits prog?
+		Stream_UnIndent(errStream);
+		Journal_Firewall(errCount == 0, errStream, 
+					"Error in %s with %d entries in dictionary keys\n",
+					__func__, errCount);
+		
+	}
+	Memory_Free(keyIndexArray);
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: DictionaryCheck.h 3462 2006-02-19 06:53:24Z KHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_BaseContext_DictionaryCheck_h__
+#define __Base_BaseContext_DictionaryCheck_h__
+	
+	void BaseContext_DictionaryCheck( Dictionary* dictionary );
+	
+	void CheckDictionaryKeys(Dictionary* dictionary, char* errorMessage);
+	
+#endif /* __Base_BaseContext_DictionaryCheck_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool BaseContext_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_BaseContext_Finalise_h__
+#define __Base_BaseContext_Finalise_h__
+	
+	Bool BaseContext_Finalise( void );
+	
+#endif /* __Base_BaseContext_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "types.h"
+#include "Init.h"
+#include "AbstractContext.h"
+#include "ContextEntryPoint.h"
+
+#include <stdio.h>
+
+Bool BaseContext_Init( int* argc, char** argv[] ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+
+	RegisterParent( AbstractContext_Type,   Stg_Component_Type );
+	RegisterParent( ContextEntryPoint_Type, EntryPoint_Type );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_BaseContext_Init_h__
+#define __Base_BaseContext_Init_h__
+	
+	Bool BaseContext_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_BaseContext_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 1260 2004-04-20 20:01:15Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\" -DLIB_DIR=\"${LIB_DIR}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseContext
+def_inc = StGermain/Base/Context
+
+def_srcs = \
+	ContextEntryPoint.c \
+	AbstractContext.c \
+	Init.c \
+	Finalise.c\
+	DictionaryCheck.c
+
+def_hdrs = \
+	units.h \
+	types.h \
+	shortcuts.h \
+	ContextEntryPoint.h \
+	AbstractContext.h \
+	Init.h \
+	Finalise.h \
+	Context.h\
+	DictionaryCheck.h
+
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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.rules 1735 2004-07-26 00:19:55Z 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
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS} -DLIB_DIR=\"${LIB_DIR}\"
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseExtensibility ${RPATH_LFLAGS}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Shortcuts to complex types in the eyes of the Context user.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Context_shortcuts_h__
+#define __Base_Context_shortcuts_h__
+	
+	#define Context_PrintConcise		AbstractContext_PrintConcise
+	#define Context_AddEntryPoint		AbstractContext_AddEntryPoint
+	#define Context_GetEntryPoint		AbstractContext_GetEntryPoint
+	#define Context_Call			AbstractContext_Call
+	#define Context_KeyCall			AbstractContext_KeyCall
+	#define Context_KeyHandle		AbstractContext_KeyHandle
+	#define Context_Dt			AbstractContext_Dt
+	#define Context_Step			AbstractContext_Step
+	#define Context_WarnIfNoHooks		AbstractContext_WarnIfNoHooks
+	#define Context_ErrorIfNoHooks		AbstractContext_ErrorIfNoHooks
+	
+	#define KeyCall				Context_KeyCall
+	#define KeyHandle			Context_KeyHandle
+
+	/* Shortcuts to other short cut Entry Point functions. */
+
+	#define ContextEP_Prepend( context, epName, func ) \
+		EP_Prepend( \
+			Context_GetEntryPoint( context, epName ), \
+			func )
+
+	#define ContextEP_Prepend_AlwaysFirst( context, epName, func ) \
+		EP_Prepend_AlwaysFirst( \
+			Context_GetEntryPoint( context, epName ), \
+			func )
+
+	#define ContextEP_Append( context, epName, func ) \
+		EP_Append( \
+			Context_GetEntryPoint( context, epName ), \
+			func )
+
+	#define ContextEP_Append_AlwaysLast( context, epName, func ) \
+		EP_Append_AlwaysLast( \
+			Context_GetEntryPoint( context, epName ), \
+			func )
+
+	#define ContextEP_InsertBefore( context, epName, funcToInsertBefore, func ) \
+		EP_InsertBefore( \
+			Context_GetEntryPoint( context, epName ), \
+			funcToInsertBefore, \
+			func )
+	
+	#define ContextEP_InsertAfter( context, epName, funcToInsertAfter, func ) \
+		EP_InsertAfter( \
+			Context_GetEntryPoint( context, epName ), \
+			funcToInsertAfter, \
+			func )
+
+	#define ContextEP_Remove( context, epName, reference )\
+		EP_Remove( \
+			Context_GetEntryPoint( context, epName ), \
+			reference )
+	
+	#define ContextEP_Replace( context, epName, funcToReplace, func ) \
+		EP_Replace( \
+			Context_GetEntryPoint( context, epName ), \
+			funcToReplace, \
+			func )
+
+	#define ContextEP_ReplaceAll( context, epName, func ) \
+		EP_ReplaceAll( \
+			Context_GetEntryPoint( context, epName ), \
+			func )
+
+	#define ContextEP_Purge( context, epName ) \
+		EP_Purge( Context_GetEntryPoint( context, epName ) )
+
+#endif /* __Base_Context_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Context types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Context_types_h__
+#define __Base_Context_types_h__
+	
+	/* Context types/classes */
+	typedef struct AbstractContext		AbstractContext;
+	typedef struct ContextEntryPoint	ContextEntryPoint;
+	
+	typedef AbstractContext			Context;
+	
+	/* AbstractContext types */
+	typedef struct Context_CallInfo	Context_CallInfo;
+
+	typedef Stg_ObjectList			Pointer_Register;
+	typedef Stg_ObjectList			Register_Register;
+	
+#endif /* __Base_Context_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/src/units.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/src/units.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/src/units.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	Physical units common to all framework apps.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: units.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Context_units_h__
+#define __Base_Context_units_h__
+
+#endif /* __Base_Context_units_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+#hack ... need to add a "libdl" external to MM and smarts to know that a dll's extension is called a "dylib" on a mac.
+DL_LIBS=-ldl
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` ${DL_LIBS}
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3617 2006-06-02 05:16:10Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseContext
+
+def_srcs = \
+	testAbstractContext-noDtDefined.c \
+	testAbstractContext-noOptionsDefined.c \
+	testAbstractContext0.c \
+	testAbstractContext1.c \
+	testAbstractContextCheckPoint.c\
+	testDictionaryCheck.c
+
+def_checks = \
+	testAbstractContext-noDtDefined.0of1.sh \
+	testAbstractContext-noOptionsDefined.0of1.sh \
+	testAbstractContext0.0of1.sh \
+	testAbstractContext1.0of1.sh \
+	testAbstractContextCheckPoint.0of1.sh\
+	testDictionaryCheck.0of1.sh

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseContext -lStGermainBaseExtensibility -lStGermainBaseAutomation -lStGermainBaseContainer -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+
+packages = MPI XML MATH DL
+
+# 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 ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+Watching rank: 0
+Context: TestContext
+	EP: Context_Construct
+		H: "default" (Context)
+	EP: Context_ConstructExtensions
+	EP: Context_Build
+		H: "BuildAllLiveComponents" (Context)
+	EP: Context_Initialise
+		H: "InitialiseAllLiveComponents" (Context)
+	EP: Context_Execute
+		H: "default" (Context)
+	EP: Context_Destroy
+	EP: Context_DestroyExtensions
+	EP: Context_Dt
+	EP: Context_Step
+		H: "default" (Context)
+	EP: Context_Solve
+	EP: Context_UpdateClass
+	EP: Context_Sync
+	EP: Context_FrequentOutput
+	EP: Context_Dump
+	EP: Context_DumpClass
+	EP: Context_Save
+		H: "SaveTimeInfo" (Context)
+	EP: Context_SaveClass
+Run until simulation time passes 10.
+Error: No hooks defined for E.P. "Context_Dt". Calling parent function AbstractContext_Dt() requires at least one Context_Dt hook defined.

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testAbstractContext-noDtDefined " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,164 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 AbstractContext in the most basic sence... creation on default values, run with single entries added, and delete.
+**
+** $Id: testAbstractContext-noDtDefined.c 3655 2006-06-28 06:45:17Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+/* need to allocate memory for this stream */
+Stream* stream;
+
+void MyDelete( void* abstractContext ) {
+	_AbstractContext_Delete( abstractContext );
+}
+
+void MyPrint( void* abstractContext, Stream* myStream ) {
+	_AbstractContext_Print( abstractContext, myStream );
+}
+
+void MyBuild( void* context ) {
+	Journal_Printf( (void*) stream, "This is Build\n" );
+}
+
+void MyInitialConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions\n" );
+}
+
+double dt = 2.0f;
+
+double MyDt( void* context ) {
+	Journal_Printf( (void*) stream, "This is Dt, returning %g\n", dt );
+	return dt;
+}
+
+void MyBoundaryConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is BoundaryConditions\n" );
+}
+
+void MySolve( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve\n" );
+}
+
+void MySync( void* context ) {
+	Journal_Printf( (void*) stream, "This is Sync\n" );
+}
+
+void MyOutput( void* context ) {
+	Journal_Printf( (void*) stream, "This is Output\n" );
+}
+
+void MySetDt( void* context, double _dt ) {
+	Journal_Printf( (void*) stream, "This is SetDt... setting to %g\n", _dt );
+	dt = _dt;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Dictionary* dictionary;
+	AbstractContext* abstractContext;
+	
+	/* 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	BaseContext_Init( &argc, &argv );
+	stream = Journal_Register (Info_Type, "myStream");
+
+	/* Tell the Journal_Firewall to Clean exit, rather than assert */
+	Stream_SetFileBranch( Journal_GetTypedStream( ErrorStream_Type ), stJournal->stdOut );
+	stJournal->firewallProducesAssert = False;
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	
+	/* Build the context */
+	abstractContext = _AbstractContext_New( sizeof(AbstractContext), "TestContext", MyDelete, MyPrint, NULL,
+			NULL, NULL,
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"Context", True, MySetDt, 0, 10, CommWorld, dictionary );
+
+	if( rank == procToWatch ) {
+		stream = Journal_Register( InfoStream_Type, AbstractContext_Type );
+		Stg_Component_Build( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( abstractContext, 0 /* dummy */, False );
+		Context_PrintConcise( abstractContext, stream );
+		Stg_Component_Execute( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Destroy( abstractContext, 0 /* dummy */, False );
+	}
+	
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( abstractContext );
+	Stg_Class_Delete( dictionary );
+	
+	BaseContext_Finalise();
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,42 @@
+Watching rank: 0
+Context: TestContext
+	EP: Context_Construct
+		H: "default" (Context)
+	EP: Context_ConstructExtensions
+	EP: Context_Build
+		H: "BuildAllLiveComponents" (Context)
+	EP: Context_Initialise
+		H: "InitialiseAllLiveComponents" (Context)
+	EP: Context_Execute
+		H: "default" (Context)
+	EP: Context_Destroy
+	EP: Context_DestroyExtensions
+	EP: Context_Dt
+		H: "MyDt" (libStGermainBaseContext)
+	EP: Context_Step
+		H: "default" (Context)
+	EP: Context_Solve
+	EP: Context_UpdateClass
+	EP: Context_Sync
+	EP: Context_FrequentOutput
+	EP: Context_Dump
+	EP: Context_DumpClass
+	EP: Context_Save
+		H: "SaveTimeInfo" (Context)
+	EP: Context_SaveClass
+Run until simulation time passes 10.
+This is Dt, returning 2
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Dt, returning 2
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Dt, returning 2
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Dt, returning 2
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Dt, returning 2
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+This is SetDt... setting to 2

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testAbstractContext-noOptionsDefined " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Tests AbstractContext in the most basic sence... creation on default values, run with single entries added, and delete.
+**
+** $Id: testAbstractContext-noOptionsDefined.c 3655 2006-06-28 06:45:17Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+/* need to allocate memory for this stream */
+Stream* stream;
+
+void MyDelete( void* abstractContext ) {
+	_AbstractContext_Delete( abstractContext );
+}
+
+void MyPrint( void* abstractContext, Stream* stream ) {
+	_AbstractContext_Print( abstractContext, stream );
+}
+
+void MyBuild( void* context ) {
+	Journal_Printf( (void*) stream, "This is Build\n" );
+}
+
+void MyInitialConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions\n" );
+}
+
+double dt = 2.0f;
+
+double MyDt( void* context ) {
+	Journal_Printf( (void*) stream, "This is Dt, returning %g\n", dt );
+	return dt;
+}
+
+void MyBoundaryConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is BoundaryConditions\n" );
+}
+
+void MySolve( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve\n" );
+}
+
+void MySync( void* context ) {
+	Journal_Printf( (void*) stream, "This is Sync\n" );
+}
+
+void MyOutput( void* context ) {
+	Journal_Printf( (void*) stream, "This is Output\n" );
+}
+
+void MySetDt( void* context, double _dt ) {
+	Journal_Printf( (void*) stream, "This is SetDt... setting to %g\n", _dt );
+	dt = _dt;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Dictionary* dictionary;
+	AbstractContext* abstractContext;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	BaseContext_Init( &argc, &argv );
+	stream = Journal_Register (Info_Type, "myStream");
+
+	/* Redirect the error stream to stdout, so we can check warnings
+	appear correctly */
+	Stream_SetFileBranch( Journal_GetTypedStream( ErrorStream_Type ), stJournal->stdOut );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "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 ) );
+	
+	/* Build the context */
+	abstractContext = _AbstractContext_New( 
+		sizeof(AbstractContext), 
+		"TestContext", 
+		MyDelete, 
+		MyPrint, 
+		NULL,
+		NULL, 
+		NULL, 
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"context", 
+		True, 
+		MySetDt, 
+		0, 
+		10, 
+		CommWorld, 
+		dictionary );
+
+	/* add hooks to existing entry points */
+	ContextEP_Append( abstractContext, AbstractContext_EP_Dt, MyDt );
+
+	if( rank == procToWatch ) {
+		Stream* stream = Journal_Register( InfoStream_Type, AbstractContext_Type );
+		Stg_Component_Build( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( abstractContext, 0 /* dummy */, False );
+		Context_PrintConcise( abstractContext, stream );
+		Stg_Component_Execute( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Destroy( abstractContext, 0 /* dummy */, False );
+	}
+	
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( abstractContext );
+	Stg_Class_Delete( dictionary );
+	
+	BaseContext_Finalise();
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+Watching rank: 0
+Context: TestContext
+	EP: Context_Construct
+		H: "default" (Context)
+	EP: Context_ConstructExtensions
+	EP: Context_Build
+		H: "MyBuild" (libStGermainBaseContext)
+	EP: Context_Initialise
+		H: "MyInitialConditions" (libStGermainBaseContext)
+	EP: Context_Execute
+		H: "default" (Context)
+	EP: Context_Destroy
+	EP: Context_DestroyExtensions
+	EP: Context_Dt
+		H: "MyDt" (libStGermainBaseContext)
+	EP: Context_Step
+		H: "default" (Context)
+	EP: Context_Solve
+		H: "MySolve" (libStGermainBaseContext)
+	EP: Context_UpdateClass
+	EP: Context_Sync
+	EP: Context_FrequentOutput
+	EP: Context_Dump
+	EP: Context_DumpClass
+	EP: Context_Save
+		H: "SaveTimeInfo" (Context)
+	EP: Context_SaveClass
+abstractContext->entryPointList->_size: 24
+abstractContext->entryPointList->count: 17
+This is Build
+This is InitialConditions
+Run until simulation time passes 10.
+This is Dt, returning 2
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testAbstractContext0 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,188 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 AbstractContext in the most basic sence... creation on default values, run with single entries added, and delete.
+**
+** $Id: testAbstractContext0.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+
+/* need to allocate memory for this stream */
+Stream* stream;
+
+void MyDelete( void* abstractContext ) {
+	_AbstractContext_Delete( abstractContext );
+}
+
+void MyPrint( void* abstractContext, Stream* stream ) {
+	_AbstractContext_Print( abstractContext, stream );
+}
+
+void MyBuild( void* context ) {
+	Journal_Printf( (void*) stream, "This is Build\n" );
+}
+
+void MyInitialConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions\n" );
+}
+
+double dt = 2.0f;
+
+double MyDt( void* context ) {
+	Journal_Printf( (void*) stream, "This is Dt, returning %g\n", dt );
+	return dt;
+}
+
+void MySolve( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve\n" );
+}
+
+void MySync( void* context ) {
+	Journal_Printf( (void*) stream, "This is Sync\n" );
+}
+
+void MyOutput( void* context ) {
+	Journal_Printf( (void*) stream, "This is Output\n" );
+}
+
+void MySetDt( void* context, double _dt ) {
+	Journal_Printf( (void*) stream, "This is SetDt... setting to %g\n", _dt );
+	dt = _dt;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Dictionary* dictionary;
+	AbstractContext* abstractContext;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	BaseContext_Init( &argc, &argv );
+	
+	/* Initialize stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+
+	/* Read input */
+	dictionary = Dictionary_New();
+	
+	/* Build the context */
+	abstractContext = _AbstractContext_New( 
+		sizeof(AbstractContext), 
+		"TestContext", 
+		MyDelete, 
+		MyPrint, 
+		NULL, 
+		NULL,
+		NULL,
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"context",
+		True,
+		MySetDt, 
+		0, 
+		10, 
+		CommWorld, 
+		dictionary );
+
+	/* add hooks to existing entry points */
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Build, MyBuild );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Initialise, MyInitialConditions );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Solve, MySolve ); 
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Dt, MyDt ); 
+
+	if( rank == procToWatch ) {
+		stream = Journal_Register( InfoStream_Type, AbstractContext_Type );
+		AbstractContext_PrintConcise( abstractContext, stream );
+		
+		Journal_Printf( 
+			stream, 
+			"abstractContext->entryPointList->_size: %lu\n", 
+			abstractContext->entryPoint_Register->_size );
+		Journal_Printf( 
+			stream,
+			"abstractContext->entryPointList->count: %u\n", 
+			abstractContext->entryPoint_Register->count );
+	}
+	
+	/* Run the context */
+	if( rank == procToWatch ) {
+		Stg_Component_Build( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Execute( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Destroy( abstractContext, 0 /* dummy */, False );
+	}
+	
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( abstractContext );
+	Stg_Class_Delete( dictionary );
+	
+	BaseContext_Finalise();
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,60 @@
+Watching rank: 0
+abstractContext->entryPointList->_size: 24
+abstractContext->entryPointList->count: 17
+Context: TestContext
+	EP: Context_Construct
+		H: "default" (Context)
+	EP: Context_ConstructExtensions
+	EP: Context_Build
+		H: "MyBuild" (libStGermainBaseContext)
+	EP: Context_Initialise
+		H: "MyInitialConditions2" (libStGermainBaseContext)
+	EP: Context_Execute
+		H: "default" (Context)
+	EP: Context_Destroy
+	EP: Context_DestroyExtensions
+	EP: Context_Dt
+		H: "MyDt" (libStGermainBaseContext)
+	EP: Context_Step
+		H: "default" (Context)
+	EP: Context_Solve
+		H: "MySolve" (libStGermainBaseContext)
+		H: "MySolve2" (libStGermainBaseContext)
+	EP: Context_UpdateClass
+	EP: Context_Sync
+	EP: Context_FrequentOutput
+	EP: Context_Dump
+	EP: Context_DumpClass
+	EP: Context_Save
+		H: "SaveTimeInfo" (Context)
+	EP: Context_SaveClass
+abstractContext->entryPointList->_size: 24
+abstractContext->entryPointList->count: 17
+This is Build
+This is InitialConditions2
+Run until simulation time passes 10.
+This is Dt, returning 2
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Solve2
+This is Dt, returning 2
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Solve2
+This is Dt, returning 2
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Solve2
+This is Dt, returning 2
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Solve2
+This is Dt, returning 2
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Solve2

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testAbstractContext1 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests AbstractContext in the most basic sence... creation on default values, run with single entries added, and delete.
+**
+** $Id: testAbstractContext1.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* need to allocate memory for this stream */
+Stream* stream;
+
+void MyDelete( void* abstractContext ) {
+	_AbstractContext_Delete( abstractContext );
+}
+
+void MyPrint( void* abstractContext, Stream* stream ) {
+	_AbstractContext_Print( abstractContext, stream );
+}
+
+void MyBuild( void* context ) {
+	Journal_Printf( (void*) stream, "This is Build\n" );
+}
+
+void MyInitialConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions\n" );
+}
+
+void MyInitialConditions2( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions2\n" );
+}
+
+double dt = 2.0f;
+
+double MyDt( void* context ) {
+	Journal_Printf( (void*) stream, "This is Dt, returning %g\n", dt );
+	return dt;
+}
+
+void MySolve( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve\n" );
+}
+
+void MySolve2( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve2\n" );
+}
+
+void MySync( void* context ) {
+	Journal_Printf( (void*) stream, "This is Sync\n" );
+}
+
+void MyOutput( void* context ) {
+	Journal_Printf( (void*) stream, "This is Output\n" );
+}
+
+void MySetDt( void* context, double _dt ) {
+	Journal_Printf( (void*) stream, "This is SetDt... setting to %g\n", _dt );
+	dt = _dt;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Dictionary* dictionary;
+	AbstractContext* abstractContext;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	BaseContext_Init( &argc, &argv );
+	
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+	
+	/* Build the context */
+	abstractContext = _AbstractContext_New( 
+		sizeof(AbstractContext), 
+		"TestContext", 
+		MyDelete, 
+		MyPrint, 
+		NULL,
+		NULL, 
+		NULL, 
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"context", 
+		True, 
+		MySetDt, 
+		0, 
+		10, 
+		CommWorld, 
+		dictionary );
+
+	/* add hooks to existing entry points */
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Build, MyBuild );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Initialise, MyInitialConditions );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Solve, MySolve );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Dt, MyDt );
+
+	if( rank == procToWatch ) {
+		Journal_Printf( 
+			(void*)stream, 
+			"abstractContext->entryPointList->_size: %lu\n", 
+			abstractContext->entryPoint_Register->_size );
+		Journal_Printf( 
+			(void*)stream, 
+			"abstractContext->entryPointList->count: %u\n", 
+			abstractContext->entryPoint_Register->count );
+	}
+	
+	ContextEP_Append( abstractContext, AbstractContext_EP_Solve, MySolve2 );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Initialise, MyInitialConditions2 ); 
+
+	if( rank == procToWatch ) {
+		stream = Journal_Register( InfoStream_Type, AbstractContext_Type );
+		AbstractContext_PrintConcise( abstractContext, stream );
+		
+		Journal_Printf( 
+			(void*)stream, 
+			"abstractContext->entryPointList->_size: %lu\n", 
+			abstractContext->entryPoint_Register->_size );
+		Journal_Printf( 
+			(void*)stream, 
+			"abstractContext->entryPointList->count: %u\n", 
+			abstractContext->entryPoint_Register->count );
+	}
+
+	/* Run the context */
+	if( rank == procToWatch ) {
+		Stg_Component_Build( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Execute( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Destroy( abstractContext, 0 /* dummy */, False );
+	}
+	
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( abstractContext );
+	Stg_Class_Delete( dictionary );
+	
+	BaseContext_Finalise();
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,181 @@
+Watching rank: 0
+This is Build
+This is InitialConditions
+Run until 10 timeSteps have been run
+This is Dt, returning 2
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 6, Start time = 10 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 7, Start time = 12 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 8, Start time = 14 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 9, Start time = 16 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 10, Start time = 18 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+
+
+
+ After restart:
+
+This is Build
+This is InitialConditions
+Run until 20 timeSteps have been run
+TimeStep = 9, Start time = 16 + 2 prev timeStep dt
+TimeStep since job restart = 1
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 10, Start time = 18 + 2 prev timeStep dt
+TimeStep since job restart = 2
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 11, Start time = 20 + 2 prev timeStep dt
+TimeStep since job restart = 3
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 12, Start time = 22 + 2 prev timeStep dt
+TimeStep since job restart = 4
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 13, Start time = 24 + 2 prev timeStep dt
+TimeStep since job restart = 5
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 14, Start time = 26 + 2 prev timeStep dt
+TimeStep since job restart = 6
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 15, Start time = 28 + 2 prev timeStep dt
+TimeStep since job restart = 7
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 16, Start time = 30 + 2 prev timeStep dt
+TimeStep since job restart = 8
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 17, Start time = 32 + 2 prev timeStep dt
+TimeStep since job restart = 9
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 18, Start time = 34 + 2 prev timeStep dt
+TimeStep since job restart = 10
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 19, Start time = 36 + 2 prev timeStep dt
+TimeStep since job restart = 11
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 20, Start time = 38 + 2 prev timeStep dt
+TimeStep since job restart = 12
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 21, Start time = 40 + 2 prev timeStep dt
+TimeStep since job restart = 13
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 22, Start time = 42 + 2 prev timeStep dt
+TimeStep since job restart = 14
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 23, Start time = 44 + 2 prev timeStep dt
+TimeStep since job restart = 15
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 24, Start time = 46 + 2 prev timeStep dt
+TimeStep since job restart = 16
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 25, Start time = 48 + 2 prev timeStep dt
+TimeStep since job restart = 17
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 26, Start time = 50 + 2 prev timeStep dt
+TimeStep since job restart = 18
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 27, Start time = 52 + 2 prev timeStep dt
+TimeStep since job restart = 19
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2
+This is Dt, returning 2
+TimeStep = 28, Start time = 54 + 2 prev timeStep dt
+TimeStep since job restart = 20
+This is SetDt... setting to 2
+This is Solve
+This is Dt, returning 2

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,38 @@
+#!/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)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: testAbstractContextCheckPoint.0of1.sh 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+                                                                                                                                    
+runAndHandleSystemTest "testAbstractContextCheckPoint" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests AbstractContext in the most basic sence... creation on default values, run with single entries added, and delete.
+**
+** $Id: testAbstractContextCheckPoint.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* need to allocate memory for this stream */
+Stream* stream;
+
+void MyDelete( void* abstractContext ) {
+	_AbstractContext_Delete( abstractContext );
+}
+
+void MyPrint( void* abstractContext, Stream* stream ) {
+	_AbstractContext_Print( abstractContext, stream );
+}
+
+void MyBuild( void* context ) {
+	Journal_Printf( (void*) stream, "This is Build\n" );
+}
+
+void MyInitialConditions( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions\n" );
+}
+
+void MyInitialConditions2( void* context ) {
+	Journal_Printf( (void*) stream, "This is InitialConditions2\n" );
+}
+
+static double dt = 2;
+
+double MyDt( void* context ) {
+	Journal_Printf( (void*) stream, "This is Dt, returning %g\n", dt );
+	return dt;
+}
+
+void MySolve( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve\n" );
+}
+
+void MySolve2( void* context ) {
+	Journal_Printf( (void*) stream, "This is Solve2\n" );
+}
+
+void MySync( void* context ) {
+	Journal_Printf( (void*) stream, "This is Sync\n" );
+}
+
+void MyOutput( void* context ) {
+	Journal_Printf( (void*) stream, "This is Output\n" );
+}
+
+void MySetDt( void* context, double _dt ) {
+	Journal_Printf( (void*) stream, "This is SetDt... setting to %g\n", _dt );
+	dt = _dt;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Dictionary* dictionary;
+	AbstractContext* abstractContext;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	BaseContext_Init( &argc, &argv );
+	
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+	dictionary = Dictionary_New();
+
+	Dictionary_Add( dictionary, "outputPath", Dictionary_Entry_Value_FromString( "output" ) );
+	Dictionary_Add( dictionary, "checkpointEvery", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "maxTimeSteps", Dictionary_Entry_Value_FromUnsignedInt( 10 ) );
+	
+	/* Build the context */
+	abstractContext = _AbstractContext_New( 
+		sizeof(AbstractContext), 
+		"TestContext", 
+		MyDelete, 
+		MyPrint, 
+		NULL,
+		NULL, 
+		NULL, 
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"context", 
+		True, 
+		MySetDt, 
+		0, 
+		0, 
+		CommWorld, 
+		dictionary );
+
+	/* add hooks to existing entry points */
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Build, MyBuild );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Initialise, MyInitialConditions );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Solve, MySolve );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Dt, MyDt );
+
+	/* Run the context for the first time */
+	if( rank == procToWatch ) {
+		Stg_Component_Build( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Execute( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Destroy( abstractContext, 0 /* dummy */, False );
+	}
+	Stg_Class_Delete( abstractContext );
+	
+	printf( "\n\n\n After restart:\n\n" );
+	Dictionary_Set( dictionary, "maxTimeSteps", Dictionary_Entry_Value_FromUnsignedInt( 20 ) );
+	Dictionary_Set( dictionary, "restartTimestep", Dictionary_Entry_Value_FromUnsignedInt( 8 ) );
+
+	/* Build the context */
+	abstractContext = _AbstractContext_New( 
+		sizeof(AbstractContext), 
+		"TestContext", 
+		MyDelete, 
+		MyPrint, 
+		NULL,
+		NULL, 
+		NULL, 
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"context", 
+		True, 
+		MySetDt, 
+		0, 
+		0, 
+		CommWorld, 
+		dictionary );
+
+	/* add hooks to existing entry points */
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Build, MyBuild );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Initialise, MyInitialConditions );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Solve, MySolve );
+	ContextEP_ReplaceAll( abstractContext, AbstractContext_EP_Dt, MyDt );
+
+	/* Run the context for the second time */
+	if( rank == procToWatch ) {
+		Stg_Component_Build( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Execute( abstractContext, 0 /* dummy */, False );
+		Stg_Component_Destroy( abstractContext, 0 /* dummy */, False );
+	}
+	
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( abstractContext );
+	Stg_Class_Delete( dictionary );
+	
+	BaseContext_Finalise();
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.DictionaryCheck.txt.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.DictionaryCheck.txt.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.DictionaryCheck.txt.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+Dictionary:
+	size: 10
+	delta: 5
+	count: 5
+	entryPtr[0-5]: {
+		test_dict_string: "hello"
+		test_dict_double: 45.567
+		test_dict_string: "goodbye"
+		test_dict_string: "hello"
+		test_dict_string2: "hello"
+	}
+Dictionary 2:
+	size: 10
+	delta: 5
+	count: 3
+	entryPtr[0-3]: {
+		test_dict_string: "hello"
+		test_dict_double: 45.567
+		test_dict_stuff: "hello"
+	}
+Component dictionary must have unique names
+Error found in dictionary (ptr) 0x80580c8:
+The following keys were repeated:
+	"test_dict_string"
+	"test_dict_string"
+	"test_dict_string"
+Error in CheckDictionaryKeys with 3 entries in dictionary keys

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.expected
===================================================================

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testDictionaryCheck " "$0" "$@"

Added: long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the dictionary functionality
+**
+** $Id: testDictionary.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+#include "Base/Context/DictionaryCheck.h"
+
+#include "stdio.h"
+#include "stdlib.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+
+	stream = Journal_Register( Info_Type, Dictionary_Type );
+	stJournal->firewallProducesAssert = False;
+	Stream_RedirectFile(Journal_Register( Error_Type, "DictionaryCheck"), "DictionaryCheck.txt");
+	Stream_RedirectFile(stream, "DictionaryCheck.txt");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Dictionary*			dictionary = Dictionary_New();
+		Dictionary*			dictionary2 = Dictionary_New();
+		
+		Dictionary_Index	index;
+		char*			errMessage = "Component dictionary must have unique names\n";
+		
+		/* Create a set of Dictionary entries */
+		/* For dictionary */
+		Dictionary_Add( dictionary, "test_dict_string",
+			Dictionary_Entry_Value_FromString( "hello" ) );
+		Dictionary_Add( dictionary, "test_dict_double",
+			Dictionary_Entry_Value_FromDouble( 45.567 ) );
+		Dictionary_Add( dictionary, "test_dict_string",
+			Dictionary_Entry_Value_FromString( "goodbye" ) );	
+		Dictionary_Add( dictionary, "test_dict_string",
+			Dictionary_Entry_Value_FromString( "hello" ) );
+		Dictionary_Add( dictionary, "test_dict_string2",
+			Dictionary_Entry_Value_FromString( "hello" ) );
+		
+		/* For dictionary2 */
+		Dictionary_Add( dictionary2, "test_dict_string",
+			Dictionary_Entry_Value_FromString( "hello" ) );
+		Dictionary_Add( dictionary2, "test_dict_double",
+			Dictionary_Entry_Value_FromDouble( 45.567 ) );
+		Dictionary_Add( dictionary2, "test_dict_stuff",
+			Dictionary_Entry_Value_FromString( "hello") );
+
+		/* Print out dictionary stats */
+		Journal_Printf(stream, "Dictionary:\n" );
+		Journal_Printf(stream, "\tsize: %u\n", dictionary->size );
+		Journal_Printf(stream, "\tdelta: %u\n", dictionary->delta );
+		Journal_Printf(stream, "\tcount: %u\n", dictionary->count );
+		Journal_Printf(stream, "\tentryPtr[0-%u]: {\n", dictionary->count );
+		for( index = 0; index < dictionary->count; index++ ) {
+			
+			Journal_Printf(stream,"\t\t" );
+			Dictionary_Entry_Print( dictionary->entryPtr[index], stream ); 
+			Journal_Printf(stream, "\n" );
+		}
+		Journal_Printf(stream, "\t}\n" );
+		
+		Journal_Printf(stream, "Dictionary 2:\n" );
+		Journal_Printf(stream, "\tsize: %u\n", dictionary2->size );
+		Journal_Printf(stream, "\tdelta: %u\n", dictionary2->delta );
+		Journal_Printf(stream, "\tcount: %u\n", dictionary2->count );
+		Journal_Printf(stream, "\tentryPtr[0-%u]: {\n", dictionary2->count );
+		for( index = 0; index < dictionary2->count; index++ ) {
+			
+			Journal_Printf(stream, "\t\t" );
+			Dictionary_Entry_Print( dictionary2->entryPtr[index], stream ); 
+			Journal_Printf(stream, "\n" );
+		}
+		Journal_Printf(stream, "\t}\n" );
+
+
+		/* Call DictionaryCheck function */
+		CheckDictionaryKeys(dictionary2, errMessage);
+		CheckDictionaryKeys(dictionary,  errMessage);
+		
+		Stg_Class_Delete( dictionary );
+		Stg_Class_Delete( dictionary2 );
+	}
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainBaseExtensibility
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests distributedtests

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 3166 2005-08-11 00:03:11Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = testplugins
+
+def_tst = libStGermainBaseExtensibility
+
+def_srcs = \
+	testPlugin.c \
+	testDistributedPlugin.c
+
+def_checks = \
+	testPlugin.0of1.sh \
+	testDistributedPlugin-Local.0of1.sh \
+	testDistributedPlugin-LocalDep.0of1.sh
+
+def_test_support_srcs = \
+	MockContext.c

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Plugins.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+#include "MockContext.h"
+
+const Type MockContext_Type = "MockContext";
+
+void* _MockContext_DefaultNew( Name name ) {
+	return NULL;
+}
+void _MockContext_Construct( void* c, Stg_ComponentFactory* cf, void* data ) {
+
+}
+void _MockContext_Build( void* c, void* data ) {
+
+}
+void _MockContext_Initialise( void* c, void* data ) {
+
+}
+void _MockContext_Execute( void* c, void* data ) {
+
+}
+void _MockContext_Destroy( void* c, void* data ) {
+
+}
+
+MockContext* MockContext_New( Dictionary* dictionary ) {
+	MockContext* self;
+
+	self = (MockContext*) _Stg_Component_New(
+		sizeof( MockContext ),
+		"MockContext",
+		_MockContext_Delete,
+		NULL,
+		NULL,
+		_MockContext_DefaultNew,
+		_MockContext_Construct,
+		_MockContext_Build,
+		_MockContext_Initialise,
+		_MockContext_Execute,
+		_MockContext_Destroy,
+		"context",
+		NON_GLOBAL );
+
+	self->plugins = PluginsManager_New( dictionary );
+	PluginsManager_AddDirectory( self->plugins, "StGermain", LIB_DIR );
+	self->ep = EntryPoint_New( "TestEP", EntryPoint_VoidPtr_CastType );
+	self->em = ExtensionManager_New_OfExistingObject( "Context", self );
+
+	return self;
+}
+
+void _MockContext_Delete( void* context ) {
+	MockContext* self = (MockContext*)context;
+
+	Stg_Class_Delete( self->plugins );
+	Stg_Class_Delete( self->ep );
+	Stg_Class_Delete( self->em );
+	
+	_Stg_Class_Delete( self );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Plugins.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_distributedtest_MockContext_h__
+#define __Base_Extensibility_distributedtest_MockContext_h__
+
+extern const Type MockContext_Type;
+
+#define __MockContext \
+	__Stg_Component \
+	PluginsManager* plugins; \
+	EntryPoint* ep; \
+	ExtensionManager* em; 
+
+typedef struct {
+	__MockContext
+} MockContext;
+
+MockContext* MockContext_New();
+void _MockContext_Delete( void* context );
+
+
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalDepPlugins.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalDepPlugins.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalDepPlugins.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+<?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">
+                                                                                                                                    
+	<!-- Load the plugin that sets up the app, plus any others you require -->
+	<list name="plugins">
+		<!-- This should load dep plugins as well! -->
+		<param>LocalPlugin1</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+	</struct>`
+	
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalPlugin.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalPlugin.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalPlugin.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,15 @@
+<?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">
+                                                                                                                                    
+	<!-- Load the plugin that sets up the app, plus any others you require -->
+	<list name="plugins">
+		<param>LocalPlugin</param>
+	</list>
+
+	<struct name="components" mergeType="merge">
+	</struct>
+	
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,60 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3138 2005-07-29 04:21:55Z 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
+
+include Makefile.def
+
+subdirs=${def_sub}
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+TEST_SUPPORT_SRCS = ${def_test_support_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -DLIB_DIR=\"${LIB_DIR}\"
+
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseExtensibility -lStGermainBaseAutomation -lStGermainBaseContainer -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH DL
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+	packages += CSOAP NANOHTTP
+endif
+	
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,23 @@
+
+Creating Stg_Components from the component-list
+
+
+Constructing Stg_Components from the live-component register
+
+Constructing LocalPlugin..
+	context has not been constructed yet. Constructing now.
+		Constructing context..
+LocalPlugin_Function
+Plugins (ptr): 0x805eb44
+Stg_Class (ptr): 0x805eb44
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: PluginsManager
+	_delete (func ptr): 0xb7f67d87
+	_print (func ptr): 0xb7f67dda
+	_copy (func ptr): (nil)
+Search Path:
+	(path) /home/alan/Codes/ChapelStreet/plugins-rework/build/lib
+Loaded plugins:
+	LocalPlugin
+		(version) 19

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testDistributedPlugin data/testLocalPlugin.xml" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+
+Creating Stg_Components from the component-list
+
+
+Constructing Stg_Components from the live-component register
+
+Constructing LocalPlugin2..
+	context has not been constructed yet. Constructing now.
+		Constructing context..
+Constructing LocalPlugin1..
+LocalPlugin2_Function
+LocalPlugin1_Function()
+LocalPlugin2 value: 2
+Plugins (ptr): 0x8067ea4
+Stg_Class (ptr): 0x8067ea4
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: PluginsManager
+	_delete (func ptr): 0xb7f84d87
+	_print (func ptr): 0xb7f84dda
+	_copy (func ptr): (nil)
+Search Path:
+	(path) /home/alan/Codes/ChapelStreet/plugins-rework/build/lib
+Loaded plugins:
+	LocalPlugin2
+	LocalPlugin1
+		(version) 19

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testDistributedPlugin data/testLocalDepPlugins.xml" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Plugins.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+                                                                                                                                    
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+#include "MockContext.h"
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	Stream* stream;
+
+	MockContext* context;
+
+	Dictionary* dictionary;
+	IO_Handler* ioHandler;
+
+	Stg_ComponentFactory* cf;
+
+	/* 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+        RegisterParent( MockContext_Type, Stg_Component_Type );
+
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, __FILE__ );
+
+	dictionary = Dictionary_New();
+	ioHandler = (IO_Handler*)XML_IO_Handler_New();
+
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	context = MockContext_New( dictionary );
+
+	/* Reuse our entry point as our context as well */
+
+	cf = Stg_ComponentFactory_New( dictionary, Dictionary_GetDictionary( dictionary, "components" ), Stg_ObjectList_New() );
+	LiveComponentRegister_Add( cf->LCRegister, (Stg_Component*)context );
+	PluginsManager_Load( context->plugins, context, dictionary );
+
+	Stg_ComponentFactory_CreateComponents( cf );
+	Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+	PluginsManager_ConstructPlugins( context->plugins, cf, 0 /* dummy */ );
+
+	((EntryPoint_VoidPtr_CallCast*) context->ep->run)( context->ep, context );
+
+	Print( context->plugins, stream );
+
+	Stg_Class_Delete( ioHandler );
+	Stg_Class_Delete( context );
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+                                                                                                                                    
+
+	return 0;
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+PluginLoader_GetName(): LocalPlugin
+PluginLoader: LocalPlugin
+	Version: (version) 3317

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,40 @@
+#!/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)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: testEntryPoint1.0of1.sh 3175 2005-08-18 06:55:36Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+                                                                                                                                    
+testname="`basename $0 .sh`"
+                                                                                                                                    
+runAndHandleSystemTest "testPlugin" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Plugins.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+                                                                                                                                    
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+#include <string.h>
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	Stream* stream;
+
+	Stg_ObjectList* directories;
+	PluginLoader* plugin;
+
+	/* 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 );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+	/* creating a stream */
+	stream =  Journal_Register( Info_Type, __FILE__ );
+
+	directories = Stg_ObjectList_New();
+	Stg_ObjectList_PointerAppend( directories, StG_Strdup(LIB_DIR), "default dir", 0, 0, 0 );
+	
+	plugin = PluginLoader_NewLocal( "LocalPlugin", directories );
+
+	Journal_Firewall( plugin != NULL, stream, "Failed!\n" );
+
+	Journal_Printf( stream, "PluginLoader_GetName(): %s\n", PluginLoader_GetName( plugin ) );
+	Print( plugin, stream );
+
+	Stg_Class_Delete( plugin );
+	Stg_Class_Delete( directories );
+	
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+                                                                                                                                    
+
+	return 0;
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: LocalPlugin.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "../../MockContext.h"
+
+/* Plugins/Codelets need a Type string. */
+const Type LocalPlugin_Type = "LocalPlugin";
+
+/* Define the plugin's class */
+typedef struct { __Codelet } LocalPlugin;
+
+
+/* This is what the plugin does */
+void LocalPlugin_Function( void* context ) {
+	printf( "%s\n", __func__ );
+}
+
+
+/* Plugins are components, so they need a Construct() function. This is where you add the entry points and extensions */
+void _LocalPlugin_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	MockContext* context = (MockContext*)Stg_ComponentFactory_ConstructByName(cf, "context", Stg_Component, True, data );
+
+	EP_Append( context->ep, LocalPlugin_Function );
+}
+
+/* Plugins are compnents, so they need a DefaultNew() function. */
+void* _LocalPlugin_DefaultNew( Name name ) {
+	return Codelet_New(
+		LocalPlugin_Type,
+		_LocalPlugin_DefaultNew,
+		_LocalPlugin_Construct,
+		_Codelet_Build,
+		_Codelet_Initialise,
+		_Codelet_Execute,
+		_Codelet_Destroy,
+		name );
+}
+
+/* Plugins require a _Register() function for the plugin to be loaded. */
+
+Index LocalPlugin_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, LocalPlugin_Type, "0", _LocalPlugin_DefaultNew );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">LocalPlugin</param>
+<param name="Author">AlanLo</param>
+<param name="Organisation">VPAC</param>
+<param name="Description">Single Plugin test</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,19 @@
+#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
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseExtensibility -lStGermainBaseAutomation -lStGermainBaseIO -lStGermainBaseFoundation -lStGermainBaseContainer
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+endif
+
+packages = MPI XML MATH
+
+mod=LocalPlugin
+SRCS=LocalPlugin.c
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: LocalPlugin.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "../../MockContext.h"
+
+const Type LocalPlugin1_Type = "LocalPlugin1";
+typedef struct { __Codelet } LocalPlugin1;
+
+void LocalPlugin1_Function( void* context ) {
+	MockContext* mockContext = (MockContext*)context;
+	int* ext2;
+
+	ext2 = ExtensionManager_Get(
+		mockContext->em,
+		mockContext,
+		ExtensionManager_GetHandle( mockContext->em, "LocalPlugin2" ) );
+	
+	printf( "%s()\n", __func__ );
+	printf( "LocalPlugin2 value: %d\n", *ext2 );
+}
+
+void _LocalPlugin1_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	MockContext* context = (MockContext*)Stg_ComponentFactory_ConstructByName(cf, "context", Stg_Component, True, data );
+	
+	EP_Append( context->ep, LocalPlugin1_Function );
+}
+
+void* _LocalPlugin1_DefaultNew( Name name ) {
+	return Codelet_New(
+			LocalPlugin1_Type,
+			_LocalPlugin1_DefaultNew,
+			_LocalPlugin1_Construct,
+			_Codelet_Build,
+			_Codelet_Initialise,
+			_Codelet_Execute,
+			_Codelet_Destroy,
+			name );
+}
+
+Index LocalPlugin1_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, LocalPlugin1_Type, "0", _LocalPlugin1_DefaultNew );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">LocalPlugin1</param>
+
+<list name="dependenices">
+	<struct>
+		<param name="plugin">LocalPlugin2</param>
+		<param name="version">1</param>
+	</struct>
+</list>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin2.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin2.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin2.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: LocalPlugin.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "../../MockContext.h"
+
+const Type LocalPlugin2_Type = "LocalPlugin2";
+typedef struct { __Codelet } LocalPlugin2;
+
+void LocalPlugin2_Function() {
+	printf( "%s\n", __func__ );
+}
+
+void _LocalPlugin2_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	MockContext* context = (MockContext*)Stg_ComponentFactory_ConstructByName(cf, "context", Stg_Component, True, data );
+	int* ext;
+
+	ExtensionManager_Add( context->em, "LocalPlugin2", sizeof(int) );
+
+	ext = ExtensionManager_Get(
+		context->em, 
+		context,
+		ExtensionManager_GetHandle( context->em, "LocalPlugin2" ) );
+	*ext = 2;
+	
+	EP_Append( context->ep, LocalPlugin2_Function );
+}
+
+void* _LocalPlugin2_DefaultNew( Name name ) {
+	return Codelet_New(
+		LocalPlugin2_Type,
+		_LocalPlugin2_DefaultNew,
+		_LocalPlugin2_Construct,
+		_Codelet_Build,
+		_Codelet_Initialise,
+		_Codelet_Execute,
+		_Codelet_Destroy,
+		name );
+}
+
+Index LocalPlugin2_Register( PluginsManager* pluginsManager ) {
+	return PluginsManager_Submit( pluginsManager, LocalPlugin2_Type, "0", _LocalPlugin2_DefaultNew );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,19 @@
+#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
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseExtensibility -lStGermainBaseAutomation -lStGermainBaseIO -lStGermainBaseFoundation -lStGermainBaseContainer
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+endif
+
+packages = MPI XML MATH
+
+plugins := LocalPlugin1 LocalPlugin2
+
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/RemotePlugin1.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/RemotePlugin1.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/RemotePlugin1.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: RemotePlugin.c 3081 2005-07-08 08:24:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+void RemotePlugin1_Function() {
+	printf( "%s\n", __func__ );
+}
+
+
+void RemotePlugin1_Register( void* entryPoint ) {
+
+	EP_Append( entryPoint, RemotePlugin1_Function );
+
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,19 @@
+#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 := LocalPlugin LocalPluginDep
+
+include ${PROJ_ROOT}/Makefile.vmake
+
+
+
+#REMOTE_PLUGIN_LIST = $(filter ${PLUGINS_DIR}/Remote%,$(PLUGINS))
+
+#submit_plugins:
+# submit them -> where to get their urls?
+
+#remove_remote:
+#	@rm -rf $(REMOTE_PLUGIN_LIST)
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: ClassHook.c 2940 2005-05-15 00:53:19Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Hook.h"
+#include "ClassHook.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type ClassHook_Type = "ClassHook";
+
+/** allocate and initialise a new ClassHook. */
+ClassHook* ClassHook_New( Name name, Func_Ptr funcPtr, char* addedBy, void* reference ) {
+	return _ClassHook_New(
+		sizeof(ClassHook), 
+		ClassHook_Type, 
+		_ClassHook_Delete, 
+		_ClassHook_Print, 
+		_ClassHook_Copy, 
+		name, 
+		funcPtr, 
+		addedBy,
+		reference );
+}
+
+void ClassHook_Init( void* hook, Name name, Func_Ptr funcPtr, char* addedBy, void* reference ) {
+	ClassHook* self = (ClassHook*)hook;
+
+	/* General info */
+	self->type = ClassHook_Type;
+	self->_sizeOfSelf = sizeof(ClassHook);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ClassHook_Delete;
+	self->_print = _ClassHook_Print;
+	self->_copy = _ClassHook_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	_ClassHook_Init( self, funcPtr, addedBy, reference );
+}
+
+
+ClassHook* _ClassHook_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name 				name, 
+		Func_Ptr			funcPtr,
+		char*				addedBy,
+		void*			reference )
+{
+	ClassHook* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ClassHook) );
+	self = (ClassHook*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ClassHook info */
+	_ClassHook_Init( self, funcPtr, addedBy, reference );
+	
+	return self;
+}
+
+
+void _ClassHook_Init( ClassHook* self, Func_Ptr funcPtr, char* addedBy, void* reference ) {
+	/* General and Virtual info should already be set */
+	
+	/* ClassHook info */
+	_Hook_Init( (Hook*)self, funcPtr, addedBy );
+
+	self->reference = reference;
+}
+
+
+void _ClassHook_Delete( void* hook ) {
+	ClassHook* self = (ClassHook*)hook;
+	#if DEBUG
+		assert( self );
+	#endif	
+	
+	_Hook_Delete( self );
+}
+
+void _ClassHook_Print( void* hook, Stream* stream ) {
+	ClassHook* self = (ClassHook*)hook;
+	#if DEBUG
+		assert( self );
+		assert( stream );
+	#endif	
+	
+	/* General info */
+	_Hook_Print( self, stream );
+	Journal_Printf( (void*) stream, "\treference(ptr): %p\n", self->reference );
+	
+}
+
+
+void* _ClassHook_Copy( void* hook, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ClassHook*	self = (ClassHook*)hook;
+	ClassHook*	newClassHook;
+	
+	newClassHook = _Hook_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newClassHook->reference = Stg_Class_Copy( self->reference, dest, deep, nameExt, ptrMap );
+	
+	return (void*)newClassHook;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,90 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the information that goes with a function pointer.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ClassHook.h 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_ClassHook_h__
+#define __Base_Extensibility_ClassHook_h__
+	
+
+	/** Textual name of this class */
+	extern const Type ClassHook_Type;
+
+	/** ClassHook struct- stores a func pointer plus info */
+	#define __ClassHook \
+		__Hook \
+		\
+		void*		reference;		/**< Reference to the instance this member function belongs to */
+	
+	struct ClassHook { __ClassHook };
+	
+	/* Create a new ClassHook */
+	ClassHook* ClassHook_New( Name name, Func_Ptr funcPtr, char* addedBy, void* reference );
+	
+	/* Initialise an ClassHook */
+	void ClassHook_Init( void* hook, Name name, Func_Ptr funcPtr, char* addedBy, void* reference );
+	
+	/* Creation implementation */
+	ClassHook* _ClassHook_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name 				name, 
+		Func_Ptr 			funcPtr,
+		char*				addedBy,
+		void*			reference );
+	
+	/* Initialisation implementation */
+	void _ClassHook_Init( ClassHook* self, Func_Ptr funcPtr, char* addedBy, void* reference );
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _ClassHook_Delete( void* hook );
+	
+	/* Print implementation */
+	void _ClassHook_Print( void* hook, Stream* stream );
+	
+	/* Copy */
+	#define ClassHook_Copy( self ) \
+		(ClassHook*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ClassHook_DeepCopy( self ) \
+		(ClassHook*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ClassHook_Copy( void* hook, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+#endif /* __Base_Extensibility_ClassHook_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,195 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ClassPtrExtensionInfo.c 2915 2005-05-08 12:51:46Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ExtensionManager.h"
+#include "ExtensionInfo.h"
+#include "ClassPtrExtensionInfo.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+/* Textual name of this class */
+const Type ClassPtrExtensionInfo_Type = "ClassPtrExtensionInfo";
+
+
+/** allocate and initialise a new ClassPtrExtensionInfo. */
+ClassPtrExtensionInfo* ClassPtrExtensionInfo_New( const Name name, Stg_Class_CopyFunction* copyFunc, Index count ) {
+	return _ClassPtrExtensionInfo_New( 
+		sizeof(ClassPtrExtensionInfo), 
+		ClassPtrExtensionInfo_Type, 
+		_ClassPtrExtensionInfo_Delete,
+		_ClassPtrExtensionInfo_Print, 
+		_ClassPtrExtensionInfo_Copy, 
+		_ClassPtrExtensionInfo_DataCopy,
+		(Name)name,
+		copyFunc,
+		count );
+}
+
+
+void ClassPtrExtensionInfo_Init( void* arrayExtensionInfo, const Name name, Stg_Class_CopyFunction* copyFunc, Index count ) {
+	ClassPtrExtensionInfo* self = (ClassPtrExtensionInfo*)arrayExtensionInfo;
+
+	/* General info */
+	self->type = ClassPtrExtensionInfo_Type;
+	self->_sizeOfSelf = sizeof(ClassPtrExtensionInfo);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ClassPtrExtensionInfo_Delete;
+	self->_print = _ClassPtrExtensionInfo_Print;
+	self->_copy = _ClassPtrExtensionInfo_Copy;
+	self->_dataCopy = _ClassPtrExtensionInfo_DataCopy;
+	
+	/* ClassPtrExtensionInfo info */
+	_ClassPtrExtensionInfo_Init( self, (Name)name, copyFunc, count );
+}
+
+
+ClassPtrExtensionInfo* _ClassPtrExtensionInfo_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		ExtensionInfo_DataCopyFunction* _dataCopy,
+		Name 				name,
+		Stg_Class_CopyFunction*		copyFunc,
+		Index				count )
+{
+	ClassPtrExtensionInfo* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ClassPtrExtensionInfo) );
+	self = (ClassPtrExtensionInfo*)_ExtensionInfo_New( 
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy, 
+		_dataCopy,
+		name, 
+		sizeof(ClassPtrExtensionInfo_PtrClass), 
+		count );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ClassPtrExtensionInfo info */
+	_ClassPtrExtensionInfo_Init( self, name, copyFunc, count );
+	
+	return self;
+}
+
+
+void _ClassPtrExtensionInfo_Init( ClassPtrExtensionInfo* self, Name name, Stg_Class_CopyFunction* copyFunc, Index count ) {
+	/* General and Virtual info should already be set */
+	/* ClassPtrExtensionInfo info */
+	_ExtensionInfo_Init( (ExtensionInfo*)self, name, sizeof(ClassPtrExtensionInfo_PtrClass), count );
+}
+
+
+void _ClassPtrExtensionInfo_Delete( void* arrayExtensionInfo ) {
+	ClassPtrExtensionInfo*	self = (ClassPtrExtensionInfo*)arrayExtensionInfo;
+		
+	Journal_Firewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+		"Attempting to \"%s\" delete a pointer of value NULL\n", ClassPtrExtensionInfo_Type );
+	
+	/* Delete parent */
+	_ExtensionInfo_Delete( self );
+}
+
+
+void _ClassPtrExtensionInfo_Print( void* arrayExtensionInfo, Stream* stream ) {
+	ClassPtrExtensionInfo* self = (ClassPtrExtensionInfo*)arrayExtensionInfo;
+		
+	Journal_Firewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+		"Attempting to \"%s\" print a pointer of value NULL\n", ClassPtrExtensionInfo_Type );
+	
+	/* General info */
+	Journal_Printf( (void*)stream, "ClassPtrExtensionInfo (%p):\n", self );
+	_ExtensionInfo_Print( self, stream );
+}
+
+
+void* _ClassPtrExtensionInfo_Copy( void* extensionInfo, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap  ) {
+	ClassPtrExtensionInfo*	self = (ClassPtrExtensionInfo*)extensionInfo;
+	ClassPtrExtensionInfo*	newClassPtrExtensionInfo;
+
+	/* Copy parent */
+	newClassPtrExtensionInfo = _ExtensionInfo_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newClassPtrExtensionInfo->copyFunc = self->copyFunc;
+	
+	return newClassPtrExtensionInfo;
+}
+
+void* _ClassPtrExtensionInfo_DataCopy(
+		void* extensionInfo,
+		void* source,
+		void* dest,
+		Bool deep,
+		Name nameExt,
+		PtrMap* ptrMap )
+{
+	ClassPtrExtensionInfo* self = (ClassPtrExtensionInfo*) extensionInfo;
+	ClassPtrExtensionInfo_PtrClass* srcArray = (ClassPtrExtensionInfo_PtrClass*)source;
+	ClassPtrExtensionInfo_PtrClass* destArray = (ClassPtrExtensionInfo_PtrClass*)dest;
+	int item_I;
+
+	for ( item_I = 0; item_I < self->count; ++item_I ) {
+		destArray[item_I].ptr = Stg_Generic_Copy( self->copyFunc, srcArray[item_I].ptr, NULL, deep, nameExt, ptrMap );
+	}
+
+	return dest;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Extensions are the effective equivalent of no-typing (i.e. the attributes/methods of am object are changable at runtime). 
+**	By definition Object Oriented programming assumes "no-typing" ability, but popular Object Oriented languages such as C++
+**	and Java (which are weakly-typed) have impeded its uptake. StGermain's ExtensionManager/ExtensionInfo combination mimics
+**	"no-typing" in C by allowing users to add attributes to an object at run-time. The StGermain inheritance scheme already 
+**	provides runtime changing of method implementations on an object. However note, given that StGermain was originally built
+**	for computational purposes, speed requirements dictate that at some point the ability to add extensions is stopped, and the
+**	object effectively becomes weakly-typed.
+**
+**	ClassPtrExtensionInfo concretes ExtensionInfo for extensions that are arrays. The Array class is used to manage the array.
+**
+** Assumptions:
+**
+** Comments:
+**	Read ExtensionInfo and Array's Role, Assumptions and Comments.
+**	The size of the extension is the size of the Array class. Initialisation of the Array is up to the user. It is assumed to be
+**		done before this ClassPtrExtensionInfo is deleted (as it will attempt to delete it too).
+**
+** $Id: ClassPtrExtensionInfo.h 2915 2005-05-08 12:51:46Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_ClassPtrExtensionInfo_h__
+#define __Base_Extensibility_ClassPtrExtensionInfo_h__
+	
+	/** Textual name of this class */
+	extern const Type ClassPtrExtensionInfo_Type;
+
+	typedef struct {
+		void* ptr;
+	} ClassPtrExtensionInfo_PtrClass;
+
+	/** ClassPtrExtensionInfo struct */
+	#define __ClassPtrExtensionInfo \
+		__ExtensionInfo \
+		Stg_Class_CopyFunction* copyFunc;
+		
+	/** Defines key information about an object/struct extension - see ClassPtrExtensionInfo.h. */
+	struct ClassPtrExtensionInfo { __ClassPtrExtensionInfo };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/** Create a new ClassPtrExtensionInfo */
+	ClassPtrExtensionInfo* ClassPtrExtensionInfo_New( const Name name, Stg_Class_CopyFunction* copyFunc, Index count );
+	
+	/** Initialise an ClassPtrExtensionInfo */
+	void ClassPtrExtensionInfo_Init( void* arrayExtensionInfo, const Name name, Stg_Class_CopyFunction* copyFunc, Index count );
+	
+	/* Creation implementation */
+	ClassPtrExtensionInfo* _ClassPtrExtensionInfo_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		ExtensionInfo_DataCopyFunction*	_dataCopy,
+		Name 				name,
+		Stg_Class_CopyFunction*		copyFunc,
+		Index				count );
+	
+	/* Initialisation implementation */
+	void _ClassPtrExtensionInfo_Init( ClassPtrExtensionInfo* self, Name name, Stg_Class_CopyFunction* copyFunc, Index count );
+	
+	/* Class_Delete() implementation */
+	void _ClassPtrExtensionInfo_Delete( void* arrayExtensionInfo );
+	
+	/* Class_Print() implementation */
+	void _ClassPtrExtensionInfo_Print( void* arrayExtensionInfo, Stream* stream );
+	
+	/** Class_Copy() implementation: derivatives should call this in their implementation */
+	void* _ClassPtrExtensionInfo_Copy( void* extensionInfo, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+
+	void* _ClassPtrExtensionInfo_DataCopy(
+		void* extensionInfo,
+		void* source,
+		void* dest,
+		Bool deep,
+		Name nameExt,
+		PtrMap* ptrMap );
+
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Extensibility_ClassPtrExtensionInfo_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,136 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Codelet.c 3192 2005-08-25 01:45:42Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Codelet.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type Codelet_Type = "Codelet";
+
+void* Codelet_New(
+		Type                                            type,
+		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 )
+{
+	return _Codelet_New(
+			sizeof( Codelet ),
+			type,
+			_Codelet_Delete,
+			_Codelet_Print, 
+			_Codelet_Copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,
+			name );
+}
+
+void* _Codelet_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 )
+{
+	return _Stg_Component_New(
+			_sizeOfSelf,
+			type,
+			_delete,
+			_print, 
+			_copy,
+			_defaultConstructor,
+			_construct,
+			_build,
+			_initialise,
+			_execute,
+			_destroy,
+			name,
+			NON_GLOBAL );
+}
+
+void  _Codelet_Delete( void* codelet ) {
+	_Stg_Component_Delete( codelet );
+}
+void  _Codelet_Print( void* codelet, Stream* stream ) {
+	Codelet* self = (Codelet*)codelet;
+	
+	Journal_Printf( stream, "Codelet: %s, Type %s\n", self->name, self->type );
+	_Stg_Component_Print( self, stream );
+}
+void* _Codelet_Copy( void* codelet, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	return _Stg_Component_Copy( codelet, dest, deep, nameExt, ptrMap );
+}
+
+
+void  _Codelet_Build( void* codelet, void* data ) {
+
+}
+void  _Codelet_Initialise( void* codelet, void* data ) {
+
+}
+void  _Codelet_Execute( void* codelet, void* data ) {
+
+}
+void  _Codelet_Destroy( void* codelet, void* data ) {
+
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Codelet.h 3192 2005-08-25 01:45:42Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_Codelet_h__
+#define __Base_Extensibility_Codelet_h__
+	
+	/* Textual name of this class */
+	extern const Type Codelet_Type;
+
+	/* Codelets info */
+	#define __Codelet \
+		__Stg_Component 
+		
+	struct Codelet { __Codelet };
+
+
+	void* Codelet_New(
+			Type                                            type,
+			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* _Codelet_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  _Codelet_Delete( void* codelet );
+	void  _Codelet_Print( void* codelet, Stream* stream );
+	void* _Codelet_Copy( void* codelet, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void  _Codelet_Build( void* codelet, void* data );
+	void  _Codelet_Initialise( void* codelet, void* data );
+	void  _Codelet_Execute( void* codelet, void* data );
+	void  _Codelet_Destroy( void* codelet, void* data );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Codelet</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,896 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: EntryPoint.c 3614 2006-06-01 08:58:48Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "EntryPoint.h"
+#include "Hook.h"
+#include "ClassHook.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include <math.h>
+#ifndef HUGE_VAL
+	#define HUGE_VAL 1.0e99
+#endif
+
+
+/* Textual name of this class */
+const Type EntryPoint_Type = "EntryPoint";
+
+static const Type _EntryPoint_Run_Type = "EntryPoint->Run";
+
+/* VIRTUAL FUNCTIONS */
+
+/** allocate and initialise a new EntryPoint.
+ * \param name textual name of the entry point (useful if its to be stored in a list).
+ * \return the allocated entry point. */
+EntryPoint* EntryPoint_New( const Name name, unsigned int castType ) {
+	return _EntryPoint_New( sizeof(EntryPoint), EntryPoint_Type, _EntryPoint_Delete, _EntryPoint_Print, _EntryPoint_Copy, _EntryPoint_GetRun,
+		name, castType );
+}
+
+/** Initialise an existing entry point. See EntryPoint_New() for argument descriptions. */
+void EntryPoint_Init( void* entryPoint, const Name name, unsigned int castType ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	/* General info */
+	self->type = EntryPoint_Type;
+	self->_sizeOfSelf = sizeof(EntryPoint);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _EntryPoint_Delete;
+	self->_print = _EntryPoint_Print;
+	self->_copy = _EntryPoint_Copy;
+	self->_getRun = _EntryPoint_GetRun;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, (Name) name, GLOBAL );
+	
+	/* EntryPoint info */
+	_EntryPoint_Init( self, castType );
+}
+
+EntryPoint* _EntryPoint_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		EntryPoint_GetRunFunction*	_getRun,
+		const Name 				name, 
+		unsigned int 			castType )
+{
+	EntryPoint* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(EntryPoint) );
+	self = (EntryPoint*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->_getRun = _getRun;
+	
+	/* EntryPoint info */
+	_EntryPoint_Init( self, castType );
+	
+	return self;
+}
+
+void _EntryPoint_Init( EntryPoint* self, unsigned int castType ){
+	/* General and Virtual info should already be set */
+	
+	/* EntryPoint info */
+	self->castType = castType;
+	self->run = self->_getRun( self );
+	
+	/* Initialise the hooklist */
+	self->hooks = Stg_ObjectList_New(); 
+	self->alwaysFirstHook = NULL;
+	self->alwaysLastHook = NULL;
+}
+
+
+void _EntryPoint_Delete( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	#if DEBUG
+		assert( self );
+	#endif	
+	
+	Stg_ObjectList_DeleteAllObjects( self->hooks );
+	Stg_Class_Delete( self->hooks );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Object_Delete( self );
+}
+
+void _EntryPoint_Print( void* entryPoint, Stream* stream ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	#if DEBUG
+		assert( self );
+		assert( stream );
+	#endif	
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "EntryPoint (ptr) (%p):\n", self );
+	
+	/* Virtual info */
+	Journal_Printf( (void*) stream, "\t_getRun (ptr): %p\n", self->_getRun );
+	
+	/* EntryPoint info */
+	Journal_Printf( (void*) stream, "\tname: %s\n", self->name );
+	Journal_Printf( (void*) stream, "\tcastType: %u\n", self->castType );
+	Journal_Printf( (void*) stream, "\trun (ptr): %p\n", self->run );
+	Journal_Printf( (void*) stream, "\thooks: \n" );
+	Stg_Class_Print( self->hooks, stream );
+	Journal_Printf( (void*) stream, "\n" );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+}
+
+
+void* _EntryPoint_Copy( void* entryPoint, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	EntryPoint*	self = (EntryPoint*)entryPoint;
+	EntryPoint*	newEntryPoint;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newEntryPoint = _Stg_Object_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newEntryPoint->_getRun = self->_getRun;
+	
+	newEntryPoint->castType = self->castType;
+	newEntryPoint->run = self->run;
+	
+	if( deep ) {
+		newEntryPoint->hooks = (HookList*)Stg_Class_Copy( self->hooks, NULL, deep, nameExt, map );
+		
+		if( newEntryPoint->hooks ) {
+			if( self->alwaysFirstHook ) {
+				if( nameExt ) {
+					Name	tmpName;
+					
+					tmpName = Memory_Alloc_Array( char, strlen( Stg_Object_GetName( self->alwaysFirstHook ) ) + strlen( nameExt ) + 1, "tmpName" );
+					strcpy( tmpName, Stg_Object_GetName( self->alwaysFirstHook ) );
+					strcpy( &tmpName[strlen( Stg_Object_GetName( self->alwaysFirstHook ) )], nameExt );
+					
+					newEntryPoint->alwaysFirstHook = (Hook*)Stg_ObjectList_Get( newEntryPoint->hooks, tmpName );
+					Memory_Free( tmpName );
+				}
+				else {
+					newEntryPoint->alwaysFirstHook = (Hook*)Stg_ObjectList_Get( newEntryPoint->hooks, Stg_Object_GetName( self->alwaysFirstHook ) );
+				}
+			}
+			else {
+				self->alwaysFirstHook = NULL;
+			}
+			
+			if( self->alwaysLastHook ) {
+				if( nameExt ) {
+					Name	tmpName;
+					
+					tmpName = Memory_Alloc_Array( char, strlen( Stg_Object_GetName( self->alwaysLastHook ) ) + strlen( nameExt ) + 1, "tmpName" );
+					strcpy( tmpName, Stg_Object_GetName( self->alwaysLastHook ) );
+					strcpy( &tmpName[strlen( Stg_Object_GetName( self->alwaysLastHook ) )], nameExt );
+					
+					newEntryPoint->alwaysLastHook = (Hook*)Stg_ObjectList_Get( newEntryPoint->hooks, tmpName );
+					Memory_Free( tmpName );
+				}
+				else {
+					newEntryPoint->alwaysLastHook = (Hook*)Stg_ObjectList_Get( newEntryPoint->hooks, Stg_Object_GetName( self->alwaysLastHook ) );
+				}
+			}
+			else {
+				self->alwaysLastHook = NULL;
+			}
+		}
+		else {
+			self->alwaysFirstHook = NULL;
+			self->alwaysLastHook = NULL;
+		}
+	}
+	else {
+		newEntryPoint->hooks = self->hooks;
+		newEntryPoint->alwaysFirstHook = self->alwaysFirstHook;
+		newEntryPoint->alwaysLastHook = self->alwaysLastHook;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newEntryPoint;
+}
+
+
+Func_Ptr EntryPoint_GetRun( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	return self->_getRun( self );
+}
+
+
+Func_Ptr _EntryPoint_GetRun( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	
+	switch( self->castType ) {
+		case EntryPoint_0_CastType:
+			return (void*) _EntryPoint_Run;
+		
+		case EntryPoint_VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_VoidPtr;
+		
+		case EntryPoint_2VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_2VoidPtr;
+		
+		case EntryPoint_3VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_3VoidPtr;
+		
+		case EntryPoint_Minimum_VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_Minimum_VoidPtr;
+		
+		case EntryPoint_Maximum_VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_Maximum_VoidPtr;
+		
+		case EntryPoint_Class_0_CastType:
+			return (void*) _EntryPoint_Run_Class;
+		
+		case EntryPoint_Class_VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_Class_VoidPtr;
+		
+		case EntryPoint_Class_Minimum_VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_Class_Minimum_VoidPtr;
+		
+		case EntryPoint_Class_Maximum_VoidPtr_CastType:
+			return (void*) _EntryPoint_Run_Class_Maximum_VoidPtr;
+		
+		default:
+			assert( 0 /* castType unknown */ );
+			/* Decendant versions of this function should call the parent's getrun here instead */
+	}
+	return 0;
+}
+
+
+void _EntryPoint_Run( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook_Index hookIndex;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		((EntryPoint_0_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)();
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+void _EntryPoint_Run_VoidPtr( void* entryPoint, void* data0 ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook_Index hookIndex;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		((EntryPoint_VoidPtr_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0 );
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+void _EntryPoint_Run_2VoidPtr( void* entryPoint, void* data0, void* data1 ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook_Index hookIndex;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_2VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		((EntryPoint_2VoidPtr_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0, data1 );
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+void _EntryPoint_Run_3VoidPtr( void* entryPoint, void* data0, void* data1, void* data2 ) {
+	EntryPoint* self      = (EntryPoint*)entryPoint;
+	Hook_Index  hookIndex;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_3VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0 ; hookIndex < self->hooks->count; hookIndex++ ) {
+		((EntryPoint_3VoidPtr_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0, data1, data2 );
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+double _EntryPoint_Run_Minimum_VoidPtr( void* entryPoint, void* data0 ) {
+	EntryPoint* self       = (EntryPoint*)entryPoint;
+	Hook_Index  hookIndex;
+	double      minValue   = HUGE_VAL;
+	double      value;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_Minimum_VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		value = ((EntryPoint_Minimum_VoidPtr_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0 );
+		/* Get Minimum out of currently stored value and one from this hook */
+		if ( minValue > value )
+			minValue = value;
+	}
+
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+	return minValue;
+}
+
+double _EntryPoint_Run_Maximum_VoidPtr( void* entryPoint, void* data0 ) {
+	EntryPoint* self       = (EntryPoint*)entryPoint;
+	Hook_Index  hookIndex;
+	double      maxValue   = -HUGE_VAL;
+	double      value;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_Maximum_VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		value = ((EntryPoint_Maximum_VoidPtr_Cast*)((Hook*)self->hooks->data[hookIndex])->funcPtr)( data0 );
+		/* Get Maximum out of currently stored value and one from this hook */
+		if ( maxValue < value )
+			maxValue = value;
+	}
+
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+	return maxValue;
+}
+
+
+double _EntryPoint_Run_Class_Minimum_VoidPtr( void* entryPoint, void* data0 ) {
+	EntryPoint* self       = (EntryPoint*)entryPoint;
+	ClassHook*  hook;
+	Hook_Index  hookIndex;
+	double      minValue   = HUGE_VAL;
+	double      value;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_Class_Minimum_VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		hook  = (ClassHook*) self->hooks->data[hookIndex];
+		value = ((EntryPoint_Class_Minimum_VoidPtr_Cast*)(hook->funcPtr))( hook->reference, data0 );
+
+		/* Get Minimum out of currently stored value and one from this hook */
+		if ( minValue > value )
+			minValue = value;
+	}
+
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+	return minValue;
+}
+
+double _EntryPoint_Run_Class_Maximum_VoidPtr( void* entryPoint, void* data0 ) {
+	EntryPoint* self       = (EntryPoint*)entryPoint;
+	ClassHook*  hook;
+	Hook_Index  hookIndex;
+	double      maxValue   = -HUGE_VAL;
+	double      value;
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_Class_Maximum_VoidPtr, self->name );
+	#endif
+	
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		hook  = (ClassHook*) self->hooks->data[hookIndex];
+		value = ((EntryPoint_Class_Maximum_VoidPtr_Cast*)(hook->funcPtr))( hook->reference, data0 );
+		
+		/* Get Maximum out of currently stored value and one from this hook */
+		if ( maxValue < value )
+			maxValue = value;
+	}
+
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+	return maxValue;
+}
+
+void _EntryPoint_Run_Class( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	ClassHook* hook;
+	Hook_Index hookIndex;
+
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_Class, self->name );
+	#endif
+	
+	for ( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		hook = (ClassHook*)self->hooks->data[hookIndex];
+		((EntryPoint_Class_0_Cast*)(hook->funcPtr))( hook->reference );
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+void _EntryPoint_Run_Class_VoidPtr( void* entryPoint, void* data0 ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	ClassHook* hook;
+	Hook_Index hookIndex;
+
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Push( stgCallGraph, _EntryPoint_Run_Class_VoidPtr, self->name );
+	#endif
+	
+	for ( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		hook = (ClassHook*)self->hooks->data[hookIndex];
+		((EntryPoint_Class_VoidPtr_Cast*)(hook->funcPtr))( hook->reference, data0 );
+	}
+	
+	#ifdef USE_PROFILE
+		Stg_CallGraph_Pop( stgCallGraph );
+	#endif
+}
+
+/* Functions for Adding hooks */
+
+void _EntryPoint_PrependHook( void* entryPoint, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( NULL == self->alwaysFirstHook ) {
+		Stg_ObjectList_Prepend( self->hooks, hook );
+	}
+	else {
+		Stg_ObjectList_InsertAfter( self->hooks, self->alwaysFirstHook->name, hook );
+	}	
+}
+
+
+void _EntryPoint_PrependHook_AlwaysFirst( void* entryPoint, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( self->alwaysFirstHook ) {
+		Stream* error = Journal_Register( ErrorStream_Type, EntryPoint_Type );
+		Journal_Printf( error, "Error: tried to prepend a new hook \"%s\" to entry point "
+			"%s to always come first, but hook \"%s\" already specified to always be first.\n",
+			hook->name, self->name, self->alwaysFirstHook->name ); 
+		assert( 0 );
+	}
+
+	Stg_ObjectList_Prepend( self->hooks, hook );
+	self->alwaysFirstHook = hook;
+}
+
+
+void _EntryPoint_AppendHook( void* entryPoint, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( NULL == self->alwaysLastHook ) {
+		Stg_ObjectList_Append( self->hooks, hook );
+	}
+	else {
+		Stg_ObjectList_InsertBefore( self->hooks, self->alwaysLastHook->name, hook );
+	}	
+}
+
+
+void _EntryPoint_AppendHook_AlwaysLast( void* entryPoint, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( self->alwaysLastHook ) {
+		Stream* error = Journal_Register( ErrorStream_Type, EntryPoint_Type );
+		Journal_Printf( error, "Error: tried to append a new hook \"%s\" to entry point "
+			"%s to always come last, but hook \"%s\" already specified to always be last.\n",
+			hook->name, self->name, self->alwaysLastHook->name ); 
+		assert( 0 );
+	}
+
+	Stg_ObjectList_Append( self->hooks, hook );
+	self->alwaysLastHook = hook;
+}
+
+
+void _EntryPoint_InsertHookBefore( void* entryPoint, Name hookToInsertBefore, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( self->alwaysFirstHook && ( 0 == strcmp( hookToInsertBefore, self->alwaysFirstHook->name ) ) ) {
+		Stream* error = Journal_Register( ErrorStream_Type, EntryPoint_Type );
+		Journal_Printf( error, "Error: tried to insert a new hook \"%s\" to entry point "
+			"%s before a hook specified to always be first, \"%s\".\n",
+			hook->name, self->name, self->alwaysFirstHook->name ); 
+		assert( 0 );
+	}
+
+	Stg_ObjectList_InsertBefore( self->hooks, hookToInsertBefore, hook );
+}
+
+
+void _EntryPoint_InsertHookAfter( void* entryPoint, Name hookToInsertAfter, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( self->alwaysLastHook && ( 0 == strcmp( hookToInsertAfter, self->alwaysLastHook->name ) ) ) {
+		Stream* error = Journal_Register( ErrorStream_Type, EntryPoint_Type );
+		Journal_Printf( error, "Error: tried to insert a new hook \"%s\" to entry point "
+			"%s after a hook specified to always be last, \"%s\".\n",
+			hook->name, self->name, self->alwaysLastHook->name ); 
+		assert( 0 );
+	}
+	
+	Stg_ObjectList_InsertAfter( self->hooks, hookToInsertAfter, hook );
+}
+
+void _EntryPoint_ReplaceAllHook( void* entryPoint, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	/* Purge the EP first. */
+	EntryPoint_Purge( self );
+	Stg_ObjectList_ReplaceAll( self->hooks, DELETE, hook );
+}
+
+
+void _EntryPoint_ReplaceHook( void* entryPoint, Name hookToReplace, Hook* hook ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if ( self->alwaysFirstHook && ( 0 == strcmp( hookToReplace, self->alwaysFirstHook->name ) ) ) {
+		self->alwaysFirstHook = NULL;
+	}
+	else if ( self->alwaysLastHook && ( 0 == strcmp( hookToReplace, self->alwaysLastHook->name ) ) ) {
+		self->alwaysLastHook = NULL;
+	}
+
+	Stg_ObjectList_Replace( self->hooks, hookToReplace, DELETE, hook );
+}
+
+
+/* PUBLIC FUNCTIONS */
+
+void EntryPoint_PrintConcise( void* entryPoint, Stream* stream ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook_Index hookIndex;
+	Hook_Ptr hook;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	Journal_Printf( stream, "\tEP: %s\n", self->name );
+	for( hookIndex = 0; hookIndex < self->hooks->count; hookIndex++ ) {
+		hook = (Hook*) self->hooks->data[hookIndex];
+		Journal_Printf( stream, "\t\tH: \"%s\"", hook->name );
+		if ( 0 != strcmp( "", hook->addedBy ) ) {
+			Journal_Printf( stream, " (%s)", hook->addedBy );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+}
+
+
+void EntryPoint_Prepend( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr , addedBy );
+
+	_EntryPoint_PrependHook( self, hook );
+}
+
+void EntryPoint_Prepend_AlwaysFirst( void* entryPoint, Name name, Func_Ptr funcPtr, Hook_AddedBy addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr, addedBy );
+
+	_EntryPoint_PrependHook_AlwaysFirst( self, hook );
+}
+
+void EntryPoint_Append( void* entryPoint, Name name, Func_Ptr funcPtr, Hook_AddedBy addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr, addedBy );
+
+	_EntryPoint_AppendHook( self, hook );
+}
+
+
+void EntryPoint_Append_AlwaysLast( void* entryPoint, Name name, Func_Ptr funcPtr, Hook_AddedBy addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr, addedBy );
+
+	_EntryPoint_AppendHook_AlwaysLast( self, hook );
+}
+
+
+void EntryPoint_InsertBefore( void* entryPoint, Name hookToInsertBefore, Name name, Func_Ptr funcPtr, char* addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr , addedBy );
+
+	_EntryPoint_InsertHookBefore( self, hookToInsertBefore, hook );
+}
+
+
+void EntryPoint_InsertAfter( void* entryPoint, Name hookToInsertAfter, Name name, Func_Ptr funcPtr, char* addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr , addedBy );
+
+	_EntryPoint_InsertHookAfter( self, hookToInsertAfter, hook );
+}
+
+
+void EntryPoint_ReplaceAll( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr , addedBy );
+
+	_EntryPoint_ReplaceAllHook( self, hook );
+}
+
+
+void EntryPoint_Replace( void* entryPoint, Name hookToReplace, Name name, Func_Ptr funcPtr, char* addedBy ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = Hook_New( name, funcPtr , addedBy );
+
+	_EntryPoint_ReplaceHook( self, hookToReplace, hook );
+}
+
+void EntryPoint_PrependClassHook( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy, void* reference ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_PrependHook( self, hook );
+}
+	
+void EntryPoint_PrependClassHook_AlwaysFirst( 
+	void* entryPoint, 
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* reference ) {
+	
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_PrependHook_AlwaysFirst( self, hook );
+}
+	
+void EntryPoint_AppendClassHook( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy, void* reference ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_AppendHook( self, hook );
+
+}
+	
+void EntryPoint_AppendClassHook_AlwaysLast( 
+	void* entryPoint, 
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* reference ) {
+
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_AppendHook_AlwaysLast( self, hook );
+}
+
+void EntryPoint_InsertClassHookBefore( 
+	void* entryPoint, 
+	Name hookToInsertBefore, 
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* reference ) {
+	
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_InsertHookBefore( self, hookToInsertBefore, hook );
+
+}
+	
+void EntryPoint_InsertClassHookAfter( 
+	void* entryPoint, 
+	Name hookToInsertAfter, 
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* reference ) {
+
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_InsertHookAfter( self, hookToInsertAfter, hook );
+}
+
+void EntryPoint_ReplaceClassHook( 
+	void* entryPoint, 
+	Name hookToReplace, 
+	Name name, 
+	Func_Ptr funcPtr, 
+	char* addedBy, 
+	void* reference ) {
+	
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_ReplaceHook( self, hookToReplace, hook );
+}
+	
+void EntryPoint_ReplaceAllClassHook( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy, void* reference ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+	Hook* hook = (Hook*)ClassHook_New( name, funcPtr, addedBy, reference );
+
+	_EntryPoint_ReplaceAllHook( self, hook );
+
+}
+
+
+
+void EntryPoint_Remove( void* entryPoint, Name name ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	Stg_ObjectList_Remove( self->hooks, name, DELETE );
+}
+
+void EntryPoint_Purge( void* entryPoint ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	/* Stg_Class_Delete the existing hook information structures. Note: this won't try and delete the func ptrs themselves */
+	Stg_ObjectList_DeleteAllObjects( self->hooks );
+	self->hooks->count = 0;
+	self->alwaysFirstHook = NULL;
+	self->alwaysLastHook = NULL;
+}
+
+
+void EntryPoint_WarnIfNoHooks( void* entryPoint, const char* parentFunction ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if (0 == self->hooks->count ) {
+		Name epName = self->name;
+		Stream* stream = Journal_Register (Debug_Type, self->name );
+		Journal_Printf( (void*) stream, "Warning: No hooks defined for E.P. \"%s\". Calling parent function "
+			"%s() usually implies at least one %s hook defined.\n",
+			epName, parentFunction, epName );
+	}
+}
+
+
+void EntryPoint_ErrorIfNoHooks( void* entryPoint, const char* parentFunction ) {
+	EntryPoint* self = (EntryPoint*)entryPoint;
+
+	Journal_Firewall( 
+			self != NULL, 
+			Journal_Register( Error_Type, EntryPoint_Type ),
+			"Entry Point is NULL in %s\n", __func__ );
+
+	if (0 == self->hooks->count ) {
+		Name epName = self->name;
+		Stream* stream = Journal_Register (Error_Type, self->name );
+		Journal_Firewall( 0, (void*) stream, "Error: No hooks defined for E.P. \"%s\". Calling parent function "
+			"%s() requires at least one %s hook defined.\n",
+			epName, parentFunction, epName );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,305 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Doxygen information follows:
+*/
+/** \file
+**  Role:
+**	Entry-points are glorified "function pointer"s, but with one major advantage: the point can represent one or more functions,
+**	changeable at run time. 
+**
+** Assumptions:
+**	Name of the Entry-point and associated Hooks are constant (i.e. of type: Type).
+**
+** Comments:
+**	Entry-points are glorified function-pointers, but with one major advantage: the point can represent one or more functions,
+**	changeable at run time. Entry points, hence, provide the facility for dynamic control-flow behaviour, but in a manner
+**	considerate to HPC applications. The term "Hook" refers to a named function-pointer that is associated to an Entry-point. To
+**	that end, the Entry-point maintains a list of Hooks that are executed in order when the Entry-point is told to execute. The
+**	insertion into this list is kept quite flexible, representing the types of manipulations code developers desire when 
+**	thinking of extending or adapting the behaviour of a particular behaviour. These options include "associate this Hook to the
+**	EntryPoint by": 
+**		appending, 
+**		prepending, 
+**		replacing the entire list with, 
+**		replacing a specific already associated hook with,
+**		insert before already associated hook, and
+**		insert after already associated hook.
+**	Execution of an Entry-point has greater over-head than the execution of a function-pointer (typically C coder 
+**	implementation of flexibility), which in turn has greater over-head than a hard-coded function (no flexibility, 
+**	Fortranesque), which in turn has greater over-head than in-lining (the ultimate hero-codesque). The Entry-point is 
+**	implemented to be as effecient at the execution phase as can be. The net result is an awkward calling convention, which is 
+**	recommended to be wrapped if end users are coders, and you want to keep their pants dry.
+**
+** $Id: EntryPoint.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_EntryPoint_h__
+#define __Base_Extensibility_EntryPoint_h__
+	
+
+	/* Templates of virtual functions */
+	typedef Func_Ptr	(EntryPoint_GetRunFunction)	( void* self );
+	
+	/* Templates for default entry point type */
+	typedef void        (EntryPoint_0_Cast)                         ();
+	typedef void        (EntryPoint_0_CallCast)                     ( void* entryPoint );
+	typedef void        (EntryPoint_VoidPtr_Cast)                   ( void* data0 );
+	typedef void        (EntryPoint_VoidPtr_CallCast)               ( void* entryPoint, void* data0 );
+	typedef void        (EntryPoint_2VoidPtr_Cast)	                ( void* data0, void* data1 );
+	typedef void        (EntryPoint_2VoidPtr_CallCast)              ( void* entryPoint, void* data0, void* data1 );
+	typedef void        (EntryPoint_3VoidPtr_Cast)	                ( void* data0, void* data1, void* data2 );
+	typedef void        (EntryPoint_3VoidPtr_CallCast)              ( void* entryPoint, void* data0, void* data1, void* data2 );
+	typedef double      (EntryPoint_Minimum_VoidPtr_Cast)           ( void* data0 );
+	typedef double      (EntryPoint_Minimum_VoidPtr_CallCast)       ( void* entryPoint, void* data0 );
+	typedef double      (EntryPoint_Maximum_VoidPtr_Cast)           ( void* data0 );
+	typedef double      (EntryPoint_Maximum_VoidPtr_CallCast)       ( void* entryPoint, void* data0 );
+	typedef double      (EntryPoint_Class_Minimum_VoidPtr_Cast)     ( void* reference, void* data0 );
+	typedef double      (EntryPoint_Class_Minimum_VoidPtr_CallCast) ( void* entryPoint, void* reference, void* data0 );
+	typedef double      (EntryPoint_Class_Maximum_VoidPtr_Cast)     ( void* reference, void* data0 );
+	typedef double      (EntryPoint_Class_Maximum_VoidPtr_CallCast) ( void* entryPoint, void* reference, void* data0 );
+	typedef void        (EntryPoint_Class_0_Cast)                   ( void* reference );
+	typedef void        (EntryPoint_Class_0_CallCast)  	            ( void* entryPoint );
+	typedef void        (EntryPoint_Class_VoidPtr_Cast)             ( void* reference, void* data0 );
+	typedef void        (EntryPoint_Class_VoidPtr_CallCast)         ( void* entryPoint, void* data0 );
+
+	#define 		EntryPoint_0_CastType                       0
+	#define 		EntryPoint_VoidPtr_CastType                 (EntryPoint_0_CastType+1)
+	#define 		EntryPoint_2VoidPtr_CastType                (EntryPoint_VoidPtr_CastType+1)
+	#define 		EntryPoint_3VoidPtr_CastType                (EntryPoint_2VoidPtr_CastType+1)
+	#define 		EntryPoint_Minimum_VoidPtr_CastType         (EntryPoint_3VoidPtr_CastType+1)
+	#define 		EntryPoint_Maximum_VoidPtr_CastType         (EntryPoint_Minimum_VoidPtr_CastType+1)
+	#define 		EntryPoint_Class_0_CastType                 (EntryPoint_Maximum_VoidPtr_CastType+1)
+	#define			EntryPoint_Class_VoidPtr_CastType           (EntryPoint_Class_0_CastType+1)
+	#define 		EntryPoint_Class_Minimum_VoidPtr_CastType   (EntryPoint_Class_VoidPtr_CastType+1)
+	#define 		EntryPoint_Class_Maximum_VoidPtr_CastType   (EntryPoint_Class_Minimum_VoidPtr_CastType+1)
+	#define 		EntryPoint_CastType_MAX                     (EntryPoint_Class_Maximum_VoidPtr_CastType+1)
+	
+	/** Textual name of this class */
+	extern const Type EntryPoint_Type;
+	
+	/** EntryPoint info */
+	#define __EntryPoint \
+		/* General info */ \
+		__Stg_Object \
+		\
+		/* Virtual info */ \
+		EntryPoint_GetRunFunction*	_getRun; \
+		\
+		/* EntryPoint info */ \
+		unsigned int			castType; \
+		void*				run; \
+		HookList*			hooks; \
+		Hook*				alwaysFirstHook; \
+		Hook*				alwaysLastHook;
+
+	struct EntryPoint { __EntryPoint };
+	
+	/** Create a new EntryPoint */
+	EntryPoint* EntryPoint_New( const Name name, unsigned int castType );
+	
+	/** Initialise an existing EntryPoint */
+	void EntryPoint_Init( void* entryPoint, const Name name, unsigned int castType );
+	
+	/** Creation implementation */
+	EntryPoint* _EntryPoint_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		EntryPoint_GetRunFunction*	_getRun,
+		Name 				name, 
+		unsigned int 			castType );
+	
+	/** Member Initialisation implementation */
+	void _EntryPoint_Init( EntryPoint* self, unsigned int castType );
+	
+	/** Stg_Class_Delete() implementation */
+	void _EntryPoint_Delete( void* entryPoint );
+	
+	/** Stg_Class_Print() implementation */
+	void _EntryPoint_Print( void* entryPoint, Stream* stream );
+	
+	/* Copy */
+	#define EntryPoint_Copy( self ) \
+		(EntryPoint*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define EntryPoint_DeepCopy( self ) \
+		(EntryPoint*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _EntryPoint_Copy( void* entryPoint, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* VIRTUAL FUNCTIONS */
+
+	
+	/* Obtain the pointer the function that will run this entry point (i.e. the function that will call the many functions this
+	 *  entry point */
+	Func_Ptr EntryPoint_GetRun( void* entryPoint );
+	
+	/** Default GetRun implementation */
+	Func_Ptr _EntryPoint_GetRun( void* entryPoint );
+	
+	/** Default entry point run... no arguements passed */
+	void _EntryPoint_Run( void* entryPoint );
+	
+	/** Default entry point run... one void* arguement passed */
+	void _EntryPoint_Run_VoidPtr( void* entryPoint, void* data0 );
+	
+	/** Default entry point run funcs... many void* arguments passed */
+	void _EntryPoint_Run_2VoidPtr( void* entryPoint, void* data0, void* data1 );
+	void _EntryPoint_Run_3VoidPtr( void* entryPoint, void* data0, void* data1, void* data2 ) ;
+
+	/** Entry point run functions which calculates and returns the max or min of what each of the hooks returned */
+	double _EntryPoint_Run_Minimum_VoidPtr( void* entryPoint, void* data0 ) ;
+	double _EntryPoint_Run_Maximum_VoidPtr( void* entryPoint, void* data0 ) ;
+	double _EntryPoint_Run_Class_Minimum_VoidPtr( void* entryPoint, void* data0 ) ;
+	double _EntryPoint_Run_Class_Maximum_VoidPtr( void* entryPoint, void* data0 ) ;
+
+	/** Runs a plain ClassHook */
+	void _EntryPoint_Run_Class( void* entryPoint );
+	void _EntryPoint_Run_Class_VoidPtr( void* entryPoint, void* data0 );
+
+	
+	/* Functions for Adding hooks */
+	void _EntryPoint_PrependHook( void* entryPoint, Hook* hook );
+	void _EntryPoint_PrependHook_AlwaysFirst( void* entryPoint, Hook* hook );
+	void _EntryPoint_AppendHook( void* entryPoint, Hook* hook );
+	void _EntryPoint_AppendHook_AlwaysLast( void* entryPoint, Hook* hook );
+	void _EntryPoint_InsertHookBefore( void* entryPoint, Name hookToInsertBefore, Hook* hook );
+	void _EntryPoint_InsertHookAfter( void* entryPoint, Name hookToInsertAfter, Hook* hook );
+	void _EntryPoint_ReplaceAllHook( void* entryPoint, Hook* hook );
+	void _EntryPoint_ReplaceHook( void* entryPoint, Name hookToReplace, Hook* hook );
+	
+	/* PUBLIC FUNCTIONS */
+	
+	/* Print concise function:- print information of interest when not debugging */
+	void EntryPoint_PrintConcise( void* entryPoint, Stream* stream );
+	
+	/** Prepend a new Hook function at the start of an entry point's list of hooks to run. */
+	void EntryPoint_Prepend( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/** Prepend a new Hook function at the start of an entry point's list of hooks to run, specifying it
+	should always remain the first hook. */
+	void EntryPoint_Prepend_AlwaysFirst( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/** Add a new Func_Ptr to an entry point, at the end of the current list of hooks. If there is a hook
+	already specified to always come last, the new hook will be appended to come just before it. */
+	void EntryPoint_Append( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/** Add a new Func_Ptr to an entry point, at the end of the list of hooks - and make
+	sure the entry point is always kept at the end. If this is called twice on
+	the same entry point, an assert results. */
+	void EntryPoint_Append_AlwaysLast( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy );
+
+	/** Add a new Hook function to an entry point, just before the specified hookToInsertBefore in the list of hooks.
+	 * If the specified hook to insert before doesn't exist, then asserts with an error. */
+	void EntryPoint_InsertBefore( void* entryPoint, Name hookToInsertBefore, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/** Add a new Hook function to an entry point, just after the specified hookToInsertAfter in the list of hooks.
+	 * If the specified hook to insert after doesn't exist, then asserts with an error. */
+	void EntryPoint_InsertAfter( void* entryPoint, Name hookToInsertAfter, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/** Replace a specific named hook with a new hook function.
+	 * If the specified hook to replace doesn't exist, then asserts with an error. */
+	void EntryPoint_Replace( void* entryPoint, Name hookToReplace, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/** Replace all existing hooks of an entry point with a new hook. */
+	void EntryPoint_ReplaceAll( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy );
+
+
+	/** Prepend a new Hook function at the start of an entry point's list of hooks to run. */
+	void EntryPoint_PrependClassHook( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy, void* reference );
+	
+	/** Prepend a new Hook function at the start of an entry point's list of hooks to run, specifying it
+	should always remain the first hook. */
+	void EntryPoint_PrependClassHook_AlwaysFirst( 
+		void* entryPoint, 
+		Name name, 
+		Func_Ptr funcPtr, 
+		char* addedBy, 
+		void* reference );
+	
+	/** Add a new Func_Ptr to an entry point, at the end of the current list of hooks. If there is a hook
+	already specified to always come last, the new hook will be appended to come just before it. */
+	void EntryPoint_AppendClassHook( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy, void* reference );
+	
+	/** Add a new Func_Ptr to an entry point, at the end of the list of hooks - and make
+	sure the entry point is always kept at the end. If this is called twice on
+	the same entry point, an assert results. */
+	void EntryPoint_AppendClassHook_AlwaysLast( 
+		void* entryPoint, 
+		Name name, 
+		Func_Ptr funcPtr, 
+		char* addedBy, 
+		void* reference );
+
+	/** Add a new Hook function to an entry point, just before the specified hookToInsertBefore in the list of hooks.
+	 * If the specified hook to insert before doesn't exist, then asserts with an error. */
+	void EntryPoint_InsertClassHookBefore( 
+		void* entryPoint, 
+		Name hookToInsertBefore, 
+		Name name, 
+		Func_Ptr funcPtr, 
+		char* addedBy, 
+		void* reference );
+	
+	/** Add a new Hook function to an entry point, just after the specified hookToInsertAfter in the list of hooks.
+	 * If the specified hook to insert after doesn't exist, then asserts with an error. */
+	void EntryPoint_InsertClassHookAfter( 
+		void* entryPoint, 
+		Name hookToInsertAfter, 
+		Name name, 
+		Func_Ptr funcPtr, 
+		char* addedBy, 
+		void* reference );
+	
+	/** Replace a specific named hook with a new hook function.
+	 * If the specified hook to replace doesn't exist, then asserts with an error. */
+	void EntryPoint_ReplaceClassHook( 
+		void* entryPoint, 
+		Name hookToReplace, 
+		Name name, 
+		Func_Ptr funcPtr, 
+		char* addedBy, 
+		void* reference );
+	
+	/** Replace all existing hooks of an entry point with a new hook. */
+	void EntryPoint_ReplaceAllClassHook( void* entryPoint, Name name, Func_Ptr funcPtr, char* addedBy, void* reference );
+
+
+	/** Removes a hook from an entry point
+	 * If the specified hook to remove doesn't exist, then asserts with an error. */
+	void EntryPoint_Remove( void* entryPoint, Name name ) ;	
+
+	/** "Purge" the entry point of all existing hooks, leaving it blank. */
+	void EntryPoint_Purge( void* entryPoint );
+	
+	void EntryPoint_WarnIfNoHooks( void* entryPoint, const char* parentFunction );
+
+	void EntryPoint_ErrorIfNoHooks( void* entryPoint, const char* parentFunction );
+	
+#endif /* __Base_Extensibility_EntryPoint_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: EntryPoint_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "EntryPoint.h"
+#include "EntryPoint_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type EntryPoint_Register_Type = "EntryPoint_Register";
+
+
+EntryPoint_Register* EntryPoint_Register_New( void ) {
+	return _EntryPoint_Register_New( sizeof(EntryPoint_Register), EntryPoint_Register_Type, _EntryPoint_Register_Delete, _EntryPoint_Register_Print, NULL );
+}
+
+void EntryPoint_Register_Init( void* entryPoint_Register ) {
+	EntryPoint_Register* self = (EntryPoint_Register*)entryPoint_Register;
+	
+	/* General info */
+	self->type = EntryPoint_Register_Type;
+	self->_sizeOfSelf = sizeof(EntryPoint_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _EntryPoint_Register_Delete;
+	self->_print = _EntryPoint_Register_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* EntryPoint_Register info */
+	_EntryPoint_Register_Init( self );
+}
+
+EntryPoint_Register* _EntryPoint_Register_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy )
+{
+	EntryPoint_Register* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(EntryPoint_Register) );
+	self = (EntryPoint_Register*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	_EntryPoint_Register_Init( self );
+	
+	return self;
+}
+
+void _EntryPoint_Register_Init( void* entryPoint_Register ) {
+	EntryPoint_Register* self = (EntryPoint_Register*)entryPoint_Register;
+	
+	/* General and Virtual info should already be set */
+	
+	/* EntryPoint_Register info */
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->entryPoint = Memory_Alloc_Array( EntryPoint*, self->_size, "EntryPoint_Register->entryPoint" );
+	memset( self->entryPoint, 0, sizeof(EntryPoint*) * self->_size );
+}
+
+void _EntryPoint_Register_Delete( void* entryPoint_Register ) {
+	EntryPoint_Register* self = (EntryPoint_Register*)entryPoint_Register;
+	
+	/* Assumes ownerships of the element types */
+	if( self->entryPoint ) {
+		EntryPoint_Index entryPoint_I;
+		
+		for( entryPoint_I = 0; entryPoint_I < self->count; entryPoint_I++ ) {
+			Stg_Class_Delete( self->entryPoint[entryPoint_I] );
+		}
+		
+		Memory_Free( self->entryPoint );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _EntryPoint_Register_Print( void* entryPoint_Register, Stream* stream ) {
+	EntryPoint_Register* self = (EntryPoint_Register*)entryPoint_Register;
+	#ifdef DEBUG
+		EntryPoint_Index entryPoint_I;
+	#endif
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "EntryPoint_Register (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* EntryPoint_Register info */
+	Journal_Printf( (void*) stream, "\tcount: %u\n", self->count );
+	Journal_Printf( (void*) stream, "\t_size: %lu\n", self->_size );
+	Journal_Printf( (void*) stream, "\t_delta: %lu\n", self->_delta );
+	
+	Journal_Printf( (void*) stream, "\tentryPoint (ptr): %p\n", self->entryPoint );
+	Journal_Printf( (void*) stream, "\tentryPoint[0-%u]:\n", self->count );
+	#ifdef DEBUG
+		for( entryPoint_I = 0; entryPoint_I < self->count; entryPoint_I++ ) {
+			Journal_Printf( (void*) stream, "entryPoint[%u]: ", entryPoint_I );
+			Print( self->entryPoint[entryPoint_I], stream);
+		}
+	#else
+		Journal_Printf( (void*) stream, "...\n" );
+	#endif
+	Journal_Printf( (void*) stream, "\t]\n" );
+}
+
+EntryPoint_Index EntryPoint_Register_Add( void* entryPoint_Register, void* entryPoint ) {
+	EntryPoint_Register*	self = (EntryPoint_Register*)entryPoint_Register;
+	EntryPoint_Index	handle;
+	
+	if( self->count >= self->_size ) {
+		/*EntryPoint**	newEntryPoint;*/
+		
+		self->_size += self->_delta;
+		self->entryPoint = Memory_Realloc_Array( self->entryPoint, EntryPoint*, self->_size );
+	}
+	
+	handle = self->count;
+	self->entryPoint[handle] = (EntryPoint*) entryPoint;
+	self->count++;
+	
+	return handle;
+}
+
+EntryPoint_Index EntryPoint_Register_GetHandle( void* entryPoint_Register, Type type ) {
+	EntryPoint_Register*	self = (EntryPoint_Register*)entryPoint_Register;
+	EntryPoint_Index entryPoint_I;
+	
+	for( entryPoint_I = 0; entryPoint_I < self->count; entryPoint_I++ ) {
+		if( self->entryPoint[entryPoint_I]->name == type ) {
+			return entryPoint_I;
+		}
+	}
+	for( entryPoint_I = 0; entryPoint_I < self->count; entryPoint_I++ ) {
+		if( strcmp( self->entryPoint[entryPoint_I]->name, type ) == 0 ) {
+			return entryPoint_I;
+		}
+	}
+	return (unsigned)-1;
+}
+
+EntryPoint* _EntryPoint_Register_At( void* entryPoint_Register, EntryPoint_Index handle ) {
+	EntryPoint_Register*	self = (EntryPoint_Register*)entryPoint_Register;
+	
+	return EntryPoint_Register_At( self, handle );
+}
+
+
+EntryPoint_Index EntryPoint_Register_Find( void* entryPoint_Register, void* entryPoint ) {
+	EntryPoint_Register*	self = (EntryPoint_Register*)entryPoint_Register;
+	EntryPoint_Index	ep_I;
+	
+	for( ep_I = 0; ep_I < self->count; ep_I++ ) {
+		if( self->entryPoint[ep_I] == (EntryPoint*)entryPoint ) {
+			return ep_I;
+		}
+	}
+	
+	return (EntryPoint_Index)-1;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+** TODO; convert this to use Stg_ObjectList to manage memory.
+**
+** $Id: EntryPoint_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_EntryPoint_Register_h__
+#define __Base_Extensibility_EntryPoint_Register_h__
+	
+
+	/* Textual name of this class */
+	extern const Type EntryPoint_Register_Type;
+	
+	/* EntryPoint_Register info */
+	#define __EntryPoint_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* EntryPoint_Register info */ \
+		EntryPoint_Index			count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		EntryPoint**				entryPoint;
+	struct EntryPoint_Register { __EntryPoint_Register };
+	
+	
+	/* Create a new EntryPoint_Register */
+	EntryPoint_Register* EntryPoint_Register_New( void );
+	
+	/* Initialise a EntryPoint_Register */
+	void EntryPoint_Register_Init( void* entryPoint_Register );
+	
+	/* Creation implementation / Virtual constructor */
+	EntryPoint_Register* _EntryPoint_Register_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy );
+	
+	/* Initialisation implementation */
+	void _EntryPoint_Register_Init( void* entryPoint_Register );
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _EntryPoint_Register_Delete( void* entryPoint_Register );
+	
+	/* Print implementation */
+	void _EntryPoint_Register_Print( void* entryPoint_Register, Stream* stream );
+	
+	
+	/* Add a new elementType */
+	EntryPoint_Index EntryPoint_Register_Add( void* entryPoint_Register, void* entryPoint );
+	
+	/* Get the handle to an elementType */
+	EntryPoint_Index EntryPoint_Register_GetHandle( void* entryPoint_Register, Type type );
+	
+	/* Get an element type from the register... SLOW */
+	#define EntryPoint_Register_At( entryPoint_Register, handle )		((entryPoint_Register)->entryPoint[(handle)] )
+	EntryPoint* _EntryPoint_Register_At( void* entryPoint_Register, EntryPoint_Index handle );
+	
+	/* If 'entryPoint' is in the register, return its index */
+	EntryPoint_Index EntryPoint_Register_Find( void* entryPoint_Register, void* entryPoint );
+	
+#endif /* __Base_Extensibility_EntryPoint_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Extensibility.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Extensibility.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Extensibility.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	External header file to this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Extensibility.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_h__
+#define __Base_Extensibility_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "ExtensionInfo.h"
+	#include "ExtensionManager.h"
+	#include "ExtensionManager_Register.h"
+	#include "Hook.h"
+	#include "ClassHook.h"
+	#include "EntryPoint.h"
+	#include "EntryPoint_Register.h"
+	#include "Codelet.h"
+	#include "PluginLoader.h"
+	#include "PluginsManager.h"
+	#include "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Base_Extensibility_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,288 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ExtensionInfo.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ExtensionManager.h"
+#include "ExtensionInfo.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+/* Textual name of this class */
+const Type ExtensionInfo_Type = "ExtensionInfo";
+
+ExtensionInfo* _ExtensionInfo_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy,
+		ExtensionInfo_DataCopyFunction*	_dataCopy,
+		Name 				name, 
+		SizeT 				size,
+		Index				count )
+{
+	ExtensionInfo* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ExtensionInfo) );
+	self = (ExtensionInfo*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->_dataCopy = _dataCopy;
+	
+	/* ExtensionInfo info */
+	_ExtensionInfo_Init( self, name, size, count );
+	
+	return self;
+}
+
+
+void _ExtensionInfo_Init( ExtensionInfo* self, Name name, SizeT size, Index count ) {
+	/* General and Virtual info should already be set */
+	
+	/* ExtensionInfo info */
+
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+
+	self->key = name;
+	
+	self->originalSize = size * count;
+	self->size = ExtensionManager_Align( self->originalSize );
+	self->isRegistered = False;
+	self->itemSize = size;
+	self->count = count;
+	
+	/* These are set via ExtensionInfo_Register (ie. after it is added to the ExtensionManager */
+	self->offset = 0;
+	self->extensionManager = NULL;
+	self->handle = -1;
+
+	self->data = NULL;
+}
+
+
+void _ExtensionInfo_Delete( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+	
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s\" delete a pointer of value NULL\n", ExtensionInfo_Type );
+
+	if ( self->data ) {
+		Memory_Free( self->data );
+	}
+	
+	/* Delete parent */
+	_Stg_Object_Delete( self );
+}
+
+
+void _ExtensionInfo_Print( void* extensionInfo, Stream* stream ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+		
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s\" print a pointer of value NULL\n", ExtensionInfo_Type );
+	
+	/* General info */
+	Journal_Printf( (void*)stream, "ExtensionInfo (%p):\n", self );
+	_Stg_Object_Print( self, stream );
+	Journal_Printf( (void*)stream, "\toriginalSize: %u\n", (unsigned int)self->originalSize );
+	Journal_Printf( (void*)stream, "\tsize: %u\n", (unsigned int)self->size );
+	Journal_Printf( (void*)stream, "\tisRegistered: %s\n", self->isRegistered ? "Yes" : "No" );
+	Journal_Printf( (void*)stream, "\toffset: %u\n", (unsigned int)self->offset );
+	Journal_Printf( (void*)stream, "\textensionManager: %p (ptr)\n", self->extensionManager );
+	Journal_Printf( (void*)stream, "\thandle: %u\n", self->handle );
+}
+
+void* _ExtensionInfo_Copy( void* extensionInfo, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap  ) {
+	ExtensionInfo*		self = (ExtensionInfo*)extensionInfo;
+	ExtensionInfo*		newExtensionInfo;
+	
+	/* Copy parent */
+	newExtensionInfo = _Stg_Object_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newExtensionInfo->_dataCopy = self->_dataCopy;
+	newExtensionInfo->key = self->key;
+	newExtensionInfo->originalSize = self->originalSize;
+	newExtensionInfo->size = self->size;
+	newExtensionInfo->isRegistered = self->isRegistered;
+	newExtensionInfo->itemSize = self->itemSize;
+	newExtensionInfo->count = self->count;
+	newExtensionInfo->offset = self->offset;
+	newExtensionInfo->handle = self->handle;	
+
+	newExtensionInfo->extensionManager = Stg_Class_Copy( self->extensionManager, NULL, deep, nameExt, ptrMap );
+
+	if ( self->data ) {
+		newExtensionInfo->data = PtrMap_Find( ptrMap, self->data );
+		Journal_Firewall(
+			newExtensionInfo->data != NULL ,
+			Journal_Register( Error_Type, __FILE__ ),
+			"Copy Error: Attempting to copy ExtensionInfo before data\n" );
+	}
+	else {
+		newExtensionInfo->data = NULL;
+	}
+	
+	return newExtensionInfo;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+SizeT ExtensionInfo_OriginalSizeFunc( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+	
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_OriginalSize\" a pointer of value NULL\n", ExtensionInfo_Type );
+	
+	return ExtensionInfo_OriginalSizeMacro( self );
+}
+
+
+SizeT ExtensionInfo_SizeFunc( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+	
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_Size\" a pointer of value NULL\n", ExtensionInfo_Type );
+	
+	return ExtensionInfo_SizeMacro( self );
+}
+
+SizeT ExtensionInfo_ItemSizeFunc( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+		
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_ItemSize \" a pointer of value NULL\n", ExtensionInfo_Type );
+	
+	return ExtensionInfo_ItemSizeMacro( self );
+}
+
+SizeT ExtensionInfo_CountFunc( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+		
+	Journal_Firewall( 
+			self != NULL,
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_Count \" a pointer of value NULL\n", ExtensionInfo_Type );
+	
+	return ExtensionInfo_CountMacro( self );
+}
+
+SizeT ExtensionInfo_OffsetFunc( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+		
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_Offset\" a pointer of value NULL\n", ExtensionInfo_Type );
+	Journal_DFirewall( 
+			self->isRegistered,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_Offset\" a non registered extension info\n", ExtensionInfo_Type );	
+	
+	return ExtensionInfo_OffsetMacro( self );
+}
+
+Bool ExtensionInfo_IsRegisteredFunc( void* extensionInfo ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+		
+	Journal_DFirewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_IsRegistered\" a pointer of value NULL\n", ExtensionInfo_Type );
+	
+	return ExtensionInfo_IsRegisteredMacro( self );
+}
+
+
+void* ExtensionInfo_DataCopy( void* extensionInfo, void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+
+	return self->_dataCopy( self, source, dest, deep, nameExt, ptrMap );
+}
+
+void ExtensionInfo_Register( 
+	void*				extensionInfo,
+	SizeT				offset,
+	ExtensionManager*		extensionManager,
+	ExtensionInfo_Index		handle,
+	void*				data )
+{
+	ExtensionInfo* self = (ExtensionInfo*)extensionInfo;
+		
+	Journal_Firewall( 
+			self != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to \"%s_Register\" a pointer of value NULL\n", ExtensionInfo_Type );
+
+	self->isRegistered = True;
+	self->offset = offset;
+	self->extensionManager = extensionManager;
+	self->handle = handle;
+	self->data = data;
+	
+	Journal_DFirewall( 
+			self->extensionManager != NULL,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to register an ExtensionInfo with an ExtensionManager that is NULL\n" );
+	Journal_DFirewall( 
+			self->handle != -1,  
+			Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+			"Attempting to register an ExtensionInfo with a handle that is invalid\n" );
+	
+	/* To consider... is there a way of checking that the handle is a sane value? SQ20050505 */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,205 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Extensions are the effective equivalent of no-typing (i.e. the attributes/methods of am object are changable at runtime). 
+**	By definition Object Oriented programming assumes "no-typing" ability, but popular Object Oriented languages such as C++
+**	and Java (which are weakly-typed) have impeded its uptake. StGermain's ExtensionManager/ExtensionInfo combination mimics
+**	"no-typing" in C by allowing users to add attributes to an object at run-time. The StGermain inheritance scheme already 
+**	provides runtime changing of method implementations on an object. However note, given that StGermain was originally built
+**	for computational purposes, speed requirements dictate that at some point the ability to add extensions is stopped, and the
+**	object effectively becomes weakly-typed.
+**
+**	ExtensionInfo is an abstract class that defines the key information about an object/struct extension, but does not define
+**	how an extension is to behave when it is being copied, printed or deleted. Specifically this class refers to ONE extension
+**	to a class/object. The ExtensionManager manages the collection of extensions (ExtensionInfo, this class) to a class/object.
+**
+** Assumptions:
+**	Conceptual: Architecturally assumes that extensions themselves are static in size (i.e. typed).
+**	Conceptual: The user of the extension knows how to cast into a useful form the block of memory this class manages.
+**	Usage: The physical offset (which we store here) of this extension in the collection of extensions MUST be provided by
+**	ExtensionManager.
+**
+** Comments:
+**	An ExtensionInfo (derivative) when constructed is in an invalid state. It must be registered with a manager (to obtain the
+**	offset, etc) before this object is legally usable.
+**	An ExtensionManager is required as it is the only way to obtain the actual extension (i.e. the block of memory), which is
+**		likely not be be allocated at the time of this class' contruction.
+**
+** $Id: ExtensionInfo.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_ExtensionInfo_h__
+#define __Base_Extensibility_ExtensionInfo_h__
+	
+	/** Textual name of this class */
+	extern const Type ExtensionInfo_Type;
+
+	typedef void* (ExtensionInfo_DataCopyFunction)( 
+		void* extensionInfo, 
+		void* source, 
+		void* dest, 
+		Bool deep, 
+		Name nameExt,
+		PtrMap* ptrMap );
+	
+	/** ExtensionInfo struct- stores a func pointer plus info */
+	#define __ExtensionInfo \
+		__Stg_Object \
+		ExtensionInfo_DataCopyFunction*	_dataCopy;		/**< Virtual func which copies the data of extension. */ \
+		Name				key;			/**< Pointer to const key */ \
+		SizeT				originalSize;		/**< How big the extension is (as provided). */\
+		SizeT				size;			/**< How big the extension is (word aligned). */\
+		Bool				isRegistered;		/**< Is this ExtensionInfo registered with a manager. */\
+		SizeT				itemSize;		/**< If array, the size of each item. */\
+		Index				count;			/**< If array, the number of items. */\
+		SizeT				offset;			/**< The extension's offset in memory. */\
+		ExtensionManager*		extensionManager;	/**< The extension manager that this is part of. */\
+		ExtensionInfo_Index		handle;			/**< The extension handle in the manager. */ \
+		void*				data;			/**< If extending extended array, the data of extension.*/
+		
+	/** Defines key information about an object/struct extension - see ExtensionInfo.h. */
+	struct ExtensionInfo { __ExtensionInfo };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Creation implementation */
+	ExtensionInfo* _ExtensionInfo_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,	/**< Derivatives: implement how to delete the extension */
+		Stg_Class_PrintFunction*	_print,		/**< Derivatives: implement how to print the extension */
+		Stg_Class_CopyFunction*		_copy, 		/**< Derivatives: implement how to copy the extension */
+		ExtensionInfo_DataCopyFunction*	_dataCopy,	/**< Derivatives: implement how to copy the extension data */
+		Name 				name,
+		SizeT 				size,
+		Index				count );
+	
+	/* Initialisation implementation */
+	void _ExtensionInfo_Init( ExtensionInfo* self, Name name, SizeT size, Index count );
+	
+	/** Class_Delete() implementation: derivatives should call this in their implementation */
+	void _ExtensionInfo_Delete( void* extensionInfo );
+	
+	/** Class_Print() implementation: derivatives should call this in their implementation */
+	void _ExtensionInfo_Print( void* extensionInfo, Stream* stream );
+	
+	/** Class_Copy() implementation: derivatives should call this in their implementation */
+	void* _ExtensionInfo_Copy( void* extensionInfo, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+	/** Copyies the extended dats from source to dest */
+	void* ExtensionInfo_DataCopy( void* extensionInfo, void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* Obtain the original (provided) size of the extension */
+	#define ExtensionInfo_OriginalSizeMacro( self ) \
+		( (self)->originalSize )
+	SizeT ExtensionInfo_OriginalSizeFunc( void* extensionInfo );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the original (provided) size of the extension */
+		#define ExtensionInfo_OriginalSize ExtensionInfo_OriginalSizeFunc
+	#else
+		/** Obtain the original (provided) size of the extension */
+		#define ExtensionInfo_OriginalSize ExtensionInfo_OriginalSizeMacro
+	#endif
+	
+	/* Obtain the size (word alignment compliant) of the extension */
+	#define ExtensionInfo_SizeMacro( self ) \
+		( (self)->size )
+	SizeT ExtensionInfo_SizeFunc( void* extensionInfo );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the size (word alignment compliant) of the extension */
+		#define ExtensionInfo_Size ExtensionInfo_SizeFunc
+	#else
+		/** Obtain the size (word alignment compliant) of the extension */
+		#define ExtensionInfo_Size ExtensionInfo_SizeMacro
+	#endif
+	
+	/* Obtain the size per item for extension which are arrays */
+	#define ExtensionInfo_ItemSizeMacro( self ) \
+		( (self)->itemSize )
+	SizeT ExtensionInfo_ItemSizeFunc( void* extensionInfo );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the size per item for extension which are arrays */
+		#define ExtensionInfo_ItemSize ExtensionInfo_ItemSizeFunc
+	#else
+		/** Obtain the size per item for extension which are arrays */
+		#define ExtensionInfo_ItemSize ExtensionInfo_ItemSizeMacro
+	#endif
+	
+	/* Obtain the count of items for extension which are arrays */
+	#define ExtensionInfo_CountMacro( self ) \
+		( (self)->count )
+	SizeT ExtensionInfo_ItemSizeFunc( void* extensionInfo );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the count of items for extension which are arrays */
+		#define ExtensionInfo_Count ExtensionInfo_CountFunc
+	#else
+		/** Obtain the count of items for extension which are arrays */
+		#define ExtensionInfo_Count ExtensionInfo_CountMacro
+	#endif
+	
+	/* Obtain the offset of the extension */
+	#define ExtensionInfo_OffsetMacro( self ) \
+		( (self)->offset )
+	SizeT ExtensionInfo_OffsetFunc( void* extensionInfo );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the offset of the extension */
+		#define ExtensionInfo_Offset ExtensionInfo_OffsetFunc
+	#else
+		/** Obtain the offset of the extension */
+		#define ExtensionInfo_Offset ExtensionInfo_OffsetMacro
+	#endif
+	
+	/* Has this extension info been registered with a manager? This object is useless until this occours. */
+	#define ExtensionInfo_IsRegisteredMacro( self ) \
+		( (self)->isRegistered )
+	Bool ExtensionInfo_IsRegisteredFunc( void* extensionInfo );
+	#ifdef MACRO_AS_FUNC
+		/** Has this extension info been registered with a manager? This object is useless until this occours. */
+		#define ExtensionInfo_IsRegistered ExtensionInfo_IsRegisteredFunc
+	#else
+		/** Has this extension info been registered with a manager? This object is useless until this occours. */
+		#define ExtensionInfo_IsRegistered ExtensionInfo_IsRegisteredMacro
+	#endif
+	
+	
+	/* This function is a friend of ExtensionManager. It is called by ithe manager to register its info with this extension.
+	   Registration is done by the manager on an Add. An ExtensionInfo is useless without being registered. */
+	void ExtensionInfo_Register( 
+		void*				extensionInfo,
+		SizeT				offset,
+		ExtensionManager*		extensionManager,
+		ExtensionInfo_Index		handle,
+		void*				data );
+	
+#endif /* __Base_Extensibility_ExtensionInfo_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,952 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ExtensionManager.c 3547 2006-05-06 12:35:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ExtensionManager.h"
+
+#include "ExtensionInfo.h"
+#include "SimpleExtensionInfo.h"
+#include "ClassPtrExtensionInfo.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+
+
+/* Textual name of this class */
+const Type ExtensionManager_Type = "Extension";
+
+
+ExtensionManager* ExtensionManager_New_OfStruct( 
+		Name				name, 
+		SizeT				initialSize )
+{
+	return _ExtensionManager_New( 
+		sizeof(ExtensionManager), 
+		ExtensionManager_Type, 
+		_ExtensionManager_Delete,
+		_ExtensionManager_Print, 
+		_ExtensionManager_Copy, 
+		name, 
+		initialSize, 
+		NULL,			/* no existing object */
+		NULL,			/* no array */
+		0,
+		NULL,
+		0 );
+}
+
+ExtensionManager* ExtensionManager_New_OfExistingObject( 
+		Name				name, 
+		void*				_existingObject )
+{
+	return _ExtensionManager_New( 
+		sizeof(ExtensionManager), 
+		ExtensionManager_Type, 
+		_ExtensionManager_Delete,
+		_ExtensionManager_Print, 
+		_ExtensionManager_Copy, 
+		name, 
+		0,			/* not extending a struct here */
+		_existingObject,
+		NULL,			/* not doing arrays here */
+		0,
+		NULL,
+		0 );
+}
+
+ExtensionManager* ExtensionManager_New_OfArray(
+		Name                            name,
+		void*                           _array,
+		SizeT                           itemSize,
+		Index                           count )
+{
+	return _ExtensionManager_New(
+		sizeof( ExtensionManager ),
+		ExtensionManager_Type,
+		_ExtensionManager_Delete,
+		_ExtensionManager_Print,
+		_ExtensionManager_Copy,
+		name,
+		0,			/* not extending a struct here */
+		NULL,			/* not doing single object */
+		_array,
+		itemSize,
+		NULL,			/* not extending an array of extended structs */
+		count );
+}
+
+ExtensionManager* ExtensionManager_New_OfExtendedArray(
+		Name                            name,
+		void*                           _array,
+		ExtensionManager*               em,
+		Index                           count )
+{
+	return _ExtensionManager_New(
+		sizeof(ExtensionManager),
+		ExtensionManager_Type,
+		_ExtensionManager_Delete,
+		_ExtensionManager_Print,
+		_ExtensionManager_Copy,
+		name,
+		0,			/* not extending a struct here */
+		NULL,			/* not doing single object */
+		_array,
+		0,			/* take itemSize from em */
+		em,			/* The ExtensionManager which extended the struct */
+		count );
+}
+
+void ExtensionManager_Init_OfStruct( 
+		void*				extension,
+		Name				name, 
+		SizeT				initialSize )
+{
+	ExtensionManager* self = (ExtensionManager*)extension;
+	
+	/* General info */
+	self->type = ExtensionManager_Type;
+	self->_sizeOfSelf = sizeof(ExtensionManager);
+	self->_deleteSelf = False;
+		/** Ptr to extensions to existing object. */ \
+
+	/* Virtual info */
+	self->_delete = _ExtensionManager_Delete;
+	self->_print = _ExtensionManager_Print;
+	self->_copy = _ExtensionManager_Copy;
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	/* Extension info */
+	_ExtensionManager_Init( 
+		self, 
+		initialSize, 
+		NULL,		/* no existing object */
+		NULL,		/* no arrays */
+		0,
+		NULL,
+		0 );
+}
+
+void ExtensionManager_Init_OfExistingObject( 
+		void*				extension,
+		Name				name, 
+		void*				_existingObject )
+{
+	ExtensionManager* self = (ExtensionManager*)extension;
+	
+	/* General info */
+	self->type = ExtensionManager_Type;
+	self->_sizeOfSelf = sizeof(ExtensionManager);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ExtensionManager_Delete;
+	self->_print = _ExtensionManager_Print;
+	self->_copy = _ExtensionManager_Copy;
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	/* Extension info */
+	_ExtensionManager_Init( 
+		self, 
+		0, 		/* not extending struct here */
+		_existingObject,
+		NULL,		/* no arrays */
+		0,
+		NULL,
+		0 );
+}
+
+void ExtensionManager_Init_OfArray(
+		void*                           extension,
+		Name                            name,
+		void*                           _array,
+		SizeT                           itemSize,
+		Index                           count )
+{
+	ExtensionManager* self = (ExtensionManager*)extension;
+	
+	/* General info */
+	self->type = ExtensionManager_Type;
+	self->_sizeOfSelf = sizeof(ExtensionManager);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ExtensionManager_Delete;
+	self->_print = _ExtensionManager_Print;
+	self->_copy = _ExtensionManager_Copy;
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	/* Extension info */
+	_ExtensionManager_Init( 
+		self,
+		0,		/* not extending struct here */
+		NULL,		/* no existing item */
+		_array,
+		itemSize,
+		NULL,		/* items are not extended */
+		count );
+}
+
+void ExtensionManager_Init_OfExtendedArray(
+		void*                           extension,
+		Name                            name,
+		void*                           _array,
+		ExtensionManager*               em,
+		Index                           count )
+{
+	ExtensionManager* self = (ExtensionManager*)extension;
+	
+	/* General info */
+	self->type = ExtensionManager_Type;
+	self->_sizeOfSelf = sizeof(ExtensionManager);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ExtensionManager_Delete;
+	self->_print = _ExtensionManager_Print;
+	self->_copy = _ExtensionManager_Copy;
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	/* Extension info */
+	_ExtensionManager_Init( 
+		self,
+		0,		/* not extending struct here */
+		NULL,		/* no existing item */
+		_array,
+		0,		/* get itemSize from em */
+		em,
+		count );
+}
+
+ExtensionManager* _ExtensionManager_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name				name, 
+		SizeT				initialSize,
+		void*				_existingObject,
+		void*				_array,
+		SizeT				itemSize,
+		ExtensionManager*		em,
+		Index				count )
+{
+	ExtensionManager* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ExtensionManager) );
+	self = (ExtensionManager*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	_ExtensionManager_Init( self, initialSize, _existingObject, _array, itemSize, em, count );
+	
+	return self;
+}
+
+void _ExtensionManager_Init(
+		void*				extension,
+		SizeT				initialSize,
+		void*				_existingObject,
+		void*				_array,
+		SizeT				itemSize,
+		ExtensionManager*		em,
+		Index				count )
+{
+	ExtensionManager* self = (ExtensionManager*)extension;
+	/* General and Virtual info should already be set */
+
+	if ( _array ) {
+		if ( em ) {
+			/* arrays of extended structs take item size from em */
+			itemSize = ExtensionManager_GetFinalSize( em );
+		}
+
+		/* if its an array, all sizes should be item size */
+		initialSize = itemSize;
+	}
+	
+	self->extInfos = Stg_ObjectList_New();
+	/*self->objToExtensionMapper = HashTable_New( Stg_Class_Copy, NULL, Stg_Class_Delete, HASHTABLE_POINTER_KEY );*/
+
+	/* Extension info */
+	self->initialSize = initialSize;
+	self->finalSize = self->initialSize;
+	self->dataCopyFunc = NULL;
+
+	self->_existingObject = _existingObject;
+	self->_extensionsToExisting = NULL;
+	/*
+	if ( self->_existingObject ) {
+		HashTable_InsertEntry( 
+			self->objToExtensionMapper, 
+			self->_existingObject, 
+			sizeof(void*),
+			HashTable_New( NULL, NULL, NULL, HASHTABLE_POINTER_KEY ),
+			sizeof(HashTable) );
+	}
+	*/
+	self->_array = _array;
+	self->itemSize = itemSize;
+	self->em = em;
+	self->count = count;
+}
+
+
+void _ExtensionManager_Delete( void* extension ) {
+	ExtensionManager* self = (ExtensionManager*)extension;
+	
+	if( self->_extensionsToExisting ) {
+		Memory_Free( self->_extensionsToExisting );
+	}
+	
+	Stg_Class_Delete( self->extInfos );
+	/*Stg_Class_Delete( self->objToExtensionMapper );*/
+
+	/* Stg_Class_Delete parent */
+	_Stg_Object_Delete( self );
+}
+
+void _ExtensionManager_Print( void* extension, Stream* stream ) {
+	ExtensionManager* self = (ExtensionManager*)extension;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Extension (ptr):%p\n", self );
+	
+	/* Print parent */
+	_Stg_Object_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* Extension info */
+	Journal_Printf( (void*) stream, "\tinitialSize %lu\n", self->initialSize );
+	Journal_Printf( (void*) stream, "\tfinalSize %lu\n", self->finalSize );
+	Journal_Printf( (void*) stream, "\tcount: %u\n", self->extInfos->count );
+	
+	Journal_Printf( (void*) stream, "\textInfos (ptr): %p\n", (void*)self->extInfos );
+	Print( self->extInfos, stream );
+	
+	Journal_Printf( (void*)stream, "\t_extensionsToExisting (ptr): %p\n", self->_extensionsToExisting );
+	Journal_Printf( (void*)stream, "\t_existingObject (ptr): %p\n", self->_existingObject );
+
+	Journal_Printf( (void*)stream, "\t_array (ptr): %p\n", self->_array );
+	Journal_Printf( (void*)stream, "\titemSize %lu\n", self->itemSize );
+	Journal_Printf( (void*)stream, "\tem (ptr) %p\n", self->em );
+	Journal_Printf( (void*)stream, "\tcount %u\n", self->count );
+}
+
+
+void* _ExtensionManager_Copy( void* extensionManager, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ExtensionManager*	self = (ExtensionManager*)extensionManager;
+	ExtensionManager*	newExtensionManager;
+	PtrMap*			map = ptrMap;
+	int item_I;
+	int ext_I;
+	void* data;
+	ExtensionInfo* srcInfo;
+
+	newExtensionManager = _Stg_Object_Copy( self, dest, deep, nameExt, map );
+	
+	newExtensionManager->initialSize = self->initialSize;
+	newExtensionManager->finalSize = self->finalSize;
+	newExtensionManager->dataCopyFunc = self->dataCopyFunc;
+
+	/* Of Existing */
+	if ( self->_existingObject ) {
+		/* ExtensionManager assumes the object is already copied */
+		newExtensionManager->_existingObject = PtrMap_Find( map, self->_existingObject );
+		Journal_Firewall(
+			newExtensionManager->_existingObject != NULL,
+			Journal_Register( Error_Type, __FILE__ ),
+			"Copy Error: ExtensionManager copied before _existingObject\n" );
+	}
+	else {
+		newExtensionManager->_existingObject = NULL;
+	}
+	
+	if ( self->_extensionsToExisting ) {
+		/* OfObject case */
+		if( (newExtensionManager->_extensionsToExisting = PtrMap_Find( map, self->_extensionsToExisting )) == NULL && 
+			self->_extensionsToExisting )
+		{
+			Index ext_I;
+			ArithPointer offset;
+			newExtensionManager->_extensionsToExisting = Memory_Alloc_Bytes( 
+				self->finalSize, 
+				"Extended data", 
+				self->name );
+			PtrMap_Append( map, self->_extensionsToExisting, newExtensionManager->_extensionsToExisting );
+			offset = 0;
+			for ( ext_I = 0; ext_I < self->extInfos->count; ++ext_I ) {
+				ExtensionInfo* eInfo = (ExtensionInfo*)Stg_ObjectList_At( self->extInfos, ext_I );
+				ExtensionInfo_DataCopy(
+					eInfo,
+					(void*)((ArithPointer)self->_extensionsToExisting + offset),
+					(void*)((ArithPointer)newExtensionManager->_extensionsToExisting + offset ),
+					True,
+					nameExt,
+					map );
+
+				offset += ExtensionInfo_Size( eInfo );
+				PtrMap_Append(
+					map,
+					(void*)((ArithPointer)self->_extensionsToExisting + offset),
+					(void*)((ArithPointer)newExtensionManager->_extensionsToExisting + offset ) );
+			}
+		}
+	}
+
+	if ( self->_array ) {
+		Index obj_I;
+		/* Array case */
+		newExtensionManager->_array = PtrMap_Find( map, self->_array );
+		if ( newExtensionManager->_array == NULL ) {
+			if ( self->em ) {
+				/* ExtendedArray case */
+				newExtensionManager->_array = ExtensionManager_CopyAllocation(
+					self->em,
+					self->_array,
+					NULL,
+					deep,
+					nameExt,
+					ptrMap,
+					self->count );
+				
+			}
+			else {
+				/* OfArray case */
+				newExtensionManager->_array = Memory_Alloc_Bytes( 
+					self->itemSize * self->count, 
+					"Base Type", 
+					self->name );
+				PtrMap_Append( map, self->_array, newExtensionManager->_array );
+
+			}
+		}
+
+		/* Add each item of array to pointer map */
+		for ( obj_I = 0; obj_I < self->count; ++obj_I ) {
+			PtrMap_Append(
+				map,
+				(void*)( ((ArithPointer)self->_array) + (self->itemSize * item_I) ),
+				(void*)( ((ArithPointer)newExtensionManager->_array) +
+					 (self->itemSize * item_I) ) );
+		}
+		
+		/* Copy each item of the array */
+		if ( self->dataCopyFunc ) {
+			for ( item_I = 0; item_I < self->count; ++item_I ) {
+				Stg_Generic_Copy( 
+					self->dataCopyFunc,
+					(void*)( ((ArithPointer)self->_array) + (self->itemSize * item_I) ),
+					(void*)( ((ArithPointer)newExtensionManager->_array) + 
+						(self->itemSize * item_I) ),
+					deep,
+					nameExt,
+					ptrMap );
+			}
+		}
+		else {
+			memcpy( newExtensionManager->_array, self->_array, self->itemSize * self->count );
+		}
+
+		/* Copy the extensions */
+		for ( ext_I = 0; ext_I < self->extInfos->count; ++ext_I ) {
+			srcInfo = ExtensionInfo_At( self->extInfos, ext_I );
+			data = PtrMap_Find( map, srcInfo->data );
+			if ( data == NULL ) {
+				data = Memory_Alloc_Bytes( 
+					srcInfo->size * self->count, 
+					"Extended data",
+					self->name );
+				PtrMap_Append( map, srcInfo->data, data );
+			}
+			for ( item_I = 0; item_I < self->count; ++item_I ) {
+				ExtensionInfo_DataCopy( 
+					srcInfo, 
+					((void*)((ArithPointer)srcInfo->data + (srcInfo->itemSize * item_I) )),
+					((void*)((ArithPointer)data + (srcInfo->itemSize * item_I) )),
+					deep,
+					nameExt,
+					map );
+				PtrMap_Append(
+					map,
+					((void*)((ArithPointer)srcInfo->data + (srcInfo->itemSize * item_I) )),
+					((void*)((ArithPointer)data + (srcInfo->itemSize * item_I) )) );
+			}
+		}
+	}
+	else {
+		newExtensionManager->_array = NULL;
+	}
+
+	newExtensionManager->itemSize = self->itemSize;
+	newExtensionManager->em = Stg_Class_Copy( self->em, NULL, deep, nameExt, ptrMap );
+	newExtensionManager->count = self->count;
+
+	/* Must be copied after all the data ptrs have been appended to map */
+	newExtensionManager->objToExtensionMapper = Stg_Class_Copy( self->objToExtensionMapper, NULL, deep, nameExt, ptrMap );
+	
+	/* must be copied last bacause of array case */
+	newExtensionManager->extInfos = (ExtensionInfoList*)Stg_Class_Copy( self->extInfos, NULL, deep, nameExt, ptrMap );
+
+	return (void*)newExtensionManager;
+}
+
+void ExtensionManager_SetDataCopyFunc( void* extensionManager, Stg_Class_CopyFunction* dataCopyFunc ) {
+	ExtensionManager* self = (ExtensionManager*)extensionManager;
+
+	self->dataCopyFunc = dataCopyFunc;
+}
+
+ExtensionInfo_Index ExtensionManager_AddExtensionInfo( void* extensionManager, void* extensionInfo ) {
+	ExtensionManager* self = (ExtensionManager*)extensionManager;
+	ExtensionInfo* newExtension = (ExtensionInfo*) extensionInfo;
+
+	ExtensionInfo_Index	handle;
+	SizeT			offset;
+	SizeT			oldFinalSize;
+
+	Journal_Firewall(
+		self->lockDown == False,
+		Journal_MyStream( Error_Type, self ),
+		"Error in func %s: Trying to add extension \"%s\" to ExtensionManager \"%s\" when it is in lock down mode "
+		"(No more extensions can be added).\n"
+		"Please ensure that the source code is not adding to the wrong ExtensionManager or contact the developer.\n",
+		__func__,
+		newExtension->key,
+		self->name );
+	
+	handle = self->extInfos->count;
+	offset = ExtensionManager_Size( self ); /* aligned, size of everything */
+	
+	if ( self->_array == NULL ) {
+		/* Struct or Object case */
+		oldFinalSize = ExtensionManager_Size( self );
+		
+		Stg_ObjectList_Append( self->extInfos, newExtension ); 
+		ExtensionInfo_Register( newExtension, offset, self, handle, NULL );
+
+		self->finalSize = ExtensionManager_Size( self );
+	
+		/* if we are extending an existing object, allocate more memory */
+		if( self->_existingObject ) {
+			/*
+			HashTable* ht = HashTable_FindEntry( self->objToExtensionMapper, self->_existingObject, sizeof(HashTable), HashTable );
+			*/
+			if (! self->_extensionsToExisting ) {
+				self->_extensionsToExisting = Memory_Alloc_Bytes( self->finalSize, "Extended data", self->name );
+				/* Use 0 as size of data because its a don't care */
+				/*HashTable_InsertEntry( ht, newExtension->key, sizeof(Name), self->_extensionsToExisting, 0 ); */
+			} 
+			else {
+				/* 
+				HashTable* newHt;
+				Index ext_I;
+				void* curPointer;
+				*/
+				
+				self->_extensionsToExisting = Memory_Realloc( self->_extensionsToExisting, self->finalSize );
+				memset( 
+					(void*)((ArithPointer)self->_extensionsToExisting + (ArithPointer)oldFinalSize), 
+					0, 
+					self->finalSize - oldFinalSize );
+				/* rehash the lot */
+				/*
+				newHt = HashTable_New( NULL, NULL, NULL, HASHTABLE_POINTER_KEY );
+				curPointer = self->_extensionsToExisting;
+				for ( ext_I = 0; ext_I < self->extInfos->count; ++ext_I ) {
+					ExtensionInfo* eInfo = (ExtensionInfo*)Stg_ObjectList_At( self->extInfos, ext_I );
+					HashTable_InsertEntry( newHt, eInfo->key, sizeof(Name), curPointer, 0 );
+					curPointer = (void*)((ArithPointer)curPointer + (ArithPointer)ExtensionInfo_Size( eInfo ));
+				}
+				HashTable_ReplaceEntry( self->objToExtensionMapper, self->_existingObject, sizeof(void*), newHt, sizeof(HashTable) );
+				*/
+			}
+			
+		}
+		return handle;
+	}
+	else {
+		/* Array or ExtendedArray case */
+		void* data;
+
+		/*HashTable* ht;*/
+		void* curObj;
+		void* curExtData;
+		Index obj_I;
+		
+		/* each extension stores a pointer to array of extended memory */
+		/* created the array of extended data */
+		data = Memory_Alloc_Bytes( newExtension->size * self->count, "Extended data", self->name );
+	
+		/* Add the extension.
+		 * Note that in this case, offset convention is retained for the purpose of
+		 * size calculation and is NOT to be used */
+		Stg_ObjectList_Append( self->extInfos, newExtension );
+		ExtensionInfo_Register( newExtension, offset, self, handle, data );
+
+		/*
+		if ( ExtensionManager_OfExtendedArray( self ) ) {
+			ht = self->em->objToExtensionMapper;
+		}
+		else {
+			ht = self->objToExtensionMapper;
+		}
+		*/
+		
+		curObj = self->_array;
+		curExtData = data;
+		for ( obj_I = 0; obj_I < self->count; ++obj_I ) {
+			/*
+			HashTable* extHt = HashTable_FindEntry( ht, curObj, sizeof(void*), HashTable );
+			HashTable_InsertEntry( extHt, newExtension->key, sizeof(Name), curExtData, 0 );
+			*/
+
+			curObj = (void*)((ArithPointer)curObj + (ArithPointer)self->itemSize);
+			curExtData = (void*)((ArithPointer)curExtData + (ArithPointer)ExtensionInfo_Size( newExtension ) );
+		}
+
+		if ( self->em ) {
+			return handle + self->em->extInfos->count;
+		}
+		
+		return handle;
+	}
+		
+}
+	
+
+ExtensionInfo_Index ExtensionManager_AddArray( 
+	void* extension, 
+	Name extensionName, 
+	SizeT size, 
+	Index count )
+{
+	ExtensionInfo* newExtInfo = (ExtensionInfo*)SimpleExtensionInfo_New( extensionName, ExtensionManager_Align( size ), count );
+	return ExtensionManager_AddExtensionInfo( extension, newExtInfo );
+}
+
+ExtensionInfo_Index ExtensionManager_AddClassPtrArray( 
+	void* extension, 
+	Name extensionName, 
+	Stg_Class_CopyFunction* copyFunc, 
+	Index count ) {
+
+	ExtensionInfo* newExtInfo = (ExtensionInfo*)ClassPtrExtensionInfo_New( extensionName, copyFunc, count );
+	return ExtensionManager_AddExtensionInfo( extension, newExtInfo );
+}
+
+ExtensionInfo_Index ExtensionManager_GetHandle( void* extension, Name extensionName ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	ExtensionInfo_Index			result = 0;
+	ExtensionInfo_Index			offset_I;
+
+	if ( self->em ) {
+		result = ExtensionManager_GetHandle( self->em, extensionName );
+		if ( result != (unsigned)-1 ) {
+			return result;
+		}
+		/* not found, so the result must be the prev + current extInfos handle if any */
+		result = self->em->extInfos->count;
+	}
+	
+	for( offset_I = 0; offset_I < self->extInfos->count; offset_I++ ) {
+		if( strcmp( extensionName, ExtensionInfo_At( self->extInfos, offset_I )->key ) == 0 ) {
+			return result + offset_I;
+		}
+	}
+	
+	return (unsigned)-1;
+}
+
+void* ExtensionManager_GetOFunc( void* extension, void* ptr, ExtensionInfo_Index handle ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_GetOMacro( self, ptr, handle );
+}
+
+void* ExtensionManager_GetCFunc( void* extension, void* ptr, ExtensionInfo_Index handle ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_GetCMacro( self, ptr, handle );
+}
+
+void* ExtensionManager_GetAFunc( void* extension, void* itemPtr, ExtensionInfo_Index handle ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_GetAMacro( self, itemPtr, handle );
+}
+
+void* ExtensionManager_GetExtendedAFunc( void* extension, void* itemPtr, ExtensionInfo_Index handle ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_GetExtendedAMacro( self, itemPtr, handle );
+}
+
+void* ExtensionManager_GetFunc( void* extension, void* ptr, ExtensionInfo_Index handle ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_GetMacro( self, ptr, handle );
+}
+
+void* ExtensionManager_HashGet( void* extension, void* ptr, Name key ) {
+	/*
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	HashTable* extHt;
+	void* result;
+	
+	if ( ExtensionManager_OfExtendedArray( self ) ) {
+		return ExtensionManager_HashGet( self->em, ptr, key );
+	}
+	extHt = HashTable_FindEntry( self->objToExtensionMapper, ptr, sizeof(void*), HashTable );
+	if ( extHt == NULL ) {
+		return NULL;
+	}
+	result = HashTable_FindEntry( extHt, key, sizeof(Name), void);
+	*/
+/* Uncomment this code to allow string compare to work */
+/*
+	if ( result == NULL && key != NULL ) {
+		Index ext_I;
+		for ( ext_I = 0; ext_I == self->extInfos->count; ++ext_I ) {
+			if ( strcmp( key, ExtensionInfo_At( self->extInfos, ext_I )->key ) == 0 ) {
+				result = HashTable_FindEntry( self->objToExtensionMapper, ExtensionInfo_At( self->extInfos, ext_I )->key, sizeof(void*), HashTable );
+				break;
+			}
+		}
+	}
+*/
+/*
+	return result;
+*/
+	return NULL;
+}
+
+SizeT ExtensionManager_SizeFunc( void* extension ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	return ExtensionManager_SizeMacro( self );
+}
+
+Bool ExtensionManager_OfExistingFunc( void* extension ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	return ExtensionManager_OfExistingMacro( self );
+}
+
+Bool ExtensionManager_OfArrayFunc( void* extension ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	return ExtensionManager_OfArrayMacro( self );
+}
+
+Bool ExtensionManager_OfExtendedArrayFunc( void* extension ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	return ExtensionManager_OfExtendedArrayMacro( self );
+}
+
+SizeT ExtensionManager_GetFinalSizeFunc( void* extension ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	return ExtensionManager_GetFinalSizeMacro( self );
+}
+
+SizeT ExtensionManager_AlignFunc( SizeT size ) {
+	return ExtensionManager_AlignMacro( size );
+}
+
+void* ExtensionManager_Malloc( void* extension, Index count ) {
+	ExtensionManager* self = (ExtensionManager*)extension;
+	void* result;
+
+	/*Index obj_I;*/
+	/*Index ext_I;*/
+	void* curObj;
+
+	if ( ExtensionManager_OfExisting( self ) ) {
+		return NULL;
+	}
+	
+	result = Memory_Alloc_Array_Bytes( ExtensionManager_GetFinalSize( (self) ), (count), "Extended object", (self)->name );
+	memset( result, 0, ExtensionManager_GetFinalSize( self ) * count );
+
+	if ( ExtensionManager_GetFinalSize( self ) > 0 ) {
+		curObj = result;
+		/*
+		for ( obj_I = 0; obj_I < count; ++obj_I ) {
+			HashTable* objHt = HashTable_New( NULL, NULL, NULL, HASHTABLE_POINTER_KEY );
+			HashTable_InsertEntry( self->objToExtensionMapper, curObj, sizeof(void*), objHt, sizeof(HashTable ) );
+
+			HashTable_InsertEntry( objHt, NULL, sizeof(Name), curObj, 0 );
+			curObj = (void*)((ArithPointer)curObj + (ArithPointer)self->initialSize);
+			
+			for ( ext_I = 0; ext_I < self->extInfos->count; ++ext_I ) {
+				ExtensionInfo* eInfo = (ExtensionInfo*)Stg_ObjectList_At( self->extInfos, ext_I );
+
+				HashTable_InsertEntry( objHt, eInfo->key, sizeof(Name), curObj, 0 );
+
+				curObj = (void*)((ArithPointer)curObj + (ArithPointer)ExtensionInfo_Size( eInfo ));
+			}
+		}
+		*/
+	}
+	
+	return result;
+}
+
+void* ExtensionManager_CopyAllocation(
+		void* extension,
+		void* array,
+		void* dest,
+		Bool deep,
+		Name nameExt,
+		PtrMap* ptrMap,
+		Index count )
+{
+	ExtensionManager* self = (ExtensionManager*)extension;
+	Bool ownMap = False;
+	void* srcCurrent;
+	void* destCurrent;
+	int item_I;
+	int ext_I;
+
+	ArithPointer offset;
+
+	if ( array == NULL ) {
+		return NULL;
+	}
+	if ( !ptrMap ) {
+		ptrMap = PtrMap_New( 1 );
+		ownMap = True;
+	}
+	
+	if ( dest == NULL ) {
+		dest = PtrMap_Find( ptrMap, array );
+		if ( dest == NULL ) {
+			dest = Memory_Alloc_Bytes( 
+				ExtensionManager_GetFinalSizeFunc( self ) * count, 
+				"Extended object", 
+				self->name );
+			PtrMap_Append( ptrMap, array, dest );
+		}
+	}
+
+	for ( item_I = 0; item_I < count; ++item_I ) {
+		if ( self->dataCopyFunc ) {
+			Stg_Generic_Copy(
+				self->dataCopyFunc,
+				(void*)(((ArithPointer)array) + (ExtensionManager_GetFinalSize(self) * item_I)),
+				(void*)(((ArithPointer)dest) + (ExtensionManager_GetFinalSize(self)* item_I)),
+				deep,
+				nameExt,
+				ptrMap );
+		}
+		else {
+			memcpy(
+				(void*)(((ArithPointer)dest) + (ExtensionManager_GetFinalSize(self)* item_I)),
+				(void*)(((ArithPointer)array) + (ExtensionManager_GetFinalSize(self) * item_I)),
+				self->initialSize );
+		}
+		PtrMap_Append( 
+			ptrMap,
+			(void*)(((ArithPointer)array) + (ExtensionManager_GetFinalSize(self) * item_I)),
+			(void*)(((ArithPointer)dest) + (ExtensionManager_GetFinalSize(self)* item_I)) );
+
+		srcCurrent = ExtensionManager_At( self, array, item_I );
+		destCurrent = ExtensionManager_At( self, dest, item_I );
+		
+		/* each extension */
+		offset = self->initialSize;
+		for ( ext_I = 0; ext_I < self->extInfos->count; ++ext_I ){
+			ExtensionInfo_DataCopy( 
+				Stg_ObjectList_At( self->extInfos, ext_I ),
+				(void*)((ArithPointer)srcCurrent + (ArithPointer)offset),
+				(void*)((ArithPointer)destCurrent + (ArithPointer)offset),
+				deep,
+				nameExt,
+				ptrMap );
+
+			offset += ExtensionInfo_At( self->extInfos, ext_I )->size;
+		}
+	}
+
+	if ( ownMap ) {
+		Stg_Class_Delete( ptrMap );
+	}
+
+	return dest;
+}
+
+
+void* ExtensionManager_MemsetFunc( void* extension, void* ptr, int value, Index count ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_MemsetMacro( self, ptr, value, count );
+}
+
+void ExtensionManager_FreeFunc( void* extension, void* ptr ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	ExtensionManager_FreeMacro( self, ptr );
+}
+
+void* ExtensionManager_AtFunc( void* extension, void* ptr, Index index ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	return ExtensionManager_AtMacro( self, ptr, index );
+}
+
+void ExtensionManager_SetLockDown( void* extension, Bool lockDown ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+	
+	self->lockDown = lockDown;
+}
+Bool ExtensionManager_GetLockDown( void* extension ) {
+	ExtensionManager*			self = (ExtensionManager*)extension;
+
+	return self->lockDown;
+}
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,456 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Facilitates and manages the run-time extension of structures by the user.
+**
+** Assumptions/Invariants:
+**
+** Comments:
+**	ExtensionManager_Get() should be called right before the extended data is used ... and in
+**	particular ExtensionManager_Add() should not be called between calling ExtensionManager_Get() and
+**	using an extended part of the structure.
+**
+**	For extensions to existing objects, they will initially be allocated right after
+**	the object they are extending...but won't necessarily be if additions are made.
+**
+**	See the Extensions tutorial on the VPAC TWiki for further notes.
+**
+** $Id: ExtensionManager.h 3547 2006-05-06 12:35:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_ExtensionManager_h__
+#define __Base_Extensibility_ExtensionManager_h__
+	
+
+	/* Textual name of this class */
+	extern const Type ExtensionManager_Type;
+	
+	/** Extension class contents */
+	#define __ExtensionManager \
+		/* General info */ \
+		__Stg_Object \
+		\
+		/* Virtual info */ \
+		\
+		/* Extension info */ \
+		SizeT			initialSize;		/**< Records the initial size of the structure to be extended. */ \
+		ExtensionInfoList*	extInfos;		/**< list of information on each extension */ \
+		SizeT			finalSize;		/**< final size of extended object */ \
+		Stg_Class_CopyFunction* dataCopyFunc;		/**< Function for copying the original data */ \
+		HashTable*		objToExtensionMapper;	/**< Maps an obj ptr to a hashtable */ \
+		\
+		/* Extension for existing object variables */ \
+		void*			_existingObject; 	/**< Ptr to existing object */ \
+		void*			_extensionsToExisting;	/**< Ptr to extensions to existing object. */ \
+		\
+		/* Extension for array variable */ \
+		void*			_array;			/**< Ptr to existing array */ \
+		SizeT			itemSize;		/**< Size in bytes of each item in array */ \
+		ExtensionManager*	em;			/**< ExtensionManager if any which extended the items in array */ \
+		Index			count;			/**< Number of items in array */ \
+		Bool                    lockDown;               /**< If true, all additional extension adds are firewalled */
+
+	/** ExtensionManager class */
+	struct ExtensionManager { __ExtensionManager };
+	
+	/** Create a new Extension manager, to manage a class (i.e. an object that isn't yet allocated). */
+	ExtensionManager* ExtensionManager_New_OfStruct( 
+		Name				name, 
+		SizeT				initialSize );
+	
+	/** Create a new Extension manager for an existing, already allocated object (instantiated class). */
+	ExtensionManager* ExtensionManager_New_OfExistingObject( 
+		Name				name, 
+		void*				_existingObject );
+
+	ExtensionManager* ExtensionManager_New_OfArray(
+		Name				name,
+		void*				_array,
+		SizeT				itemSize,
+		Index				count );
+
+	ExtensionManager* ExtensionManager_New_OfExtendedArray(
+		Name				name,
+		void*				_array,
+		ExtensionManager*		em,
+		Index				count );
+	
+	/** Initialise a Extension */
+	void ExtensionManager_Init_OfStruct( 
+		void*				extension,
+		Name				name, 
+		SizeT				initialSize );
+	
+	void ExtensionManager_Init_OfExistingObject( 
+		void*				extension,
+		Name				name, 
+		void*				_existingObject );
+	
+	void ExtensionManager_Init_OfArray(
+		void*				extension,
+		Name				name,
+		void*				_array,
+		SizeT				itemSize,
+		Index				count );
+
+	void ExtensionManager_Init_OfExtendedArray(
+		void*				extension,
+		Name				name,
+		void*				_array,
+		ExtensionManager*		em,
+		Index				count );
+	
+	/** Creation implementation / Virtual constructor */
+	ExtensionManager* _ExtensionManager_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name				name, 
+		SizeT				initialSize,
+		void*				_existingObject,
+		void*				_array,
+		SizeT				itemSize,
+		ExtensionManager*		em,
+		Index				count );
+	
+	/* Initialisation implementation */
+	void _ExtensionManager_Init(
+		void*				extension,
+		SizeT				initialSize,
+		void*				_existingObject,
+		void*				_array,
+		SizeT				itemSize,
+		ExtensionManager*		em,
+		Index				count );
+	
+	
+	/** Stg_Class_Delete() implementation */
+	void _ExtensionManager_Delete( void* extension );
+	
+	/** Stg_Class_Print() implementation */
+	void _ExtensionManager_Print( void* extension, Stream* stream );
+	
+	/* Copy */
+	#define ExtensionManager_Copy( self ) \
+		(ExtensionManager*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ExtensionManager_DeepCopy( self ) \
+		(ExtensionManager*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ExtensionManager_Copy( void* extensionManager, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	/** For original data which was a class or or complex struct which requires its own copy function */
+	void ExtensionManager_SetDataCopyFunc( void* extensionManager, Stg_Class_CopyFunction* dataCopyFunc );
+
+	/** Notify the extension manager of a new extension. In the case of extensions
+	to an existing object, the extension manager will allocate the new space 
+	required. */
+	ExtensionInfo_Index ExtensionManager_AddExtensionInfo( void* extensionManager, void* extensionInfo );
+
+	ExtensionInfo_Index ExtensionManager_AddArray( 
+		void* extension, 
+		const Name offsetName, 
+		SizeT size, 
+		Index count );
+
+	#define ExtensionManager_Add( extension, offsetName, size ) \
+		ExtensionManager_AddArray( extension, offsetName, size, 1 )
+	
+	ExtensionInfo_Index ExtensionManager_AddClassPtrArray(
+		void* extension, 
+		const Name offsetName, 
+		Stg_Class_CopyFunction* copyFunc,
+		Index count );
+
+	#define ExtensionManager_AddClassPtr( extension, offsetName, copyFunc ) \
+		ExtensionManager_AddClassPtrArray( extension, offsetName, copyFunc, 1 )
+	
+	
+	/** Get the handle of a desired particular extension... slow since uses a O(n) * strcmp algorithm. */
+	ExtensionInfo_Index ExtensionManager_GetHandle( void* extension, Name offsetName );
+	
+	
+	/** Are we extending an object? */
+	#define ExtensionManager_OfExistingMacro( self ) \
+		( (self)->_existingObject ? 1 : 0 )
+
+	/** Are we extending an object? */
+	Bool ExtensionManager_OfExistingFunc( void* extension );
+
+	/** Are we extending an object? */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_OfExisting ExtensionManager_OfExistingFunc
+	#else
+		#define ExtensionManager_OfExisting ExtensionManager_OfExistingMacro
+	#endif
+	
+	/** Are we extending an array?  */
+	#define ExtensionManager_OfArrayMacro( self ) \
+		( (self)->_array ? 1 : 0 )
+
+	/** Are we extending an array? */
+	Bool ExtensionManager_OfArrayFunc( void* extension );
+
+	/** Are we extending an object? */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_OfArray ExtensionManager_OfArrayFunc
+	#else
+		#define ExtensionManager_OfArray ExtensionManager_OfArrayMacro
+	#endif
+	
+	/** Are we extending an array of extended structs?  */
+	#define ExtensionManager_OfExtendedArrayMacro( self ) \
+		( (self)->em ? 1 : 0 )
+
+	/** Are we extending an array of extended structs?  */
+	Bool ExtensionManager_OfExtendedArrayFunc( void* extension );
+
+	/** Are we extending an array of extended structs?  */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_OfExtendedArray ExtensionManager_OfExtendedArrayFunc
+	#else
+		#define ExtensionManager_OfExtendedArray ExtensionManager_OfExtendedArrayMacro
+	#endif
+	
+
+	/** What is the final size of the class/object? */
+	#define ExtensionManager_GetFinalSizeMacro( self ) \
+		( (self)->finalSize )
+
+	/** Final size of object extension / struct size / base item size */
+	SizeT ExtensionManager_GetFinalSizeFunc( void* extension );
+
+	/** Final size of object extension / struct size / base item size. Macro form only.. address of variable is often needed. */
+	#define ExtensionManager_GetFinalSize ExtensionManager_GetFinalSizeMacro
+	
+
+	/** Get the pointer to the handle specified object extension. 
+	 *  Faster than ExtensionManager_Get, but assumes object (not class) extension */
+	#define ExtensionManager_GetOMacro( self, ptr, handle ) \
+		( (void*)( (ArithPointer)(self)->_extensionsToExisting + ExtensionInfo_At( (self)->extInfos, (handle) )->offset ) )
+	
+	/** Get the pointer to the handle specified object extension. 
+	 *  Faster than ExtensionManager_Get, but assumes object (not class) extension */
+	void* ExtensionManager_GetOFunc( void* extension, void* ptr, ExtensionInfo_Index handle );
+
+	/** Get the pointer to the handle specified object extension. 
+	 *  Faster than ExtensionManager_Get, but assumes object (not class) extension */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_GetO ExtensionManager_GetOFunc
+	#else
+		#define ExtensionManager_GetO ExtensionManager_GetOMacro
+	#endif
+	
+	
+	/** Get the pointer to the handle specified class extension. 
+	 *  Faster than ExtensionManager_Get, but assumes class (not object) extension */
+	#define ExtensionManager_GetCMacro( self, ptr, handle ) \
+		( (void*)( (ArithPointer)(ptr) + ExtensionInfo_At( (self)->extInfos, (handle) )->offset ) )
+	
+	/** Get the pointer to the handle specified class extension. 
+	 *  Faster than ExtensionManager_Get, but assumes class (not object) extension */
+	void* ExtensionManager_GetCFunc( void* extension, void* ptr, ExtensionInfo_Index handle );
+
+/** Get the pointer to the handle specified class extension. 
+	 *  Faster than ExtensionManager_Get, but assumes class (not object) extension */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_GetC ExtensionManager_GetCFunc
+	#else
+		#define ExtensionManager_GetC ExtensionManager_GetCMacro
+	#endif
+	
+	/** Get the pointer to the handle specified array extension. 
+	 *  Assumes array of non-extended items */
+	#define ExtensionManager_GetAMacro( self, itemPtr, handle ) \
+		( (void*)((ArithPointer)ExtensionInfo_At( (self)->extInfos, (handle) )->data + \
+						( (ArithPointer)ExtensionInfo_At( (self)->extInfos, (handle) )->size * \
+						(((ArithPointer)(itemPtr) - (ArithPointer)((self)->_array)) / (self)->itemSize) )))
+
+	/** Get the pointer to the handle specified array extension. 
+	 *  Assumes array of non-extended items */
+	void* ExtensionManager_GetAFunc( void* extension, void* itemPtr, ExtensionInfo_Index handle );
+
+	/** Get the pointer to the handle specified array extension. 
+	 *  Assumes array of non-extended items */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_GetA ExtensionManager_GetAFunc
+	#else
+		#define ExtensionManager_GetA ExtensionManager_GetAMacro
+	#endif
+	
+	
+	/** Get the pointer to the handle specified array extension.
+	 *  Assumes array of extended structs */
+	#define ExtensionManager_GetExtendedAMacro( self, itemPtr, handle ) \
+		( (handle) >= (self)->em->extInfos->count ? \
+			ExtensionManager_GetA( self, itemPtr, (handle) - (self)->em->extInfos->count ) : \
+			ExtensionManager_GetC( (self)->em, itemPtr, handle ) )
+		
+	/** Get the pointer to the handle specified array extension.
+	 *  Assumes array of extended structs */
+	void* ExtensionManager_GetExtendedAFunc( void* extension, void* itemPtr, ExtensionInfo_Index handle );
+
+	/** Get the pointer to the handle specified array extension.
+	 *  Assumes array of extended structs */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_GetExtendedA ExtensionManager_GetExtendedAFunc
+	#else
+		#define ExtensionManager_GetExtendedA ExtensionManager_GetExtendedAMacro
+	#endif
+	
+	/** Get the pointer to the handle specified extension. Works out if extension is of object or class type. */ 
+	#define ExtensionManager_GetMacro( self, ptr, handle ) \
+		( ExtensionManager_OfExisting( (self) ) ? \
+			ExtensionManager_GetO( self, ptr, handle ) : \
+			( !ExtensionManager_OfArray( (self) ) ? \
+				ExtensionManager_GetC( self, ptr, handle ) : \
+				( !ExtensionManager_OfExtendedArray( (self) ) ? \
+					ExtensionManager_GetA( self, ptr, handle ) : \
+					ExtensionManager_GetExtendedA( self, ptr, handle ) ) ) )
+	
+
+	/** Get the pointer to the handle specified extension. Works out if extension is of object or class type. */ 
+	void* ExtensionManager_GetFunc( void* extension, void* ptr, ExtensionInfo_Index handle );
+
+	/** Get the pointer to the handle specified extension. Works out if extension is of object or class type. */ 
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_Get ExtensionManager_GetFunc
+	#else
+		#define ExtensionManager_Get ExtensionManager_GetMacro
+	#endif
+
+	void* ExtensionManager_HashGet( void* extension, void* ptr, Name key );
+	
+
+	/** Calculate the word-aligned version of provided data size. */
+	#define ExtensionManager_AlignMacro( size ) \
+		( (size) % sizeof(Stg_Word) ? ( (size)/sizeof(Stg_Word) + 1 ) * sizeof(Stg_Word) : (size) )
+
+	
+	/** Calculate the word-aligned version of provided data size. */
+	SizeT ExtensionManager_AlignFunc( SizeT size );
+
+	/** Calculate the word-aligned version of provided data size. */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_Align ExtensionManager_AlignFunc
+	#else
+		#define ExtensionManager_Align ExtensionManager_AlignMacro
+	#endif
+
+	
+	/* The actual calculation for ExtensionManager_SizeMacro */
+	#define _ExtensionManager_CalcSize( self ) \
+		( ExtensionInfo_At( (self)->extInfos, (self)->extInfos->count - 1 )->offset + \
+		  ExtensionInfo_At( (self)->extInfos, (self)->extInfos->count - 1 )->size )
+	
+	/** Get the current size of the type. That is, including the extensions added to it. */
+	#define ExtensionManager_SizeMacro( self ) \
+		ExtensionManager_Align( (self)->extInfos->count ? _ExtensionManager_CalcSize( (self) ) : (self)->initialSize )
+
+	/** Get the current size of the type. That is, including the extensions added to it. */
+	SizeT ExtensionManager_SizeFunc( void* extension );
+
+	/** Get the current size of the type. That is, including the extensions added to it. */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_Size ExtensionManager_SizeFunc
+	#else
+		#define ExtensionManager_Size ExtensionManager_SizeMacro
+	#endif
+
+
+	/** Create a new instance (or array of) of the data type. Relevant to "OfStruct" extensions only (returns 0 otherwise). */
+	void* ExtensionManager_Malloc( void* extension, Index count );
+
+	/** Copy an allocation made by ExtensionManager_Malloc. Only for OfStruct! */
+	void* ExtensionManager_CopyAllocation(
+		void* extension,
+		void* array,
+		void* dest,
+		Bool deep,
+		Name nameExt,
+		PtrMap* ptrMap,
+		Index count );
+		
+
+	/** Memset an instance (or array of) of the data type. Relevant to "OfStruct" extensions only (does nothing otherwise). */
+	#define ExtensionManager_MemsetMacro( self, ptr, value, cnt ) \
+		( ExtensionManager_OfExisting( (self) ) ? 0 : memset( (ptr), (value), ExtensionManager_GetFinalSize( (self) ) * (cnt) ) )
+		
+	/** Memset an instance (or array of) of the data type. Relevant to "OfStruct" extensions only (does nothing otherwise). */
+	void* ExtensionManager_MemsetFunc( void* extension, void* ptr, int value, Index count );
+
+	/** Memset an instance (or array of) of the data type. Relevant to "OfStruct" extensions only (does nothing otherwise). */
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_Memset ExtensionManager_MemsetFunc
+	#else
+		#define ExtensionManager_Memset ExtensionManager_MemsetMacro
+	#endif
+	
+	
+	/** Free data type. Relevant to "OfStruct" extensions only (does nothing otherwise). */
+	#define ExtensionManager_FreeMacro( self, ptr )	( ExtensionManager_OfExisting( (self) ) ? (void)0 : Memory_Free( (ptr) ) )
+	
+	/** Free data type. Relevant to "OfStruct" extensions only (does nothing otherwise). */
+	void ExtensionManager_FreeFunc( void* extension, void* ptr );
+
+	/** Free data type. Relevant to "OfStruct" extensions only (does nothing otherwise). */
+	#ifdef CAUTOUS
+		#define ExtensionManager_Free ExtensionManager_FreeFunc
+	#else
+		#define ExtensionManager_Free ExtensionManager_FreeMacro
+	#endif
+	
+	
+	/* The actual calculation for ExtensionManager_SizeMacro */
+	#define _ExtensionManager_AtCalc( self, ptr, index ) \
+		( (void*)( (ArithPointer)(ptr) + (index) * (ArithPointer)( ExtensionManager_GetFinalSize( (self) ) ) ) )
+
+	/** Given an array of an extended class, obtain the pointer to the extended class at the desired index. Relevant to
+	    "OfStruct" extensions only (returns 0 otherwise). */
+	#define ExtensionManager_AtMacro( self, ptr, index ) \
+		( ExtensionManager_OfExisting( (self) ) ? 0 : _ExtensionManager_AtCalc( (self), (ptr), (index) ) )
+	
+	/** Given an array of an extended class, obtain the pointer to the extended class at the desired index. Relevant to
+	    "OfStruct" extensions only (returns 0 otherwise). */
+
+	/** Given an array of an extended class, obtain the pointer to the extended class at the desired index. Relevant to
+	    "OfStruct" extensions only (returns 0 otherwise). */
+	void* ExtensionManager_AtFunc( void* extension, void* ptr, Index index );
+	#ifdef MACRO_AS_FUNC
+		#define ExtensionManager_At ExtensionManager_AtFunc
+	#else
+		#define ExtensionManager_At ExtensionManager_AtMacro
+	#endif
+
+	/* Property Set/Get for lockdown */
+	void ExtensionManager_SetLockDown( void* extension, Bool lockDown );
+	Bool ExtensionManager_GetLockDown( void* extension );
+#endif /* __Base_Extensibility_ExtensionManager_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: ExtensionManager_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ExtensionManager.h"
+#include "ExtensionManager_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type ExtensionManager_Register_Type = "ExtensionManager_Register";
+
+
+ExtensionManager_Register* ExtensionManager_Register_New( void ) {
+	return _ExtensionManager_Register_New( sizeof(ExtensionManager_Register), ExtensionManager_Register_Type, _ExtensionManager_Register_Delete, _ExtensionManager_Register_Print, NULL );
+}
+
+void ExtensionManager_Register_Init( void* extensionMgr_Register ) {
+	ExtensionManager_Register* self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	/* General info */
+	self->type = ExtensionManager_Register_Type;
+	self->_sizeOfSelf = sizeof(ExtensionManager_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ExtensionManager_Register_Delete;
+	self->_print = _ExtensionManager_Register_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* ExtensionManager_Register info */
+	_ExtensionManager_Register_Init( self );
+}
+
+ExtensionManager_Register* _ExtensionManager_Register_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy )
+{
+	ExtensionManager_Register* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ExtensionManager_Register) );
+	self = (ExtensionManager_Register*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	_ExtensionManager_Register_Init( self );
+	
+	return self;
+}
+
+void _ExtensionManager_Register_Init( void* extensionMgr_Register ) {
+	ExtensionManager_Register* self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	/* General and Virtual info should already be set */
+	
+	/* ExtensionManager_Register info */
+	self->extensions = Stg_ObjectList_New();
+}
+
+void _ExtensionManager_Register_Delete( void* extensionMgr_Register ) {
+	ExtensionManager_Register* self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	/* Assumes ownerships of the element types */
+	Stg_Class_Delete( self->extensions );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _ExtensionManager_Register_Print( void* extensionMgr_Register, Stream* stream ) {
+	ExtensionManager_Register* self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "ExtensionManager_Register (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* ExtensionManager_Register info */
+	Journal_Printf( (void*)stream, "\tcount: %u\n", self->extensions->count );
+	
+	Journal_Printf( (void*)stream, "\textensions (ptr): %p\n", self->extensions );
+	Print( self->extensions, stream );
+}
+
+ExtensionManager_Index ExtensionManager_Register_Add( void* extensionMgr_Register, void* extension ) {
+	ExtensionManager_Register*	self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	return Stg_ObjectList_Append( self->extensions, extension );
+}
+
+ExtensionManager_Index ExtensionManager_Register_GetExtensionHandle( void* extensionMgr_Register, Name toGet ) {
+	ExtensionManager_Register*	self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	return Stg_ObjectList_GetIndex( self->extensions, toGet );
+}
+
+ExtensionManager* _ExtensionManager_Register_GetExtension( void* extensionMgr_Register, ExtensionManager_Index handle ) {
+	ExtensionManager_Register*	self = (ExtensionManager_Register*)extensionMgr_Register;
+	
+	return ExtensionManager_Register_GetExtension( self, handle );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Keeps track of all the Extended data managers in use by a program, so they can be easily printed / deleted.
+**
+** Assumptions:
+**	ExtensionRegister_Delete() deletes all the individial Extension managers it has pointers to ... so they
+**	mustn't also be deleted in the user's code.
+**
+** Comments:
+**	The original sizes need to be manually set by the user.... this whole system needs rethinking... it can be done better
+**
+** $Id: ExtensionManager_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_ExtensionManager_Register_h__
+#define __Base_Extensibility_ExtensionManager_Register_h__
+	
+
+	/** Textual name of this class */
+	extern const Type ExtensionManager_Register_Type;
+	
+	/** ExtensionManager_Register class contents */
+	#define __ExtensionManager_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* ExtensionManager_Register info */ \
+		ExtensionList*				extensions;
+
+	/** Keeps track of all the Extended data managers in use by a program - see ExtensionRegister.h */
+	struct ExtensionManager_Register { __ExtensionManager_Register };
+	
+	/** Create a new ExtensionManager_Register */
+	ExtensionManager_Register* ExtensionManager_Register_New( void );
+	
+	/** Initialise an ExtensionManager_Register */
+	void ExtensionManager_Register_Init( void* extension_Register );
+	
+	/** Creation implementation / Virtual constructor */
+	ExtensionManager_Register* _ExtensionManager_Register_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy );
+	
+	/** Initialisation implementation */
+	void _ExtensionManager_Register_Init( void* extension_Register );
+	
+	/** Stg_Class_Delete() implementation. Note that this also deletes the extension managers themselves ... so the user
+	shouldn't manually delete them. */
+	void _ExtensionManager_Register_Delete( void* extension_Register );
+	
+	/** Stg_Class_Print() implementation. */
+	void _ExtensionManager_Register_Print( void* extension_Register, Stream* stream );
+	
+	/** Add a new Extension to the register. */
+	ExtensionManager_Index ExtensionManager_Register_Add( void* extension_Register, void* extension );
+	
+	/** Get the handle of an extension in the register. */
+	ExtensionManager_Index ExtensionManager_Register_GetExtensionHandle( void* extension_Register, Name toGet );
+	
+	/* Get an extension manager from the register. */
+	#define ExtensionManager_Register_GetExtension( extension_Register, index ) \
+		( ExtensionManager_FromList( (extension_Register)->extensions, index ) )
+
+	ExtensionManager* _ExtensionManager_Register_At( void* extension_Register, ExtensionManager_Index handle );
+	
+#endif /* __Base_Extensibility_ExtensionManager_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool BaseExtensibility_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_BaseExtensibility_Finalise_h__
+#define __Base_BaseExtensibility_Finalise_h__
+	
+	Bool BaseExtensibility_Finalise( void );
+	
+#endif /* __Base_BaseExtensibility_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,164 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Hook.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Hook.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type Hook_Type = "Hook";
+
+/** allocate and initialise a new Hook. */
+Hook* Hook_New( Name name, Func_Ptr funcPtr, char* addedBy ) {
+	return _Hook_New( sizeof(Hook), Hook_Type, _Hook_Delete, _Hook_Print, _Hook_Copy, name, funcPtr, addedBy );
+}
+
+void Hook_Init( void* hook, Name name, Func_Ptr funcPtr, char* addedBy ) {
+	Hook* self = (Hook*)hook;
+
+	/* General info */
+	self->type = Hook_Type;
+	self->_sizeOfSelf = sizeof(Hook);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Hook_Delete;
+	self->_print = _Hook_Print;
+	self->_copy = _Hook_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	/* Hook info */
+	_Hook_Init( self, funcPtr, addedBy );
+}
+
+
+Hook* _Hook_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name 				name, 
+		Func_Ptr			funcPtr,
+		char*				addedBy )
+{
+	Hook* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Hook) );
+	self = (Hook*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* Hook info */
+	_Hook_Init( self, funcPtr, addedBy );
+	
+	return self;
+}
+
+
+void _Hook_Init( Hook* self, Func_Ptr funcPtr, char* addedBy ) {
+	/* General and Virtual info should already be set */
+	
+	/* Hook info */
+	self->funcPtr = funcPtr;
+	self->addedBy = StG_Strdup( addedBy );
+}
+
+
+void _Hook_Delete( void* hook ) {
+	Hook* self = (Hook*)hook;
+	#if DEBUG
+		assert( self );
+	#endif	
+	
+	Memory_Free( self->addedBy );
+	/* Stg_Class_Delete parent */
+	_Stg_Object_Delete( self );
+}
+
+void _Hook_Print( void* hook, Stream* stream ) {
+	Hook* self = (Hook*)hook;
+	#if DEBUG
+		assert( self );
+		assert( stream );
+	#endif	
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Hook (ptr) - %p:\n", self );
+	_Stg_Object_Print( self, stream );
+	Journal_Printf( (void*) stream, "\tfuncPtr (func ptr): %p\n", self->funcPtr );
+	Journal_Printf( (void*) stream, "\taddedBy: %s\n", self->addedBy );
+	
+}
+
+
+void* _Hook_Copy( void* hook, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Hook*	self = (Hook*)hook;
+	Hook*	newHook;
+	
+	newHook = _Stg_Object_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newHook->funcPtr = self->funcPtr;
+	
+	if( self->addedBy ) {
+		if( nameExt ) {
+			Name	tmpName;
+			
+			tmpName = Memory_Alloc_Array( char, strlen( self->addedBy ) + strlen( nameExt ) + 1, "newHook->addedBy" );
+			strcpy( tmpName, self->addedBy );
+			strcpy( &tmpName[strlen( self->addedBy )], nameExt );
+			newHook->addedBy = tmpName;
+		}
+		else {
+			newHook->addedBy = StG_Strdup( self->addedBy );
+		}
+	}
+	else {
+		newHook->addedBy = NULL;
+	}
+	
+	return (void*)newHook;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,90 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the information that goes with a function pointer.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Hook.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_Hook_h__
+#define __Base_Extensibility_Hook_h__
+	
+
+	/** Textual name of this class */
+	extern const Type Hook_Type;
+
+	/** Hook struct- stores a func pointer plus info */
+	#define __Hook \
+		__Stg_Object \
+		\
+		Func_Ptr		funcPtr; \
+		Hook_AddedBy	addedBy; \
+	
+	struct Hook { __Hook };
+	
+	/* Create a new Hook */
+	Hook* Hook_New( Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/* Initialise an Hook */
+	void Hook_Init( void* hook, Name name, Func_Ptr funcPtr, char* addedBy );
+	
+	/* Creation implementation */
+	Hook* _Hook_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name 				name, 
+		Func_Ptr 			funcPtr,
+		char*				 addedBy );
+	
+	/* Initialisation implementation */
+	void _Hook_Init( Hook* self, Func_Ptr funcPtr, char* addedBy );
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _Hook_Delete( void* hook );
+	
+	/* Print implementation */
+	void _Hook_Print( void* hook, Stream* stream );
+	
+	/* Copy */
+	#define Hook_Copy( self ) \
+		(Hook*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Hook_DeepCopy( self ) \
+		(Hook*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Hook_Copy( void* hook, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+#endif /* __Base_Extensibility_Hook_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "EntryPoint.h"
+#include "EntryPoint_Register.h"
+#include "ExtensionInfo.h"
+#include "ClassPtrExtensionInfo.h"
+#include "ExtensionManager.h"
+#include "ExtensionManager_Register.h"
+#include "Hook.h"
+#include "ClassHook.h"
+#include "PluginLoader.h"
+#include "PluginsManager.h"
+#include "SimpleExtensionInfo.h"
+#include "Init.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool BaseExtensibility_Init( int* argc, char** argv[] ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+
+	RegisterParent( Hook_Type,                      Stg_Object_Type );
+	RegisterParent( ClassHook_Type,                 Hook_Type );
+
+	RegisterParent( EntryPoint_Type,                Stg_Object_Type );
+	RegisterParent( EntryPoint_Register_Type,       Stg_Class_Type );
+	
+	RegisterParent( ExtensionManager_Type,          Stg_Object_Type );
+	RegisterParent( ExtensionManager_Register_Type, Stg_Class_Type );
+
+	RegisterParent( ExtensionInfo_Type,             Stg_Object_Type );
+	RegisterParent( SimpleExtensionInfo_Type,       ExtensionInfo_Type );
+	RegisterParent( ClassPtrExtensionInfo_Type,     ExtensionInfo_Type );
+
+	RegisterParent( PluginLoader_Type,                    Stg_Object_Type );
+	RegisterParent( PluginsManager_Type,            Stg_Class_Type );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Base_BaseExtensibility_Init_h__
+#define __Base_BaseExtensibility_Init_h__
+	
+	Bool BaseExtensibility_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_BaseExtensibility_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 1260 2004-04-20 20:01:15Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+#hack ... need to add a "libdl" external to MM and smarts to know that a dll's extension is called a "dylib" on a mac.
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags`  -DMODULE_EXT=\"${MODULE_EXT}\" -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,69 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseExtensibility
+def_inc = StGermain/Base/Extensibility
+
+def_srcs = \
+	ExtensionInfo.c \
+	SimpleExtensionInfo.c \
+	ClassPtrExtensionInfo.c \
+	ExtensionManager.c \
+	ExtensionManager_Register.c \
+	Hook.c \
+	ClassHook.c \
+	EntryPoint.c \
+	EntryPoint_Register.c \
+	Codelet.c \
+	PluginLoader.c \
+	PluginsManager.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	types.h \
+	shortcuts.h \
+	ExtensionInfo.h \
+	SimpleExtensionInfo.h \
+	ClassPtrExtensionInfo.h \
+	ExtensionManager.h \
+	ExtensionManager_Register.h \
+	Hook.h \
+	ClassHook.h \
+	EntryPoint.h \
+	EntryPoint_Register.h \
+	Codelet.h \
+	PluginLoader.h \
+	PluginsManager.h \
+	Init.h \
+	Finalise.h \
+	Extensibility.h
+
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,374 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: PluginLoader.c 3192 2005-08-25 01:45:42Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "PluginLoader.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#ifdef NOSHARED
+	#define dlopen( x, y ) (NULL)
+	#define dlsym( x, y ) (NULL)
+	#define dlclose( x )
+	#define dlerror() "blah"
+	#define RTLD_LAZY 0
+	#define RTLD_GLOBAL 0
+#else
+        #include <dlfcn.h>
+#endif
+
+#include <limits.h>
+
+
+const Type PluginLoader_Type = "PluginLoader";
+
+const char* PLUGININFO_PLUGIN_SUFFIX = "module.";
+
+const char* PLUGININFO_REGISTER_SUFFIX = "_Register";
+const char* PLUGININFO_GETMETADATA_SUFFIX = "_GetMetadata";
+const char* PLUGININFO_GETNAME_SUFFIX = "_GetName";
+const char* PLUGININFO_GETVERSION_SUFFIX = "_GetVersion";
+
+const char* PLUGIN_DEPENDENCY_NAME_KEY = "plugin";
+const char* PLUGIN_DEPENDENCY_VERSION_KEY = "version";
+const char* PLUGIN_DEPENDENCY_URL_KEY = "url";
+	
+PluginLoader* PluginLoader_NewLocal( Name pluginName, Stg_ObjectList* directories ) {
+	DLL_Handle			dllPtr;
+	PluginLoader_Register_Func*		Register;
+	PluginLoader_GetMetadata_Func*	GetMetadata;
+	PluginLoader_GetName_Func*		GetName;
+	PluginLoader_GetVersion_Func*		GetVersion;
+
+	char* 				fileName = NULL;
+	char*				fullPathName = NULL;
+	int				fullPathLength = 0;
+	int				length;
+
+	Stream*				stream;
+	Stream*				debug;
+	Stream*				error;
+
+	stream =  Journal_Register( Info_Type, "PluginLoaders" );
+	debug =  Journal_Register( Debug_Type, "PluginLoaders" );
+	error =  Journal_Register( Error_Type, "PluginLoaders" );
+
+	assert( pluginName );
+
+	/* Try the plugin name by itself (allows LD_LIBRARY_PATH) to take precendence */
+	fileName = Memory_Alloc_Array( char, strlen(pluginName) + strlen(PLUGININFO_PLUGIN_SUFFIX) + strlen(MODULE_EXT) + 1, "filename" );
+	sprintf( fileName, "%s%s%s", pluginName, PLUGININFO_PLUGIN_SUFFIX, MODULE_EXT );
+	dllPtr = dlopen( fileName, RTLD_LAZY | RTLD_GLOBAL );
+
+	/* If that fails, try prepending directories from the list of registered directories */
+	if ( dllPtr == NULL ) {
+		Index i;
+
+		/* First print out a error message to debug why it didn't work */
+		Journal_Printf( debug, "dlerror(): %s\n", dlerror() );
+		
+		for ( i = 0; i < directories->count; ++i ) {
+			length = strlen(Stg_ObjectList_ObjectAt( directories, i )) + 1 + strlen(fileName) + 1;
+			if ( fullPathLength < length ) {
+				fullPathLength = length;
+				fullPathName = Memory_Realloc_Array( fullPathName, char, fullPathLength );
+			}
+			PathJoin( fullPathName, 2, Stg_ObjectList_ObjectAt( directories, i ), fileName );
+			Journal_Printf( debug, "Trying to find plugin: \"%s\"... ", pluginName );
+			dllPtr = dlopen( fullPathName, RTLD_LAZY | RTLD_GLOBAL );
+			if ( dllPtr ) {
+				break;
+			}
+			else {
+				Journal_Printf( debug, "dlerror(): %s\n", dlerror() );
+			}
+		}
+	}
+	Memory_Free( fileName );
+	if ( fullPathName ) {
+		Memory_Free( fullPathName );
+	}
+
+	if ( dllPtr == NULL ) {
+		return NULL;
+	}
+
+	Register = (PluginLoader_Register_Func*)PluginLoader_LoadSymbol( dllPtr, pluginName, PLUGININFO_REGISTER_SUFFIX );
+	if ( Register == NULL ) {
+		dlclose( dllPtr );
+		return NULL;
+	}
+
+	GetMetadata = (PluginLoader_GetMetadata_Func*)PluginLoader_LoadSymbol( dllPtr, pluginName, PLUGININFO_GETMETADATA_SUFFIX );
+	GetName = (PluginLoader_GetName_Func*)PluginLoader_LoadSymbol( dllPtr, pluginName, PLUGININFO_GETNAME_SUFFIX );
+	GetVersion = (PluginLoader_GetVersion_Func*)PluginLoader_LoadSymbol( dllPtr, pluginName, PLUGININFO_GETVERSION_SUFFIX );
+
+	return PluginLoader_New( pluginName, dllPtr, Register, GetMetadata, GetName, GetVersion );
+}	
+
+PluginLoader* PluginLoader_New(
+	Name				name,
+	DLL_Handle 			dllPtr,
+	PluginLoader_Register_Func*		Register,
+	PluginLoader_GetMetadata_Func*	GetMetadata,
+	PluginLoader_GetName_Func*		GetName,
+	PluginLoader_GetVersion_Func*		GetVersion )
+{
+	return _PluginLoader_New( 
+		sizeof(PluginLoader), 
+		PluginLoader_Type, 
+		_PluginLoader_Delete, 
+		_PluginLoader_Print, 
+		_PluginLoader_Copy,
+		name,
+		dllPtr,
+		Register,
+		GetMetadata,
+		GetName,
+		GetVersion );
+}
+	
+void PluginLoader_Init( 
+	void*				plugin,
+	Name				name,
+	DLL_Handle 			dllPtr,
+	PluginLoader_Register_Func*		Register,
+	PluginLoader_GetMetadata_Func*	GetMetadata,
+	PluginLoader_GetName_Func*		GetName,
+	PluginLoader_GetVersion_Func*		GetVersion )
+{
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	self->_sizeOfSelf = sizeof(PluginLoader);
+	self->type = PluginLoader_Type;
+	self->_deleteSelf = False;
+	self->_delete = _PluginLoader_Delete;
+	self->_print = _PluginLoader_Print;
+	self->_copy = _PluginLoader_Copy;
+	
+	_PluginLoader_Init( self, name, dllPtr, Register, GetMetadata, GetName, GetVersion );
+}
+	
+PluginLoader* _PluginLoader_New( 
+	SizeT				_sizeOfSelf,
+	Type				type,
+	Stg_Class_DeleteFunction*	_delete,
+	Stg_Class_PrintFunction*	_print,
+	Stg_Class_CopyFunction*		_copy, 
+	Name				name,
+	DLL_Handle 			dllPtr,
+	PluginLoader_Register_Func*		Register,
+	PluginLoader_GetMetadata_Func*	GetMetadata,
+	PluginLoader_GetName_Func*		GetName,
+	PluginLoader_GetVersion_Func*		GetVersion )
+{
+	PluginLoader* self;
+
+	assert( _sizeOfSelf >= sizeof(PluginLoader) );
+
+	self = (PluginLoader*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, NON_GLOBAL );
+	
+	_PluginLoader_Init( self, name, dllPtr, Register, GetMetadata, GetName, GetVersion );
+
+	return self;
+}
+	
+void _PluginLoader_Init(
+	PluginLoader*				self,
+	Name				name, 
+	DLL_Handle 			dllPtr,
+	PluginLoader_Register_Func*		Register,
+	PluginLoader_GetMetadata_Func*	GetMetadata,
+	PluginLoader_GetName_Func*		GetName,
+	PluginLoader_GetVersion_Func*		GetVersion )
+{
+	XML_IO_Handler*	ioHandler;
+	const char*	metadata;
+	
+										
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+
+	self->dllPtr = dllPtr;
+	self->Register = Register;
+	self->GetMetadata = GetMetadata;
+	self->GetName = GetName;
+	self->GetVersion = GetVersion;
+	
+	self->_meta = Dictionary_New();
+
+	if ( GetMetadata ) {
+		metadata = GetMetadata();
+		if ( metadata ) {
+			ioHandler = XML_IO_Handler_New();
+			IO_Handler_ReadAllFromBuffer( ioHandler, metadata, self->_meta );
+			Stg_Class_Delete( ioHandler );
+		}
+	}
+}
+	
+void _PluginLoader_Delete( void* plugin )
+{
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	dlclose( self->dllPtr );
+
+	Stg_Class_Delete( self->_meta );
+
+	_Stg_Object_Delete( self );
+}
+	
+void _PluginLoader_Print( void* plugin, Stream* stream ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	Dictionary_Entry_Value* depList;
+	Index count = 0;
+	Index i;
+	const char* version;
+
+	Journal_Printf( stream, "PluginLoader: %s\n", self->name );
+	Stream_Indent( stream );
+	
+	version = PluginLoader_GetVersion( self );
+	if ( version == NULL ) {
+		version = "Unknown";
+	}
+	Journal_Printf( stream, "Version: (version) %s\n", version );
+
+	depList = PluginLoader_GetDependencies( self );
+	if ( depList ) {
+		count = Dictionary_Entry_Value_GetCount( depList );
+	}
+	for ( i = 0; i < count; ++i ) {
+		Dictionary* dep;
+		char* depName;
+		char* depVersion;
+		char* depUrl;
+		
+		dep = Dictionary_Entry_Value_AsDictionary( Dictionary_Entry_Value_GetElement( depList, i ) );
+		depName = Dictionary_GetString_WithDefault( dep, (char*)PLUGIN_DEPENDENCY_NAME_KEY, "NULL" );
+		depVersion = Dictionary_GetString_WithDefault( dep, (char*)PLUGIN_DEPENDENCY_VERSION_KEY, "Unknown" );
+		depUrl = Dictionary_GetString_WithDefault( dep, (char*)PLUGIN_DEPENDENCY_URL_KEY, "None" );
+	
+		Journal_Printf( stream, "Depends on: %s, version=%s, url=%s\n", depName, depVersion, depUrl );
+	}
+	
+	Stream_UnIndent( stream );
+}
+
+void* _PluginLoader_Copy( void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	/* You better not do it */
+	return NULL;
+}
+
+PluginLoader_Register_Func* PluginLoader_GetRegisterFunc( void* plugin ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	return self->Register;
+}
+
+Dictionary* PluginLoader_GetMetadata( void* plugin ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+	
+	return self->_meta;
+}
+
+const char* PluginLoader_GetName( void* plugin ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	if ( self->GetName ) {
+		return self->GetName();
+	}
+	return self->name;
+}
+
+const char* PluginLoader_GetVersion( void* plugin ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	if ( self->GetVersion ) {
+		return self->GetVersion();
+	}
+	return NULL;
+}
+
+/* other properties */
+	
+Dictionary_Entry_Value* PluginLoader_GetDependencies( void* plugin ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	return Dictionary_Get( self->_meta, "dependenices" );
+}
+
+Dictionary_Entry_Value* PluginLoader_GetValue( void* plugin, char* key ) {
+	PluginLoader* self = (PluginLoader*)plugin;
+
+	return Dictionary_Get( self->_meta, key );
+}
+	
+
+void* PluginLoader_LoadSymbol( DLL_Handle dllPtr, Name pluginName, const char* suffix ) {
+	char* symbolText;
+	void* result;
+
+	symbolText = Memory_Alloc_Array( char, strlen( pluginName ) + strlen( suffix ) + 2, "symbolName" );
+
+	sprintf( symbolText, "%s%s",  pluginName, suffix );
+
+	result = dlsym( dllPtr, symbolText );
+	if( result == NULL ) {
+		/* Try with a leading "_"... this is because on macx the dlcompat library can work either placing
+		   this "_" for you and without and there is no easy way to know */
+		sprintf( symbolText, "_%s%s", pluginName, suffix );
+		result = dlsym( dllPtr, symbolText );
+	}
+
+	Memory_Free( symbolText );
+
+	return result;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,142 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: PluginLoader.h 3192 2005-08-25 01:45:42Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_PluginLoader_h__
+#define __Base_Extensibility_PluginLoader_h__
+	
+	/** The prototype for the Register function in a plugin */
+	typedef Index (PluginLoader_Register_Func) ( PluginsManager* pluginsManager );
+	/** The prototype for the metadata function in a plugin */
+	typedef const char* (PluginLoader_GetMetadata_Func) ( );
+	/** The prototype for the name function in a plugin */
+	typedef const char* (PluginLoader_GetName_Func) ( );
+	/** The prototype for the version function in a plugin */
+	typedef const char* (PluginLoader_GetVersion_Func) ( );
+
+	/* Textual name of this class */
+	extern const Type PluginLoader_Type;
+
+	extern const char* PLUGIN_DEPENDENCY_NAME_KEY;
+	extern const char* PLUGIN_DEPENDENCY_VERSION_KEY;
+	extern const char* PLUGIN_DEPENDENCY_URL_KEY;
+	
+	/* PluginLoaders info */
+	#define __PluginLoader \
+		/* General info */ \
+		__Stg_Object \
+		\
+		DLL_Handle			dllPtr; \
+		PluginLoader_Register_Func*	Register; \
+		PluginLoader_GetMetadata_Func*	GetMetadata; \
+		PluginLoader_GetName_Func*	GetName; \
+		PluginLoader_GetVersion_Func*	GetVersion; \
+		Dictionary*			_meta;
+		
+	struct PluginLoader { __PluginLoader };
+
+	PluginLoader* PluginLoader_NewLocal( Name pluginName, Stg_ObjectList* directories );
+
+	/* Create a new PluginLoaders */
+	PluginLoader* PluginLoader_New(
+		Name				name,
+		DLL_Handle 			dllPtr,
+		PluginLoader_Register_Func*	Register,
+		PluginLoader_GetMetadata_Func*	GetMetadata,
+		PluginLoader_GetName_Func*	GetName,
+		PluginLoader_GetVersion_Func*	GetVersion );
+	
+	/* Initialise a PluginLoaders */
+	void PluginLoader_Init( 
+		void*				plugin,
+		Name				name,
+		DLL_Handle 			dllPtr,
+		PluginLoader_Register_Func*	Register,
+		PluginLoader_GetMetadata_Func*	GetMetadata,
+		PluginLoader_GetName_Func*	GetName,
+		PluginLoader_GetVersion_Func*	GetVersion );
+	
+	/* Creation implementation / Virtual constructor */
+	PluginLoader* _PluginLoader_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Name				name,
+		DLL_Handle			dllPtr,
+		PluginLoader_Register_Func*	Register,
+		PluginLoader_GetMetadata_Func*	GetMetadata,
+		PluginLoader_GetName_Func*	GetName,
+		PluginLoader_GetVersion_Func*	GetVersion );
+	
+	/* Initialisation implementation */
+	void _PluginLoader_Init(
+		PluginLoader*			self,
+		Name				name,
+		DLL_Handle 			dllPtr,
+		PluginLoader_Register_Func*	Register,
+		PluginLoader_GetMetadata_Func*	GetMetadata,
+		PluginLoader_GetName_Func*	GetName,
+		PluginLoader_GetVersion_Func*	GetVersion );
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _PluginLoader_Delete( void* plugin );
+	
+	/* Print implementation */
+	void _PluginLoader_Print( void* plugin, Stream* stream );
+
+	void* _PluginLoader_Copy( void* source, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	PluginLoader_Register_Func* PluginLoader_GetRegisterFunc( void* plugin );
+
+	Dictionary* PluginLoader_GetMetadata( void* plugin );
+
+	const char* PluginLoader_GetName( void* plugin );
+
+	const char* PluginLoader_GetVersion( void* plugin );
+
+	/* other properties */
+	
+	Dictionary_Entry_Value* PluginLoader_GetDependencies( void* plugin );
+
+	Dictionary_Entry_Value* PluginLoader_GetValue( void* plugin, char* key );
+	
+	void* PluginLoader_LoadSymbol( DLL_Handle dllPtr, Name pluginName, const char* suffix );
+	
+#endif /* __Base_Extensibility_PluginLoader_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,448 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: PluginsManager.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "PluginLoader.h"
+#include "PluginsManager.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#if NOSHARED
+        #define dlopen( x, y ) (NULL)
+	#define dlsym( x, y ) (NULL)
+        #define dlclose( x )
+        #define dlerror() "blah"
+        #define RTLD_LAZY 0
+        #define RTLD_GLOBAL 0
+#else
+        #include <dlfcn.h>
+#endif
+
+#include <limits.h>
+
+/* Textual name of this class */
+const Type PluginsManager_Type = "PluginsManager";
+
+/* For when compiling a single a single executable (no loading of plugins at runtime */
+/* This is mainly for platforms which does not support dynamic libs */
+void SingleRegister( void* context );
+
+
+const char* Codelet_GetMetadata();
+
+
+PluginsManager* PluginsManager_New( Dictionary* dictionary ) {
+	return _PluginsManager_New( 
+		sizeof(PluginsManager), 
+		PluginsManager_Type, 
+		_PluginsManager_Delete, 
+		_PluginsManager_Print, 
+		NULL, 
+		dictionary );
+}
+
+void PluginsManager_Init( void* plugins, Dictionary* dictionary ) {
+	PluginsManager* self = (PluginsManager*)plugins;
+	
+	/* General info */
+	self->type = PluginsManager_Type;
+	self->_sizeOfSelf = sizeof(PluginsManager);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _PluginsManager_Delete;
+	self->_print = _PluginsManager_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Plugins info */
+	_PluginsManager_Init( self );
+}
+
+PluginsManager* _PluginsManager_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Dictionary*			dictionary )
+{
+	PluginsManager* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(PluginsManager) );
+	self = (PluginsManager*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	_PluginsManager_Init( self );
+	
+	return self;
+}
+
+void _PluginsManager_Init( void* plugins ) {
+	PluginsManager* self = (PluginsManager*)plugins;
+	
+	/* General and Virtual info should already be set */
+	/* Plugins info */
+
+	self->plugins = Stg_ObjectList_New();
+	self->codelets = Stg_ObjectList_New();
+	self->directories = Stg_ObjectList_New();
+
+	if ( self->dictionary ) {
+		Dictionary_Entry_Value* localLibDirList = Dictionary_Get( self->dictionary, "LD_LIBRARY_PATH" );
+		if ( localLibDirList ) {
+			Index i, count;
+			char* dir;
+			count = Dictionary_Entry_Value_GetCount( localLibDirList );
+			for ( i = 0; i < count; ++i ) {
+				dir = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( localLibDirList, i ) );
+				PluginsManager_AddDirectory( self, "FromDictionary", dir );
+			}
+		}
+	}
+}
+
+void _PluginsManager_Delete( void* plugins ) {
+	PluginsManager*         self = (PluginsManager*)plugins;
+	LiveComponentRegister*  lcRegister = NULL;
+
+	/* Note : We have to delete the codelets here rather than let the 
+		component factory do it as they refer to static data inside the
+		loaded plugin dlls, which are no longer available once we delete
+		all in self->plugins. -- Main.PatrickSunter 18 May 2006 */
+	if ( (lcRegister = LiveComponentRegister_GetLiveComponentRegister()) ) {
+		/* sweep through codelets list and delete each from the lcRegister */
+		Index codelet_I;
+		
+		for ( codelet_I = 0; codelet_I < self->codelets->count; ++codelet_I ) {
+			LiveComponentRegister_RemoveOneComponentsEntry( lcRegister,
+				((Stg_Object*)self->codelets->data[codelet_I])->name );
+		}
+	}
+	Stg_ObjectList_DeleteAllObjects( self->codelets );
+	Stg_Class_Delete( self->codelets );
+	Stg_ObjectList_DeleteAllObjects( self->plugins );
+	Stg_Class_Delete( self->plugins );
+	Stg_ObjectList_DeleteAllObjects( self->directories );
+	Stg_Class_Delete( self->directories );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _PluginsManager_Print( void* plugins, Stream* stream ) {
+	PluginsManager* self = (PluginsManager*)plugins;
+	Index i;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Plugins (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+
+	if ( self->directories->count > 0 ) {
+		Journal_Printf( stream, "Search Path:\n" );
+		Stream_Indent( stream );
+		for ( i = 0; i < self->directories->count; ++i ) {
+			Journal_Printf( stream, "(path) %s\n", Stg_ObjectList_ObjectAt( self->directories, i ) );
+		}
+		Stream_UnIndent( stream );
+	}
+
+	if ( self->plugins->count > 0 ) {
+		Journal_Printf( stream, "Loaded plugins:\n" );
+		Stream_Indent( stream );
+		for ( i = 0; i < self->plugins->count; ++i ) {
+			PluginLoader* plugin = (PluginLoader*)Stg_ObjectList_At( self->plugins, i );
+			Journal_Printf( stream, "%s\n", plugin->name );
+			if ( PluginLoader_GetVersion( plugin ) ) {
+				Journal_Printf( stream, "\t(version) %s\n", PluginLoader_GetVersion( plugin ) );
+			}
+		}
+		Stream_UnIndent( stream );
+	}
+}
+
+
+Dictionary_Entry_Value* PluginsManager_GetPluginsList( void* dict ) {
+	Dictionary*			dictionary = (Dictionary*)dict;
+	Dictionary_Entry_Value*		pluginsList = NULL;
+	
+	if (NULL == (pluginsList = Dictionary_Get( dictionary, "plugins" )) ) {
+		/* Try deprecated value "extensions" second. */
+		pluginsList = Dictionary_Get( dictionary, "extensions" );
+	}
+
+	return pluginsList;
+}
+
+
+void PluginsManager_Load( void* plugins, void* context, void* _dictionary ) {
+	PluginsManager*			self = (PluginsManager*)plugins;
+	Dictionary*			dictionary = (Dictionary*)_dictionary;
+	unsigned int			entryCount;
+	unsigned int			entry_I;
+	Dictionary_Entry_Value*		pluginsVal;
+
+	/* First add the directory list onto LD_LIBRARY_PATH so that it can potentially
+	 * resolve the unknown symbols */
+	char* curEnvPath;
+	char* newEnvPath;
+	Index newEnvPathLength = 0;
+	Index dir_I;
+	
+#ifdef SINGLE_EXE
+	SingleRegister( context );
+#else
+	for ( dir_I = 0; dir_I < self->directories->count; ++dir_I ) {
+		newEnvPathLength += strlen( Stg_ObjectList_ObjectAt( self->directories, dir_I ) );
+		/* Add one make space for the ':' inbetween the directories */
+		newEnvPathLength += 1; 
+	}
+	curEnvPath = getenv("LD_LIBRARY_PATH");
+	if ( curEnvPath ) {
+		newEnvPathLength += strlen( curEnvPath );
+	}
+
+	if ( newEnvPathLength > 0 ) {
+		/* Add one to make space for the Null Terminator '\0' */
+		newEnvPathLength += 1;
+		
+		newEnvPath = Memory_Alloc_Array( char, newEnvPathLength, "LD_LIBRARY_PATH" );
+		newEnvPath[0] = '\0';
+		for ( dir_I = 0; dir_I < self->directories->count; ++dir_I ) {
+			strcat( newEnvPath, Stg_ObjectList_ObjectAt( self->directories, dir_I ) );
+			strcat( newEnvPath, ":" );
+		}
+		if ( curEnvPath ) {
+			strcat( newEnvPath, curEnvPath );
+		}
+		setenv( "LD_LIBRARY_PATH", newEnvPath, 1 );
+		Journal_Printf(
+			Journal_Register( Debug_Type, "Plugins" ),
+			"Using LD_LIBRARY_PATH=%s\n",
+			newEnvPath );
+		Memory_Free( newEnvPath );
+	}
+
+	pluginsVal = PluginsManager_GetPluginsList( dictionary );
+	
+	if( !pluginsVal ) {
+		entryCount = 0;
+	}
+	else {
+		entryCount = Dictionary_Entry_Value_GetCount( pluginsVal );
+	}
+	
+	for( entry_I = 0; entry_I < entryCount; entry_I++ ) {
+		Name		pluginName;
+		pluginName = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( pluginsVal, entry_I ) );
+
+		if ( ! PluginsManager_LoadPlugin( self, pluginName, context ) ) {
+			Journal_Firewall(
+				0,
+				Journal_Register( Info_Type, "Plugins" ),
+				"Error. Unable to load plugin %s\n"
+				"Please check that:-\n"
+				"   1. Plugin %s(%smodule.so) is built\n"
+				"   2. Plugin has function 'Index %s_Register( PluginsManager* pluginsManager )'\n"
+				"   3. Plugin does not have undefined symbols.\n"
+				"   4. $LD_LIBRARY_PATH is set\n"
+				"   5. $LD_LIBRARY_PATH is set correctly\n"
+				"You can get more information about what went wrong by adding the following two lines to your input file:\n"
+				"	<param name=\"journal.debug\">true</param>\n"
+				"	<param name=\"journal.debug.Plugins\">true</param>\n"
+				"For more help visit http://csd.vpac.org/twiki/bin/view/Stgermain/FrequentlyAskedQuestions#Plugins_Won_t_Load_in_Parallel\n",
+				pluginName, pluginName, pluginName, pluginName );
+		}
+	}
+#endif /* ifdef SINGLE_EXE */
+}
+
+Bool PluginsManager_LoadPlugin( void* plugins, Name pluginName, void* _context ) {
+	PluginsManager*	self = (PluginsManager*)plugins;
+	PluginLoader* thePlugin;
+
+	Dictionary_Entry_Value* dependencies;
+	Index depCount = 0;
+	Index dep_I;
+	
+	
+	Stream* stream;
+	Stream* debug;
+	Stream* error;
+
+	stream =  Journal_Register( Info_Type, "Plugins" );
+	debug =  Journal_Register( Debug_Type, "Plugins" );
+	error =  Journal_Register( Error_Type, "Plugins" );
+
+	if ( Stg_ObjectList_Get( self->plugins, pluginName ) != NULL ) {
+		Journal_Printf( debug, "Plugin %s already loaded\n", pluginName );
+		return True;
+	}
+
+	/* Try local search first */
+	thePlugin = PluginLoader_NewLocal( pluginName, self->directories );
+
+	/* remote search? */
+
+	if ( thePlugin == NULL ) {
+		return False;
+	}
+
+	/* version check? */
+	
+	dependencies = PluginLoader_GetDependencies( thePlugin );
+	if ( dependencies ) {
+		depCount = Dictionary_Entry_Value_GetCount( dependencies );
+	}
+
+	for ( dep_I = 0; dep_I < depCount; ++dep_I ) {
+		Dictionary* dep;
+		Dictionary_Entry_Value* depName;
+		Dictionary_Entry_Value* depVersion;
+		Dictionary_Entry_Value* depUrl;
+		char* name;
+		char* version;
+		char* url;
+
+		dep = Dictionary_Entry_Value_AsDictionary( Dictionary_Entry_Value_GetElement( dependencies, dep_I ) );
+		depName = Dictionary_Get( dep, (char*)PLUGIN_DEPENDENCY_NAME_KEY );
+		depVersion = Dictionary_Get( dep, (char*)PLUGIN_DEPENDENCY_VERSION_KEY );
+		depUrl = Dictionary_Get( dep, (char*)PLUGIN_DEPENDENCY_URL_KEY );
+
+		if ( depName == NULL ) {
+			Journal_Printf( debug, "No plugin name found in dependency entry\n" );
+		}
+		else {
+			name = Dictionary_Entry_Value_AsString( depName );
+			version = (depVersion == NULL) ? NULL : Dictionary_Entry_Value_AsString( depVersion );
+			url = (depUrl == NULL) ? NULL : Dictionary_Entry_Value_AsString( depUrl );
+
+			if ( ! PluginsManager_LoadPlugin( self, name, _context ) ) {
+				Journal_Printf( stream, "Dependency %s failed to load\n", name );
+				Stg_Class_Delete( thePlugin );
+				return False;
+			}
+		}
+	}
+	
+	thePlugin->Register( self );
+	Stg_ObjectList_Append( self->plugins, thePlugin );
+
+	return True;
+}
+
+void PluginsManager_AddDirectory( void* plugins, Name name, char* directory ) {
+	PluginsManager*			self = (PluginsManager*)plugins;
+	Bool				found;
+	Index				i;
+	
+	/* Check that the directory isn't already added */
+	found = False;
+	for( i =  0; i < self->directories->count; i++ ){
+		if( strcmp( directory, Stg_ObjectList_ObjectAt( self->directories, i ) ) == 0 ) {
+			found = True;
+		}
+	}
+	
+	if( !found ) {
+		Stg_ObjectList_PointerAppend( self->directories, StG_Strdup( directory ), name, 0, 0, 0 ); 
+	}
+}
+
+Index PluginsManager_Submit( 
+		void* plugins, 
+		Name codeletName, 
+		Name version,
+		Stg_Component_DefaultConstructorFunction* defaultNew ) 
+{
+	PluginsManager* self = (PluginsManager*)plugins;
+
+	void* codeletInstance = NULL;
+	Index result;
+
+	Stg_ComponentRegister_AddFunc( 
+		Stg_ComponentRegister_Get_ComponentRegister(),
+		codeletName,
+		version,
+		defaultNew,
+		Codelet_GetMetadata );
+
+	codeletInstance = defaultNew( codeletName );
+	result = Stg_ObjectList_Append( self->codelets, codeletInstance );
+	if ( LiveComponentRegister_GetLiveComponentRegister() ) {
+		LiveComponentRegister_Add( 
+				LiveComponentRegister_GetLiveComponentRegister(),
+				codeletInstance );
+	}
+	
+	return result;
+}
+
+void PluginsManager_ConstructPlugins( void* plugins, Stg_ComponentFactory* cf, void* data ) {
+	PluginsManager* self = (PluginsManager*)plugins;
+	int i;
+
+	for ( i = 0; i < self->codelets->count; ++i ) {
+		Stg_Component_Construct( self->codelets->data[i], cf, data, False );// True );
+	}
+}
+
+
+Bool PluginsManager_ConstructPlugin( void* plugins, Name pluginName, Stg_ComponentFactory* cf, void* data ) {
+	PluginsManager* self = (PluginsManager*)plugins;
+
+	//Get the codelet for the plugin we're wanting to construct.
+	void* codelet = Stg_ObjectList_Get(self->codelets, pluginName);
+				
+	if(codelet == NULL)
+		return False;
+	else
+		Stg_Component_Construct( codelet, cf, data, False );
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Handles the loading of "Plugin" modules, which can extend the functionality or data structures of 
+**	a main StGermain program.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: PluginsManager.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_PluginsManager_h__
+#define __Base_Extensibility_PluginsManager_h__
+	
+
+	/* Textual name of this class */
+	extern const Type PluginsManager_Type;
+	
+	/* Plugins info */
+	#define __PluginsManager \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Plugins info */ \
+		Dictionary*	dictionary; \
+		Stg_ObjectList* plugins; \
+		Stg_ObjectList* codelets; \
+		Stg_ObjectList*	directories;
+		
+	struct PluginsManager { __PluginsManager };
+	
+	
+	/* Create a new Plugins */
+	PluginsManager* PluginsManager_New( Dictionary* dictionary );
+	
+	/* Initialise a Plugins */
+	void PluginsManager_Init( void* plugins, Dictionary* dictionary );
+	
+	/* Creation implementation / Virtual constructor */
+	PluginsManager* _PluginsManager_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Dictionary*			dictionary );
+	
+	/* Initialisation implementation */
+	void _PluginsManager_Init( void* plugins );
+	
+	/* Stg_Class_Delete implementation */
+	void _PluginsManager_Delete( void* plugins );
+	
+	/* Print implementation */
+	void _PluginsManager_Print( void* plugins, Stream* stream );
+	
+	/** Get the plugins list from the dictionary */
+	Dictionary_Entry_Value* PluginsManager_GetPluginsList( void* dict );
+	
+	/** Load the specified plugins from the dictionary */ 
+	void PluginsManager_Load( void* plugins, void* _context, void* _dictionary );
+
+	/** Load a plugin */
+	Bool PluginsManager_LoadPlugin( void* plugins, Name pluginName, void* _context );
+	
+	/** Add a directory to the list of prefixes it will try if the "dlopen" fails on a plugin. It won't add the same dir
+	    twice. */
+	void PluginsManager_AddDirectory( void* plugins, Name name, char* directory );
+	
+	Index PluginsManager_Submit( 
+			void* plugins, 
+			Name codeletName, 
+			Name version,
+			Stg_Component_DefaultConstructorFunction* defaultNew );
+
+	void PluginsManager_ConstructPlugins( void* plugins, Stg_ComponentFactory* cf, void* data );
+
+	Bool PluginsManager_ConstructPlugin( void* plugins, Name pluginName, Stg_ComponentFactory* cf, void* data );
+
+#endif /* __Base_Extensibility_PluginsManager_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,195 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: SimpleExtensionInfo.c 2915 2005-05-08 12:51:46Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ExtensionManager.h"
+#include "ExtensionInfo.h"
+#include "SimpleExtensionInfo.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+/* Textual name of this class */
+const Type SimpleExtensionInfo_Type = "SimpleExtensionInfo";
+
+
+/** allocate and initialise a new SimpleExtensionInfo. */
+SimpleExtensionInfo* SimpleExtensionInfo_New( const Name name, SizeT size, Index count ) {
+	return _SimpleExtensionInfo_New( 
+		sizeof(SimpleExtensionInfo), 
+		SimpleExtensionInfo_Type, 
+		_SimpleExtensionInfo_Delete,
+		_SimpleExtensionInfo_Print, 
+		_SimpleExtensionInfo_Copy, 
+		_SimpleExtensionInfo_DataCopy,
+		(Name)name, 
+		size, 
+		count );
+}
+
+
+void SimpleExtensionInfo_Init( void* simpleExtensionInfo, const Name name, SizeT size, Index count ) {
+	SimpleExtensionInfo* self = (SimpleExtensionInfo*)simpleExtensionInfo;
+
+	/* General info */
+	self->type = SimpleExtensionInfo_Type;
+	self->_sizeOfSelf = sizeof(SimpleExtensionInfo);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _SimpleExtensionInfo_Delete;
+	self->_print = _SimpleExtensionInfo_Print;
+	self->_copy = _SimpleExtensionInfo_Copy;
+	self->_dataCopy = _SimpleExtensionInfo_DataCopy;
+	
+	/* SimpleExtensionInfo info */
+	_SimpleExtensionInfo_Init( self, (Name)name, size, count );
+}
+
+
+SimpleExtensionInfo* _SimpleExtensionInfo_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		ExtensionInfo_DataCopyFunction*	_dataCopy,
+		Name 				name, 
+		SizeT 				size,
+		Index				count )
+{
+	SimpleExtensionInfo* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(SimpleExtensionInfo) );
+	self = (SimpleExtensionInfo*)_ExtensionInfo_New( 
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy, 
+		_dataCopy,
+		name, 
+		size,
+		count );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* SimpleExtensionInfo info */
+	_SimpleExtensionInfo_Init( self, name, size, count );
+	
+	return self;
+}
+
+
+void _SimpleExtensionInfo_Init( SimpleExtensionInfo* self, Name name, SizeT size, Index count ) {
+	/* General and Virtual info should already be set */
+	/* SimpleExtensionInfo info */
+	_ExtensionInfo_Init( (ExtensionInfo*)self, name, size, count );
+}
+
+
+void _SimpleExtensionInfo_Delete( void* simpleExtensionInfo ) {
+	SimpleExtensionInfo* self = (SimpleExtensionInfo*)simpleExtensionInfo;
+
+	Journal_DFirewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+		"Attempting to \"%s\" delete a pointer of value NULL\n", SimpleExtensionInfo_Type );
+	
+	/* Purposely do nothing... the extension is assumed to be static (non-pointer) data */
+	
+	/* Delete parent */
+	_ExtensionInfo_Delete( self );
+}
+
+
+void _SimpleExtensionInfo_Print( void* simpleExtensionInfo, Stream* stream ) {
+	SimpleExtensionInfo* self = (SimpleExtensionInfo*)simpleExtensionInfo;
+		
+	Journal_Firewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, ExtensionInfo_Type ), 
+		"Attempting to \"%s\" print a pointer of value NULL\n", SimpleExtensionInfo_Type );
+	
+	/* General info */
+	Journal_Printf( (void*)stream, "SimpleExtensionInfo (%p):\n", self );
+	_ExtensionInfo_Print( self, stream );
+	Journal_Printf( (void*)stream, "\tNo print function implemented/assigned for this extension\n" );
+}
+
+
+void* _SimpleExtensionInfo_Copy( void* simpleExtensionInfo, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap  ) {
+	SimpleExtensionInfo*	self = (SimpleExtensionInfo*)simpleExtensionInfo;
+	SimpleExtensionInfo*	newSimpleExtensionInfo;
+		
+	Journal_Firewall( 
+		self != NULL,  
+		Journal_Register( ErrorStream_Type, SimpleExtensionInfo_Type ), 
+		"Attempting to \"%s\" copy a pointer of value NULL\n", SimpleExtensionInfo_Type );
+	
+	/* Copy parent */
+	newSimpleExtensionInfo = _ExtensionInfo_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	return newSimpleExtensionInfo;
+}
+
+void* _SimpleExtensionInfo_DataCopy( 
+	void* simpleExtensionInfo, 
+	void* source,
+	void* dest, 
+	Bool deep, 
+	Name nameExt, 
+	PtrMap* ptrMap )
+{
+	SimpleExtensionInfo* self = (SimpleExtensionInfo*)simpleExtensionInfo;
+	
+	memcpy( dest, source, self->size );
+
+	return dest;
+}
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Extensions are the effective equivalent of no-typing (i.e. the attributes/methods of am object are changable at runtime). 
+**	By definition Object Oriented programming assumes "no-typing" ability, but popular Object Oriented languages such as C++
+**	and Java (which are weakly-typed) have impeded its uptake. StGermain's ExtensionManager/ExtensionInfo combination mimics
+**	"no-typing" in C by allowing users to add attributes to an object at run-time. The StGermain inheritance scheme already 
+**	provides runtime changing of method implementations on an object. However note, given that StGermain was originally built
+**	for computational purposes, speed requirements dictate that at some point the ability to add extensions is stopped, and the
+**	object effectively becomes weakly-typed.
+**
+**	SimpleExtensionInfo concretes ExtensionInfo for extensions that are merely a block of memory (e.g. a fundamental type or
+**	struct) where none of its components reqiure extra behaviour to copy or delete (e.g. any pointers to malloced memory). 
+**
+** Assumptions:
+**	Usage: A "memcpy" of the extension is sufficient an implementation of "copy"
+**	Usage: It is ok to do nothing (i.e. not release any memory from pointers within the extension) on "delete"
+**
+** Comments:
+**	Read ExtensionInfo's Role, Assumptions and Comments.
+**
+** $Id: SimpleExtensionInfo.h 2915 2005-05-08 12:51:46Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_SimpleExtensionInfo_h__
+#define __Base_Extensibility_SimpleExtensionInfo_h__
+	
+	/** Textual name of this class */
+	extern const Type SimpleExtensionInfo_Type;
+	
+	/** SimpleExtensionInfo struct */
+	#define __SimpleExtensionInfo \
+		__ExtensionInfo
+		
+	/** Defines key information about an object/struct extension - see SimpleExtensionInfo.h. */
+	struct SimpleExtensionInfo { __SimpleExtensionInfo };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/** Create a new SimpleExtensionInfo */
+	SimpleExtensionInfo* SimpleExtensionInfo_New( const Name name, SizeT size, Index count );
+	
+	/** Initialise an SimpleExtensionInfo */
+	void SimpleExtensionInfo_Init( void* simpleExtensionInfo, const Name name, SizeT size, Index count );
+	
+	/* Creation implementation */
+	SimpleExtensionInfo* _SimpleExtensionInfo_New( 
+		SizeT 				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*		_copy, 
+		ExtensionInfo_DataCopyFunction*	_dataCopy,
+		Name 				name, 
+		SizeT 				size,
+		Index				count );
+	
+	/* Initialisation implementation */
+	void _SimpleExtensionInfo_Init( SimpleExtensionInfo* self, Name name, SizeT size, Index count );
+	
+	/* Class_Delete() implementation */
+	void _SimpleExtensionInfo_Delete( void* simpleExtensionInfo );
+	
+	/* Class_Print() implementation */
+	void _SimpleExtensionInfo_Print( void* simpleExtensionInfo, Stream* stream );
+	
+	/** Class_Copy() implementation: derivatives should call this in their implementation */
+	void* _SimpleExtensionInfo_Copy( void* simpleExtensionInfo, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void* _SimpleExtensionInfo_DataCopy( 
+		void* extensionInfo, 
+		void* source, 
+		void* dest, 
+		Bool deep, 
+		Name nameExt, 
+		PtrMap* ptrMap );
+
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Extensibility_SimpleExtensionInfo_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.rules 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}  -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\"
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseAutomation ${RPATH_LFLAGS}
+
+packages = DL
+
+
+
+# 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
+
+ifdef NOSHARED
+	EXTERNAL_INCLUDES += -DNOSHARED
+endif
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,191 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Shortcut macros for this directory
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_shortcuts_h__
+#define __Base_Extensibility_shortcuts_h__
+
+	/** Macro to grab an extension from a named Stg_ObjectList */
+	#define ExtensionManager_FromList( extList, index ) \
+		((ExtensionManager*) (extList)->data[index])
+
+	/** Macro to grab an extension info from a Stg_ObjectList */
+	#define ExtensionInfo_At( extInfos, index ) \
+		((ExtensionInfo*) (extInfos)->data[index])
+
+	/* Shortcuts to Entry Point functions. Assume that the build system is 
+	passing a value of CURR_MODULE_NAME (ie -DCURR_MODULE_NAME=\"Snark\" ).
+	Also assumes the user wants to call the E.P. by the name of the function. */
+
+	#define EP_Prepend( entryPoint, func ) \
+		EntryPoint_Prepend( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+
+	#define EP_PrependClassHook( entryPoint, func, reference ) \
+		EntryPoint_PrependClassHook( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )
+
+	#define EP_Prepend_AlwaysFirst( entryPoint, func ) \
+		EntryPoint_Prepend_AlwaysFirst( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_PrependClassHook_AlwaysFirst( entryPoint, func, reference ) \
+		EntryPoint_PrependClassHook_AlwaysFirst( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )
+
+	#define EP_Append( entryPoint, func ) \
+		EntryPoint_Append( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_AppendClassHook( entryPoint, func, reference ) \
+		EntryPoint_AppendClassHook( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )
+
+	#define EP_Append_AlwaysLast( entryPoint, func ) \
+		EntryPoint_Append_AlwaysLast( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_AppendClassHook_AlwaysLast( entryPoint, func, reference ) \
+		EntryPoint_AppendClassHook_AlwaysLast( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )
+
+	#define EP_InsertBefore( entryPoint, funcToInsertBefore, func ) \
+		EntryPoint_InsertBefore( \
+			entryPoint, \
+			funcToInsertBefore, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_InsertClassHookBefore( entryPoint, funcToInsertBefore, func, reference ) \
+		EntryPoint_InsertClassHookBefore( \
+			entryPoint, \
+			funcToInsertBefore, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )
+	
+	#define EP_InsertAfter( entryPoint, funcToInsertAfter, func ) \
+		EntryPoint_InsertAfter( \
+			entryPoint, \
+			funcToInsertAfter, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_InsertClassHookAfter( entryPoint, funcToInsertAfter, func, reference ) \
+		EntryPoint_InsertClassHookAfter( \
+			entryPoint, \
+			funcToInsertAfter, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )
+
+	#define EP_Remove          EntryPoint_Remove
+	#define EP_RemoveClassHook EntryPoint_Remove
+	
+	#define EP_Replace( entryPoint, funcToReplace, func ) \
+		EntryPoint_Replace( \
+			entryPoint, \
+			funcToReplace, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_ReplaceClassHook( entryPoint, funcToReplace, func, reference ) \
+		EntryPoint_ReplaceClassHook( \
+			entryPoint, \
+			funcToReplace, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )				
+
+	#define EP_ReplaceAll( entryPoint, func ) \
+		EntryPoint_ReplaceAll( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			CURR_MODULE_NAME )
+
+	#define EP_ReplaceAllClassHook( entryPoint, func, reference ) \
+		EntryPoint_ReplaceAllClassHook( \
+			entryPoint, \
+			#func, \
+			(Func_Ptr)func, \
+			((Stg_Class*)reference)->type, \
+			reference )		
+
+	#define EP_Purge( entryPoint ) \
+		EntryPoint_Purge( entryPoint )
+
+#endif /* __Base_Extensibility_shortcuts_h__ */	
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Extensibility_types_h__
+#define __Base_Extensibility_types_h__
+	
+	/* Generic types */
+	/* Base types/classes */
+	typedef struct Hook				Hook;
+	typedef struct ClassHook			ClassHook;
+	typedef struct EntryPoint 			EntryPoint;
+	typedef struct ExtensionInfo			ExtensionInfo;
+	typedef struct SimpleExtensionInfo		SimpleExtensionInfo;
+	typedef struct ClassPtrExtensionInfo		ClassPtrExtensionInfo;
+	typedef struct ExtensionManager			ExtensionManager;
+	typedef struct ExtensionManager_Register	ExtensionManager_Register;
+	typedef struct EntryPoint_Register		EntryPoint_Register;
+	typedef struct Codelet				Codelet;
+	typedef struct PluginLoader			PluginLoader;
+	typedef struct PluginsManager			PluginsManager;
+
+	/* Extension types ... for readability */
+	typedef Stg_ObjectList			ExtensionList;
+	typedef Index				ExtensionManager_Index;
+	typedef Stg_ObjectList			ExtensionInfoList;
+	typedef Index				ExtensionInfo_Index;
+	
+	/* EntryPoint types ... for readability */
+	typedef Stg_ObjectList			EntryPointList;
+	typedef unsigned int			EntryPoint_Index;
+
+	/* Hook types ... for readability */
+	typedef void*				Func_Ptr;
+	typedef Name				Hook_Name;
+	typedef char*				Hook_AddedBy;
+	typedef Hook*				Hook_Ptr;
+	typedef Stg_ObjectList			HookList;
+	typedef Index				Hook_Index;
+	
+	/* plugin types ... for readability */
+	typedef void*				DLL_Handle;
+	typedef DLL_Handle*			DLL_Handle_List;
+
+#endif /* __Base_Extensibility_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseExtensibility
+
+def_srcs = \
+	testExtension-ofStruct.c \
+	testExtension-ofObject.c \
+	testExtensionSimple.c \
+	testEntryPoint0.c \
+	testEntryPoint1.c \
+	testEntryPoint2.c \
+	testEntryPoint3.c \
+	testEntryPoint-min-max.c \
+	testEntryPoint-printConcise.c \
+	testEntryPoint-ClassHook.c
+
+def_checks = \
+	testEntryPoint0.0of1.sh \
+	testEntryPoint1.0of1.sh \
+	testEntryPoint2.0of1.sh \
+	testEntryPoint3.0of1.sh \
+	testEntryPoint-min-max.0of1.sh \
+	testEntryPoint-printConcise.0of1.sh \
+	testEntryPoint-ClassHook.0of1.sh
+
+# Remove these tests until HashGet works
+#	testExtension-ofStruct.0of1.sh \
+#	testExtension-ofObject.0of1.sh \
+#	testExtensionSimple.0of1.sh \
+

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $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
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseExtensibility -lStGermainBaseAutomation -lStGermainBaseContainer -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+	packages += CSOAP NANOHTTP
+endif
+	
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,12 @@
+Watching rank: 0
+Passed test EntryPoint creation with ClassHook types: Can we create an EntryPoint with ClassHook run casts
+Passed test Adding ClassHooks: Can we add class hooks onto EntryPoints
+Listener_0_Func printing 0
+Listener_0_Func printing 1
+Listener_0_Func printing 2
+Passed test Run ClassHook with 0 arguments: Can we run ClassHook with 0 arguments
+Listener_VoidPtr_Func printing 0 and 5 
+Listener_VoidPtr_Func printing 1 and 5 
+Listener_VoidPtr_Func printing 2 and 5 
+Passed test Run ClassHook with 1 argument: Can we run ClassHook with 1 argument
+Passed test Destruction of ClassHooks: Can we delete the ClassHooks

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testEntryPoint-ClassHook " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,192 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testEntryPoint0.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+#define __Listener \
+	__Stg_Class \
+	int x;
+struct Listener { __Listener };
+typedef struct Listener Listener;
+
+Listener* Listener_New( int x ) {
+	Listener* result = (Listener*)_Stg_Class_New(
+		sizeof( Listener ),
+		"Listener",
+		_Stg_Class_Delete,
+		NULL,
+		NULL );
+	result->x = x;
+	return result;
+}
+
+void Listener_0_Func( void* ref ) {
+	Listener* self = (Listener*) ref;
+	Journal_Printf(
+		Journal_Register( Info_Type, __FILE__ ),
+		"%s printing %d\n",
+		__func__,
+		self->x );
+}
+void Listener_VoidPtr_Func( void* ref, void* data0 ) {
+	Listener* self = (Listener*) ref;
+	int* data = (int*)data0;
+	
+	Journal_Printf(
+		Journal_Register( Info_Type, __FILE__ ),
+		"%s printing %d and %d \n",
+		__func__,
+		self->x,
+		*data );
+}
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* class0;
+	EntryPoint* classVoidPtr;
+
+	#define NUM_LISTENERS 3
+	Listener* listeners[NUM_LISTENERS];
+	char buf[100];
+	int ii;
+	int data = 5;
+
+	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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	
+	RegressionTest_Init( "Base/Extensibility/EntryPoint" );
+	
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, __FILE__ );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+
+	/* Build the entry point */
+	class0 = EntryPoint_New( "Class0", EntryPoint_Class_0_CastType );
+	classVoidPtr = EntryPoint_New( "Class_VoidPtr", EntryPoint_Class_VoidPtr_CastType );
+
+	RegressionTest_Check(
+		class0 != NULL &&
+		classVoidPtr != NULL,
+		stream,
+		"EntryPoint creation with ClassHook types",
+		"Can we create an EntryPoint with ClassHook run casts" );
+
+	for ( ii = 0; ii < NUM_LISTENERS; ++ii ) {
+		listeners[ii] = Listener_New( ii );
+		sprintf( buf, "%d", ii );
+		EntryPoint_AppendClassHook( class0, buf, (void*)Listener_0_Func, __FILE__, listeners[ii] );
+		EntryPoint_AppendClassHook( classVoidPtr, buf, (void*)Listener_VoidPtr_Func, __FILE__, listeners[ii] );
+	}
+
+	RegressionTest_Check(
+		class0->hooks->count == NUM_LISTENERS &&
+		classVoidPtr->hooks->count ==  NUM_LISTENERS,
+		stream,
+		"Adding ClassHooks",
+		"Can we add class hooks onto EntryPoints" );
+
+	/* Run the entry point */
+	((EntryPoint_Class_0_CallCast*) class0->run)( class0);
+	
+	RegressionTest_Check(
+		1,
+		stream,
+		"Run ClassHook with 0 arguments",
+		"Can we run ClassHook with 0 arguments" );
+
+	((EntryPoint_Class_VoidPtr_CallCast*) classVoidPtr->run)( classVoidPtr, &data );
+
+	RegressionTest_Check(
+		1,
+		stream,
+		"Run ClassHook with 1 argument",
+		"Can we run ClassHook with 1 argument" );
+
+	for ( ii = 0; ii < NUM_LISTENERS; ++ii ) {
+		Stg_Class_Delete( listeners[ii] );
+	}
+
+	RegressionTest_Check(
+		1,
+		stream,
+		"Destruction of ClassHooks",
+		"Can we delete the ClassHooks" );
+
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( class0 );
+	Stg_Class_Delete( classVoidPtr );
+
+	RegressionTest_Finalise();
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+Watching rank: 0
+In func Return1
+In func Return89
+In func ReturnNeg43
+In func ReturnZero
+result = 89
+In func Return1
+In func Return89
+In func ReturnNeg43
+In func ReturnZero
+result = -43

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "./testEntryPoint-min-max " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testEntryPoint-min-max.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+double Return1( Stream* stream ) {
+	Journal_Printf( stream, "In func %s\n", __func__ );
+	return 1.0;
+}
+	
+double Return89( Stream* stream ) {
+	Journal_Printf( stream, "In func %s\n", __func__ );
+	return 89.0;
+}
+
+double ReturnNeg43( Stream* stream ) {
+	Journal_Printf( stream, "In func %s\n", __func__ );
+	return -43;
+}
+double ReturnZero( Stream* stream ) {
+	Journal_Printf( stream, "In func %s\n", __func__ );
+	return 0.0;
+}
+
+const Name testEpName = "test";
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* entryPoint;
+	Stream* stream;
+	double  result;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+	Stream_SetPrintingRank( stream, procToWatch );
+	
+	Journal_Printf( stream, "Watching rank: %i\n", rank );
+	
+	/* Get Maximum of Values */
+	entryPoint = EntryPoint_New( testEpName, EntryPoint_Maximum_VoidPtr_CastType );
+	EP_Append( entryPoint, Return1 );
+	EP_Append( entryPoint, Return89 );
+	EP_Append( entryPoint, ReturnNeg43 );
+	EP_Append( entryPoint, ReturnZero );
+	result = ((EntryPoint_Maximum_VoidPtr_CallCast*) entryPoint->run)( entryPoint, stream );
+	Journal_PrintDouble( stream, result );
+	Stg_Class_Delete( entryPoint );
+
+	/* Get Minimum of Values */
+	entryPoint = EntryPoint_New( testEpName, EntryPoint_Minimum_VoidPtr_CastType );
+	EP_Append( entryPoint, Return1 );
+	EP_Append( entryPoint, Return89 );
+	EP_Append( entryPoint, ReturnNeg43 );
+	EP_Append( entryPoint, ReturnZero );
+	result = ((EntryPoint_Minimum_VoidPtr_CallCast*) entryPoint->run)( entryPoint, stream );
+	Journal_PrintDouble( stream, result );
+	Stg_Class_Delete( entryPoint );	
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+Watching rank: 0
+	EP: test
+		H: "Test4" (testCode)
+		H: "Test6" (testCode)
+		H: "Test2" (testCode)
+		H: "Test7" (testCode)
+		H: "Test3" (testCode)
+		H: "Test8" (testCode)
+		H: "Test9" (testCode)

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testEntryPoint-printConcise " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testEntryPoint-printConcise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+Stream* stream;
+
+void Test0( void ) {
+	Journal_Printf( (void*) stream, "This is Test0\n" );
+}
+
+void Test1( void ) {
+	Journal_Printf( (void*) stream, "This is Test1\n" );
+}
+
+void Test2( void ) {
+	Journal_Printf( (void*) stream, "This is Test2\n" );
+}
+
+void Test3( void ) {
+	Journal_Printf( (void*) stream, "This is Test3\n" );
+}
+
+void Test4( void ) {
+	Journal_Printf( (void*) stream, "This is Test4\n" );
+}
+
+void Test5( void ) {
+	Journal_Printf( (void*) stream, "This is Test5\n" );
+}
+
+void Test6( void ) {
+	Journal_Printf( (void*) stream, "This is Test6\n" );
+}
+
+void Test7( void ) {
+	Journal_Printf( (void*) stream, "This is Test7\n" );
+}
+
+void Test8( void ) {
+	Journal_Printf( (void*) stream, "This is Test8\n" );
+}
+
+void Test9( void ) {
+	Journal_Printf( (void*) stream, "This is Test9\n" );
+}
+
+const Name testEpName = "test";
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* entryPoint;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Build the entrypoint */
+	entryPoint = EntryPoint_New( testEpName, EntryPoint_0_CastType );
+	EntryPoint_Append( entryPoint, "Test0", (void*)Test0, "testCode" );
+	EntryPoint_Prepend( entryPoint, "Test1", (void*)Test1, "testCode" );
+	EntryPoint_ReplaceAll( entryPoint, "Test2", (void*)Test2, "testCode" );
+	EntryPoint_Append( entryPoint, "Test3", (void*)Test3, "testCode" );
+	EntryPoint_Prepend( entryPoint, "Test4", (void*)Test4, "testCode" );
+	EntryPoint_InsertBefore( entryPoint, "Test3", "Test5", (void*)Test5, "testCode" );
+	EntryPoint_InsertAfter( entryPoint, "Test4", "Test6", (void*)Test6, "testCode" );
+	EntryPoint_Replace( entryPoint, "Test5", "Test7", (void*)Test7, "testCode" );
+	EntryPoint_Append( entryPoint, "Test8", (void*)Test8, "testCode" );
+	EntryPoint_Append( entryPoint, "Test9", (void*)Test9, "testCode" );
+
+
+	if( rank == procToWatch ) {
+		stream = Journal_Register( InfoStream_Type, EntryPoint_Type );
+		EntryPoint_PrintConcise( entryPoint, stream );
+	}	
+	
+
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( entryPoint );
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testEntryPoint0 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testEntryPoint0.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* entryPoint;
+	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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+
+	/* Build the entry point */
+	entryPoint = EntryPoint_New( "test", EntryPoint_VoidPtr_CastType );
+	
+	/* Run the entry point */
+	((EntryPoint_VoidPtr_CallCast*) entryPoint->run)( entryPoint, NULL );
+
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( entryPoint );
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+Watching rank: 0
+entryPoint->hooks->_size: 8
+entryPoint->hooks->count: 0
+entryPoint->hooks->_size: 8
+entryPoint->hooks->count: 1
+entryPoint->hooks->data[0]->name: Test0
+Test0 called on ptr to value: 5

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testEntryPoint1 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testEntryPoint1.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+Stream* stream;
+
+void Test0( int* value ) {
+	Journal_Printf( (void*) stream, "Test0 called on ptr to value: %d\n", *value );
+}
+
+const Name testEpName = "test";
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* entryPoint;
+	int value = 5;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+
+	/* Build the entrypoint */
+	entryPoint = EntryPoint_New( testEpName, EntryPoint_VoidPtr_CastType );
+	if( rank == procToWatch ) {
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+	}
+	EntryPoint_Append( entryPoint, "Test0", (void*)Test0, "testCode" );
+	if( rank == procToWatch ) {
+		Hook_Index hookIndex;
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+
+		for (hookIndex = 0; hookIndex < entryPoint->hooks->count; hookIndex++ ) {
+			Journal_Printf( (void*) stream, "entryPoint->hooks->data[%d]->name: %s\n", hookIndex,
+				entryPoint->hooks->data[hookIndex]->name  );
+		}
+	}
+
+	/* Run the entry point */
+	if( rank == procToWatch ) {
+		((EntryPoint_VoidPtr_CallCast*) entryPoint->run)( entryPoint, &value );
+	}
+
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( entryPoint );
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,25 @@
+Watching rank: 0
+entryPoint->hooks->_size: 8
+entryPoint->hooks->count: 0
+entryPoint->hooks->_size: 16
+entryPoint->hooks->count: 10
+entryPoint->hooks->data[0]->name: Test0
+entryPoint->hooks->data[1]->name: Test1
+entryPoint->hooks->data[2]->name: Test2
+entryPoint->hooks->data[3]->name: Test3
+entryPoint->hooks->data[4]->name: Test4
+entryPoint->hooks->data[5]->name: Test5
+entryPoint->hooks->data[6]->name: Test6
+entryPoint->hooks->data[7]->name: Test7
+entryPoint->hooks->data[8]->name: Test8
+entryPoint->hooks->data[9]->name: Test9
+This is Test0
+This is Test1
+This is Test2
+This is Test3
+This is Test4
+This is Test5
+This is Test6
+This is Test7
+This is Test8
+This is Test9

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testEntryPoint2 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testEntryPoint2.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+Stream* stream;
+
+void Test0( void ) {
+	Journal_Printf( (void*) stream, "This is Test0\n" );
+}
+
+void Test1( void ) {
+	Journal_Printf( (void*) stream, "This is Test1\n" );
+}
+
+void Test2( void ) {
+	Journal_Printf( (void*) stream, "This is Test2\n" );
+}
+
+void Test3( void ) {
+	Journal_Printf( (void*) stream, "This is Test3\n" );
+}
+
+void Test4( void ) {
+	Journal_Printf( (void*) stream, "This is Test4\n" );
+}
+
+void Test5( void ) {
+	Journal_Printf( (void*) stream, "This is Test5\n" );
+}
+
+void Test6( void ) {
+	Journal_Printf( (void*) stream, "This is Test6\n" );
+}
+
+void Test7( void ) {
+	Journal_Printf( (void*) stream, "This is Test7\n" );
+}
+
+void Test8( void ) {
+	Journal_Printf( (void*) stream, "This is Test8\n" );
+}
+
+void Test9( void ) {
+	Journal_Printf( (void*) stream, "This is Test9\n" );
+}
+
+const Name testEpName = "test";
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* entryPoint;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+
+	/* Build the entrypoint */
+	entryPoint = EntryPoint_New( testEpName, EntryPoint_0_CastType );
+	if( rank == procToWatch ) {
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+	}
+	EntryPoint_Append( entryPoint, "Test0", (void*)Test0, "testCode" );
+	EntryPoint_Append( entryPoint, "Test1", (void*)Test1, "testCode" );
+	EntryPoint_Append( entryPoint, "Test2", (void*)Test2, "testCode" );
+	EntryPoint_Append( entryPoint, "Test3", (void*)Test3, "testCode" );
+	EntryPoint_Append( entryPoint, "Test4", (void*)Test4, "testCode" );
+	EntryPoint_Append( entryPoint, "Test5", (void*)Test5, "testCode" );
+	EntryPoint_Append( entryPoint, "Test6", (void*)Test6, "testCode" );
+	EntryPoint_Append( entryPoint, "Test7", (void*)Test7, "testCode" );
+	EntryPoint_Append( entryPoint, "Test8", (void*)Test8, "testCode" );
+	EntryPoint_Append( entryPoint, "Test9", (void*)Test9, "testCode" );
+	if( rank == procToWatch ) {
+		Hook_Index hookIndex;
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+
+		for (hookIndex = 0; hookIndex < entryPoint->hooks->count; hookIndex++ ) {
+			Journal_Printf( (void*) stream, "entryPoint->hooks->data[%d]->name: %s\n", hookIndex,
+				entryPoint->hooks->data[hookIndex]->name  );
+		}
+	}
+
+	/* Run the entry point */
+	if( rank == procToWatch ) {
+		((EntryPoint_0_CallCast*) entryPoint->run)( entryPoint );
+	}
+
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( entryPoint );
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+Watching rank: 0
+entryPoint->hooks->_size: 8
+entryPoint->hooks->count: 0
+entryPoint->hooks->_size: 16
+entryPoint->hooks->count: 9
+entryPoint->hooks->data[0]->name: Test0
+entryPoint->hooks->data[1]->name: Test1
+entryPoint->hooks->data[2]->name: Test4
+entryPoint->hooks->data[3]->name: Test6
+entryPoint->hooks->data[4]->name: Test2
+entryPoint->hooks->data[5]->name: Test7
+entryPoint->hooks->data[6]->name: Test3
+entryPoint->hooks->data[7]->name: Test9
+entryPoint->hooks->data[8]->name: Test8
+This is Test0
+This is Test1
+This is Test4
+This is Test6
+This is Test2
+This is Test7
+This is Test3
+This is Test9
+This is Test8
+about to purge E.P:
+entryPoint->hooks->_size: 16
+entryPoint->hooks->count: 0

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testEntryPoint3 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,179 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testEntryPoint3.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+Stream* stream;
+
+void Test0( void ) {
+	Journal_Printf( (void*) stream, "This is Test0\n" );
+}
+
+void Test1( void ) {
+	Journal_Printf( (void*) stream, "This is Test1\n" );
+}
+
+void Test2( void ) {
+	Journal_Printf( (void*) stream, "This is Test2\n" );
+}
+
+void Test3( void ) {
+	Journal_Printf( (void*) stream, "This is Test3\n" );
+}
+
+void Test4( void ) {
+	Journal_Printf( (void*) stream, "This is Test4\n" );
+}
+
+void Test5( void ) {
+	Journal_Printf( (void*) stream, "This is Test5\n" );
+}
+
+void Test6( void ) {
+	Journal_Printf( (void*) stream, "This is Test6\n" );
+}
+
+void Test7( void ) {
+	Journal_Printf( (void*) stream, "This is Test7\n" );
+}
+
+void Test8( void ) {
+	Journal_Printf( (void*) stream, "This is Test8\n" );
+}
+
+void Test9( void ) {
+	Journal_Printf( (void*) stream, "This is Test9\n" );
+}
+
+const Name testEpName = "test";
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	EntryPoint* entryPoint;
+	
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+	
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+	
+	/* Read input */
+
+	/* Build the entrypoint */
+	entryPoint = EntryPoint_New( testEpName, EntryPoint_0_CastType );
+	if( rank == procToWatch ) {
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+	}
+	EntryPoint_Append( entryPoint, "Test0", (void*)Test0, "testCode" );
+	EntryPoint_Prepend( entryPoint, "Test1", (void*)Test1, "testCode" );
+	EntryPoint_ReplaceAll( entryPoint, "Test2", (void*)Test2, "testCode" );
+	EntryPoint_Append( entryPoint, "Test3", (void*)Test3, "testCode" );
+	EntryPoint_Prepend( entryPoint, "Test4", (void*)Test4, "testCode" );
+	EntryPoint_InsertBefore( entryPoint, "Test3", "Test5", (void*)Test5, "testCode" );
+	EntryPoint_InsertAfter( entryPoint, "Test4", "Test6", (void*)Test6, "testCode" );
+	EntryPoint_Replace( entryPoint, "Test5", "Test7", (void*)Test7, "testCode" );
+	EntryPoint_Append_AlwaysLast( entryPoint, "Test8", (void*)Test8, "testCode" );
+	EntryPoint_Append( entryPoint, "Test9", (void*)Test9, "testCode" );
+	EntryPoint_Prepend_AlwaysFirst( entryPoint, "Test0", (void*)Test0, "testCode" );
+	EntryPoint_Prepend( entryPoint, "Test1", (void*)Test1, "testCode" );
+	if( rank == procToWatch ) {
+		Hook_Index hookIndex;
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+
+		for (hookIndex = 0; hookIndex < entryPoint->hooks->count; hookIndex++ ) {
+			Journal_Printf( (void*) stream, "entryPoint->hooks->data[%d]->name: %s\n", hookIndex,
+				entryPoint->hooks->data[hookIndex]->name  );
+		}
+	}
+
+	/* Run the entry point */
+	if( rank == procToWatch ) {
+		((EntryPoint_0_CallCast*) entryPoint->run)( entryPoint );
+	}
+
+
+	Journal_Printf( stream, "about to purge E.P:\n" );
+	EntryPoint_Purge( entryPoint );
+	if( rank == procToWatch ) {
+		Hook_Index hookIndex;
+		Journal_Printf( (void*) stream, "entryPoint->hooks->_size: %u\n", entryPoint->hooks->_size );
+		Journal_Printf( (void*) stream, "entryPoint->hooks->count: %u\n", entryPoint->hooks->count );
+
+		for (hookIndex = 0; hookIndex < entryPoint->hooks->count; hookIndex++ ) {
+			Journal_Printf( (void*) stream, "entryPoint->hooks->data[%d]->name: %s\n", hookIndex,
+				entryPoint->hooks->data[hookIndex]->name  );
+		}
+	}
+
+
+	/* Stg_Class_Delete stuff */
+	Stg_Class_Delete( entryPoint );
+
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+Watching rank: 0
+Passed test initialSize: Is the initial size correct
+Passed test First offset: Is the first offset at the correct position
+Passed test finalSize: Is the final size correct
+Passed test count: Is the number of extensions correct
+Passed test Extension 0: Is offset correct
+Passed test Extension 1: Is offset correct
+Passed test Extension 2: Is offset correct
+Passed test Extension 3: Is offset correct
+Passed test Extension 4: Is offset correct
+Passed test Extension 5: Is offset correct
+Passed test Extension 6: Is offset correct
+Passed test Extension 7: Is offset correct
+Passed test Extension 8: Is offset correct
+Passed test Extension 9: Is offset correct
+Passed test Write: Can we write to the extensions
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Passed test Delete: Can we delete the extensions

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testExtension-ofObject " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testExtension-ofObject.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+typedef struct {
+	double x;
+	double y;
+	double z;
+	char dim;
+} BaseClass;
+
+typedef struct {
+	char type;
+} ExtensionStruct0;
+const Type Type0 = "Type0";
+const Type Type1 = "Type1";
+
+typedef struct {
+	double temp;
+} ExtensionStruct1;
+const Type Temp0 = "Temp0";
+const Type Temp1 = "Temp1";
+
+typedef struct {
+	double pres;
+	char flag;
+} ExtensionStruct2;
+const Type Pres0 = "Pres0";
+const Type Pres1 = "Pres1";
+
+typedef struct {
+	char dd;
+	char cc;
+	int bc;
+} ExtensionStruct3;
+const Type BC_Set0 = "BC_Set0";
+const Type BC_Set1 = "BC_Set1";
+
+typedef struct {
+	float wf;
+} ExtensionStruct4;
+const Type Weight0 = "Weight0";
+const Type Weight1 = "Weight1";
+
+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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Extensibility/ExtensionManager" );
+	
+	/* creating a stream*/
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ExtensionManager*	extensionMgr;
+		BaseClass*		n;
+		ExtensionStruct0*	nType0;
+		ExtensionStruct1*	nTemp0;
+		ExtensionStruct2*	nPres0;
+		ExtensionStruct3*	nBC_Set0;
+		ExtensionStruct4*	nWeight0;
+		ExtensionStruct0*	nType1;
+		ExtensionStruct1*	nTemp1;
+		ExtensionStruct2*	nPres1;
+		ExtensionStruct3*	nBC_Set1;
+		ExtensionStruct4*	nWeight1;
+
+		Index			numExtensions = 0;              /* variable to check number of extensions */
+
+		SizeT			size0;
+		SizeT			size1;
+		SizeT			size2;
+		SizeT			size3;
+		SizeT			size4;
+
+		size0 = ExtensionManager_Align( sizeof(ExtensionStruct0) );
+		size1 = ExtensionManager_Align( sizeof(ExtensionStruct1) );
+		size2 = ExtensionManager_Align( sizeof(ExtensionStruct2) );
+		size3 = ExtensionManager_Align( sizeof(ExtensionStruct3) );
+		size4 = ExtensionManager_Align( sizeof(ExtensionStruct4) );
+	
+		Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+		
+		/* Build the extensionMgr */
+		n = Memory_Alloc_Unnamed( BaseClass );
+		extensionMgr = ExtensionManager_New_OfExistingObject( "Node", n );
+		ExtensionManager_Add( extensionMgr, Type0, sizeof(ExtensionStruct0) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Temp0, sizeof(ExtensionStruct1) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Pres0, sizeof(ExtensionStruct2) );		numExtensions++; 
+		ExtensionManager_Add( extensionMgr, BC_Set0, sizeof(ExtensionStruct3) );	numExtensions++;
+		ExtensionManager_Add( extensionMgr, Weight0, sizeof(ExtensionStruct4) );	numExtensions++;
+		ExtensionManager_Add( extensionMgr, Type1, sizeof(ExtensionStruct0) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Temp1, sizeof(ExtensionStruct1) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Pres1, sizeof(ExtensionStruct2) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, BC_Set1, sizeof(ExtensionStruct3) );	numExtensions++;
+		ExtensionManager_Add( extensionMgr, Weight1, sizeof(ExtensionStruct4) );	numExtensions++;
+	
+		RegressionTest_Check(
+			extensionMgr->initialSize == 0,
+			stream,
+			"initialSize",
+			"Is the initial size correct" );
+
+		RegressionTest_Check(
+			ExtensionInfo_At( extensionMgr->extInfos, 0 )->offset == 0,
+			stream,
+			"First offset",
+			"Is the first offset at the correct position" );
+
+		RegressionTest_Check(
+			extensionMgr->finalSize ==
+				size0 + size1 + size2 + size3 + size4 +
+				size0 + size1 + size2 + size3 + size4,
+			stream,
+			"finalSize",
+			"Is the final size correct" );
+
+		RegressionTest_Check(
+			extensionMgr->extInfos->count == numExtensions,
+			stream,
+			"count",
+			"Is the number of extensions correct" );
+
+		n->x = 1.0f;
+		n->y = 2.0f;
+		n->z = 3.0f;
+		n->dim = 4;
+		
+		nType0 = (ExtensionStruct0*)ExtensionManager_Get( extensionMgr, n, 0 );
+		nType0 = (ExtensionStruct0*)ExtensionManager_HashGet( extensionMgr, n, Type0 );
+		RegressionTest_Check(
+			((ArithPointer)&nType0->type - (ArithPointer)extensionMgr->_extensionsToExisting) ==  0,
+			stream,
+			"Extension 0",
+			"Is offset correct" );
+		nType0->type = 5;
+		
+		nTemp0 = (ExtensionStruct1*)ExtensionManager_Get( extensionMgr, n, 1 );
+		nTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet( extensionMgr, n, Temp0 );
+		RegressionTest_Check(
+			((ArithPointer)&nTemp0->temp - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0,
+			stream,
+			"Extension 1",
+			"Is offset correct" );
+		nTemp0->temp = 6.0f;
+		
+		nPres0 = (ExtensionStruct2*)ExtensionManager_Get( extensionMgr, n, 2 );
+		nPres0 = (ExtensionStruct2*)ExtensionManager_HashGet( extensionMgr, n, Pres0 );
+                RegressionTest_Check(
+                        ((ArithPointer)&nPres0->pres - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+                                size0 + size1,
+                        stream,
+                        "Extension 2",
+                        "Is offset correct" );
+
+		nPres0->pres = 7.0f;
+		nPres0->flag = 8;
+		
+		nBC_Set0 = (ExtensionStruct3*)ExtensionManager_Get( extensionMgr, n, 3 );
+		nBC_Set0 = (ExtensionStruct3*)ExtensionManager_HashGet( extensionMgr, n, BC_Set0 );
+		RegressionTest_Check(
+			((ArithPointer)&nBC_Set0->dd - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2,
+			stream,
+			"Extension 3",
+			"Is offset correct" );
+		nBC_Set0->dd = 9;
+		nBC_Set0->cc = 10;
+		nBC_Set0->bc = 11;
+		
+		nWeight0 = (ExtensionStruct4*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Weight0" ) );
+		nWeight0 = (ExtensionStruct4*)ExtensionManager_HashGet( extensionMgr, n, Weight0 );
+		RegressionTest_Check(
+			((ArithPointer)&nWeight0->wf - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2 + size3,
+			stream,
+			"Extension 4",
+			"Is offset correct" );
+		nWeight0->wf = 12.0f;
+		
+		nType1 = (ExtensionStruct0*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Type1" ) );
+		nType1 = (ExtensionStruct0*)ExtensionManager_HashGet( extensionMgr, n, Type1 );
+		RegressionTest_Check(
+			((ArithPointer)&nType1->type - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2 + size3 + size4,
+			stream,
+			"Extension 5",
+			"Is offset correct" );
+		nType1->type = 13;
+		
+		nTemp1 = (ExtensionStruct1*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Temp1" ) );
+		nTemp1 = (ExtensionStruct1*)ExtensionManager_HashGet( extensionMgr, n, Temp1 );
+		RegressionTest_Check(
+			((ArithPointer)&nTemp1->temp - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2 + size3 + size4 + size0,
+			stream,
+			"Extension 6",
+			"Is offset correct" );
+		nTemp1->temp = 14.0f;
+		
+		nPres1 = (ExtensionStruct2*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Pres1" ) );
+		nPres1 = (ExtensionStruct2*)ExtensionManager_HashGet( extensionMgr, n, Pres1 );
+		RegressionTest_Check(
+			((ArithPointer)&nPres1->pres - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2 + size3 + size4 + size0 + size1,
+			stream,
+			"Extension 7",
+			"Is offset correct" );
+		nPres1->pres = 15.0f;
+		nPres1->flag = 16;
+		
+		nBC_Set1 = (ExtensionStruct3*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "BC_Set1" ) );
+		nBC_Set1 = (ExtensionStruct3*)ExtensionManager_HashGet( extensionMgr, n, BC_Set1 );
+		RegressionTest_Check(
+			((ArithPointer)&nBC_Set1->dd - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2 + size3 + size4 + size0 + size1 + size2,
+			stream,
+			"Extension 8",
+			"Is offset correct" );
+		nBC_Set1->dd = 17;
+		nBC_Set1->cc = 18;
+		nBC_Set1->bc = 19;
+		
+		nWeight1 = (ExtensionStruct4*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Weight1" ) );
+		nWeight1 = (ExtensionStruct4*)ExtensionManager_HashGet( extensionMgr, n, Weight1 );
+		RegressionTest_Check(
+			((ArithPointer)&nWeight1->wf - (ArithPointer)extensionMgr->_extensionsToExisting) ==
+				size0 + size1 + size2 + size3 + size4 + size0 + size1 + size2 + size3,
+			stream,
+			"Extension 9",
+			"Is offset correct" );
+
+		nWeight1->wf = 20.0f;
+		
+                RegressionTest_Check(
+                        1,
+                        stream,
+                        "Write",
+                        "Can we write to the extensions" );
+
+		Journal_Printf( (void*)stream, "\'n(BaseClass)\'->x: %g\n", n->x );
+		Journal_Printf( (void*)stream, "\'n(BaseClass)\'->y: %g\n", n->y );
+		Journal_Printf( (void*)stream, "\'n(BaseClass)\'->z: %g\n", n->z );
+		Journal_Printf( (void*)stream, "\'n(BaseClass)\'->dim: %i\n", n->dim );
+		Journal_Printf( (void*)stream, "\'n(Type0)\'->type: %i\n", nType0->type );
+		Journal_Printf( (void*)stream, "\'n(Temp0)\'->temp: %g\n", nTemp0->temp );
+		Journal_Printf( (void*)stream, "\'n(Pres0)\'->pres: %g\n", nPres0->pres );
+		Journal_Printf( (void*)stream, "\'n(Pres0)\'->flag: %i\n", nPres0->flag );
+		Journal_Printf( (void*)stream, "\'n(BC_Set0)\'->dd: %u\n", nBC_Set0->dd );
+		Journal_Printf( (void*)stream, "\'n(BC_Set0)\'->cc: %u\n", nBC_Set0->cc );
+		Journal_Printf( (void*)stream, "\'n(BC_Set0)\'->bc: %u\n", nBC_Set0->bc );
+		Journal_Printf( (void*)stream, "\'n(Weight0)\'->wf: %g\n", nWeight0->wf );
+		Journal_Printf( (void*)stream, "\'n(Type1)\'->type: %i\n", nType1->type );
+		Journal_Printf( (void*)stream, "\'n(Temp1)\'->temp: %g\n", nTemp1->temp );
+		Journal_Printf( (void*)stream, "\'n(Pres1)\'->pres: %g\n", nPres1->pres );
+		Journal_Printf( (void*)stream, "\'n(Pres1)\'->flag: %i\n", nPres1->flag );
+		Journal_Printf( (void*)stream, "\'n(BC_Set1)\'->dd: %u\n", nBC_Set1->dd );
+		Journal_Printf( (void*)stream, "\'n(BC_Set1)\'->cc: %u\n", nBC_Set1->cc );
+		Journal_Printf( (void*)stream, "\'n(BC_Set1)\'->bc: %u\n", nBC_Set1->bc );
+		Journal_Printf( (void*)stream, "\'n(Weight1)\'->wf: %g\n", nWeight1->wf );
+
+		
+		/* Stg_Class_Delete stuff */
+		Stg_Class_Delete( extensionMgr );
+		Memory_Free( n );
+
+                RegressionTest_Check(
+                        1,
+                        stream,
+                        "Delete",
+                        "Can we delete the extensions" );
+	}
+
+	RegressionTest_Finalise();
+	
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21522 @@
+Watching rank: 0
+Passed test initialSize: Is the initial size correct
+Passed test First offset: Is the first offset at the correct position
+Passed test finalSize: Is the final size correct
+Passed test count: Is the number of extensions correct
+Passed test ExtensionManager_Malloc(): Can we malloc the extension
+Passed test Extension 0: Is offset correct
+Passed test Extension 1: Is offset correct
+Passed test Extension 2: Is offset correct
+Passed test Extension 3: Is offset correct
+Passed test Extension 4: Is offset correct
+Passed test Extension 5: Is offset correct
+Passed test Extension 6: Is offset correct
+Passed test Extension 7: Is offset correct
+Passed test Extension 8: Is offset correct
+Passed test Extension 9: Is offset correct
+Index: 0
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 2
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 3
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 4
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 5
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 6
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 7
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 8
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 9
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 10
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 11
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 12
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 13
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 14
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 15
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 16
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 17
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 18
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 19
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 20
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 21
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 22
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 23
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 24
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 25
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 26
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 27
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 28
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 29
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 30
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 31
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 32
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 33
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 34
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 35
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 36
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 37
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 38
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 39
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 40
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 41
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 42
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 43
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 44
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 45
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 46
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 47
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 48
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 49
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 50
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 51
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 52
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 53
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 54
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 55
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 56
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 57
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 58
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 59
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 60
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 61
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 62
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 63
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 64
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 65
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 66
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 67
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 68
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 69
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 70
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 71
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 72
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 73
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 74
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 75
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 76
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 77
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 78
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 79
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 80
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 81
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 82
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 83
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 84
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 85
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 86
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 87
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 88
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 89
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 90
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 91
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 92
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 93
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 94
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 95
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 96
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 97
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 98
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 99
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 100
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 101
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 102
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 103
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 104
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 105
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 106
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 107
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 108
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 109
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 110
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 111
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 112
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 113
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 114
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 115
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 116
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 117
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 118
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 119
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 120
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 121
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 122
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 123
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 124
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 125
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 126
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 127
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 128
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 129
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 130
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 131
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 132
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 133
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 134
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 135
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 136
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 137
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 138
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 139
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 140
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 141
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 142
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 143
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 144
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 145
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 146
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 147
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 148
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 149
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 150
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 151
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 152
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 153
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 154
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 155
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 156
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 157
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 158
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 159
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 160
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 161
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 162
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 163
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 164
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 165
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 166
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 167
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 168
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 169
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 170
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 171
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 172
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 173
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 174
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 175
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 176
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 177
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 178
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 179
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 180
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 181
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 182
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 183
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 184
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 185
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 186
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 187
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 188
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 189
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 190
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 191
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 192
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 193
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 194
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 195
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 196
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 197
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 198
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 199
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 200
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 201
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 202
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 203
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 204
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 205
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 206
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 207
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 208
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 209
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 210
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 211
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 212
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 213
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 214
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 215
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 216
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 217
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 218
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 219
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 220
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 221
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 222
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 223
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 224
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 225
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 226
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 227
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 228
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 229
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 230
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 231
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 232
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 233
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 234
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 235
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 236
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 237
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 238
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 239
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 240
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 241
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 242
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 243
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 244
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 245
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 246
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 247
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 248
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 249
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 250
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 251
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 252
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 253
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 254
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 255
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 256
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 257
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 258
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 259
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 260
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 261
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 262
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 263
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 264
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 265
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 266
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 267
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 268
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 269
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 270
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 271
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 272
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 273
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 274
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 275
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 276
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 277
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 278
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 279
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 280
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 281
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 282
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 283
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 284
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 285
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 286
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 287
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 288
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 289
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 290
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 291
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 292
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 293
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 294
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 295
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 296
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 297
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 298
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 299
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 300
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 301
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 302
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 303
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 304
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 305
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 306
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 307
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 308
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 309
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 310
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 311
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 312
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 313
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 314
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 315
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 316
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 317
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 318
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 319
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 320
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 321
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 322
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 323
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 324
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 325
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 326
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 327
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 328
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 329
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 330
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 331
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 332
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 333
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 334
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 335
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 336
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 337
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 338
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 339
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 340
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 341
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 342
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 343
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 344
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 345
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 346
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 347
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 348
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 349
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 350
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 351
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 352
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 353
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 354
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 355
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 356
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 357
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 358
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 359
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 360
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 361
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 362
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 363
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 364
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 365
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 366
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 367
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 368
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 369
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 370
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 371
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 372
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 373
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 374
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 375
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 376
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 377
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 378
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 379
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 380
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 381
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 382
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 383
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 384
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 385
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 386
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 387
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 388
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 389
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 390
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 391
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 392
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 393
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 394
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 395
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 396
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 397
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 398
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 399
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 400
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 401
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 402
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 403
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 404
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 405
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 406
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 407
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 408
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 409
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 410
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 411
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 412
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 413
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 414
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 415
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 416
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 417
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 418
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 419
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 420
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 421
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 422
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 423
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 424
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 425
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 426
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 427
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 428
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 429
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 430
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 431
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 432
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 433
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 434
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 435
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 436
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 437
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 438
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 439
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 440
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 441
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 442
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 443
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 444
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 445
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 446
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 447
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 448
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 449
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 450
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 451
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 452
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 453
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 454
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 455
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 456
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 457
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 458
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 459
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 460
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 461
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 462
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 463
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 464
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 465
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 466
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 467
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 468
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 469
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 470
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 471
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 472
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 473
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 474
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 475
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 476
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 477
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 478
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 479
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 480
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 481
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 482
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 483
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 484
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 485
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 486
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 487
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 488
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 489
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 490
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 491
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 492
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 493
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 494
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 495
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 496
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 497
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 498
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 499
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 500
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 501
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 502
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 503
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 504
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 505
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 506
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 507
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 508
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 509
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 510
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 511
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 512
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 513
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 514
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 515
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 516
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 517
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 518
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 519
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 520
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 521
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 522
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 523
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 524
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 525
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 526
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 527
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 528
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 529
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 530
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 531
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 532
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 533
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 534
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 535
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 536
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 537
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 538
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 539
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 540
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 541
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 542
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 543
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 544
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 545
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 546
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 547
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 548
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 549
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 550
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 551
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 552
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 553
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 554
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 555
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 556
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 557
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 558
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 559
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 560
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 561
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 562
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 563
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 564
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 565
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 566
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 567
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 568
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 569
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 570
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 571
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 572
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 573
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 574
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 575
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 576
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 577
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 578
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 579
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 580
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 581
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 582
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 583
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 584
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 585
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 586
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 587
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 588
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 589
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 590
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 591
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 592
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 593
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 594
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 595
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 596
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 597
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 598
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 599
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 600
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 601
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 602
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 603
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 604
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 605
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 606
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 607
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 608
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 609
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 610
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 611
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 612
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 613
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 614
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 615
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 616
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 617
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 618
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 619
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 620
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 621
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 622
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 623
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 624
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 625
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 626
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 627
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 628
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 629
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 630
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 631
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 632
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 633
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 634
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 635
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 636
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 637
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 638
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 639
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 640
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 641
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 642
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 643
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 644
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 645
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 646
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 647
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 648
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 649
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 650
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 651
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 652
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 653
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 654
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 655
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 656
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 657
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 658
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 659
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 660
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 661
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 662
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 663
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 664
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 665
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 666
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 667
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 668
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 669
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 670
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 671
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 672
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 673
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 674
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 675
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 676
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 677
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 678
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 679
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 680
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 681
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 682
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 683
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 684
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 685
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 686
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 687
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 688
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 689
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 690
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 691
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 692
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 693
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 694
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 695
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 696
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 697
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 698
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 699
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 700
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 701
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 702
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 703
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 704
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 705
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 706
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 707
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 708
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 709
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 710
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 711
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 712
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 713
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 714
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 715
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 716
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 717
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 718
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 719
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 720
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 721
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 722
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 723
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 724
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 725
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 726
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 727
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 728
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 729
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 730
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 731
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 732
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 733
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 734
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 735
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 736
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 737
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 738
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 739
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 740
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 741
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 742
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 743
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 744
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 745
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 746
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 747
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 748
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 749
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 750
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 751
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 752
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 753
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 754
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 755
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 756
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 757
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 758
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 759
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 760
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 761
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 762
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 763
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 764
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 765
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 766
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 767
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 768
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 769
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 770
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 771
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 772
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 773
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 774
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 775
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 776
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 777
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 778
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 779
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 780
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 781
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 782
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 783
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 784
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 785
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 786
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 787
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 788
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 789
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 790
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 791
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 792
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 793
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 794
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 795
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 796
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 797
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 798
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 799
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 800
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 801
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 802
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 803
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 804
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 805
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 806
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 807
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 808
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 809
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 810
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 811
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 812
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 813
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 814
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 815
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 816
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 817
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 818
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 819
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 820
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 821
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 822
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 823
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 824
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 825
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 826
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 827
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 828
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 829
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 830
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 831
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 832
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 833
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 834
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 835
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 836
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 837
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 838
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 839
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 840
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 841
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 842
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 843
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 844
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 845
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 846
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 847
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 848
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 849
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 850
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 851
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 852
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 853
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 854
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 855
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 856
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 857
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 858
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 859
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 860
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 861
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 862
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 863
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 864
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 865
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 866
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 867
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 868
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 869
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 870
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 871
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 872
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 873
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 874
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 875
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 876
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 877
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 878
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 879
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 880
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 881
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 882
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 883
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 884
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 885
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 886
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 887
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 888
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 889
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 890
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 891
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 892
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 893
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 894
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 895
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 896
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 897
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 898
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 899
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 900
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 901
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 902
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 903
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 904
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 905
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 906
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 907
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 908
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 909
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 910
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 911
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 912
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 913
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 914
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 915
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 916
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 917
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 918
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 919
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 920
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 921
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 922
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 923
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 924
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 925
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 926
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 927
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 928
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 929
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 930
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 931
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 932
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 933
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 934
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 935
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 936
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 937
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 938
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 939
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 940
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 941
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 942
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 943
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 944
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 945
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 946
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 947
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 948
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 949
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 950
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 951
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 952
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 953
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 954
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 955
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 956
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 957
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 958
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 959
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 960
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 961
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 962
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 963
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 964
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 965
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 966
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 967
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 968
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 969
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 970
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 971
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 972
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 973
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 974
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 975
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 976
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 977
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 978
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 979
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 980
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 981
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 982
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 983
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 984
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 985
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 986
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 987
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 988
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 989
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 990
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 991
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 992
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 993
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 994
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 995
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 996
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 997
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 998
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 999
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1000
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1001
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1002
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1003
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1004
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1005
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1006
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1007
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1008
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1009
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1010
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1011
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1012
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1013
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1014
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1015
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1016
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1017
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1018
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1019
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1020
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1021
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1022
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Index: 1023
+'n(BaseClass)'->x: 1
+'n(BaseClass)'->y: 2
+'n(BaseClass)'->z: 3
+'n(BaseClass)'->dim: 4
+'n(Type0)'->type: 5
+'n(Temp0)'->temp: 6
+'n(Pres0)'->pres: 7
+'n(Pres0)'->flag: 8
+'n(BC_Set0)'->dd: 9
+'n(BC_Set0)'->cc: 10
+'n(BC_Set0)'->bc: 11
+'n(Weight0)'->wf: 12
+'n(Type1)'->type: 13
+'n(Temp1)'->temp: 14
+'n(Pres1)'->pres: 15
+'n(Pres1)'->flag: 16
+'n(BC_Set1)'->dd: 17
+'n(BC_Set1)'->cc: 18
+'n(BC_Set1)'->bc: 19
+'n(Weight1)'->wf: 20
+Passed test Write/Read: Can we write to the extensions
+Passed test Delete: Can we delete the extensions

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testExtension-ofStruct " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,393 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testExtension-ofStruct.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+typedef struct {
+	double x;
+	double y;
+	double z;
+	char dim;
+} BaseClass;
+
+
+typedef struct {
+	char type;
+} ExtensionStruct0;
+const Type Type0 = "Type0";
+const Type Type1 = "Type1";
+
+typedef struct {
+	double temp;
+} ExtensionStruct1;
+const Type Temp0 = "Temp0";
+const Type Temp1 = "Temp1";
+
+typedef struct {
+	double pres;
+	char flag;
+} ExtensionStruct2;
+const Type Pres0 = "Pres0";
+const Type Pres1 = "Pres1";
+
+typedef struct {
+	char dd;
+	char cc;
+	int bc;
+} ExtensionStruct3;
+const Type BC_Set0 = "BC_Set0";
+const Type BC_Set1 = "BC_Set1";
+
+typedef struct {
+	float wf;
+} ExtensionStruct4;
+const Type Weight0 = "Weight0";
+const Type Weight1 = "Weight1";
+
+
+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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Extensibility/ExtensionManager" );
+
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, "myStream" );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ExtensionManager*	extensionMgr;
+		BaseClass*		nArray;
+		BaseClass*		n;
+		ExtensionStruct0*	nType0;
+		ExtensionStruct1*	nTemp0;
+		ExtensionStruct2*	nPres0;
+		ExtensionStruct3*	nBC_Set0;
+		ExtensionStruct4*	nWeight0;
+		ExtensionStruct0*	nType1;
+		ExtensionStruct1*	nTemp1;
+		ExtensionStruct2*	nPres1;
+		ExtensionStruct3*	nBC_Set1;
+		ExtensionStruct4*	nWeight1;
+		Index			i;
+		const Index		ArraySize = 1024;
+
+		Index			numExtensions = 0;		/* variable to check number of extensions */
+		
+		SizeT			size0;
+		SizeT			size1;
+		SizeT			size2;
+		SizeT			size3;
+		SizeT			size4;
+
+		size0 = ExtensionManager_Align( sizeof(ExtensionStruct0) );
+		size1 = ExtensionManager_Align( sizeof(ExtensionStruct1) );
+		size2 = ExtensionManager_Align( sizeof(ExtensionStruct2) );
+		size3 = ExtensionManager_Align( sizeof(ExtensionStruct3) );
+		size4 = ExtensionManager_Align( sizeof(ExtensionStruct4) );
+
+		Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+		
+		/* Build the extensionMgr */
+		extensionMgr = ExtensionManager_New_OfStruct( "Node", sizeof(BaseClass) );
+		ExtensionManager_Add( extensionMgr, Type0, sizeof(ExtensionStruct0) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Temp0, sizeof(ExtensionStruct1) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Pres0, sizeof(ExtensionStruct2) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, BC_Set0, sizeof(ExtensionStruct3) );	numExtensions++;
+		ExtensionManager_Add( extensionMgr, Weight0, sizeof(ExtensionStruct4) );	numExtensions++;
+		ExtensionManager_Add( extensionMgr, Type1, sizeof(ExtensionStruct0) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Temp1, sizeof(ExtensionStruct1) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, Pres1, sizeof(ExtensionStruct2) );		numExtensions++;
+		ExtensionManager_Add( extensionMgr, BC_Set1, sizeof(ExtensionStruct3) );	numExtensions++;
+		ExtensionManager_Add( extensionMgr, Weight1, sizeof(ExtensionStruct4) );	numExtensions++;
+	
+		RegressionTest_Check(
+			extensionMgr->initialSize == sizeof(BaseClass),
+			stream,
+			"initialSize",
+			"Is the initial size correct" );
+
+		RegressionTest_Check(
+			ExtensionInfo_At( extensionMgr->extInfos, 0 )->offset == sizeof(BaseClass),
+			stream,
+			"First offset",
+			"Is the first offset at the correct position" );
+
+		RegressionTest_Check(
+			extensionMgr->finalSize == 
+				sizeof(BaseClass) + 
+				size0 + size1 + size2 + size3 + size4 +
+				size0 + size1 + size2 + size3 + size4,
+			stream,
+			"finalSize",
+			"Is the final size correct" );
+
+		RegressionTest_Check(
+			extensionMgr->extInfos->count == numExtensions,
+			stream,
+			"count",
+			"Is the number of extensions correct" );
+
+		/* Alloc, initialise and view*/
+		nArray = (BaseClass*)ExtensionManager_Malloc( extensionMgr, ArraySize );
+
+		RegressionTest_Check(
+			nArray != NULL,
+			stream,
+			"ExtensionManager_Malloc()",
+			"Can we malloc the extension" );
+	
+		n = (BaseClass*)ExtensionManager_At( extensionMgr, nArray, 0 );
+
+		nType0 = (ExtensionStruct0*)ExtensionManager_Get( extensionMgr, n, 0 );
+		nType0 = (ExtensionStruct0*)ExtensionManager_HashGet( extensionMgr, n, Type0 );
+		RegressionTest_Check(
+			((ArithPointer)&nType0->type - (ArithPointer)n) == sizeof(BaseClass),
+			stream,
+			"Extension 0",
+			"Is offset correct" );
+	
+		nTemp0 = (ExtensionStruct1*)ExtensionManager_Get( extensionMgr, n, 1 );
+		nTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet( extensionMgr, n, Temp0 );
+		RegressionTest_Check(
+			((ArithPointer)&nTemp0->temp - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0,
+			stream,
+			"Extension 1",
+			"Is offset correct" );
+		
+		nPres0 = (ExtensionStruct2*)ExtensionManager_Get( extensionMgr, n, 2 );		
+		nPres0 = (ExtensionStruct2*)ExtensionManager_HashGet( extensionMgr, n, Pres0 );
+		RegressionTest_Check(
+			((ArithPointer)&nPres0->pres - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1,
+			stream,
+			"Extension 2",
+			"Is offset correct" );
+
+		nBC_Set0 = (ExtensionStruct3*)ExtensionManager_Get( extensionMgr, n, 3 );
+		nBC_Set0 = (ExtensionStruct3*)ExtensionManager_HashGet( extensionMgr, n, BC_Set0 );
+		RegressionTest_Check(
+			((ArithPointer)&nBC_Set0->dd - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2,
+			stream,
+			"Extension 3",
+			"Is offset correct" );
+
+		nWeight0 = (ExtensionStruct4*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Weight0" ));
+		nWeight0 = (ExtensionStruct4*)ExtensionManager_HashGet( extensionMgr, n, Weight0 );
+		RegressionTest_Check(
+			((ArithPointer)&nWeight0->wf - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2 + size3,
+			stream,
+			"Extension 4",
+			"Is offset correct" );
+
+		nType1 = (ExtensionStruct0*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Type1" ) );
+		nType1 = (ExtensionStruct0*)ExtensionManager_HashGet( extensionMgr, n, Type1 );
+		RegressionTest_Check(
+			((ArithPointer)&nType1->type - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2 + size3 + size4,
+			stream,
+			"Extension 5",
+			"Is offset correct" );
+
+		nTemp1 = (ExtensionStruct1*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Temp1" ) );
+		nTemp1 = (ExtensionStruct1*)ExtensionManager_HashGet( extensionMgr, n, Temp1);
+		RegressionTest_Check(
+			((ArithPointer)&nTemp1->temp - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2 + size3 + size4 + size0,
+			stream,
+			"Extension 6",
+			"Is offset correct" );
+
+		nPres1 = (ExtensionStruct2*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Pres1" ) );
+		nPres1 = (ExtensionStruct2*)ExtensionManager_HashGet( extensionMgr, n, Pres1 );
+		RegressionTest_Check(
+			((ArithPointer)&nPres1->pres - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2 + size3 + size4 + size0 + size1,
+			stream,
+			"Extension 7",
+			"Is offset correct" );
+
+		nBC_Set1 = (ExtensionStruct3*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "BC_Set1" ) );
+		nBC_Set1 = (ExtensionStruct3*)ExtensionManager_HashGet( extensionMgr, n, BC_Set1 );
+		RegressionTest_Check(
+			((ArithPointer)&nBC_Set1->dd - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2 + size3 + size4 + size0 + size1 + size2,
+			stream,
+			"Extension 8",
+			"Is offset correct" );
+
+		nWeight1 = (ExtensionStruct4*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Weight1" ) );
+		nWeight1 = (ExtensionStruct4*)ExtensionManager_HashGet( extensionMgr, n, Weight1 );
+		RegressionTest_Check(
+			((ArithPointer)&nWeight1->wf - (ArithPointer)n) == 
+				sizeof(BaseClass) + size0 + size1 + size2 + size3 + size4 + size0 + size1 + size2 + size3,
+			stream,
+			"Extension 9",
+			"Is offset correct" );
+
+		for( i = 0; i < ArraySize; i++ ) {
+			Journal_Printf( (void*) stream, "Index: %u\n", i );
+			n = (BaseClass*)ExtensionManager_At( extensionMgr, nArray, i );
+			
+			n->x = 1.0f;
+			n->y = 2.0f;
+			n->z = 3.0f;
+			n->dim = 4;
+			
+			nType0 = (ExtensionStruct0*)ExtensionManager_Get( extensionMgr, n, 0 );
+			nType0 = (ExtensionStruct0*)ExtensionManager_HashGet( extensionMgr, n, Type0 );
+			nType0->type = 5;
+			
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_Get( extensionMgr, n, 1 );
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet( extensionMgr, n, Temp0 );
+			nTemp0->temp = 6.0f;
+			
+			nPres0 = (ExtensionStruct2*)ExtensionManager_Get( extensionMgr, n, 2 );
+			nPres0 = (ExtensionStruct2*)ExtensionManager_HashGet( extensionMgr, n, Pres0 );
+			nPres0->pres = 7.0f;
+			nPres0->flag = 8;
+			
+			nBC_Set0 = (ExtensionStruct3*)ExtensionManager_Get( extensionMgr, n, 3 );
+			nBC_Set0 = (ExtensionStruct3*)ExtensionManager_HashGet( extensionMgr, n, BC_Set0 );
+			nBC_Set0->dd = 9;
+			nBC_Set0->cc = 10;
+			nBC_Set0->bc = 11;
+			
+			nWeight0 = (ExtensionStruct4*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Weight0" ) );
+			nWeight0 = (ExtensionStruct4*)ExtensionManager_HashGet( extensionMgr, n, Weight0 );
+			nWeight0->wf = 12.0f;
+			
+			nType1 = (ExtensionStruct0*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Type1" ) );
+			nType1 = (ExtensionStruct0*)ExtensionManager_HashGet( extensionMgr, n, Type1 );
+			nType1->type = 13;
+			
+			nTemp1 = (ExtensionStruct1*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Temp1" ) );
+			nTemp1 = (ExtensionStruct1*)ExtensionManager_HashGet( extensionMgr, n, Temp1 );
+			nTemp1->temp = 14.0f;
+			
+			nPres1 = (ExtensionStruct2*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Pres1" ) );
+			nPres1 = (ExtensionStruct2*)ExtensionManager_HashGet( extensionMgr, n, Pres1 );
+			nPres1->pres = 15.0f;
+			nPres1->flag = 16;
+			
+			nBC_Set1 = (ExtensionStruct3*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "BC_Set1" ) );
+			nBC_Set1 = (ExtensionStruct3*)ExtensionManager_HashGet( extensionMgr, n, BC_Set1 );
+			nBC_Set1->dd = 17;
+			nBC_Set1->cc = 18;
+			nBC_Set1->bc = 19;
+			
+			nWeight1 = (ExtensionStruct4*)ExtensionManager_Get( extensionMgr, n, ExtensionManager_GetHandle( extensionMgr, "Weight1" ) );
+			nWeight1 = (ExtensionStruct4*)ExtensionManager_HashGet( extensionMgr, n, Weight1 );
+			nWeight1->wf = 20.0f;
+
+			Journal_Printf( (void*) stream, "\'n(BaseClass)\'->x: %g\n", n->x );
+			Journal_Printf( (void*) stream, "\'n(BaseClass)\'->y: %g\n", n->y );
+			Journal_Printf( (void*) stream, "\'n(BaseClass)\'->z: %g\n", n->z );
+			Journal_Printf( (void*) stream, "\'n(BaseClass)\'->dim: %i\n", n->dim );
+			Journal_Printf( (void*) stream, "\'n(Type0)\'->type: %i\n", nType0->type );
+			Journal_Printf( (void*) stream, "\'n(Temp0)\'->temp: %g\n", nTemp0->temp );
+			Journal_Printf( (void*) stream, "\'n(Pres0)\'->pres: %g\n", nPres0->pres );
+			Journal_Printf( (void*) stream, "\'n(Pres0)\'->flag: %i\n", nPres0->flag );
+			Journal_Printf( (void*) stream, "\'n(BC_Set0)\'->dd: %u\n", nBC_Set0->dd );
+			Journal_Printf( (void*) stream, "\'n(BC_Set0)\'->cc: %u\n", nBC_Set0->cc );
+			Journal_Printf( (void*) stream, "\'n(BC_Set0)\'->bc: %u\n", nBC_Set0->bc );
+			Journal_Printf( (void*) stream, "\'n(Weight0)\'->wf: %g\n", nWeight0->wf );
+			Journal_Printf( (void*) stream, "\'n(Type1)\'->type: %i\n", nType1->type );
+			Journal_Printf( (void*) stream, "\'n(Temp1)\'->temp: %g\n", nTemp1->temp );
+			Journal_Printf( (void*) stream, "\'n(Pres1)\'->pres: %g\n", nPres1->pres );
+			Journal_Printf( (void*) stream, "\'n(Pres1)\'->flag: %i\n", nPres1->flag );
+			Journal_Printf( (void*) stream, "\'n(BC_Set1)\'->dd: %u\n", nBC_Set1->dd );
+			Journal_Printf( (void*) stream, "\'n(BC_Set1)\'->cc: %u\n", nBC_Set1->cc );
+			Journal_Printf( (void*) stream, "\'n(BC_Set1)\'->bc: %u\n", nBC_Set1->bc );
+			Journal_Printf( (void*) stream, "\'n(Weight1)\'->wf: %g\n", nWeight1->wf );
+		}
+		RegressionTest_Check(
+			1,
+			stream,
+			"Write/Read",
+			"Can we write to the extensions" );
+		
+		/* Stg_Class_Delete stuff */
+		ExtensionManager_Free( extensionMgr, nArray );
+		Stg_Class_Delete( extensionMgr );
+
+		RegressionTest_Check(
+			1,
+			stream,
+			"Delete",
+			"Can we delete the extensions" );
+	}
+
+	RegressionTest_Finalise();
+	
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,59 @@
+Watching rank: 0
+OfObject Final size 84
+OfObject Type0 size 4, value   a
+OfObject Temp0 size 80, value   0   1   2   3   4   5   6   7   8   9 
+OfStruct Final size 108
+OfStruct Type0 size 4
+OfStruct Temp0 size 80
+OfArray Type0 value   a
+OfArray Temp0 value   0   1   2   3   4   5   6   7   8   9 
+OfArray Vel0 value 0.000000
+OfArray Type0 value   a
+OfArray Temp0 value  10  11  12  13  14  15  16  17  18  19 
+OfArray Vel0 value 1.000000
+OfArray Type0 value   a
+OfArray Temp0 value  20  21  22  23  24  25  26  27  28  29 
+OfArray Vel0 value 2.000000
+OfArray Type0 value   a
+OfArray Temp0 value  30  31  32  33  34  35  36  37  38  39 
+OfArray Vel0 value 3.000000
+OfArray Type0 value   a
+OfArray Temp0 value  40  41  42  43  44  45  46  47  48  49 
+OfArray Vel0 value 4.000000
+OfArray Type0 value   a
+OfArray Temp0 value  50  51  52  53  54  55  56  57  58  59 
+OfArray Vel0 value 5.000000
+OfArray Type0 value   a
+OfArray Temp0 value  60  61  62  63  64  65  66  67  68  69 
+OfArray Vel0 value 6.000000
+OfArray Type0 value   a
+OfArray Temp0 value  70  71  72  73  74  75  76  77  78  79 
+OfArray Vel0 value 7.000000
+Sucessfully copied baseObject properly
+OfObject Copy Type0 size 4, value   a
+OfObject Copy Temp0 size 80, value   0   1   2   3   4   5   6   7   8   9 
+Array extension copy success
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value   0   1   2   3   4   5   6   7   8   9 
+OfArray Copy Vel0 value 0.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  10  11  12  13  14  15  16  17  18  19 
+OfArray Copy Vel0 value 1.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  20  21  22  23  24  25  26  27  28  29 
+OfArray Copy Vel0 value 2.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  30  31  32  33  34  35  36  37  38  39 
+OfArray Copy Vel0 value 3.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  40  41  42  43  44  45  46  47  48  49 
+OfArray Copy Vel0 value 4.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  50  51  52  53  54  55  56  57  58  59 
+OfArray Copy Vel0 value 5.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  60  61  62  63  64  65  66  67  68  69 
+OfArray Copy Vel0 value 6.000000
+OfArray Copy Type0 value   a
+OfArray Copy Temp0 value  70  71  72  73  74  75  76  77  78  79 
+OfArray Copy Vel0 value 7.000000

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testExtensionSimple " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,382 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testExtension-ofStruct.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+typedef struct {
+	double x;
+	double y;
+	double z;
+} BaseClass;
+
+
+typedef struct {
+	char type;
+} ExtensionStruct0;
+const Type Type0 = "Type0";
+
+typedef struct {
+	double temp;
+} ExtensionStruct1;
+const Type Temp0 = "Temp0";
+
+typedef struct {
+	float vel;
+} ExtensionStruct2;
+const Type Vel0 = "Vel0";
+
+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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	BaseExtensibility_Init( &argc, &argv );
+
+	/* creating a stream */
+	stream =  Journal_Register( InfoStream_Type, __FILE__ );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ExtensionManager*	objExtension;
+		ExtensionManager*	structExtension;
+		ExtensionManager*	arrayExtension;
+		BaseClass*		baseObject;
+		BaseClass*		nArray;
+
+		ExtensionManager*	objExtensionCopy;
+		ExtensionManager*	structExtensionCopy;
+		ExtensionManager*	arrayExtensionCopy;
+		BaseClass*		baseObjectCopy;
+		BaseClass*		nArrayCopy;
+
+		PtrMap*			copyMap;
+		
+		ExtensionStruct0*	objType0;
+		ExtensionStruct1*	objTemp0;
+		
+		BaseClass* 		current;
+		ExtensionStruct0*	nType0;
+		ExtensionStruct1*	nTemp0;
+		ExtensionStruct2*	nVel0;
+		Index			i;
+		Index			array_I;
+		const Index		ArraySize = 8;
+		
+		Journal_Printf( (void*) stream, "Watching rank: %i\n", rank );
+		
+		/* Testing Simple (Single and Array) on Object */
+		
+		baseObject = Memory_Alloc( BaseClass, "BaseObject" );
+		objExtension = ExtensionManager_New_OfExistingObject( "obj", baseObject );
+
+		ExtensionManager_Add( objExtension, Type0, sizeof(ExtensionStruct0) );
+		ExtensionManager_AddArray( objExtension, Temp0, sizeof(ExtensionStruct1), 10 );
+		
+		objType0 = (ExtensionStruct0*)ExtensionManager_Get(
+			objExtension, 
+			baseObject, 
+			ExtensionManager_GetHandle( objExtension, "Type0" ) );
+		objType0 = (ExtensionStruct0*)ExtensionManager_HashGet(
+			objExtension, 
+			baseObject, 
+			Type0 );
+		
+		objTemp0 = (ExtensionStruct1*)ExtensionManager_Get( 
+			objExtension, 
+			baseObject, 
+			ExtensionManager_GetHandle( objExtension, "Temp0" ) );
+		objTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet( 
+			objExtension, 
+			baseObject, 
+			Temp0 );
+	
+		objType0->type = 'a';
+		for ( i = 0; i < 10; ++i ) {
+			objTemp0[i].temp = (double)i;
+		}
+
+		Journal_Printf( stream, "OfObject Final size %d\n", ExtensionManager_GetFinalSize( objExtension ) );
+		Journal_Printf(
+			stream, 
+			"OfObject Type0 size %d, value %3c\n", 
+			ExtensionInfo_At( objExtension->extInfos, ExtensionManager_GetHandle(objExtension, "Type0" ))->size,
+			objType0->type );
+	
+		Journal_Printf(
+			stream, 
+			"OfObject Temp0 size %d, value ", 
+			ExtensionInfo_At( objExtension->extInfos, ExtensionManager_GetHandle(objExtension, "Temp0" ))->size );
+		for ( i = 0; i < 10; ++i ) {
+			Journal_Printf( stream, "%3.0f ", objTemp0[i].temp );
+		}
+		Journal_Printf( stream, "\n" );
+
+		/* Testing Simple (Single and Array) on Struct */
+			
+		structExtension = ExtensionManager_New_OfStruct( "Node", sizeof(BaseClass) );
+
+		ExtensionManager_Add( structExtension, Type0, sizeof(ExtensionStruct0) );
+		ExtensionManager_AddArray( structExtension, Temp0, sizeof(ExtensionStruct1), 10 );
+		
+		nArray = (BaseClass*)ExtensionManager_Malloc( structExtension, ArraySize );
+
+		/* Testing Simple extension on allocated extended struct */
+		arrayExtension = ExtensionManager_New_OfExtendedArray( "Ext", nArray, structExtension, ArraySize );
+
+		ExtensionManager_Add( arrayExtension, Vel0, sizeof(ExtensionStruct2) );
+	
+		for ( array_I = 0; array_I < ArraySize; ++array_I ) {
+			current = ExtensionManager_At( structExtension, nArray, array_I );
+
+			nType0 = (ExtensionStruct0*)ExtensionManager_Get(
+				structExtension,
+				current,
+				ExtensionManager_GetHandle( structExtension, "Type0" ) );
+			nType0 = (ExtensionStruct0*)ExtensionManager_HashGet(
+				structExtension,
+				current,
+				Type0 );
+			nType0->type = 'a';
+		
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_Get(
+				structExtension,
+				current,
+				ExtensionManager_GetHandle( structExtension, "Temp0" ) );
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet(
+				structExtension,
+				current,
+				Temp0 );
+
+			for ( i = 0; i < 10; ++i ) {
+				nTemp0[i].temp = (double)((array_I * 10) + i);
+			}
+			
+			nVel0 = (ExtensionStruct2*)ExtensionManager_Get(
+				arrayExtension,
+				ExtensionManager_At( arrayExtension, nArray, array_I ),
+				ExtensionManager_GetHandle( arrayExtension, "Vel0" ) );
+			nVel0 = (ExtensionStruct2*)ExtensionManager_HashGet(
+				arrayExtension,
+				ExtensionManager_At( arrayExtension, nArray, array_I ),
+				Vel0 );
+			
+			nVel0->vel = (float)array_I;
+		}
+		
+		Journal_Printf( stream, "OfStruct Final size %d\n", ExtensionManager_GetFinalSize( structExtension ) );
+		Journal_Printf(
+			stream, 
+			"OfStruct Type0 size %d\n", 
+			ExtensionInfo_At( structExtension->extInfos, ExtensionManager_GetHandle(structExtension, "Type0"))->size );
+		Journal_Printf(
+			stream, 
+			"OfStruct Temp0 size %d\n", 
+			ExtensionInfo_At( structExtension->extInfos, ExtensionManager_GetHandle(structExtension, "Temp0"))->size );
+
+
+		for ( array_I = 0; array_I < ArraySize; ++array_I ) {
+			current = ExtensionManager_At( arrayExtension, nArray, array_I );
+
+			nType0 = (ExtensionStruct0*)ExtensionManager_Get(
+				arrayExtension,
+				current,
+				ExtensionManager_GetHandle( arrayExtension, "Type0" ) );
+			nType0 = (ExtensionStruct0*)ExtensionManager_HashGet(
+				arrayExtension,
+				current,
+				Type0 );
+			
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_Get(
+				arrayExtension,
+				current,
+				ExtensionManager_GetHandle( arrayExtension, "Temp0" ) );
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet(
+				arrayExtension,
+				current,
+				Temp0 );
+		
+			Journal_Printf( stream, "OfArray Type0 value %3c\n", nType0->type );
+			
+			Journal_Printf( stream, "OfArray Temp0 value " );
+			for ( i = 0; i < 10; ++i ) {
+				Journal_Printf( stream, "%3.0f ", nTemp0[i].temp );
+			}
+			Journal_Printf( stream, "\n" );
+			
+			nVel0 = (ExtensionStruct2*)ExtensionManager_Get(
+				arrayExtension,
+				ExtensionManager_At( arrayExtension, nArray, array_I ),
+				ExtensionManager_GetHandle( arrayExtension, "Vel0" ) );
+			nVel0 = (ExtensionStruct2*)ExtensionManager_HashGet(
+				arrayExtension,
+				ExtensionManager_At( arrayExtension, nArray, array_I ),
+				Vel0 );
+			
+			Journal_Printf( stream, "OfArray Vel0 value %f\n", nVel0->vel );
+		}
+
+
+		/* Copy time */
+		copyMap = PtrMap_New( 1 );
+
+		baseObjectCopy = Memory_Alloc( BaseClass, "BaseObject" );
+		memcpy( baseObjectCopy, baseObject, sizeof(BaseClass) );
+		PtrMap_Append( copyMap, baseObject, baseObjectCopy );
+		objExtensionCopy = Stg_Class_Copy( objExtension, NULL, True, "_dup", copyMap );
+
+		if ( objExtensionCopy->_existingObject != baseObjectCopy ) {
+			Journal_Printf( stream, "Failed to copy baseObject properly\n" );
+		}
+		else {
+			Journal_Printf( stream, "Sucessfully copied baseObject properly\n" );
+		}
+		objType0 = (ExtensionStruct0*)ExtensionManager_HashGet(
+			objExtensionCopy, 
+			baseObjectCopy, 
+			Type0 );
+		Journal_Printf(
+			stream, 
+			"OfObject Copy Type0 size %d, value %3c\n", 
+			ExtensionInfo_At( 
+				objExtensionCopy->extInfos, 
+				ExtensionManager_GetHandle(objExtensionCopy, Type0 ))->size,
+			objType0->type );
+		objTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet( 
+			objExtensionCopy, 
+			baseObjectCopy, 
+			Temp0 );
+	
+		objType0->type = 'a';
+		Journal_Printf(
+			stream, 
+			"OfObject Copy Temp0 size %d, value ", 
+			ExtensionInfo_At( objExtension->extInfos, ExtensionManager_GetHandle(objExtension, "Temp0" ))->size );
+		for ( i = 0; i < 10; ++i ) {
+			Journal_Printf( stream, "%3.0f ", objTemp0[i].temp );
+		}
+		Journal_Printf( stream, "\n" );
+
+		Stg_Class_Delete( copyMap );
+		
+	
+		copyMap = PtrMap_New( 1 );
+		arrayExtensionCopy = Stg_Class_Copy( arrayExtension, NULL, True, "_dup", copyMap );
+		structExtensionCopy = Stg_Class_Copy( structExtension, NULL, True, "_dup", copyMap );
+		nArrayCopy = PtrMap_Find( copyMap, arrayExtension->_array );
+
+		if ( nArrayCopy != NULL && nArrayCopy == arrayExtensionCopy->_array ) {
+			Journal_Printf( stream, "Array extension copy success\n" );
+		}
+		else {
+			Journal_Printf( stream, "Array extension copy fail\n" );
+		}
+	
+		for ( array_I = 0; array_I < ArraySize; ++array_I ) {
+			current = ExtensionManager_At( arrayExtensionCopy, nArrayCopy, array_I );
+
+			nType0 = (ExtensionStruct0*)ExtensionManager_HashGet(
+				arrayExtensionCopy,
+				current,
+				Type0 );
+			nTemp0 = (ExtensionStruct1*)ExtensionManager_HashGet(
+				arrayExtensionCopy,
+				current,
+				Temp0 );
+		
+			Journal_Printf( stream, "OfArray Copy Type0 value %3c\n", nType0->type );
+			
+			Journal_Printf( stream, "OfArray Copy Temp0 value " );
+			for ( i = 0; i < 10; ++i ) {
+				Journal_Printf( stream, "%3.0f ", nTemp0[i].temp );
+			}
+			Journal_Printf( stream, "\n" );
+			
+			nVel0 = (ExtensionStruct2*)ExtensionManager_HashGet(
+				arrayExtensionCopy,
+				current,
+				Vel0 );
+			
+			Journal_Printf( stream, "OfArray Copy Vel0 value %f\n", nVel0->vel );
+		}
+
+		Stg_Class_Delete( copyMap );
+		
+		/* Clean up */
+
+		
+		Memory_Free( baseObject );
+		ExtensionManager_Free( structExtension, nArray );
+
+		Stg_Class_Delete( objExtension );
+		Stg_Class_Delete( structExtension );
+		Stg_Class_Delete( arrayExtension );
+
+		Memory_Free( baseObjectCopy );
+		Stg_Class_Delete( objExtensionCopy );
+	}
+	
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = src test

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3048 2005-06-22 07:43:27Z 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
+
+include Makefile.def
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = FlattenXML
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,92 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian 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:
+**	Reads an XML file (potentially with includes) and then outputs as a single file
+**
+** $Id: main.c 190 2005-06-20 04:56:57Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+
+#include "Base/Base.h"
+
+#define OUTPUT_FILE_FLAG "-output_file="
+#define DEFAULT_OUTPUT_FILE "./output.xml"
+
+int main( int argc, char* argv[] ) 
+{
+	Dictionary*			dictionary;
+	XML_IO_Handler*			ioHandler;
+	Stream*				msgs;
+
+	char* 				outputFilename = DEFAULT_OUTPUT_FILE;
+
+	int ii;
+
+	MPI_Init( &argc, &argv );
+	if( !Base_Init( &argc, &argv ) ) {
+		fprintf( stderr, "Error initialising StGermain, exiting.\n" );
+		exit( EXIT_FAILURE );
+	}
+	msgs = Journal_Register( Info_Type, "Messages" );
+	
+	for( ii = 0; ii < argc; ++ii ) {
+		if ( strstr( argv[ii], OUTPUT_FILE_FLAG ) == argv[ii] ) {
+			outputFilename = argv[ii] + strlen( OUTPUT_FILE_FLAG );
+			if ( strlen( outputFilename ) < 1 ) {
+				Journal_Printf( msgs, "Invalid outputfile name: %s\n", outputFilename );
+				Journal_Printf( msgs, "Exiting...\n" );
+				Stg_Class_Delete( dictionary );
+				Base_Finalise();
+				return 1;
+			}
+			argv[ii] = " "; /* remove it from the arg list */
+		}
+	}
+
+	dictionary = Dictionary_New();
+
+	/* Read input */
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	IO_Handler_WriteAllToFile( ioHandler, outputFilename, dictionary );
+
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( ioHandler );
+
+	Base_Finalise();
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,30 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+# 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
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBase ${RPATH_FLAGS}
+
+packages = MPI XML MATH DL 
+
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst =
+
+def_srcs =
+
+
+def_checks = \
+	testFlattenXML.0of1.sh
+
+def_libs = 
+

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1-include.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1-include.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1-include.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+ 
+	<!-- Tests single params -->
+	<param name="include1-include-param1">1</param>
+	<param name="include1-include-param2">2</param>
+	<param name="include1-include-param3">3</param>
+
+	<!-- Test structs -->
+	<struct name="include1-include-struct">
+		<param name="include1-include-struct-param1">a</param>
+		<param name="include1-include-struct-param2">b</param>
+		<param name="include1-include-struct-param3">c</param>
+	</struct>
+	
+	<!-- Test list -->
+	<list name="include1-include-list">
+		<param>1</param>
+		<struct>
+			<param name="include1-include-list-struct-param1">1</param>
+			<param name="include1-include-list-struct-param2">2</param>
+			<param name="include1-include-list-struct-param3">3</param>
+		</struct>
+	</list>
+
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+ 
+	<!-- Tests single params -->
+	<param name="include1-param1">1</param>
+	<param name="include1-param2">2</param>
+	<param name="include1-param3">3</param>
+
+	<!-- Test structs -->
+	<struct name="include1-struct">
+		<param name="include1-struct-param1">a</param>
+		<param name="include1-struct-param2">b</param>
+		<param name="include1-struct-param3">c</param>
+	</struct>
+	
+	<!-- Test list -->
+	<list name="include1-list">
+		<param>1</param>
+		<struct>
+			<param name="include1-list-struct-param1">1</param>
+			<param name="include1-list-struct-param2">2</param>
+			<param name="include1-list-struct-param3">3</param>
+		</struct>
+	</list>
+
+	<!-- Test include -->
+	<include>./include1-include.xml</include>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include2.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include2.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include2.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+ 
+	<!-- Tests single params -->
+	<param name="include2-param1">1</param>
+	<param name="include2-param2">2</param>
+	<param name="include2-param3">3</param>
+
+	<!-- Test structs -->
+	<struct name="include2-struct">
+		<param name="include2-struct-param1">a</param>
+		<param name="include2-struct-param2">b</param>
+		<param name="include2-struct-param3">c</param>
+	</struct>
+	
+	<!-- Test list -->
+	<list name="include2-list">
+		<param>1</param>
+		<struct>
+			<param name="include2-list-struct-param1">1</param>
+			<param name="include2-list-struct-param2">2</param>
+			<param name="include2-list-struct-param3">3</param>
+		</struct>
+	</list>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include3.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include3.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include3.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+ 
+	<!-- Tests single params -->
+	<param name="include3-param1">1</param>
+	<param name="include3-param2">2</param>
+	<param name="include3-param3">3</param>
+
+	<!-- Test structs -->
+	<struct name="include3-struct">
+		<param name="include3-struct-param1">a</param>
+		<param name="include3-struct-param2">b</param>
+		<param name="include3-struct-param3">c</param>
+	</struct>
+	
+	<!-- Test list -->
+	<list name="include3-list">
+		<param>1</param>
+		<struct>
+			<param name="include3-list-struct-param1">1</param>
+			<param name="include3-list-struct-param2">2</param>
+			<param name="include3-list-struct-param3">3</param>
+		</struct>
+	</list>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/testInput.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/testInput.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/testInput.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+ 
+	<!-- Tests single params -->
+	<param name="base-param1">1</param>
+	<param name="base-param2">2</param>
+	<param name="base-param3">3</param>
+
+	<!-- Test structs -->
+	<struct name="base-struct">
+		<param name="base-struct-param1">a</param>
+		<param name="base-struct-param2">b</param>
+		<param name="base-struct-param3">c</param>
+	</struct>
+	
+	<!-- Test list -->
+	<list name="base-list">
+		<param>1</param>
+		<struct>
+			<param name="base-list-struct-param1">1</param>
+			<param name="base-list-struct-param2">2</param>
+			<param name="base-list-struct-param3">3</param>
+		</struct>
+	</list>
+
+	<!-- Test include -->
+ 
+	<include>./include1.xml</include>
+	<include>./include2.xml</include>
+	<include>./include3.xml</include>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/testFlattenXML.0of1.output.xml.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/testFlattenXML.0of1.output.xml.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/testFlattenXML.0of1.output.xml.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+  <param name="base-param1">1</param>
+  <param name="base-param2">2</param>
+  <param name="base-param3">3</param>
+  <struct name="base-struct">
+    <param name="base-struct-param1">a</param>
+    <param name="base-struct-param2">b</param>
+    <param name="base-struct-param3">c</param>
+  </struct>
+  <list name="base-list">
+    <param>1</param>
+    <struct>
+      <param name="base-list-struct-param1">1</param>
+      <param name="base-list-struct-param2">2</param>
+      <param name="base-list-struct-param3">3</param>
+    </struct>
+  </list>
+  <param name="include1-param1">1</param>
+  <param name="include1-param2">2</param>
+  <param name="include1-param3">3</param>
+  <struct name="include1-struct">
+    <param name="include1-struct-param1">a</param>
+    <param name="include1-struct-param2">b</param>
+    <param name="include1-struct-param3">c</param>
+  </struct>
+  <list name="include1-list">
+    <param>1</param>
+    <struct>
+      <param name="include1-list-struct-param1">1</param>
+      <param name="include1-list-struct-param2">2</param>
+      <param name="include1-list-struct-param3">3</param>
+    </struct>
+  </list>
+  <param name="include1-include-param1">1</param>
+  <param name="include1-include-param2">2</param>
+  <param name="include1-include-param3">3</param>
+  <struct name="include1-include-struct">
+    <param name="include1-include-struct-param1">a</param>
+    <param name="include1-include-struct-param2">b</param>
+    <param name="include1-include-struct-param3">c</param>
+  </struct>
+  <list name="include1-include-list">
+    <param>1</param>
+    <struct>
+      <param name="include1-include-list-struct-param1">1</param>
+      <param name="include1-include-list-struct-param2">2</param>
+      <param name="include1-include-list-struct-param3">3</param>
+    </struct>
+  </list>
+  <param name="include2-param1">1</param>
+  <param name="include2-param2">2</param>
+  <param name="include2-param3">3</param>
+  <struct name="include2-struct">
+    <param name="include2-struct-param1">a</param>
+    <param name="include2-struct-param2">b</param>
+    <param name="include2-struct-param3">c</param>
+  </struct>
+  <list name="include2-list">
+    <param>1</param>
+    <struct>
+      <param name="include2-list-struct-param1">1</param>
+      <param name="include2-list-struct-param2">2</param>
+      <param name="include2-list-struct-param3">3</param>
+    </struct>
+  </list>
+  <param name="include3-param1">1</param>
+  <param name="include3-param2">2</param>
+  <param name="include3-param3">3</param>
+  <struct name="include3-struct">
+    <param name="include3-struct-param1">a</param>
+    <param name="include3-struct-param2">b</param>
+    <param name="include3-struct-param3">c</param>
+  </struct>
+  <list name="include3-list">
+    <param>1</param>
+    <struct>
+      <param name="include3-list-struct-param1">1</param>
+      <param name="include3-list-struct-param2">2</param>
+      <param name="include3-list-struct-param3">3</param>
+    </struct>
+  </list>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3048 2005-06-22 07:43:27Z 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
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/testFlattenXML.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/testFlattenXML.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/testFlattenXML.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "FlattenXML data/testInput.xml -output_file=./output/output.xml" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/testFlattenXML.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainBaseFoundation
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Class.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "MemoryTag.h"
+#include "Memory.h"
+#include "Class.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Stg_Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Textual name of this class */
+const Type Stg_Class_Type = "Stg_Class";
+
+
+Stg_Class* _Stg_Class_New( SizeT _sizeOfSelf, 
+		Type				type, 
+		Stg_Class_DeleteFunction*	_delete, 
+		Stg_Class_PrintFunction*	_print, 
+		Stg_Class_CopyFunction*		_copy )
+{
+	Stg_Class*		self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_Class) );
+	self = (Stg_Class*)Memory_Alloc_Bytes_Unnamed( _sizeOfSelf, type );
+	memset( self, 0, _sizeOfSelf );
+	self->_sizeOfSelf = _sizeOfSelf;
+	self->_deleteSelf = True;
+
+	/* Init count to for this pointer to one. */
+	Memory_CountInc( self );
+	
+	/* General info */
+	self->type = type;
+	
+	/* Virtual functions */
+	self->_delete = _delete;
+	self->_print = _print;
+	self->_copy = _copy;
+	
+	/* Stg_Class info */
+	_Stg_Class_Init( self );
+	
+	return self;
+}
+
+
+
+void _Stg_Class_Init( Stg_Class* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_Class info */
+}
+
+void Stg_Class_Delete( void* _class ) {
+	Stg_Class* self = (Stg_Class*)_class;
+	self->_delete( _class );
+}
+
+void _Stg_Class_Delete( void* _class ) {
+	Stg_Class* self = (Stg_Class*)_class;
+	
+	if( self->_deleteSelf ) {
+		Memory_CountDec( self );
+
+		if ( Memory_CountGet( self ) <= 0 ) {
+			Memory_Free( self );
+		}
+	}
+}
+
+void Stg_Class_Print( void* _class, struct Stream* stream ) {
+	Stg_Class* self = (Stg_Class*)_class;
+	self->_print( _class, stream );
+}
+
+void _Stg_Class_Print( void* _class, struct Stream* stream ) {
+	Stg_Class* self = (Stg_Class*)_class;
+	
+	Journal_Firewall( (Bool)stream, stream, "Attempting to Print to stream that is NULL\n" );
+	Journal_Firewall( (Bool)self, stream, "Attempting to Print class that is NULL\n" );
+	
+	Journal_Printf( stream, "Stg_Class (ptr): %p\n", self );
+	Stream_Indent( stream );
+	Journal_Printf( stream, "sizeOfSelf: %lu\n", self->_sizeOfSelf );
+	Journal_Printf( stream, "_deleteSelf: %s\n", self->_deleteSelf ? "Yes" : "No" );
+	Journal_Printf( stream, "type: %s\n", self->type == Type_Invalid ? "Invalid" : self->type );
+	Journal_Printf( stream, "_delete (func ptr): %p\n", self->_delete );
+	Journal_Printf( stream, "_print (func ptr): %p\n", self->_print );
+	Journal_Printf( stream, "_copy (func ptr): %p\n", self->_copy );
+	Stream_UnIndent( stream );
+}
+
+void* Stg_Generic_Copy( 
+	Stg_Class_CopyFunction* copyFunc,
+	void* obj, 
+	void* dest, 
+	Bool deep, 
+	Name nameExt, 
+	struct PtrMap* ptrMap ) 
+{
+	void*		newObj;
+	Bool		ownPtrMap = False;
+
+	if ( obj == NULL ) {
+		return NULL;
+	}
+
+	if ( copyFunc == NULL ) {
+		/* TODO: change to Journal */
+		printf( "Warning: attempting to copy a class with no copy method, return 'self'.\n" );
+		return obj;
+	}
+
+	if( !ptrMap ) {
+		ptrMap = PtrMap_New( 1 );
+		ownPtrMap = True;
+	}
+	
+	if ( (newObj = PtrMap_Find( ptrMap, obj )) == NULL ) {
+		newObj = copyFunc( obj, dest, deep, nameExt, ptrMap );
+	}
+
+	if ( newObj != dest ) {
+		/* Whether this is a new instance existing ptr map fetch, inc the counter because its being used again */
+		/* But only do it when its not a destination copy because we can't assume that it is a single dynamic obj */
+		Memory_CountInc( newObj );
+	}
+
+	if ( ownPtrMap && ptrMap ) {
+		Stg_Class_Delete( ptrMap );
+	}
+	
+	return (void*)newObj;
+}
+
+void* Stg_Class_Copy( void* class, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_Class* self = (Stg_Class*)class;
+	
+	if ( !self ) {
+		return NULL;
+	}
+	if ( !self->_copy ) {
+		return NULL;
+	}
+
+	return Stg_Generic_Copy( self->_copy, class, dest, deep, nameExt, ptrMap );
+}
+
+void* _Stg_Class_Copy( void* _class, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_Class*	self = (Stg_Class*)_class;
+	Stg_Class*	newClass;
+	
+	if( !dest ) {
+		newClass = (Stg_Class*)Memory_Alloc_Bytes_Unnamed( self->_sizeOfSelf, self->type );
+	}
+	else {
+		newClass = (Stg_Class*)dest;
+	}
+	PtrMap_Append( ptrMap, self, newClass );
+	
+	newClass->_sizeOfSelf = self->_sizeOfSelf;
+	newClass->_deleteSelf = self->_deleteSelf;
+	newClass->type = self->type;
+	newClass->_delete = self->_delete;
+	newClass->_print = self->_print;
+	newClass->_copy = self->_copy;
+	
+	return (void*)newClass;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+Type Stg_Class_GetTypeFunc( void* _class ) {
+	Stg_Class* self = (Stg_Class*)_class;
+	
+	return Stg_Class_GetTypeMacro( self );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,143 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Class.h 3654 2006-06-27 04:34:03Z LukeHodkinson $
+**
+**/
+
+#ifndef __Base_Foundation_Class_h__
+#define __Base_Foundation_Class_h__
+
+	/* Textual name of this class */
+	extern const Type Stg_Class_Type;
+
+	/* Forward declaring Stream */
+	struct Stream;
+	struct PtrMap;
+	
+	/* Child classes must define these abstract functions */
+	typedef void (Stg_Class_DeleteFunction)	( void* _class );
+	typedef void (Stg_Class_PrintFunction)	( void* _class, struct Stream* stream );
+	typedef void* (Stg_Class_CopyFunction)	( void* _class, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+	/** \def __Stg_Class information */
+	#define __Stg_Class \
+		/* General info */ 					\
+		SizeT				_sizeOfSelf;		/**< Size of the final class type */ \
+		Bool				_deleteSelf;		/**< True it is to be deallocated in Delete */ \
+		Type				type;			/**< Global const char* to string of class' name */ \
+									\
+		/* Virtual info */ 					\
+		Stg_Class_DeleteFunction*	_delete;		/**< Virtual function for deleting a class. */ \
+		Stg_Class_PrintFunction*	_print;			/**< Virtual function for printing a class. */ \
+		Stg_Class_CopyFunction*		_copy;			/**< Virtual funciton for copying a class. */
+	
+	struct _Stg_Class { __Stg_Class };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+	#define STG_CLASS_DEFARGS					\
+		SizeT				sizeOfSelf,		\
+		Type				type,			\
+		Stg_Class_DeleteFunction*	deleteFunc,		\
+		Stg_Class_PrintFunction*	printFunc,		\
+		Stg_Class_CopyFunction*		copyFunc
+
+	#define STG_CLASS_PASSARGS					\
+		sizeOfSelf, type, deleteFunc, printFunc, copyFunc
+    
+	
+	/** Constructor interface. */
+	Stg_Class* _Stg_Class_New( SizeT _sizeOfSelf, 
+			Type type, 
+			Stg_Class_DeleteFunction*	_delete, 
+			Stg_Class_PrintFunction*	_print,
+			Stg_Class_CopyFunction*		_copy );
+	
+	/** Init interface. */
+	void _Stg_Class_Init( Stg_Class* self );
+	
+	
+	/** Deletes any instance of Stg_Class or a sub-class. */
+	void Stg_Class_Delete( void* _class );
+	
+	/** Prints any instance of Stg_Class or a sub-class. */
+	void Stg_Class_Print( void* _class, struct Stream* stream );
+
+	/** Prints any instance of Stg_Class or a sub-class. */
+	#define Print Stg_Class_Print
+	
+	/** Generic copy function caller */
+	void* Stg_Generic_Copy( 
+		Stg_Class_CopyFunction* copyFunc,
+		void* _class, 
+		void* dest, 
+		Bool deep, 
+		Name nameExt, 
+		struct PtrMap* ptrMap );
+	
+	/** Copy a class. */
+	void* Stg_Class_Copy( void* _class, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+	/** Delete interface. */
+	void _Stg_Class_Delete( void* _class );
+	
+	/** Print interface. */
+	void _Stg_Class_Print( void* _class, struct Stream* stream );
+	
+	/** Coy interface. */
+	void* _Stg_Class_Copy( void* _class, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Get the class type */
+	#define Stg_Class_GetTypeMacro( _class ) \
+		((_class)->type)
+	Type Stg_Class_GetTypeFunc( void* _class ); 
+	#ifdef MACRO_AS_FUNC
+		/** Get the class type */
+		#define Stg_Class_GetType Stg_Class_GetTypeFunc
+	#else
+		/** Get the class type */
+		#define Stg_Class_GetType Stg_Class_GetTypeMacro
+	#endif
+	
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Foundation_Class_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: CommonRoutines.c 2276 2004-11-04 02:01:18Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "types.h"
+#include "forwardDecl.h"
+                                                                                                                                    
+#include "MemoryField.h"
+#include "MemoryPointer.h"
+#include "Memory.h"
+#include "shortcuts.h"
+                                                                                                                                    
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <ctype.h>
+#include <math.h>
+
+const char* StG_BoolToStringMap[2] = { "False", "True" };
+
+
+double StG_RoundDoubleToNSigFigs( double value, unsigned int nSigFigs ) {
+	double divisorPower;
+	double sign = 1.0;
+	double toleranceAroundZero = 1e-60;
+
+	assert( nSigFigs >= 1 );
+	
+	/* Log goes to infinity at 0. Hence, we have to give up rounding if it gets too small */
+	if ( (value > (0.0 - toleranceAroundZero)) && (value < (0.0 + toleranceAroundZero)) ) {
+		return value;
+	}	
+	
+	/* Since logs can't deal with negatives, need to save the sign */
+	if ( value < 0 ) {
+		sign = -1.0;
+		value = fabs(value);
+	}
+
+	/* Since interested in significant figures, need to work out the number of 
+	zeros in the answer */
+	divisorPower = log10( value );
+	divisorPower = floor( divisorPower );
+
+	/* We now have the divisorPower to use if nSigFigs == 1. So adjust if this isn't
+	the case */
+	divisorPower -= ( nSigFigs - 1 );
+
+	/* Similar approach to the decimal places rounder from here, except we use
+	the divisorPower we've just calculated */
+	return sign * floor( value / pow( 10., divisorPower ) + 0.5 ) * pow(10., divisorPower);
+}
+
+
+double StG_RoundDoubleToNDecimalPlaces( double value, unsigned int nDecimalPlaces ) {
+	return floor( value * pow(10., nDecimalPlaces) + .5) / pow(10., nDecimalPlaces);
+}
+
+
+unsigned int StG_IntegerLength( int number ) {
+	int tmpNumber;
+	int numDigits;
+	Bool isNegative;
+
+	tmpNumber = abs( number );
+	numDigits = 0;
+	isNegative = ( number < 0 ) ? True : False;
+	
+	do {
+		++numDigits;
+		tmpNumber /= 10; /* Base 10 */
+	} while ( tmpNumber > 0 );
+
+	if ( isNegative )
+		++numDigits;
+
+	return numDigits;
+}
+	
+
+
+char* StG_Strdup( const char* const str ) {
+	int length;
+	char* result;
+
+	length = strlen( str ) + 1;
+	result = Memory_Alloc_Array_Unnamed( char, length );
+
+	strcpy( result, str );
+
+	return result;
+}
+
+
+int Stg_vasprintf( char** string, char* format, va_list ap ) {
+	int       allocStringSize = 100;
+	int       sizeOfString;
+
+	va_list   apCopy;
+
+	Bool      trying = True;
+
+	/* Allocate Memory For String */
+	*string = Memory_Alloc_Array( char, allocStringSize, "string" );
+
+	while ( trying ) {
+		/* See is we can print to this string with this size */
+		va_copy( apCopy, ap );
+		sizeOfString = vsnprintf( *string, allocStringSize, format, apCopy );
+		va_end( apCopy );
+
+		/* Check if string was truncated */
+		if ( sizeOfString > -1 && sizeOfString < allocStringSize ) {
+			return sizeOfString;
+		}
+		/* String was truncated - resize array and try again */
+		if ( sizeOfString > -1 ) {
+			/* glibc > 2.1 */
+			allocStringSize = sizeOfString + 1;
+		}
+		else {
+			/* glibc <= 2.0 */
+			allocStringSize = sizeOfString * 2;
+		}
+		*string = Memory_Realloc_Array( *string, char, allocStringSize );
+		if ( string == NULL ) {
+			#ifdef DEBUG
+				assert( string != NULL );
+			#endif
+			trying = False;
+		}
+	}
+		
+	return sizeOfString;
+}
+
+
+int Stg_asprintf( char** string, char* format, ... ) {
+	int       sizeOfString;
+	va_list   ap;
+	
+	va_start( ap, format );
+	sizeOfString = Stg_vasprintf( string, format, ap ) ;
+	va_end( ap );
+
+	return sizeOfString;
+}
+
+Bool Stg_StringIsEmpty( char* string ) {
+	size_t     length;
+	const char whiteSpaceChars[] = " \t\n";
+
+	if ( string == NULL ) 
+		return True;
+	
+	/* Check if the length is Zero */
+	length = strlen( string );
+	if ( length == 0 )
+		return True;
+
+	/* Check if there are only white space characters */
+	if ( length == strspn( string, whiteSpaceChars ) )
+		return True;
+
+	return False;
+}
+
+Bool Stg_StringIsNumeric( char* string ) {
+	size_t         length;
+	Index          char_I;
+	char           ch;
+	unsigned int   eCount            = 0;
+	unsigned int   decimalPointCount = 0;
+	unsigned int   digitCount        = 0;
+
+	if ( string == NULL ) 
+		return False;
+
+	length = strlen( string );
+	if ( length == 0 ) 
+		return False;
+
+	/* The conversion of HUGE_VAL by printf is 'inf' which requires this line to 
+	 * pick up that this is actually a numerical string */
+	if ( strcmp( string, "-inf" ) == 0 || strcmp( string, "inf" ) == 0  )
+		return True;
+
+	for ( char_I = 0 ; char_I < length ; char_I++ ) {
+		ch = string[ char_I ];
+
+		/* Check for digits from 0 - 9 */
+		if ( isdigit( ch ) ) {
+			digitCount++;
+			continue;
+		}
+
+		/* Check for 'e' for scientific notation - only one allowed */
+		if ( ch == 'e' && eCount == 0 ) {
+			eCount++;
+
+			/* Reset counters because another number is allowed */
+			decimalPointCount = 0;
+			digitCount        = 0;
+			continue;
+		}
+		
+		/* Check for decimal point - one allowed before 'e' and one allowed after 'e' */
+		if ( ch == '.' && decimalPointCount == 0 ) {
+			decimalPointCount++;
+			continue;
+		}
+
+		/* Check for plus for minus sign - only allowed at beginning of number */
+		if ( (ch == '+' || ch == '-') && (digitCount == 0 && decimalPointCount == 0) )
+			continue;
+
+		return False;
+	}
+
+	/* If all chars pass - then return happy */
+	return True;
+}
+
+/** This function calculates the of the longest matching subsequence between string1 and string2.
+ *  A subsequence of a string is when all the characters of the subsequence appear in order within the string,
+ *  but possibly with gaps between occurrences of each character. */
+unsigned int Stg_LongestMatchingSubsequenceLength( char* string1, char* string2, Bool caseSensitive ) {
+	size_t         stringLength1 = strlen( string1 );
+	size_t         stringLength2 = strlen( string2 );
+	unsigned int** lmsArray;
+	Index          charString1_I;
+	Index          charString2_I;
+	char           charString1;
+	char           charString2;
+	Bool           areEqual;
+	unsigned int   lmsLength;
+
+	/* This array 'lmsArray' is defined as follows: 
+	 * lmsArray[i][j] = the length of the longest matching subsequence in string1[ 0 ... (i-1) ] and string[ 0 ... (j-1) ]
+	 * lmsArray[0][j] and lmsArray[i][0] are initialised to zero for all i, j */
+	lmsArray = Memory_Alloc_2DArray( unsigned int, stringLength1 + 1, stringLength2 + 1, "lmsArray" );
+	memset( lmsArray[0], 0, sizeof( unsigned int ) * (stringLength1 + 1) * (stringLength2 + 1) );
+
+	for ( charString1_I = 1 ; charString1_I <= stringLength1 ; charString1_I++ ) {
+		charString1 = string1[ charString1_I - 1 ];
+		for ( charString2_I = 1 ; charString2_I <= stringLength2 ; charString2_I++ ) {
+			charString2 = string2[ charString2_I - 1 ];
+
+			areEqual = ( caseSensitive ? charString1 == charString2 :  tolower( charString1 ) == tolower( charString2 ) );
+
+			/* If the two characters are equal then this character is the last in the longest subsequence of 
+			 * string1[0 ... charString1_I - 1 ] and string2[0 ... charString2_I - 1 ] therefore the length is 
+			 * one more than the previous longest subsequence - 
+			 * namely lmsArray[ charString1_I - 1 ][ charString2_I - 1 ] + 1 
+			 *
+			 * If the characters arn't equal then the length is the longest subseqence from 
+			 * string1[0 ... charString1_I - 1 ] or string2[0 ... charString2_I - 1 ] */
+			
+			lmsArray[ charString1_I ][ charString2_I ] = 
+				( areEqual )
+					? lmsArray[ charString1_I - 1 ][ charString2_I - 1 ] + 1
+					: MAX( lmsArray[ charString1_I - 1 ][ charString2_I ], lmsArray[ charString1_I ][ charString2_I - 1 ] );
+		}
+	}
+
+	lmsLength = lmsArray[ stringLength1 ][ stringLength2 ];
+	Memory_Free( lmsArray );
+
+	return lmsLength;
+}
+					

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	Collection of commonly used functions	
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: CommonRoutines.h 2276 2004-11-04 02:01:18Z AlanLo $
+**
+**/
+
+#ifndef __Base_Foundation_CommonRoutines_h__
+#define __Base_Foundation_CommonRoutines_h__
+	#include <stdarg.h>
+
+	/** Global map from a Boolean's enum value to a string: for printing purposes */
+	extern const char* StG_BoolToStringMap[2];
+	
+	/** Rounds a double to the specified number of significant figures */
+	double StG_RoundDoubleToNSigFigs( double value, unsigned int nSigFigs );
+
+	/** Rounds a double to a certain number of decimal places */
+	double StG_RoundDoubleToNDecimalPlaces( double value, unsigned int nDecimalPlaces );
+	
+	/** Counts the number of characters required to display the given base 10 value. */
+	unsigned int StG_IntegerLength( int number );
+
+	/** StGermain's version of strdup() which uses Memory Module */
+	char* StG_Strdup( const char* const str );
+
+	/** StGermain's version of asprintf which allocates enough space for a string before printing to it */
+	int Stg_asprintf( char** string, char* format, ... ) ;
+	int Stg_vasprintf( char** string, char* format, va_list ap ) ;
+
+	/** Check to see whether string is empty or only has white space */
+	Bool Stg_StringIsEmpty( char* string ) ;
+
+	/** Check to see whether string is can be considered to be a number - 
+	 * allows digits, plus and minus signs, and scientific notation */
+	Bool Stg_StringIsNumeric( char* string ) ;
+
+	/** This function calculates the of the longest matching subsequence between string1 and string2.
+	 *  A subsequence of a string is when all the characters of the subsequence appear in order within the string,
+	 *  but possibly with gaps between occurrences of each character. */
+	unsigned int Stg_LongestMatchingSubsequenceLength( char* string1, char* string2, Bool caseSensitive ) ;
+
+#endif /* __Base_Foundation_CommonRoutines_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "types.h"
+#include "Memory.h"
+#include "TimeMonitor.h"
+#include "MemMonitor.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool BaseFoundation_Finalise( void ) {
+	Memory_Delete();
+
+	Stg_TimeMonitor_Finalise();
+	Stg_MemMonitor_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Ends the operation of the Foundation module and releases resources used.
+**
+**	In particular, this function will end the operation of the Memory module.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_BaseFoundation_Finalise_h__
+#define __Base_BaseFoundation_Finalise_h__
+	
+	Bool BaseFoundation_Finalise( void );
+	
+#endif /* __Base_BaseFoundation_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Foundation.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Foundation.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Foundation.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	External header file to this library.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Foundation.h 3760 2006-08-08 23:34:44Z LukeHodkinson $
+**
+**/
+
+#ifndef __Base_Foundation_h__
+#define __Base_Foundation_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "CommonRoutines.h"
+	#include "MemoryTag.h"
+	#include "MemoryPointer.h"
+	#include "MemoryField.h"
+	#include "MemoryReport.h"
+	#include "Memory.h"
+	#include "Class.h"
+	#include "Object.h"
+	#include "ObjectAdaptor.h"
+	#include "PrimitiveObject.h"
+	#include "ObjectList.h"
+	#include "NamedObject_Register.h"
+	#include "TimeMonitor.h"
+	#include "MemMonitor.h"
+	#include "TestSuite.h"
+	#include "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Base_Foundation_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "types.h"
+#include "MemoryField.h"
+#include "MemoryPointer.h"
+#include "Memory.h"
+#include "TimeMonitor.h"
+#include "MemMonitor.h"
+#include "Init.h"
+
+#include <stdio.h>
+
+/* constants */
+const int DEFAULT_LIST_INITIAL_SIZE = 8;
+const int DEFAULT_LIST_DELTA = 8;
+
+Bool BaseFoundation_Init( int* argc, char** argv[] ) {
+	stgMemory = Memory_Init();
+
+	Stg_TimeMonitor_Initialise();
+	Stg_MemMonitor_Initialise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Performs and pre-running initialisation necessary in this directory.
+**
+**	In particular, this will begin the operation of the Memory module if enabled.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_BaseFoundation_Init_h__
+#define __Base_BaseFoundation_Init_h__
+	
+	Bool BaseFoundation_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_BaseFoundation_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3760 2006-08-08 23:34:44Z LukeHodkinson $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseFoundation
+def_inc = StGermain/Base/Foundation
+
+def_srcs = \
+	CommonRoutines.c \
+	MemoryField.c \
+	MemoryPointer.c \
+	MemoryReport.c \
+	Memory.c \
+	Class.c \
+	Object.c \
+	ObjectAdaptor.c \
+	PrimitiveObject.c \
+	ObjectList.c \
+	NamedObject_Register.c \
+	TimeMonitor.c \
+	MemMonitor.c \
+	TestSuite.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	types.h \
+	shortcuts.h \
+	CommonRoutines.h \
+	Memory.h \
+	MemoryTag.h \
+	MemoryField.h \
+	MemoryPointer.h \
+	MemoryReport.h \
+	Class.h \
+	Object.h \
+	ObjectAdaptor.h \
+	PrimitiveObject.h \
+	ObjectList.h \
+	NamedObject_Register.h \
+	TimeMonitor.h \
+	MemMonitor.h \
+	TestSuite.h \
+	Init.h \
+	Finalise.h \
+	Foundation.h
+
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,189 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MemMonitor.c 3157 2005-08-07 23:43:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "forwardDecl.h"
+#include "MemoryPointer.h"
+#include "MemoryField.h"
+#include "Memory.h"
+#include "MemMonitor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+double Stg_MemoryWatchCriteria = -1;
+
+const Type Stg_MemMonitor_Type = "Stg_MemMonitor";
+const Type Stg_MemMonitor_InfoStreamName = "MemMonitor";
+const Type Stg_MemMonitor_TagType = "Stg_MemMonitor_Tag";
+
+void _Memory_Print_AllocsAboveThreshold_Helper( void* memoryPointer, void* args ) {
+	MemoryPointer* memPtr;
+	void** arguments;
+	SizeT threshold;
+	MemoryOpStamp begin;
+	MemoryOpStamp end;
+
+	assert( memoryPointer );
+	assert( args );
+
+	memPtr = (MemoryPointer*)memoryPointer;
+	arguments = (void**)args;
+	threshold = *((SizeT*)arguments[0]);
+	begin = *((MemoryOpStamp*)arguments[1]);
+	end = *((MemoryOpStamp*)arguments[2]);
+
+	if ( memPtr->ptr != NULL && memPtr->status != MEMORY_POINTER_RELEASED ) {
+		if ( memPtr->totalSize > threshold && memPtr->stamp >= begin && memPtr->stamp <= end ) {
+			MemoryPointer_Print( memPtr, MEMORYPOINTER_NAME | MEMORYPOINTER_TOTALSIZE );
+		}
+	}
+}
+
+void Stg_MemMonitor_Initialise() {
+	Stg_MemoryWatchCriteria = 0.2;
+}
+void Stg_MemMonitor_Finalise() {
+
+}
+void Stg_MemMonitor_SetMemoryWatchCriteria( double ratioOfTotalMemory ) {
+	Stg_MemoryWatchCriteria = ratioOfTotalMemory;
+}
+
+Stg_MemMonitor* Stg_MemMonitor_New( char* tag, Bool criteria, Bool print, int comm ) {
+	Stg_MemMonitor* tm;
+	
+	tm = Memory_Alloc_Unnamed( Stg_MemMonitor );
+	tm->tag = Memory_Alloc_Bytes_Unnamed( strlen( tag ) + 1, Stg_MemMonitor_TagType );
+	strcpy( tm->tag, tag );
+	tm->criteria = criteria;
+	tm->print = print;
+	tm->comm = comm;
+	
+	return tm;
+}
+
+void Stg_MemMonitor_Delete( Stg_MemMonitor* tm ) {
+	if( tm->tag ) {
+		Memory_Free( tm->tag );
+	}
+	
+	Memory_Free( tm );
+}
+
+void Stg_MemMonitor_Begin( Stg_MemMonitor* tm ) {
+#ifdef MEMORY_STATS
+	tm->t1 = stgMemory->stamp;
+	tm->t2 = tm->t1;
+	MemoryField_UpdateAsSumOfSubFields( stgMemory->types );
+	tm->totalMem1 = stgMemory->types->currentAllocation;
+	tm->totalMem2 = tm->totalMem1;
+#endif
+}
+
+double Stg_MemMonitor_End( Stg_MemMonitor* tm ) {
+	double memAvgDiff = 0.0;
+#ifdef MEMORY_STATS
+	long memDiff;
+	long memMaxDiff;
+	long memMinDiff;
+	long memSumDiff;
+	long memMax;
+	
+	int rank;
+	int size;
+	
+	tm->t2 = stgMemory->stamp;
+	MemoryField_UpdateAsSumOfSubFields( stgMemory->types );
+	tm->totalMem2 = stgMemory->types->currentAllocation;
+	memDiff = tm->totalMem2 - tm->totalMem1;
+	
+	MPI_Comm_size( tm->comm, &size );
+	/*
+	MPI_Reduce( &memDiff, &memMaxDiff, 1, MPI_LONG, MPI_MAX, 0, tm->comm );
+	MPI_Reduce( &memDiff, &memMinDiff, 1, MPI_LONG, MPI_MIN, 0, tm->comm );
+	MPI_Allreduce( &memDiff, &memSumDiff, 1, MPI_LONG, MPI_SUM, tm->comm );
+	MPI_Reduce( &tm->totalMem2, &memMax, 1, MPI_LONG, MPI_MAX, 0, tm->comm );
+	
+	memAvgDiff = (double)memSumDiff / size;
+	*/
+	/* Above is commented and replaced with below. See TimeMonitor.c for reason */
+	memMaxDiff = memDiff;
+	memMinDiff = memDiff;
+	memSumDiff = memDiff;
+	memMax = tm->totalMem2;
+	memAvgDiff = (double)memDiff;
+	
+	/* Note: maybe Stg_Components should store rank and comm??? how do the find their comm? */
+	
+	MPI_Comm_rank( tm->comm, &rank );
+	if( rank == 0 && tm->print ) {
+		if( !tm->criteria || (double)memMaxDiff > Stg_MemoryWatchCriteria * memMax ) {
+			void* args[3];
+			SizeT threshold = (SizeT)(Stg_MemoryWatchCriteria * memMax);
+			
+			if( size == 1 ) {
+				Journal_Printf( 
+					Journal_Register( Info_Type, Stg_MemMonitor_InfoStreamName ),
+					"\t%s(%s): ms: %.2gmb, dt(%.2f%%): %.2gmb\n", 
+					Stg_MemMonitor_InfoStreamName,
+					tm->tag,
+					(double)memMax / 1048576,
+					(memAvgDiff) / memMax * 100.0,
+					(double)memDiff / 1048576 );
+			}
+			else {
+				Journal_Printf( 
+					Journal_Register( Info_Type, Stg_MemMonitor_InfoStreamName ),
+					"\t%s(%s): ms: %.2gmb, dt(%.f%%): %.2g/%.2g/%.2gmb\n", 
+					Stg_MemMonitor_InfoStreamName,
+					tm->tag,
+					(double)memMax / 1048576,
+					(memAvgDiff) / memMax * 100.0,
+					(double)memMaxDiff / 1048576,
+					(double)memMinDiff / 1048576,
+					(double)memAvgDiff / 1048576 );
+			}
+			args[0] = &threshold;
+			args[1] = &tm->t1;
+			args[2] = &tm->t2;
+			BTree_ParseTree( stgMemory->pointers, _Memory_Print_AllocsAboveThreshold_Helper, (void*)args );
+		}
+	}
+	
+#endif
+	return memAvgDiff;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MemMonitor.c 3157 2005-08-07 23:43:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Foundation_MemMonitor_h__
+#define __Base_Foundation_MemMonitor_h__
+
+extern double Stg_MemoryWatchCriteria;
+
+extern const Type Stg_MemMonitor_Type;
+extern const Type Stg_MemMonitor_InfoStreamName;
+extern const Type Stg_MemMonitor_TagType;
+
+typedef struct {
+	MemoryOpStamp t1;
+	MemoryOpStamp t2;
+	SizeT totalMem1;
+	SizeT totalMem2;
+	char* tag;
+	Bool criteria;
+	Bool print;
+	int comm;
+} Stg_MemMonitor;
+
+void Stg_MemMonitor_Initialise();
+void Stg_MemMonitor_Finalise();
+void Stg_MemMonitor_SetMemoryWatchCriteria( double ratioOfTotalMemory );
+
+Stg_MemMonitor* Stg_MemMonitor_New( char* tag, Bool criteria, Bool print, int comm );
+void Stg_MemMonitor_Delete( Stg_MemMonitor* tm );
+
+void Stg_MemMonitor_Begin( Stg_MemMonitor* tm );
+double Stg_MemMonitor_End( Stg_MemMonitor* tm );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1838 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Memory.c 3788 2006-09-08 06:58:17Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "MemoryTag.h"
+#include "MemoryField.h"
+#include "MemoryPointer.h"
+#include "Memory.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stddef.h>
+
+#ifndef MAX
+#define MAX( x, y ) ((x > y) ? x : y)
+#endif
+
+const Type Memory_Type = "Memory";
+
+Memory* stgMemory = 0;
+
+const int MEMORY_INITIAL_SIZE = 4;	/**< Number of pointers the array begins with. */
+const int MEMORY_DELTA_SIZE = 4;	/**< Number of pointers to extend array by. */
+
+/** Adds a MemoryPointer to the database. */
+void Memory_Add_Pointer( MemoryPointer* memoryPointer );
+
+/** Frees the allocation associated with MemoryPointer, but not the pointer itself. */
+void Memory_Free_Pointer( MemoryPointer* memoryPointer );
+
+/** Attempts to find the pointer in database. */
+MemoryPointer* Memory_Find_Pointer( Pointer ptr );
+
+/** Setups the pointer locations in a 2D array. */
+void Memory_SetupPointer_2DArray(
+	void* ptr,
+	SizeT itemSize,
+	Index xLength,
+	Index yLength );
+
+/** Setups the pointer locations in a 3D array. */
+void Memory_SetupPointer_3DArray(
+	void* ptr,
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Index zLength );
+
+/** Moves data inside an enlarged 2D array to the appropriate position. */
+void Memory_Relocate_2DArray(
+	void* destPtr, 
+	void* srcPtr,
+	SizeT itemSize, 
+	Index oldX, 
+	Index oldY, 
+	Index newX, 
+	Index newY );
+
+/** Moves data inside an enlarged 3D array to the appropriate position. */
+void Memory_Relocate_3DArray( 
+	void* destPtr, 
+	void* srcPtr,
+	SizeT itemSize, 
+	Index oldX, 
+	Index oldY, 
+	Index oldZ,
+	Index newX, 
+	Index newY,
+	Index newZ );
+
+#define Memory_OutOfMemoryError( size ) \
+	_Memory_OutOfMemoryErrorFunc( __func__, __LINE__, size )
+
+/** Display an out of memory error after an alloc call */
+void _Memory_OutOfMemoryErrorFunc( const char* func, int line, SizeT size );
+
+
+int compareFunction_NodeData_To_NodeData (void *nodeData1, void *nodeData2){
+	
+	MemoryPointer *memPtr1;
+	MemoryPointer *memPtr2;
+	
+	memPtr1 = (MemoryPointer*) nodeData1;
+	memPtr2 = (MemoryPointer*) nodeData2;
+	
+	#if 0
+		printf ("comparing node data %p with data %p\t", memPtr->ptr, data2);
+		if (memPtr->ptr == data2){
+			printf (";pointers are equal");
+		}
+		printf ("\n");
+	#endif
+	
+	if ( memPtr1->ptrReference > memPtr2->ptrReference ){
+		return 1;
+	}
+	else if ( memPtr1->ptrReference == memPtr2->ptrReference && memPtr1->status != MEMORY_POINTER_RELEASED ){
+		return 0;
+	}
+	else{
+		return -1;
+	}
+}
+
+int compareFunction_NodeData_To_Value (void *nodeData, void *value){
+	
+	MemoryPointer *memPtr;
+	
+	memPtr = (MemoryPointer*) nodeData;
+	
+	#if 0
+		printf ("comparing node data %p with data %p\t", memPtr->ptrReference, value);
+		if (memPtr->ptrReference == value){
+			printf (";pointers are equal");
+		}
+		printf ("\n");
+	#endif
+	
+	if ( memPtr->ptrReference > value ){
+		return 1;
+	}
+	else if ( memPtr->ptrReference == value && memPtr->status != MEMORY_POINTER_RELEASED ){
+		return 0;
+	}
+	else{
+		return -1;
+	}
+}
+
+Memory* Memory_Init()
+{
+	Memory* result;
+	
+	
+	result = (Memory*) malloc( sizeof(Memory) );
+	if ( result == NULL ) {
+		Memory_OutOfMemoryError( sizeof(Memory) );
+	}
+	
+	result->enable = True;
+	result->stamp = 0;
+	
+	result->types = MemoryField_New( "Memory Statistics" );
+	result->files = MemoryField_New( "Memory Statistics" );
+	
+	result->ptrCount = 0;
+	result->ptrSize = MEMORY_INITIAL_SIZE;
+	
+	result->pointers = BTree_New ( compareFunction_NodeData_To_NodeData, NULL, NULL, NULL, BTREE_ALLOW_DUPLICATES );
+	
+	result->ptrCache = NULL;
+	result->memCache = NULL;
+	
+	result->infoStream = NULL;
+	result->errorStream = NULL;
+	result->debugStream = NULL;
+
+	result->stgCurrentMemory = 0;
+	result->stgPeakMemory = 0;
+	
+	return result;
+}
+
+void Memory_Delete()
+{
+	if ( stgMemory == NULL )
+	{
+		return;
+	}
+	
+	MemoryField_Delete( stgMemory->types );
+	MemoryField_Delete( stgMemory->files );
+	
+	/* Releasing the memory in the tree, that might not have been released by the user, before deleting the tree */
+	BTree_ParseTree ( stgMemory->pointers, MemoryPointer_Delete_Helper, NULL );
+	
+	/** Checking whether the memory module has been initialised before trying to delete it */
+	if( stgMemory->pointers != NULL){
+		BTree_Delete( stgMemory->pointers );
+	}
+}
+
+
+void* _Memory_Alloc_Func(
+	SizeT size,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	
+	MemoryPointer* memoryPointer;
+	
+	result = _Memory_InternalMalloc( size );
+	
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_OBJECT, size, size );
+		memoryPointer->length.oneD = 1;
+		
+		Memory_Add_Pointer( memoryPointer );
+	}
+	return result;
+}
+
+void* _Memory_Alloc_Array_Func(
+	SizeT itemSize,
+	Index arrayLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	SizeT size;
+	
+	MemoryPointer* memoryPointer;
+	
+	size = Memory_Length_1DArray( itemSize, arrayLength );
+	result = _Memory_InternalMalloc( size );
+	
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_1DARRAY, itemSize, size );
+		memoryPointer->length.oneD = arrayLength;
+		
+		Memory_Add_Pointer( memoryPointer );
+	}
+	return result;
+}
+
+void* _Memory_Alloc_2DArray_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	SizeT size;
+	
+	
+	#ifdef MEMORY_STATS
+		MemoryPointer* memoryPointer;
+	#endif
+	
+	size = Memory_Length_2DArray( itemSize, xLength, yLength );
+	result = _Memory_InternalMalloc( size );
+	
+	
+	Memory_SetupPointer_2DArray( result, itemSize, xLength, yLength );
+	
+	#ifdef MEMORY_STATS
+		if ( stgMemory->enable ) {
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_2DARRAY, itemSize, size );
+			memoryPointer->length.twoD[0] = xLength;
+			memoryPointer->length.twoD[1] = yLength;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	#endif
+	
+	return result;
+}
+
+void* _Memory_Alloc_3DArray_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Index zLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	SizeT size;
+	
+	#ifdef MEMORY_STATS
+		MemoryPointer* memoryPointer;
+	#endif
+	
+	size = Memory_Length_3DArray( itemSize, xLength, yLength, zLength );
+	result = _Memory_InternalMalloc( size );
+	
+	Memory_SetupPointer_3DArray( result, itemSize, xLength, yLength, zLength );
+	
+	#ifdef MEMORY_STATS
+		if ( stgMemory->enable ) {
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_3DARRAY, itemSize, size );
+			memoryPointer->length.threeD[0] = xLength;
+			memoryPointer->length.threeD[1] = yLength;
+			memoryPointer->length.threeD[2] = zLength;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	#endif
+	
+	return result;
+
+}
+		
+void* _Memory_Alloc_4DArray_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Index zLength,
+	Index wLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer		result;
+	Pointer*	array1;
+	Pointer**	array2;
+	Pointer***	array3;
+	SizeT size;
+	Index i, j, k;
+	int ptrHeader1, ptrHeader2, ptrHeader3;
+	int ySize, yzProduct, yzwProduct, zwProduct;
+	
+	#ifdef MEMORY_STATS
+		MemoryPointer* memoryPointer;
+	#endif
+	
+	size = Memory_Length_4DArray( itemSize, xLength, yLength, zLength, wLength );
+	result = _Memory_InternalMalloc( size );
+	
+	ptrHeader1 = sizeof(Pointer) * xLength;
+	ptrHeader2 = sizeof(Pointer) * xLength * yLength;
+	ptrHeader3 = sizeof(Pointer) * xLength * yLength * zLength;
+	
+	ySize = sizeof(Pointer) * yLength;
+	yzProduct = yLength * zLength;
+	yzwProduct = yLength * zLength * wLength;
+	zwProduct = zLength * wLength;
+	
+	array1 = (Pointer*) result;
+	for ( i = 0; i < xLength; ++i )
+	{
+		array1[i] = (Pointer)( (ArithPointer)result + ptrHeader1 + ( i * ySize ) );
+	}
+	
+	array2 = (Pointer**) result;
+	for ( i = 0; i < xLength; ++i )
+	{
+		for ( j = 0; j < yLength; ++j )
+		{
+			array2[i][j] = (Pointer)( (ArithPointer)result
+				+ ptrHeader1
+				+ ptrHeader2
+				+ ( ( (i * yzProduct) + (j * zLength) ) * sizeof(Pointer) ) );
+		}
+	}
+	
+	array3 = (Pointer***) result;
+	for ( i = 0; i < xLength; ++i )
+	{
+		for ( j = 0; j < yLength; ++j )
+		{
+			for ( k = 0; k < zLength; ++k )
+			{
+				array3[i][j][k] = (Pointer)( (ArithPointer)result
+					+ ptrHeader1
+					+ ptrHeader2
+					+ ptrHeader3
+					+ ( ( (i * yzwProduct) + (j * zwProduct) + (k * wLength) ) * itemSize ) );
+			}
+		}
+	}
+	
+	#ifdef MEMORY_STATS
+		if ( stgMemory->enable ) {
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_3DARRAY, itemSize, size );
+			memoryPointer->length.fourD[0] = xLength;
+			memoryPointer->length.fourD[1] = yLength;
+			memoryPointer->length.fourD[2] = zLength;
+			memoryPointer->length.fourD[3] = wLength;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	#endif
+	
+	return result;
+}
+
+
+void* _Memory_Alloc_2DArrayAs1D_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	SizeT size;
+	
+	MemoryPointer* memoryPointer;
+	
+	size = Memory_Length_2DAs1D( itemSize, xLength, yLength );
+	result = _Memory_InternalMalloc( size );
+	
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_2DAS1D, itemSize, size );
+		memoryPointer->length.twoD[0] = xLength;
+		memoryPointer->length.twoD[1] = yLength;
+		
+		Memory_Add_Pointer( memoryPointer );
+	}
+	return result;
+}
+
+void* _Memory_Alloc_3DArrayAs1D_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Index zLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	SizeT size;
+	
+	MemoryPointer* memoryPointer;
+	
+	size = Memory_Length_3DAs1D( itemSize, xLength, yLength, zLength );
+	result = _Memory_InternalMalloc( size );
+	
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_3DAS1D, itemSize, size );
+		memoryPointer->length.threeD[0] = xLength;
+		memoryPointer->length.threeD[1] = yLength;
+		memoryPointer->length.threeD[2] = zLength;
+		
+		Memory_Add_Pointer( memoryPointer );
+	}
+	
+	return result;
+}
+
+void* _Memory_Alloc_4DArrayAs1D_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Index zLength,
+	Index wLength,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer result;
+	SizeT size;
+	
+	MemoryPointer* memoryPointer;
+	
+	size = Memory_Length_4DAs1D( itemSize, xLength, yLength, zLength, wLength );
+	result = _Memory_InternalMalloc( size );
+	
+	
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_4DAS1D, itemSize, size );
+		memoryPointer->length.fourD[0] = xLength;
+		memoryPointer->length.fourD[1] = yLength;
+		memoryPointer->length.fourD[2] = zLength;
+		memoryPointer->length.fourD[3] = wLength;
+	
+		Memory_Add_Pointer( memoryPointer );
+	}
+	
+	return result;
+}
+
+#if 0
+void parseFunc (void *object, void *args){
+
+	MemoryPointer *memPtr = (MemoryPointer*)object;
+	printf ("\tdata - %p\n", memPtr->ptr);
+}
+#endif
+
+void* _Memory_Alloc_2DComplex_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index* yLengths,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer		result;
+	Pointer*	array;
+	SizeT size;
+	Index i;
+	
+	#ifdef MEMORY_STATS
+	MemoryPointer* memoryPointer;
+	#endif
+	
+	size = Memory_Length_2DComplex( itemSize, xLength, yLengths );
+	
+	if ( 0 == size ) {
+		Journal_Printf( stgMemory->errorStream, "Warning: %s() called to allocate a 2D variable "
+			"length array where the total size calculated was 0. Returning NULL.\n" );
+		return NULL;
+	}
+	
+	result = _Memory_InternalMalloc( size );
+	
+	
+	array = (Pointer*) result;
+	
+	/* Start of data area for the first array */
+	array[0] = (Pointer) ( (ArithPointer)array + sizeof(Pointer) * xLength);
+	
+	for ( i = 1; i < xLength; ++i )
+	{
+		/* The previous array plus the previous length offset */
+		array[i] = (Pointer)( (ArithPointer)array[i - 1] + ( itemSize * yLengths[i - 1] ) );
+	}
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_2DCOMPLEX, itemSize, size );
+		memoryPointer->length.xyz.x = xLength;
+		memoryPointer->length.xyz.y = (Index*) malloc( sizeof(Index) * xLength );
+		if ( memoryPointer->length.xyz.y == NULL ) {
+			Memory_OutOfMemoryError( sizeof(Index) * length );
+		}
+		
+		for ( i = 0; i < xLength; ++i )
+		{
+			memoryPointer->length.xyz.y[i] = yLengths[i];
+		}
+		
+		Memory_Add_Pointer( memoryPointer );
+	}
+	#endif
+	
+	return result;
+}
+
+
+Index** _Memory_Alloc_3DSetup_Func(
+	Index xLength,
+	Index* yLengths,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Index** result;
+	#ifdef MEMORY_STATS
+	MemoryPointer *memPtr;
+	#endif
+	
+	result = (Index**) _Memory_Alloc_2DComplex_Func( sizeof(Index), xLength, yLengths,
+		"Index", "MEMORY_SETUP", fileName, funcName, lineNumber );
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memPtr = Memory_Find_Pointer ( result );
+		assert( memPtr );
+		memPtr->allocType = MEMORY_3DSETUP;
+	}
+	#endif
+	
+	return result;
+}
+
+
+void* _Memory_Alloc_3DComplex_Func(
+	SizeT itemSize,
+	Index xLength,
+	Index* yLengths,
+	Index** zLengths,
+	Type type,
+	Name name,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	Pointer		result;
+	Pointer*	array1;
+	Pointer**	array2;
+	SizeT size;
+	Index i, j;
+	ArithPointer startPos, diffSize;
+	
+	#ifdef MEMORY_STATS
+	MemoryPointer* memoryPointer;
+	#endif
+	
+	size = Memory_Length_3DComplex( itemSize, xLength, yLengths, zLengths );
+	result = _Memory_InternalMalloc( size );
+	
+	
+	array1 = (Pointer*) result;
+	
+	/* Start of data area for the first array */
+	startPos = (ArithPointer)result;
+	diffSize = (ArithPointer)( sizeof(Pointer) * xLength );
+	for (i = 0; i < xLength; ++i)
+	{
+		array1[i] = (Pointer)( startPos + diffSize );
+		
+		/* The previous array plus the previous length offset */
+		startPos = (ArithPointer)array1[i];
+		diffSize = (ArithPointer)( sizeof(Pointer) * yLengths[i] );
+	}
+	
+	array2 = (Pointer**)result;
+	
+	for ( i = 0; i < xLength; ++i )
+	{
+		for ( j = 0; j < yLengths[i]; ++j )
+		{
+			array2[i][j] = (Pointer)( startPos + diffSize );
+			startPos = (ArithPointer)array2[i][j];
+			diffSize = (ArithPointer)( zLengths[i][j] * itemSize );
+		}
+	}
+	
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, name, fileName, funcName, lineNumber, MEMORY_3DCOMPLEX, itemSize, size );
+		memoryPointer->length.xyz.x = xLength;
+		memoryPointer->length.xyz.y = (Index*) malloc( sizeof(Index) * xLength );
+		if ( memoryPointer->length.xyz.y == NULL ) {
+			Memory_OutOfMemoryError( sizeof(Index) * xLength );
+		}
+		
+		for ( i = 0; i < xLength; ++i )
+		{
+			memoryPointer->length.xyz.y[i] = yLengths[i];
+		}
+		
+		memoryPointer->length.xyz.z = (Index**) malloc( Memory_Length_2DComplex( sizeof(Index), xLength, yLengths ) );
+		if ( memoryPointer->length.xyz.z == NULL ) {
+			Memory_OutOfMemoryError( Memory_Length_2DComplex( sizeof(Index), xLength, yLengths ) );
+		}
+		array1 = (Pointer*) memoryPointer->length.xyz.z;
+		
+		/* Start of data area for the first array */	
+		startPos = (ArithPointer)memoryPointer->length.xyz.z;
+		diffSize = (ArithPointer)( sizeof(Pointer) * xLength );
+		for (i = 0; i < xLength; ++i)
+		{
+			array1[i] = (Pointer)( startPos + diffSize );
+			
+			/* The previous array plus the previous length offset */
+			startPos = (ArithPointer)array1[i];
+			diffSize = (ArithPointer)( sizeof(Index) * yLengths[i] );
+		}
+		
+		/* Copy the z values */
+		for (i = 0; i < xLength; ++i)
+			{
+			for (j = 0; j < yLengths[i]; ++j)
+			{
+				memoryPointer->length.xyz.z[i][j] = zLengths[i][j];
+			}
+		}
+		
+		Memory_Add_Pointer( memoryPointer );
+	}
+	#endif
+	
+	return result;
+}
+
+
+void* _Memory_Realloc_Func( 
+	void* ptr, 
+	SizeT newSize,
+	Type type,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	MemoryPointer* memoryPointer;
+	BTreeNode *node;
+	SizeT diffBytes;
+	
+	Pointer result = NULL;
+	
+	memoryPointer = Memory_Find_Pointer( ptr );
+	result = _Memory_InternalRealloc( ptr, newSize );
+	
+	if ( stgMemory->enable ) {
+		if ( memoryPointer )
+		{
+			if ( memoryPointer->allocType == MEMORY_OBJECT )
+			{
+				if ( result != NULL )
+				{
+					if (stgMemory->pointers){
+						node = BTree_FindNode( stgMemory->pointers, (void*) memoryPointer );
+						assert( node );
+					
+						BTree_DeleteNode( stgMemory->pointers, (BTreeNode*) node );
+					}
+					
+					diffBytes = newSize - memoryPointer->totalSize;
+					MemoryField_Update( memoryPointer->name, diffBytes );
+					MemoryField_Update( memoryPointer->func, diffBytes );
+					memoryPointer->ptr = result;
+					memoryPointer->ptrReference = result;
+					memoryPointer->stamp = stgMemory->stamp++;
+					
+					memoryPointer->itemSize = newSize;
+					memoryPointer->totalSize = newSize;
+					stgMemory->ptrCache = result;
+					stgMemory->memCache = memoryPointer;
+		
+					if (stgMemory->pointers){
+						BTree_InsertNode( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+					}
+				}
+				else
+				{
+					memoryPointer->ptr = NULL;
+					memoryPointer->status = MEMORY_POINTER_RELEASED;
+					memoryPointer->stamp = stgMemory->stamp++;
+				}
+			}
+			/* Any other pointer type is invalid use of function */
+		}
+		else
+		{
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, Name_Invalid,
+				fileName, funcName, lineNumber, MEMORY_OBJECT, newSize, newSize );
+			memoryPointer->length.oneD = 1;
+			Memory_Add_Pointer( memoryPointer );
+		}
+	}
+	
+	return result;
+}
+
+
+void* _Memory_Realloc_Array_Func( 
+	void* ptr, 
+	SizeT itemSize, 
+	Index newLength,
+	Type type,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	MemoryPointer* memoryPointer;
+	BTreeNode *node;
+	SizeT newSize;
+	SizeT diffBytes;
+	
+	Pointer result = NULL;
+	
+	memoryPointer = Memory_Find_Pointer( ptr );
+	
+	newSize = itemSize * newLength;
+	result = _Memory_InternalRealloc( ptr, newSize );
+	
+	if ( stgMemory->enable ) {
+		if ( memoryPointer )
+		{
+			if ( memoryPointer->allocType == MEMORY_1DARRAY )
+			{
+				if ( result != NULL )
+				{
+					MemoryPointer* copy;
+					
+					if (stgMemory->pointers){
+						node = BTree_FindNode( stgMemory->pointers, (void*) memoryPointer );
+						assert( node );
+					
+						BTree_DeleteNode( stgMemory->pointers, (BTreeNode*) node );
+					}
+					
+					diffBytes = newSize - memoryPointer->totalSize;
+					MemoryField_Update( memoryPointer->name, diffBytes );
+					MemoryField_Update( memoryPointer->func, diffBytes );
+					
+					memoryPointer->ptr = result;
+					memoryPointer->ptrReference = result;
+					memoryPointer->stamp = stgMemory->stamp++;
+					memoryPointer->itemSize = itemSize;
+					memoryPointer->totalSize = newSize;
+					memoryPointer->length.oneD = newLength;
+					
+					copy = (MemoryPointer*)_Memory_InternalMalloc( sizeof( MemoryPointer ) );
+					memcpy( copy, memoryPointer, sizeof( MemoryPointer) );
+					
+					copy->ptr = result;
+					copy->ptrReference = result;
+					
+					
+					stgMemory->ptrCache = result;
+					stgMemory->memCache = memoryPointer;
+					
+					if (stgMemory->pointers){
+						BTree_InsertNode( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+					}
+					
+				}
+				else
+				{
+					memoryPointer->ptr = NULL;
+					memoryPointer->status = MEMORY_POINTER_RELEASED;
+					memoryPointer->stamp = stgMemory->stamp++;
+				}
+			}
+			/* Any other pointer type is invalid use of function */
+		}
+		else
+		{
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, Name_Invalid,
+				fileName, funcName, lineNumber, MEMORY_1DARRAY, itemSize, newSize );
+			memoryPointer->length.oneD = newLength;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	}
+	return result;
+}
+
+
+void* _Memory_Realloc_2DArray_Func(
+	void* ptr,
+	SizeT itemSize, 
+	Index oldX,
+	Index oldY,
+	Index newX, 
+	Index newY,
+	Type type,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	#ifdef MEMORY_STATS
+	MemoryPointer* memoryPointer;
+	SizeT diffBytes;
+	BTreeNode *node;
+	#endif
+	
+	SizeT newSize = 0;
+	Pointer result = NULL;
+	Pointer* array;
+	
+	if ( ptr != NULL )
+	{
+		array = (Pointer*)ptr;
+		oldX = ( (ArithPointer)array[0] - (ArithPointer)ptr ) / sizeof(Pointer);
+		oldY = ( (ArithPointer)array[1] - (ArithPointer)array[0] ) / itemSize;
+	}
+	
+	newSize = Memory_Length_2DArray( itemSize, newX, newY );
+	result = _Memory_InternalRealloc( ptr, newSize );
+	
+	if ( ptr != NULL )
+	{
+		Memory_Relocate_2DArray( (Pointer)( (ArithPointer)result + (newX * sizeof(Pointer)) ),
+					 (Pointer)( (ArithPointer)result + (oldX * sizeof(Pointer)) ),
+					 itemSize, oldX, oldY, newX, newY );
+	}
+	
+	Memory_SetupPointer_2DArray( result, itemSize, newX, newY );
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memoryPointer = Memory_Find_Pointer( ptr );
+		if ( memoryPointer )
+		{
+			if ( memoryPointer->allocType == MEMORY_2DARRAY )
+			{
+				if (stgMemory->pointers){
+					node = BTree_FindNode( stgMemory->pointers, (void*) memoryPointer );
+					assert( node );
+				
+					BTree_DeleteNode( stgMemory->pointers, (void*) node );
+				}
+				
+				diffBytes = newSize - memoryPointer->totalSize;
+				MemoryField_Update( memoryPointer->name, diffBytes );
+				MemoryField_Update( memoryPointer->func, diffBytes );
+				memoryPointer->ptr = result;
+				memoryPointer->ptrReference = result;
+				memoryPointer->stamp = stgMemory->stamp++;
+				memoryPointer->itemSize = itemSize;
+				memoryPointer->totalSize = newSize;
+				memoryPointer->length.twoD[0] = newX;
+				memoryPointer->length.twoD[1] = newY;
+				stgMemory->ptrCache = result;
+				stgMemory->memCache = memoryPointer;
+				
+				if (stgMemory->pointers){
+					BTree_InsertNode( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+				}
+			}
+			/* Any other pointer type is invalid use of function */
+		}
+		else
+		{
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, Name_Invalid,
+				fileName, funcName, lineNumber, MEMORY_2DARRAY, itemSize, newSize );
+			memoryPointer->length.twoD[0] = newX;
+			memoryPointer->length.twoD[1] = newY;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	}
+	#endif
+	
+	return result;
+}
+
+void* _Memory_Realloc_3DArray_Func( 
+	void* ptr, 
+	SizeT itemSize, 
+	Index oldX,
+	Index oldY,
+	Index oldZ,
+	Index newX, 
+	Index newY, 
+	Index newZ,
+	Type type,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	#ifdef MEMORY_STATS
+	MemoryPointer* memoryPointer;
+	SizeT diffBytes;
+	BTreeNode *node;
+	#endif
+	
+	SizeT newSize = 0;
+	Pointer result = NULL;
+	Pointer* array;
+	Pointer** array2;
+	
+	if ( ptr != NULL )
+	{
+		array = (Pointer*)ptr;
+		array2 = (Pointer**)ptr;
+		
+		oldX = ( (ArithPointer)array[0] - (ArithPointer)ptr ) / sizeof(Pointer);
+		oldY = ( (ArithPointer)array[1] - (ArithPointer)array[0] ) / sizeof(Pointer);
+		oldZ = ( (ArithPointer)array2[0][1] - (ArithPointer)array2[0][0] ) / itemSize;
+	}
+	
+	newSize = Memory_Length_3DArray( itemSize, newX, newY, newZ );
+	result = _Memory_InternalRealloc( ptr, newSize );
+	
+	if ( ptr != NULL )
+	{
+		Memory_Relocate_3DArray( (Pointer)( (ArithPointer)result + ( (newX + (newX * newY)) * sizeof(Pointer) ) ),
+					 (Pointer)( (ArithPointer)result + ( (oldX + (oldX * oldY)) * sizeof(Pointer) ) ),
+					 itemSize, oldX, oldY, oldZ, newX, newY, newZ );
+	}
+	
+	Memory_SetupPointer_3DArray( result, itemSize, newX, newY, newZ );
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memoryPointer = Memory_Find_Pointer( ptr );
+		if ( memoryPointer )
+		{
+			if ( memoryPointer->allocType == MEMORY_3DARRAY )
+			{
+				if (stgMemory->pointers){
+					node = BTree_FindNode( stgMemory->pointers, (void*) memoryPointer );
+					assert( node );
+				
+					BTree_DeleteNode( stgMemory->pointers, (void*) node );
+				}
+				
+				diffBytes = newSize - memoryPointer->totalSize;
+				MemoryField_Update( memoryPointer->name, diffBytes );
+				MemoryField_Update( memoryPointer->func, diffBytes );
+				memoryPointer->ptr = result;
+				memoryPointer->ptrReference = result;
+				memoryPointer->stamp = stgMemory->stamp++;
+				memoryPointer->itemSize = itemSize;
+				memoryPointer->totalSize = newSize;
+				memoryPointer->length.threeD[0] = newX;
+				memoryPointer->length.threeD[1] = newY;
+				memoryPointer->length.threeD[2] = newZ;
+				stgMemory->ptrCache = result;
+				stgMemory->memCache = memoryPointer;
+				
+				if (stgMemory->pointers){
+					BTree_InsertNode( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+				}
+			}
+			/* Any other pointer type is invalid use of function */
+		}
+		else
+		{
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, Name_Invalid,
+				fileName, funcName, lineNumber, MEMORY_3DARRAY, itemSize, newSize );
+			memoryPointer->length.twoD[0] = newX;
+			memoryPointer->length.twoD[1] = newY;
+			memoryPointer->length.twoD[2] = newY;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	}
+	#endif
+	
+	return result;
+}
+
+void* _Memory_Realloc_2DArrayAs1D_Func( 
+	void* ptr, 
+	SizeT itemSize, 
+	Index oldX, 
+	Index oldY, 
+	Index newX, 
+	Index newY,
+	Type type,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	#ifdef MEMORY_STATS
+	MemoryPointer* memoryPointer;
+	BTreeNode *node;
+	SizeT diffBytes;
+	#endif
+	
+	SizeT newSize;
+	Pointer result = NULL;
+	
+	newSize = itemSize * newX * newY;
+	result = _Memory_InternalRealloc( ptr, newSize );
+	
+	if ( ptr != NULL )
+	{
+		Memory_Relocate_2DArray( result, result, itemSize, oldX, oldY, newX, newY );
+	}
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memoryPointer = Memory_Find_Pointer( ptr );
+		if ( memoryPointer )
+		{
+			if ( memoryPointer->allocType == MEMORY_2DAS1D )
+			{
+				if (stgMemory->pointers){
+					node = BTree_FindNode( stgMemory->pointers, (void*) memoryPointer );
+					assert( node );
+				
+					BTree_DeleteNode( stgMemory->pointers, (void*) node );
+				}
+				
+				diffBytes = newSize - memoryPointer->totalSize;
+				MemoryField_Update( memoryPointer->name, diffBytes );
+				MemoryField_Update( memoryPointer->func, diffBytes );
+				memoryPointer->ptr = result;
+				memoryPointer->ptrReference = result;
+				memoryPointer->stamp = stgMemory->stamp;
+				memoryPointer->itemSize = itemSize;
+				memoryPointer->totalSize = newSize;
+				memoryPointer->length.twoD[0] = newX;
+				memoryPointer->length.twoD[1] = newY;
+				stgMemory->ptrCache = result;
+				stgMemory->memCache = memoryPointer;
+				
+				if (stgMemory->pointers){
+					BTree_InsertNode( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+				}
+			}
+			/* Any other pointer type is invalid use of function */
+		}
+		else
+		{
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, Name_Invalid,
+				fileName, funcName, lineNumber, MEMORY_2DAS1D, itemSize, newSize );
+			memoryPointer->length.twoD[0] = newX;
+			memoryPointer->length.twoD[1] = newY;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	}
+	#endif
+	
+	return result;
+}
+
+void* _Memory_Realloc_3DArrayAs1D_Func( 
+	void* ptr, 
+	SizeT itemSize,
+	Index oldX, 
+	Index oldY, 
+	Index oldZ, 
+	Index newX, 
+	Index newY, 
+	Index newZ,
+	Type type,
+	const char* fileName,
+	const char* funcName,
+	int lineNumber )
+{
+	#ifdef MEMORY_STATS
+	MemoryPointer* memoryPointer;
+	BTreeNode *node;
+	SizeT diffBytes;
+	#endif
+	
+	SizeT newSize;
+	Pointer result = NULL;
+	
+	newSize = itemSize * newX * newY * newZ;
+	result = _Memory_InternalRealloc( ptr, newSize );
+	
+	if ( ptr != NULL )
+	{
+		Memory_Relocate_3DArray( result, result, itemSize, oldX, oldY, oldZ, newX, newY, newZ );
+	}
+	
+	#ifdef MEMORY_STATS
+	if ( stgMemory->enable ) {
+		memoryPointer = Memory_Find_Pointer( ptr );
+		if ( memoryPointer )
+		{
+			if ( memoryPointer->allocType == MEMORY_3DAS1D )
+			{
+				if (stgMemory->pointers){
+					node = BTree_FindNode( stgMemory->pointers, (void*) memoryPointer );
+					assert( node );
+				
+					BTree_DeleteNode( stgMemory->pointers, (void*) node );
+				}
+				
+				diffBytes = newSize - memoryPointer->totalSize;
+				MemoryField_Update( memoryPointer->name, diffBytes );
+				MemoryField_Update( memoryPointer->func, diffBytes );
+				memoryPointer->ptr = result;
+				memoryPointer->ptrReference = result;
+				memoryPointer->stamp = stgMemory->stamp++;
+				memoryPointer->itemSize = itemSize;
+				memoryPointer->totalSize = newSize;
+				memoryPointer->length.threeD[0] = newX;
+				memoryPointer->length.threeD[1] = newY;
+				memoryPointer->length.threeD[2] = newZ;
+				stgMemory->ptrCache = result;
+				stgMemory->memCache = memoryPointer;
+				
+				if (stgMemory->pointers){
+					BTree_InsertNode( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+				}
+			}
+			/* Any other pointer type is invalid use of function */
+		}
+		else
+		{
+			memoryPointer = MemoryPointer_New( result, stgMemory->stamp++, type, Name_Invalid,
+				fileName, funcName, lineNumber, MEMORY_3DAS1D, itemSize, newSize );
+			memoryPointer->length.twoD[0] = newX;
+			memoryPointer->length.twoD[1] = newY;
+			memoryPointer->length.twoD[2] = newY;
+			
+			Memory_Add_Pointer( memoryPointer );
+		}
+	}
+	#endif
+	
+	return result;
+}
+
+
+void _Memory_Free_Func( void* ptr )
+{
+	MemoryPointer* memoryPointer = NULL;
+	
+	memoryPointer = Memory_Find_Pointer( ptr );
+	
+	if ( memoryPointer )
+	{
+		Memory_Free_Pointer( memoryPointer );
+	}
+else
+{
+		_Memory_InternalFree( ptr );
+	}
+}
+	
+SizeT Memory_Length_1DArray( SizeT itemSize, Index length )
+{
+	return itemSize * length;
+}
+
+SizeT Memory_Length_2DArray( SizeT itemSize, Index xLength, Index yLength )
+{
+	return ( sizeof(Pointer) * xLength ) + ( itemSize * xLength * yLength );
+}
+
+SizeT Memory_Length_3DArray( SizeT itemSize, Index xLength, Index yLength, Index zLength )
+{
+	return ( sizeof(Pointer) * ( xLength + xLength * yLength ) ) + ( itemSize * xLength * yLength * zLength );
+}
+
+
+SizeT Memory_Length_4DArray( SizeT itemSize, Index xLength, Index yLength, Index zLength, Index wLength )
+{
+	return ( sizeof(Pointer) * ( xLength + xLength * yLength + xLength * yLength * zLength ) )
+		 + ( itemSize * xLength * yLength * zLength * wLength );
+}
+
+SizeT Memory_Length_2DComplex( SizeT itemSize, Index xLength, Index* yLengths )
+{
+	Index i;
+	SizeT result = 0;
+	for ( i = 0; i < xLength; ++i )
+	{
+		result += yLengths[i];
+	}
+	result *= itemSize;
+	result += sizeof(Pointer) * xLength;
+	
+	return result;
+	
+}
+
+SizeT Memory_Length_3DComplex( SizeT itemSize, Index xLength, Index* yLengths, Index** zLengths )
+{
+	Index i, j;
+	SizeT result = 0;
+	SizeT ptrSize = xLength;
+	
+	for ( i = 0; i < xLength; ++i )
+	{
+		for ( j = 0; j < yLengths[i]; ++j )
+		{
+			result += zLengths[i][j];
+		}
+		ptrSize += yLengths[i];
+	}
+	result *= itemSize;
+	result += sizeof(Pointer) * ptrSize; 
+	
+	return result;
+}
+
+SizeT Memory_Length_2DAs1D( SizeT itemSize, Index xLength, Index yLength )
+{
+	return itemSize * xLength * yLength;
+}
+
+SizeT Memory_Length_3DAs1D( SizeT itemSize, Index xLength, Index yLength, Index zLength )
+{
+	return itemSize * xLength * yLength * zLength;
+}
+
+SizeT Memory_Length_4DAs1D( SizeT itemSize, Index xLength, Index yLength, Index zLength, Index wLength )
+{
+	return itemSize * xLength * yLength * zLength * wLength;
+}
+
+void Memory_Print_Summary()
+{
+	Index i;
+	
+	MemoryField_PrintSummary( stgMemory->types, "Type" );
+	
+	Stream_Indent( stgMemory->infoStream );
+	
+	for ( i = 0; i < stgMemory->types->subCount; ++i )
+	{
+		Journal_Printf( stgMemory->infoStream, "\n" );
+		MemoryField_PrintSummary( stgMemory->types->subFields[i], "Name" );
+	}
+	
+	Stream_UnIndent( stgMemory->infoStream );
+}
+
+void Memory_Print()
+{
+	Memory_Print_Summary();
+}
+
+void Memory_Print_Leak()
+{
+	Memory_Print_Leak_Helper_Arg arguments;
+	
+	arguments.printOptions = MEMORYPOINTER_ALL;
+	arguments.numLeaks = 0;
+	arguments.warningPrinted = False;
+	
+	BTree_ParseTree ( stgMemory->pointers, Memory_Print_Leak_Helper,  (void*)( &arguments ) );
+	
+	if ( arguments.numLeaks > 0 )
+	{
+		printf( "\nPossible leaks detected: %d\n", arguments.numLeaks );
+	}
+	
+}
+
+void Memory_Print_Leak_Helper( void *memoryPointer, void *args )
+{
+	MemoryPointer *memPtr = NULL;
+	Memory_Print_Leak_Helper_Arg *arguments = NULL;
+	
+	assert( memoryPointer );
+	assert( args );
+	
+	memPtr = (MemoryPointer*) memoryPointer;
+	arguments = (Memory_Print_Leak_Helper_Arg*) args;
+	
+	if ( memPtr->ptr != NULL && memPtr->status != MEMORY_POINTER_RELEASED ){
+		if ( !arguments->warningPrinted )
+		{
+			/* A leak exists, so print warning title. */
+			Journal_Printf( stgMemory->infoStream, "Warning. Possible memory leak:\n" );
+			arguments->warningPrinted = True;
+		}
+		
+		MemoryPointer_PrintAll( memPtr );
+		++arguments->numLeaks;
+	}
+}
+
+
+void Memory_Print_Type_Func( Type type )
+{
+	MemoryField* typeField;
+	
+	typeField = MemoryField_Register( stgMemory->types, type );
+	
+	MemoryField_PrintSummary( typeField, "Name" );
+}
+
+void Memory_Print_Type_Name_Func( Type type, Name name )
+{
+	MemoryField* typeField;
+	MemoryField* nameField;
+	MemoryPointer* memPtr;
+	MemoryPointer_Print_Type_Name_Func_Helper_Arg arguments;
+	
+	
+	typeField = MemoryField_Register( stgMemory->types, type );
+	nameField = MemoryField_Register( typeField, name );
+	
+	Journal_PrintfL( stgMemory->infoStream, 1, "Type: %s\n", type );
+	MemoryField_PrintHeaderAll( "Name" );
+	MemoryField_PrintAll( nameField );
+	
+	Stream_Indent( stgMemory->infoStream );
+	
+	memPtr = NULL;
+	arguments.printOptions = (MemoryPointerColumn)(
+				MEMORYPOINTER_PTR |
+				MEMORYPOINTER_FILE |
+				MEMORYPOINTER_FUNC |
+				MEMORYPOINTER_LINE |
+				MEMORYPOINTER_ALLOCTYPE |
+				MEMORYPOINTER_ITEMSIZE |
+				MEMORYPOINTER_TOTALSIZE |
+				MEMORYPOINTER_LENGTH);
+	arguments.type = type;
+	arguments.name = name;
+	
+	BTree_ParseTree ( stgMemory->pointers, MemoryPointer_Print_Type_Name_Func_Helper, (void *) ( &arguments ) );
+	
+	Stream_UnIndent( stgMemory->infoStream );
+}
+
+
+void Memory_Print_File( char* fileName )
+{
+	MemoryField* fileField;
+	
+	fileField = MemoryField_Register( stgMemory->files, fileName );
+	
+	MemoryField_PrintSummary( fileField, "Function" );
+}
+
+void Memory_Print_File_Function( char* fileName, char* funcName )
+{
+	MemoryField* fileField;
+	MemoryField* funcField;
+	MemoryPointer* memPtr;
+	MemoryPointer_Print_File_Func_Helper_Arg arguments;
+	
+	fileField = MemoryField_Register( stgMemory->files, fileName );
+	funcField = MemoryField_Register( fileField, funcName );
+	
+	Journal_PrintfL( stgMemory->infoStream, 1, "File: %s\n", fileName );
+	MemoryField_PrintHeaderAll( "Function" );
+	MemoryField_PrintAll( funcField );
+	
+	Stream_Indent( stgMemory->infoStream );
+	
+	memPtr = NULL;
+	arguments.printOptions = (MemoryPointerColumn)(
+				MEMORYPOINTER_PTR |
+				MEMORYPOINTER_TYPE |
+				MEMORYPOINTER_NAME |
+				MEMORYPOINTER_LINE |
+				MEMORYPOINTER_ALLOCTYPE |
+				MEMORYPOINTER_ITEMSIZE |
+				MEMORYPOINTER_TOTALSIZE |
+				MEMORYPOINTER_LENGTH);
+	arguments.fileName = fileName;
+	arguments.funcName = funcName;
+		
+	BTree_ParseTree ( stgMemory->pointers, MemoryPointer_Print_File_Func_Helper, (void*) ( &arguments ) );
+	
+	Stream_UnIndent( stgMemory->infoStream );
+
+}
+
+void Memory_Print_Pointer( void* ptr )
+{
+	MemoryPointer* memoryPointer;
+	
+	BTree_SetCompareFunction( stgMemory->pointers, compareFunction_NodeData_To_Value );
+	memoryPointer = Memory_Find_Pointer( ptr );
+	if ( memoryPointer )
+	{
+		MemoryPointer_PrintAll( memoryPointer );
+	}
+	else
+	{
+		Journal_Printf( stgMemory->infoStream, "No entry exists for (ptr) %p\n", ptr );
+	}
+	BTree_SetCompareFunction( stgMemory->pointers, compareFunction_NodeData_To_NodeData );
+}
+
+
+
+void _Memory_Free_Type_Name_Func( Type type, Name name )
+{
+	Memory_Free_Type_Name_Func_Helper_Arg arguments;
+	
+	arguments.name = name;
+	arguments.type = type;
+	
+	BTree_ParseTree ( stgMemory->pointers, _Memory_Free_Type_Name_Func_Helper, &arguments );
+}
+
+void _Memory_Free_Type_Name_Func_Helper( void *memoryPointer, void *args ){
+	MemoryPointer *memPtr = NULL;
+	MemoryField* typeField;
+	MemoryField* nameField;
+	Memory_Free_Type_Name_Func_Helper_Arg *arguments;
+	
+	assert ( memoryPointer );
+	assert ( args );
+	
+	arguments = (Memory_Free_Type_Name_Func_Helper_Arg *) args;
+	memPtr = (MemoryPointer*) memoryPointer;
+	
+	typeField = MemoryField_Register( stgMemory->types, arguments->type );
+	nameField = MemoryField_Register( typeField, arguments->name );
+	
+	
+	if ( memPtr->ptr != NULL
+			&& memPtr->type == typeField
+			&& memPtr->name == nameField )
+	{
+		Memory_Free_Pointer( memPtr );
+	}
+}
+
+void _Memory_Free_Type_Func( Type type )
+{
+	BTree_ParseTree( stgMemory->pointers, _Memory_Free_Type_Func_Helper, (void*) type );
+}
+
+void _Memory_Free_Type_Func_Helper ( void *memoryPointer, void *args )
+{
+	MemoryPointer *memPtr = NULL;
+	MemoryField* typeField;
+	Type type;
+	
+	assert ( memoryPointer );
+	assert ( args );
+	
+	type = (Type) args;
+	memPtr = (MemoryPointer*) memoryPointer;
+	
+	typeField = MemoryField_Register( stgMemory->types, type );
+	
+	if ( memPtr->ptr != NULL
+		&& memPtr->type == typeField )
+	{
+		Memory_Free_Pointer( memPtr );
+	}
+}
+
+Bool Memory_IsAllocated( void* ptr ) {
+
+	#ifdef MEMORY_STATS
+		if ( stgMemory->enable ) {
+			return Memory_Find_Pointer( ptr ) != NULL;
+		}
+		else {
+			#ifdef DEBUG
+				Journal_Printf( 
+					stgMemory->debugStream,
+					"Warning: Memory module not enabled. Memory_IsAllocated() is meaningless\n" );
+			#endif
+			return True;
+		}
+	#else
+		#ifdef DEBUG
+			Journal_Printf(
+				stgMemory->debugStream,
+				"Warning: Memory module not compiled - Memory_IsAllocated() is meaningless\n" );
+		#endif
+		return True;
+	#endif
+}
+
+
+/* Begin private functions */
+
+void Memory_Add_Pointer( MemoryPointer* memoryPointer )
+{
+	assert ( memoryPointer );
+	
+	stgMemory->ptrCache = memoryPointer->ptr;
+	stgMemory->memCache = memoryPointer;
+	
+		if ( !memoryPointer->ptr ){
+#if 0 			
+			printf ("trying to insert a null pointer\n");
+#endif
+			return;
+		}
+
+	BTree_InsertNode ( stgMemory->pointers, memoryPointer, sizeof( MemoryPointer* ) );
+}
+
+void Memory_Free_Pointer( MemoryPointer* memoryPointer )
+{
+	_Memory_InternalFree( memoryPointer->ptr );
+	memoryPointer->ptr = NULL;
+	memoryPointer->status = MEMORY_POINTER_RELEASED;
+	memoryPointer->stamp = stgMemory->stamp++;
+	
+	memoryPointer->name->freeCount++;
+	memoryPointer->func->freeCount++;
+	
+	MemoryField_Update( memoryPointer->name, -(memoryPointer->totalSize) );
+	MemoryField_Update( memoryPointer->func, -(memoryPointer->totalSize) );
+}
+
+MemoryPointer* Memory_Find_Pointer( Pointer ptr )
+{
+	BTreeNode *node = NULL;
+	MemoryPointer *result = NULL;
+	
+	if ( stgMemory->ptrCache == ptr ){
+		return stgMemory->memCache;
+	}
+	
+	BTree_SetCompareFunction( stgMemory->pointers, compareFunction_NodeData_To_Value );
+	
+	node = BTree_FindNode( stgMemory->pointers, (void*) ptr);
+	
+	BTree_SetCompareFunction( stgMemory->pointers, compareFunction_NodeData_To_NodeData );
+	
+	if ( node != NULL ){
+		result = (MemoryPointer*) BTree_GetData( node );
+	}
+	else{
+		result = NULL;
+	}
+	
+	return result;
+}
+
+void Memory_SetupPointer_2DArray(
+	void* ptr,
+	SizeT itemSize,
+	Index xLength,
+	Index yLength )
+{
+	Pointer* array;
+	int ptrHeaderSize;
+	int ySize;
+	Index i;
+	
+	ptrHeaderSize = sizeof(Pointer) * xLength;
+	ySize = itemSize * yLength;
+	
+	array = (Pointer*) ptr;
+	for (i = 0; i < xLength; ++i )
+	{
+		array[i] = (Pointer)( (ArithPointer)ptr + ptrHeaderSize + ( i * ySize ) ) ;
+	}
+
+}
+
+void Memory_SetupPointer_3DArray(
+	void* ptr,
+	SizeT itemSize,
+	Index xLength,
+	Index yLength,
+	Index zLength )
+{
+	Pointer*	array1;
+	Pointer**	array2;
+	Index i, j;
+	int ptrHeader1, ptrHeader2;
+	int ySize, yzProduct;
+	
+	ptrHeader1 = sizeof(Pointer) * xLength;
+	ptrHeader2 = sizeof(Pointer) * xLength * yLength;
+	
+	ySize = sizeof(Pointer) * yLength;
+	yzProduct = yLength * zLength;
+	
+	array1 = (Pointer*) ptr;
+	for ( i = 0; i < xLength; ++i )
+	{
+		array1[i] = (Pointer)( (ArithPointer)ptr + ptrHeader1 + ( i * ySize ) );
+	}
+	
+	array2 = (Pointer**) ptr;
+	for ( i = 0; i < xLength; ++i )
+	{
+		for ( j = 0; j < yLength; ++j )
+		{
+			array2[i][j] = (Pointer)( (ArithPointer)ptr
+				+ ptrHeader1
+				+ ptrHeader2
+				+ ( ( (i * yzProduct) + (j * zLength) ) * itemSize ) );
+		}
+	}
+}
+
+
+void Memory_Relocate_2DArray(
+	void* destPtr, 
+	void* srcPtr,
+	SizeT itemSize, 
+	Index oldX, 
+	Index oldY, 
+	Index newX, 
+	Index newY )
+{
+	int i, j;
+	
+	if ( ( oldX > newX ) || ( oldY > newY ) )
+	{
+		/* Cannot handle these combinations yet. */
+		assert( 0 );
+		return;
+	}
+	
+	/* copy in reverse order to avoid overwritting data */
+	for ( i = oldX - 1; i >= 0; --i )
+	{
+		for ( j = oldY - 1; j >= 0; --j )
+		{
+			memcpy( (Pointer)((ArithPointer)destPtr + ( ((i * newY) + j) * itemSize ) ),
+				(Pointer)((ArithPointer)srcPtr + (  ((i * oldY) + j) * itemSize ) ),
+				itemSize );
+		}
+	}
+}
+
+void Memory_Relocate_3DArray( 
+	void* destPtr, 
+	void* srcPtr,
+	SizeT itemSize, 
+	Index oldX, 
+	Index oldY, 
+	Index oldZ,
+	Index newX, 
+	Index newY,
+	Index newZ )
+{
+	int i, j, k;
+	
+	if ( ( oldX > newX ) || ( oldY > newY ) || ( oldZ > newZ ) )
+	{
+		/* Cannot handle these combinations yet. */
+		return;
+	}
+	
+	/* copy in reverse order to avoid overwritting data */
+	for ( i = oldX - 1; i >= 0; --i )
+	{
+		for ( j = oldY - 1; j >= 0; --j )
+		{
+			for ( k = oldZ - 1; k >= 0; --k )
+			{
+				memcpy( (Pointer)((ArithPointer)destPtr + ( ((i * newY * newZ) + (j * newZ) + k) * itemSize ) ),
+					(Pointer)((ArithPointer)srcPtr  + ( ((i * oldY * oldZ) + (j * oldZ) + k) * itemSize ) ),
+					itemSize );
+			}
+		}
+	}
+}
+
+void* _Memory_InternalMalloc( SizeT size ) {
+	void* result;
+	void* data;
+#ifdef NOEXPERIMENT			
+	result = malloc( size );
+	if ( result == NULL ) {
+		Memory_OutOfMemoryError( size );
+	}
+	return result;
+#else
+	unsigned long prev = stgMemory->stgCurrentMemory;
+	stgMemory->stgCurrentMemory += size;
+	stgMemory->stgPeakMemory = MAX( stgMemory->stgCurrentMemory, prev );
+	
+	result = malloc( size + sizeof( MemoryTag ) );
+	if ( result == NULL ) {
+		result = malloc( size + sizeof( MemoryTag ) );
+		if ( result == NULL ) {
+			Memory_OutOfMemoryError( size + sizeof( MemoryTag ) );
+		}
+	}
+	data = (void*)((ArithPointer)result + sizeof( MemoryTag ));
+	
+	Memory_CountGet( data ) = 0;
+	Memory_SizeGet( data ) = size;
+
+	return data;
+#endif
+}
+
+void* _Memory_InternalRealloc( void* ptr, SizeT size ) {
+	void* result;
+	void* data;
+	int count = 0;
+#ifdef NOEXPERIMENT
+	result =  realloc( ptr, size );
+	if ( result == NULL ) {
+		Memory_OutOfMemoryError( size );
+	}
+	return result;
+#else
+	unsigned long prev = stgMemory->stgCurrentMemory;
+
+	if ( ptr == 0 ) {
+		return _Memory_InternalMalloc( size );
+	}
+	count = Memory_CountGet( ptr );		/* Store previous count */
+	stgMemory->stgCurrentMemory -= Memory_SizeGet( ptr );
+	
+	result = realloc( (void*)( (ArithPointer)ptr - sizeof(MemoryTag) ), size + sizeof(MemoryTag) );
+	if ( result == NULL ) {
+		/* have second attempt */
+		result = realloc( (void*)( (ArithPointer)ptr - sizeof(MemoryTag) ), size + sizeof(MemoryTag) );
+		if ( result == NULL ) {
+			Memory_OutOfMemoryError( size + sizeof(MemoryTag) );
+		}
+	}
+	data = (void*)((ArithPointer)result + sizeof( MemoryTag ));
+
+	Memory_CountGet( data ) = count;
+	Memory_SizeGet( data )  = size;
+	stgMemory->stgCurrentMemory += size;
+	stgMemory->stgPeakMemory = MAX( stgMemory->stgCurrentMemory, prev );
+
+	return data;
+#endif
+
+}
+
+void _Memory_InternalFree( void* ptr ) {
+#ifdef NOEXPERIMENT
+	free( ptr );
+#else
+	stgMemory->stgCurrentMemory -= Memory_SizeGet( ptr );
+	free( (void*)((ArithPointer)ptr - sizeof( MemoryTag)) );
+#endif
+}
+
+
+void _Memory_OutOfMemoryErrorFunc( const char* func, int line, SizeT size ) {
+	Journal_Firewall(
+		0,
+		Journal_Register( Error_Type, "Memory" ),
+		"StGermain Memory Error!\n"
+		"\tAttempting to allocate %d bytes, in %s() line %d\n"
+		"\tCurrent StGermain memory usage is %d bytes\n",
+		size,
+		func,
+		line,
+		stgMemory->stgCurrentMemory );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,745 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053 Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	A memory management module that allows analysis of memory usage to a fidelity chosen by the developer,
+**	much like the Journal allows for streaming.
+**
+** <b>Assumptions</b>
+**	The memory module is an itegral part of the Foundation module and will only begin operation after Foundation_Init() is
+**	called. Likewise, the memory module will stop operation after Foundation_Finalise() is called.
+**
+**	Using Memory module functions outside while it is not in operation or disabled will most likely result in a segmentation
+**	fault.
+**
+** <b>Comments</b>
+**	Currently, the memory module is NOT thread safe. Future revisions of the module may possibly include this 
+**	functionality.
+**
+** <b>Description</b>
+**
+**	The memory module is designed to extend traditional C malloc() and free() functions to include statistical recording 
+**	and array allocation facilities. It contains a number of different functions which are used to replace malloc() and 
+**	free(). Typically these functions accept additional parameters regarding statistical information.
+**
+**	Allocations are organised into <b>types</b> - a textual value, indicating the type of the data object being 
+**	allocated. Each type, can be further sub-grouped into <b>names</b>, which is a textual tag to indicate  
+**	particular instances or member variables. These are added as part of the allocation routine.
+**
+**	It also includes information such as the file, function and line number the allocation was made from, to allow easy
+**	debugging.
+**
+**	The memory module provides facilities to perform general types of allocations - objects and arrays from 1D to 4D.
+**	For performance reasons, a set of allocation functions (2D to 4D) can be allocated as a 1D array, and used via Access
+**	macros. To conserve space, Complex arrays (2D to 3D) can also be created. Complex arrays basically allow the second
+**	(and third) dimensions to have varying lengths. For example, a 2D complex array may have 3 rows, where the length of each
+**	row is 4, 2 and 3 respectively.
+**
+**	Please visit the twiki page for details on how to use this module.
+**
+**	http://csd.vpac.org/twiki/bin/view/Stgermain/MemoryStats
+**
+** $Id: Memory.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_Foundation_Memory_h__
+#define __Base_Foundation_Memory_h__
+
+
+	/** Textual name for Memory class. */
+	extern const Type Memory_Type;
+
+	/** Memory module singleton. */
+	extern Memory* stgMemory;
+
+	
+	/**\def __Memory See Memory. */
+	#define __Memory \
+		Bool			enable;		/**< Run-time flag for enabling/disabling of statistics recording. */ \
+		MemoryOpStamp		stamp;		/**< A "time"/operation stamp of the things done */ \
+		MemoryField*		types;		/**< Contains all types, names are a sub field of types. */ \
+		MemoryField*		files;		/**< Contains all files, functions are a field set of functions. */ \
+		Index			ptrCount;	/**< Current number of pointers in array. */\
+		Index			ptrSize;	/**< Size of the pointers array. */ \
+		struct	BTree*		pointers;	/**< Large array listing all allocations made. */ \
+		Pointer			ptrCache;	/**< A cache to speed up localised searches. */ \
+		MemoryPointer*		memCache;	/**< The MemoryPointer associated with ptrCache. */ \
+		void*			infoStream;	/**< A Stream object where general output will be directed to. */ \
+		void*			errorStream;	/**< A Stream object where errors from by the Memory module is sent. */ \
+		void*			debugStream;	/**< A Stream object where debuging info from the Memory module is send.*/ \
+		unsigned long stgPeakMemory; \
+		unsigned long stgCurrentMemory;
+	struct Memory { __Memory };
+
+
+	/** Creates a Memory instance. */
+	Memory* Memory_Init();
+	
+	/** Deallocates the Memory singleton. */
+	void Memory_Delete();	
+
+	/** Enables/Disables Memory module for statistics recording. */
+	void Memory_SetEnable( Bool enable );
+
+	/* See implementations for _Memory_InternalMalloc and _Memory_InternalFree at the bottom of Memory.c */
+	/* Replacement for malloc(), to insert MemoryTag in front of every alloc */
+	void* _Memory_InternalMalloc( SizeT size );
+
+	/* Replacement for realloc(), to insert MemoryTag in front of every alloc */
+	void* _Memory_InternalRealloc( void* ptr, SizeT size );
+
+	/* Replacement for free(), to free a pointer that has a MemoryTag */
+	void _Memory_InternalFree( void* ptr );
+
+
+	/*
+	 * Macro interface.
+	 *
+	 * The Memory module is driven by marcos. This is used to:
+	 * - Select which function/macro to use depending on whether module is enabled.
+	 * - Insert file, function and line information automatically.
+	 *
+	 */
+
+	#ifndef MEMORY_STATS
+		/** Allocates a single instance of a given primitive or class. */
+		#define Memory_Alloc( type, name ) \
+			(type*) _Memory_Alloc_Macro( sizeof(type) )			
+	#else		
+		#define Memory_Alloc( type, name ) \
+			(type*) _Memory_Alloc_Func( sizeof(type), #type, (name), __FILE__, __func__, __LINE__ )
+	#endif		
+
+	/** Allocates a single instance of a given primitive or class, without assigning a name to the allocation. */
+	#define Memory_Alloc_Unnamed( type ) \
+		Memory_Alloc( type, Name_Invalid )
+
+
+	#ifndef MEMORY_STATS
+		/** Allocates a given number of bytes, associating the allocation with a textual type and name. */
+		#define Memory_Alloc_Bytes( size, typeName, name ) \
+			_Memory_Alloc_Macro( (size) )
+	#else
+		#define Memory_Alloc_Bytes( size, typeName, name ) \
+			_Memory_Alloc_Func( (size), (typeName), (name), __FILE__, __func__, __LINE__ )	
+	#endif
+		
+	/** Allocates a given number of bytes, associating the allocation with a textual type only. */
+	#define Memory_Alloc_Bytes_Unnamed( size, typeName ) \
+		Memory_Alloc_Bytes( (size), (typeName), Name_Invalid )
+
+
+	#ifndef MEMORY_STATS
+		/** Allocates a 1D array of a primitive or class. */
+		#define Memory_Alloc_Array( type, arrayLength, name ) \
+			(type*) _Memory_Alloc_Array_Macro( sizeof(type), arrayLength )
+	#else
+		#define Memory_Alloc_Array( type, arrayLength, name ) \
+			(type*) _Memory_Alloc_Array_Func( sizeof(type), (arrayLength), #type, (name), __FILE__, __func__, __LINE__ )
+	#endif
+
+	/** Allocates a 1D array of a primitive or class without a name. */
+	#define Memory_Alloc_Array_Unnamed( type, arrayLength ) \
+		Memory_Alloc_Array( type, (arrayLength), Name_Invalid )
+
+
+	#ifndef MEMORY_STATS		
+		/** Allocates a 1D array of items each of itemSize number of bytes. Allocation is given a textual type and name. */
+		#define Memory_Alloc_Array_Bytes( itemSize, arrayLength, typeName, name ) \
+			_Memory_Alloc_Array_Macro( (itemSize), (arrayLength) )
+	#else
+		#define Memory_Alloc_Array_Bytes( itemSize, arrayLength, typeName, name ) \
+			_Memory_Alloc_Array_Func( (itemSize), (arrayLength), (typeName), (name), __FILE__, __func__, __LINE__ )
+	#endif
+
+	/** Allocates a 1D array of items each of itemSize number of bytes. Allocation is given a textual type only. */
+	#define Memory_Alloc_Array_Bytes_Unnamed( itemSize, arrayLength, typeName ) \
+		Memory_Alloc_Array_Bytes( (itemSize), (arrayLength), (typeName), Name_Invalid )
+
+
+	/** Allocates a 2D array of any primative or class. */
+	#define Memory_Alloc_2DArray( type, xLength, yLength, name ) \
+		(type**) _Memory_Alloc_2DArray_Func( sizeof(type), (xLength), (yLength), #type, (name), __FILE__, __func__, __LINE__ )
+
+	/** Allocates a 2D array of any primative or class without a name. */
+	#define Memory_Alloc_2DArray_Unnamed( type, xLength, yLength ) \
+		Memory_Alloc_2DArray( type, (xLength), (yLength), Name_Invalid )
+		
+
+	/** Allocates a 3D array of a primative or class. */
+	#define Memory_Alloc_3DArray( type, xLength, yLength, zLength, name ) \
+		(type***) _Memory_Alloc_3DArray_Func \
+			( sizeof(type), (xLength), (yLength), (zLength), #type, (name), __FILE__, __func__, __LINE__ )
+	
+	/** Allocates a 3D array of a primative or class without a name. */
+	#define Memory_Alloc_3DArray_Unnamed( type, xLength, yLength, zLength ) \
+		Memory_Alloc_3DArray( type, (xLength), (yLength), (zLength), Name_Invalid )
+		
+
+	/** Allocates a 4D array of a primative or class. */
+	#define Memory_Alloc_4DArray( type, xLength, yLength, zLength, wLength, name ) \
+		(type****) _Memory_Alloc_4DArray_Func \
+			( sizeof(type), (xLength), (yLength), (zLength), (wLength), #type, (name), __FILE__, __func__, __LINE__ )
+	
+	/** Allocates a 4D array of a primative or class without a name. */
+	#define Memory_Alloc_4DArray_Unnamed( type, xLength, yLength, zLength, wLength ) \
+		Memory_Alloc_4DArray( type, (xLength), (yLength), (zLength), (wLength), Name_Invalid )
+	
+
+	#ifndef MEMORY_STATS
+		/** Allocates a 2D array from a 1D array. Use in conjunction with the Memory_Access2D marco. */
+		#define Memory_Alloc_2DArrayAs1D( type, xLength, yLength, name ) \
+			(type*) _Memory_Alloc_2DArrayAs1D_Macro( sizeof(type), (xLength), (yLength) )
+	#else
+		#define Memory_Alloc_2DArrayAs1D( type, xLength, yLength, name ) \
+			(type*) _Memory_Alloc_2DArrayAs1D_Func \
+				( sizeof(type), (xLength), (yLength), #type, (name), __FILE__, __func__, __LINE__ );
+	#endif
+	
+	/** Allocates a 2D array from a 1D array without a name. Use in conjunction with the Memory_Access2D marco. */
+	#define Memory_Alloc_2DArrayAs1D_Unnamed( type, xLength, yLength ) \
+		Memory_Alloc_2DArrayAs1D( type, (xLength), (yLength), Name_Invalid );
+
+
+	#ifndef MEMORY_STATS
+		/** Allocates a 3D array from a 1D array. Use in conjunction with the Memory_Access3D marco. */
+		#define Memory_Alloc_3DArrayAs1D( type, xLength, yLength, zLength, name ) \
+			(type*) _Memory_Alloc_3DArrayAs1D_Macro( sizeof(type), (xLength), (yLength), (zLength) )
+	#else
+		#define Memory_Alloc_3DArrayAs1D( type, xLength, yLength, zLength, name ) \
+			(type*) _Memory_Alloc_3DArrayAs1D_Func \
+				( sizeof(type), (xLength), (yLength), (zLength), #type, (name), __FILE__, __func__, __LINE__ )
+	#endif
+	
+	/** Allocates a 3D array from a 1D array without a name. Use in conjunction with the Memory_Access3D marco. */
+	#define Memory_Alloc_3DArrayAs1D_Unnamed( type, xLength, yLength, zLength ) \
+		Memory_Alloc_3DArrayAs1D( type, (xLength), (yLength), (zLength), Name_Invalid );
+
+	
+	#ifndef MEMORY_STATS
+		/** Allocates a 4D array from a 1D array. Use in conjunction with the Memory_Access4D marco. */
+		#define Memory_Alloc_4DArrayAs1D( type, xLength, yLength, zLength, wLength, name ) \
+			(type*) _Memory_Alloc_4DArrayAs1D_Macro( sizeof(type), (xLength), (yLength), (zLength), (wLength) )
+	#else
+		#define Memory_Alloc_4DArrayAs1D( type, xLength, yLength, zLength, wLength, name ) \
+			(type*) _Memory_Alloc_4DArrayAs1D_Func \
+				( sizeof(type), (xLength), (yLength), (zLength), (wLength), #type, (name), __FILE__, __func__, __LINE__ )
+	#endif
+
+	/** Allocates a 4D array from a 1D array without a name. Use in conjunction with the Memory_Access4D marco. */
+	#define Memory_Alloc_4DArrayAs1D_Unnamed( type, xLength, yLength, zLength, wLength ) \
+		Memory_Alloc_4DArrayAs1D( type, (xLength), (yLength), (zLength), (wLength), Name_Invalid );
+
+
+	/** Allocates a 2D complex array. Each array in the 2nd dimension may have varying lengths.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 **/
+	#define Memory_Alloc_2DComplex( type, xLength, yLengths, name ) \
+		(type**) _Memory_Alloc_2DComplex_Func( sizeof(type), (xLength), (yLengths), #type, (name), __FILE__, __func__, __LINE__ )
+	
+	/** Allocates a 2D complex array without a name. Each array in the 2nd dimension may have varying lengths.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 **/
+	#define Memory_Alloc_2DComplex_Unnamed( type, xLength, yLengths ) \
+		Memory_Alloc_2DComplex( type, (xLength), (yLengths), Name_Invalid )
+
+
+	/** Allocates a 2D complex array used to represent 3rd dimension lengths in a 3D complex array.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 **/
+	#define Memory_Alloc_3DSetup( xLength, yLengths ) \
+		_Memory_Alloc_3DSetup_Func( (xLength), (yLengths), __FILE__, __func__, __LINE__ )
+	
+	
+	/** Allocates a 3D complex array. Each array in the 2nd and 3rd dimension may have varying lengths.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 ** @param zLengths A matrix of lengths for the 3rd dimension. Allocated by Memory_Alloc_3DSetup.
+	 **/
+	#define Memory_Alloc_3DComplex( type, xLength, yLengths, zLengths, name ) \
+		(type***) _Memory_Alloc_3DComplex_Func \
+			( sizeof(type), (xLength), (yLengths), (zLengths), #type, (name), __FILE__, __func__, __LINE__ )
+
+	/** Allocates a 3D complex array without a name. Each array in the 2nd and 3rd dimension may have varying lengths.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 ** @param zLengths A matrix of lengths for the 3rd dimension. Allocated by Memory_Alloc_3DSetup.
+	 **/
+	#define Memory_Alloc_3DComplex_Unnamed( type, xLength, yLengths, zLengths ) \
+		Memory_Alloc_3DComplex( type, (xLength), (yLengths), (zLengths), Name_Invalid )
+
+
+	#ifndef MEMORY_STATS
+		/** Resizes the bytes of a single object. */
+		#define Memory_Realloc( ptr, newSize ) \
+			_Memory_Realloc_Macro( (ptr), (newSize) )
+	#else
+		#define Memory_Realloc( ptr, newSize ) \
+			_Memory_Realloc_Func( (ptr), (newSize), Type_Invalid, __FILE__, __func__, __LINE__ )
+	#endif
+
+	#ifndef MEMORY_STATS
+		/** Resizes a 1D array. */
+		#define Memory_Realloc_Array( ptr, type, newLength ) \
+			(type*) _Memory_Realloc_Array_Macro( (ptr), sizeof(type), (newLength) )
+	#else
+		#define Memory_Realloc_Array( ptr, type, newLength ) \
+			(type*) _Memory_Realloc_Array_Func( (ptr), sizeof(type), (newLength), #type, __FILE__, __func__, __LINE__ )
+	#endif
+
+	#ifndef MEMORY_STATS
+		/** Resizes a 1D array of items, where each item is of itemSize bytes. */
+		#define Memory_Realloc_Array_Bytes( ptr, itemSize, newLength ) \
+			_Memory_Realloc_Array_Macro( (ptr), (itemSize), (newLength) )
+	#else
+		#define Memory_Realloc_Array_Bytes( ptr, itemSize, newLength ) \
+			_Memory_Realloc_Array_Func( (ptr), (itemSize), (newLength), Type_Invalid, __FILE__, __func__, __LINE__ )
+	#endif
+
+	/** Resizes a 2D array.
+	 ** The integrity of the data is only maintained if enlarging the size of the array.
+	 ** Assumes the original dimension of X is greater than 1.
+	 **/
+	#define Memory_Realloc_2DArray( ptr, type, newX, newY ) \
+		(type**) _Memory_Realloc_2DArray_Func \
+			( (ptr), sizeof(type), 0, 0, (newX), (newY), #type, __FILE__, __func__, __LINE__ )
+
+	/** Resizes a 3D array.
+	 ** The integrity of the data is only maintained if enlarging the size of the array.
+	 ** Assumes the original dimension of X and Y is greater than 1.
+	 **/
+	#define Memory_Realloc_3DArray( ptr, type, newX, newY, newZ ) \
+		(type***) _Memory_Realloc_3DArray_Func \
+			( (ptr), sizeof(type), 0, 0, 0, (newX), (newY), (newZ), #type, __FILE__, __func__, __LINE__ )
+
+	/** Resizes a 2D array.
+	 ** The integrity of the data is only maintained if enlarging the size of the array.
+	 ** Safe to used for when X is equal to 1.
+	 **/
+	#define Memory_Realloc_2DArraySafe( ptr, type, oldX, oldY, newX, newY ) \
+		(type**) _Memory_Realloc_2DArray_Func \
+			( (ptr), sizeof(type), (oldX), (oldY), (newX), (newY), #type, __FILE__, __func__, __LINE__ )
+
+	/** Resizes a 3D array.
+	 ** The integrity of the data is only maintained if enlarging the size of the array.
+	 ** Safe to used for when X and/or Y is equal to 1.
+	 **/
+	#define Memory_Realloc_3DArraySafe( ptr, type, oldX, oldY, oldZ, newX, newY, newZ ) \
+		(type***) _Memory_Realloc_3DArray_Func \
+			( (ptr), sizeof(type), (oldX), (oldY), (oldZ), (newX), (newY), (newZ), #type, __FILE__, __func__, __LINE__ )
+	
+
+
+
+	/** Resizes a 2D array in 1D form. */
+	#define Memory_Realloc_2DArrayAs1D( ptr, type, oldX, oldY, newX, newY ) \
+		(type*) _Memory_Realloc_2DArrayAs1D_Func \
+			( (ptr), sizeof(type), (oldX), (oldY), (newX), (newY), #type, __FILE__, __func__, __LINE__ )
+		
+	/** Resizes a 3D array in 1D form. */
+	#define Memory_Realloc_3DArrayAs1D( ptr, type, oldX, oldY, oldZ, newX, newY, newZ ) \
+		(type*) _Memory_Realloc_3DArrayAs1D_Func \
+			( (ptr), sizeof(type), (oldX), (oldY), (oldZ), (newX), (newY), (newZ), #type, __FILE__, __func__, __LINE__ )
+
+		
+	#ifndef MEMORY_STATS
+		/** Deallocates the memory of any allocation. */
+		#define Memory_Free( ptr ) \
+			_Memory_Free_Macro( (ptr) )
+	#else
+		#define Memory_Free( ptr ) \
+			_Memory_Free_Func( (ptr) )
+	#endif
+
+	
+	/** Displays a summary of the given type and name. */
+	#define Memory_Print_Type_Name( type, name ) \
+		Memory_Print_Type_Name_Func( #type, (name) );
+		
+	/** Displays a summary of the given type. */
+	#define Memory_Print_Type( type ) \
+		Memory_Print_Type_Func( #type );
+
+
+	/** Deallocates all allocations of a given type and name. Can only be used if Memory Module is enabled. */
+	#define Memory_Free_Type_Name( type, name ) \
+		_Memory_Free_Type_Name_Func( #type, (name) );
+
+	/** Deallocates all allocations of a given type. Can only be used if Memory Module is enabled. */
+	#define Memory_Free_Type( type ) \
+		_Memory_Free_Type_Func( #type );
+
+	/** Retrives a value from a 2D array allocated as a 1D array. Use in conjunction with Memory_Alloc_2DArrayAs1D. */
+	#define Memory_Access2D( array2D, x, y, yLength ) \
+		array2D[ ( (x) * (yLength) ) + (y) ]
+
+	/** Retrives a value from a 3D array allocated as a 1D array. Use in conjunction with Memory_Alloc_3DArrayAs1D. */
+	#define Memory_Access3D( array3D, x, y, z, yLength, zLength ) \
+		array3D[ ( (x) * (yLength) * (zLength) ) + ( (y) * (zLength) ) + (z) ]
+
+	/** Retrives a value from a 4D array allocated as a 1D array. Use in conjunction with Memory_Alloc_4DArrayAs1D. */
+	#define Memory_Access4D( array4D, x, y, z, w, yLength, zLength, wLength ) \
+		array4D[ ( (x) * (yLength) * (zLength) * (wLength) ) + ( (y) * (zLength) * (wLength) ) + ( (z) * (wLength) ) + (w) ]
+
+
+	/** Returns the number of bytes used in a 1D array. */
+	SizeT Memory_Length_1DArray( SizeT itemSize, Index length );
+
+	/** Returns the number of bytes used in a 2D array. */
+	SizeT Memory_Length_2DArray( SizeT itemSize, Index xLength, Index yLength );
+	
+	/** Returns the number of bytes used in a 3D array. */
+	SizeT Memory_Length_3DArray( SizeT itemSize, Index xLength, Index yLength, Index zLength );
+	
+	/** Returns the number of bytes used in a 4D array. */
+	SizeT Memory_Length_4DArray( SizeT itemSize, Index xLength, Index yLength, Index zLength, Index wLength );
+
+	/** Returns the number of bytes used in a 2D array allocated as 1D. */
+	SizeT Memory_Length_2DAs1D( SizeT itemSize, Index xLength, Index yLength );
+	
+	/** Returns the number of bytes used in a 3D array allocated as 1D. */
+	SizeT Memory_Length_3DAs1D( SizeT itemSize, Index xLength, Index yLength, Index zLength );
+	
+	/** Returns the number of bytes used in a 4D array allocated as 1D. */
+	SizeT Memory_Length_4DAs1D( SizeT itemSize, Index xLength, Index yLength, Index zLength, Index wLength );
+
+	/** Returns the number of bytes used in a 2D complex array. */
+	SizeT Memory_Length_2DComplex( SizeT itemSize, Index xLength, Index* yLengths );
+	
+	/** Returns the number of bytes used in a 3D complex array. */
+	SizeT Memory_Length_3DComplex( SizeT itemSize, Index xLength, Index* yLengths, Index** zLengths );
+
+	/** Prints a summary by types and names in the system. */
+	void Memory_Print_Summary();
+	
+	/** Prints a summary by types and names in the system. */
+	void Memory_Print();
+	
+	/** Displays allocations which are currently still allocated. */
+	void Memory_Print_Leak();
+	
+	typedef struct Memory_Print_Leak_Helper_Arg {
+		Index printOptions;
+		Index numLeaks;
+		Index warningPrinted;
+	} Memory_Print_Leak_Helper_Arg;
+	
+	void Memory_Print_Leak_Helper( void *memoryPointer, void *args );
+	
+	/** Displays a summary of the given type. */
+	void Memory_Print_Type_Func( Type type );
+	
+	/** Displays a summary of the given type and name. */
+	void Memory_Print_Type_Name_Func( Type type, Name name );
+	
+	/** Displays a summary of the given file. */
+	void Memory_Print_File( char* fileName );
+	
+	/** Displays a summary of the given file and function. */
+	void Memory_Print_File_Function( char* fileName, char* funcName );
+	
+	/** Displays a single allocation. */
+	void Memory_Print_Pointer( void* ptr );
+
+
+	/** \internal Allocates a single object. */
+	void* _Memory_Alloc_Func(
+		SizeT size,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 1D array. */
+	void* _Memory_Alloc_Array_Func(
+		SizeT itemSize,
+		Index arrayLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+	
+	/** \internal Allocates a 2D array. */
+	void* _Memory_Alloc_2DArray_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index yLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+	
+	/** \internal Allocates a 3D Array. */
+	void* _Memory_Alloc_3DArray_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index yLength,
+		Index zLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+	
+	/** \internal Allocates a 4D Array. */
+	void* _Memory_Alloc_4DArray_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index yLength,
+		Index zLength,
+		Index wLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 2D array from a 1D array. Use in conjunction with the Memory_Access2D marco. */
+	void* _Memory_Alloc_2DArrayAs1D_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index yLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 3D array from a 1D array. Use in conjunction with the Memory_Access3D marco. */
+	void* _Memory_Alloc_3DArrayAs1D_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index yLength,
+		Index zLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 4D array from a 1D array. Use in conjunction with the Memory_Access4D marco. */
+	void* _Memory_Alloc_4DArrayAs1D_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index yLength,
+		Index zLength,
+		Index wLength,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 2D complex array. Each array in the 2nd dimension may have varying lengths.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 **/
+	void* _Memory_Alloc_2DComplex_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index* yLengths,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 2D complex array used to represent 3rd dimension lengths in a 3D complex array.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 **/
+	Index** _Memory_Alloc_3DSetup_Func(
+		Index xLength,
+		Index* yLengths,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Allocates a 3D complex array. Each array in the 2nd and 3rd dimension may have varying lengths.
+	 **
+	 ** @param yLengths A set of lengths for the 2nd dimension.
+	 ** @param zLengths A matrix of lengths for the 3rd dimension. Allocated by Memory_Alloc_3DSetup.
+	 **/
+	void* _Memory_Alloc_3DComplex_Func(
+		SizeT itemSize,
+		Index xLength,
+		Index* yLengths,
+		Index** zLengths,
+		Type type,
+		Name name,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+
+	/** \internal Resizes the bytes of a single object. */
+	void* _Memory_Realloc_Func(
+		void* ptr,
+		SizeT newSize,
+		Type type,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Resizes a 1D array. */
+	void* _Memory_Realloc_Array_Func( 
+		void* ptr, 
+		SizeT itemSize, 
+		Index newLength,
+		Type type,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Resizes a 2D array. */
+	void* _Memory_Realloc_2DArray_Func(
+		void* ptr,
+		SizeT itemSize, 
+		Index oldX,
+		Index oldY,
+		Index newX, 
+		Index newY,
+		Type type,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Resizes a 3D array. */
+	void* _Memory_Realloc_3DArray_Func( 
+		void* ptr, 
+		SizeT itemSize, 
+		Index oldX,
+		Index oldY,
+		Index oldZ,
+		Index newX, 
+		Index newY, 
+		Index newZ,
+		Type type,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Resizes a 2D array in 1D form. */
+	void* _Memory_Realloc_2DArrayAs1D_Func( 
+		void* ptr, 
+		SizeT itemSize, 
+		Index oldX, 
+		Index oldY, 
+		Index newX, 
+		Index newY,
+		Type type,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+	/** \internal Resizes a 3D array in 1D form. */
+	void* _Memory_Realloc_3DArrayAs1D_Func( 
+		void* ptr, 
+		SizeT itemSize,
+		Index oldX, 
+		Index oldY, 
+		Index oldZ, 
+		Index newX, 
+		Index newY, 
+		Index newZ,
+		Type type,
+		const char* fileName,
+		const char* funcName,
+		int lineNumber );
+
+
+	/** \internal Frees any allocation. */
+	void _Memory_Free_Func( void* ptr );
+	
+
+	void _Memory_Free_Type_Name_Func( Type type, Name name );
+	
+	/** struct for packaging up the arguments of _Memory_Free_Type_Name_Func into a single argument */
+	typedef struct Memory_Free_Type_Name_Func_Helper_Arg{
+		Type type;
+		Name name;
+	}Memory_Free_Type_Name_Func_Helper_Arg;
+	
+	void _Memory_Free_Type_Name_Func_Helper( void *memoryPointer, void *args );
+	
+	/** \internal Deallocates all allocations of a given type. Can only be used if Memory Module is enabled. */	
+	void _Memory_Free_Type_Func( Type type );
+	void _Memory_Free_Type_Func_Helper ( void *memoryPointer, void *args );
+
+	/** Queries the Memory module about whether or not the given address has been freed.
+	 *  Returns True if allocated, False if freed or not found.
+	 *  If memory module is disabled, this function simply returns True.
+	 *
+	 *  For debugging purposes only.
+	 */
+	Bool Memory_IsAllocated( void* ptr );
+
+	/*
+	 * Macro equivalents
+	 *
+	 * The following private functions are macro equivalents of some of the Memory module functions.
+	 * Thesy are implemented to ensure that when the Memory module is disabled, minimal performance impact
+	 * is ensured.
+	 *
+	 * Functions such as the normal 2D to 4D array and as well as the 2D and 3D complex allocations do not
+	 * have macro equivalents due to the difficulty of creation. These operations only have a function implementation.
+	 *
+	 */
+
+	#define _Memory_Alloc_Macro( size ) \
+		_Memory_InternalMalloc( (size) )
+
+	#define _Memory_Alloc_Array_Macro( itemSize, arrayLength ) \
+		_Memory_InternalMalloc( (itemSize) * (arrayLength) )
+	
+	#define _Memory_Alloc_2DArrayAs1D_Macro( itemSize, xLength, yLength ) \
+		_Memory_InternalMalloc( (itemSize) * (xLength) * (yLength) )
+	
+	#define _Memory_Alloc_3DArrayAs1D_Macro( itemSize, xLength, yLength, zLength ) \
+		_Memory_InternalMalloc( (itemSize) * (xLength) * (yLength) * (zLength) )
+
+	#define _Memory_Alloc_4DArrayAs1D_Macro( itemSize, xLength, yLength, zLength, wLength ) \
+		_Memory_InternalMalloc( (itemSize) * (xLength) * (yLength) * (zLength) * (wLength) )
+	
+	#define _Memory_Realloc_Macro( ptr, newSize ) \
+		_Memory_InternalRealloc( (ptr), (newSize) );
+
+	#define _Memory_Realloc_Array_Macro( ptr, itemSize, newLength ) \
+		_Memory_InternalRealloc( (ptr), (itemSize) * (newLength) );
+
+	#define _Memory_Free_Macro( ptr ) \
+		_Memory_InternalFree( (ptr) )
+		
+		
+#endif /* __Base_Foundation_Memory_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,330 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MemoryField.c 3803 2006-09-27 03:17:12Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "MemoryPointer.h"
+#include "MemoryField.h"
+#include "Memory.h"
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stddef.h>
+
+#define MAX( x, y ) ((x > y) ? x : y)
+
+const Type MemoryField_Type = "MemoryField";
+const Name Memory_IgnoreName = "Memory_IgnoreName";
+
+const Index MEMORYFIELD_DELTA = 4;	/**< Number of fields to extend by when array resizes. */
+
+
+MemoryField* MemoryField_New( const char* value )
+{
+	MemoryField* result = (MemoryField*) malloc( sizeof(MemoryField) );
+	_MemoryField_Init( result, value );
+
+	return result;	
+}
+	
+void _MemoryField_Init( MemoryField* memoryField, const char* value )
+{
+	if ( value )
+	{
+		memoryField->value = (char*)malloc( (strlen(value) + 1) * sizeof(char) );
+		strcpy( memoryField->value, value );
+	}
+	else
+	{
+		memoryField->value = NULL;
+	}
+	
+	memoryField->allocCount = 0;
+	memoryField->freeCount = 0;
+	memoryField->currentAllocation = 0;
+	memoryField->peakAllocation = 0;
+	memoryField->totalAllocation = 0;
+	
+	memoryField->subCount = 0;
+	memoryField->subSize = 0;
+	memoryField->subFields = NULL;	
+	
+	memoryField->memCache = NULL;
+}
+	
+void MemoryField_Delete( MemoryField* memoryField )
+{
+	Index i;
+	
+	if ( memoryField->value )
+	{
+		free( memoryField->value );	
+	}
+	
+	if ( memoryField->subFields )
+	{
+		for ( i = 0; i < memoryField->subCount; ++i )
+		{
+			MemoryField_Delete( memoryField->subFields[i] );
+		}
+		free( memoryField->subFields );
+	}
+	free( memoryField );
+}
+	
+
+MemoryField* MemoryField_Register( MemoryField* memoryField, const char* subValue )
+{
+	Index i;
+	
+	/* Search cache first for localisation. */
+	if ( memoryField->memCache )
+	{
+		if ( MemoryField_StringCompare( memoryField->memCache->value, subValue ) == 0 )
+		{
+			return memoryField->memCache;
+		}
+	}
+	
+	/* Not in cache so linear search. */
+	for ( i = 0; i < memoryField->subCount; ++i )
+	{
+		if ( MemoryField_StringCompare( memoryField->subFields[i]->value, subValue ) == 0 )
+		{
+			/* Value exists, update cache and return the field. */
+			memoryField->memCache = memoryField->subFields[i];
+			return memoryField->subFields[i];
+		}
+	}
+	
+	/* Not exist, add to registry. */
+	
+	/* Extend array if needed. */
+	if ( memoryField->subCount == memoryField->subSize )
+	{
+		memoryField->subSize += MEMORYFIELD_DELTA;
+		memoryField->subFields = (MemoryField**)
+			realloc( memoryField->subFields, sizeof(MemoryField*) * memoryField->subSize );
+	}
+	
+	memoryField->subFields[memoryField->subCount] = MemoryField_New( subValue );
+	memoryField->memCache = memoryField->subFields[memoryField->subCount];
+	
+	memoryField->subCount++;
+	
+	return memoryField->subFields[memoryField->subCount - 1];
+}
+
+void MemoryField_Update( MemoryField* memoryField, SizeT bytes )
+{
+	memoryField->currentAllocation += bytes;
+	
+	memoryField->peakAllocation = MAX( memoryField->currentAllocation, memoryField->peakAllocation );
+	
+	if ( bytes > 0 )
+	{
+		memoryField->totalAllocation += bytes;
+	}
+}
+
+void MemoryField_UpdateAsSumOfSubFields( MemoryField* memoryField )
+{
+	Index i;
+
+	if( memoryField->subCount < 1 )
+	{
+		return;	
+	}
+	
+	memoryField->allocCount = 0;
+	memoryField->freeCount = 0;
+	memoryField->currentAllocation = 0;
+	memoryField->peakAllocation = 0;
+	memoryField->totalAllocation = 0;
+	
+	for ( i = 0; i < memoryField->subCount; ++i )
+	{
+		if ( !MemoryField_StringCompare( memoryField->subFields[i]->value, Memory_IgnoreName ) == 0 )
+		{
+			MemoryField_UpdateAsSumOfSubFields( memoryField->subFields[i] );
+			memoryField->allocCount += memoryField->subFields[i]->allocCount;
+			memoryField->freeCount += memoryField->subFields[i]->freeCount;
+			memoryField->currentAllocation += memoryField->subFields[i]->currentAllocation;
+			memoryField->peakAllocation += memoryField->subFields[i]->peakAllocation;
+			memoryField->totalAllocation += memoryField->subFields[i]->totalAllocation;
+		}
+	}
+}
+
+void MemoryField_Print( MemoryField* memoryField, MemoryFieldColumn columns )
+{
+	if ( MemoryField_StringCompare( memoryField->value, Memory_IgnoreName ) == 0 )
+	{
+		return;
+	}
+
+	if ( columns & MEMORYFIELD_VALUE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%-20s ", memoryField->value );
+	}
+	if ( columns & MEMORYFIELD_ALLOC )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%15d ", memoryField->allocCount );
+	}
+	if ( columns & MEMORYFIELD_FREE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%10d ", memoryField->freeCount );
+	}
+	if ( columns & MEMORYFIELD_CURRENT )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%13d ", memoryField->currentAllocation );
+	}
+	if ( columns & MEMORYFIELD_PEAK )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%10d ", memoryField->peakAllocation );
+	}
+	if ( columns & MEMORYFIELD_TOTAL )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%11d", memoryField->totalAllocation );
+	}
+	Journal_PrintfL( stgMemory->infoStream, 1, "\n" );
+
+}
+void MemoryField_PrintHeader( const char* fieldName, MemoryFieldColumn columns )
+{
+	if ( columns & MEMORYFIELD_VALUE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "%-20s ", fieldName );
+	}
+	if ( columns & MEMORYFIELD_ALLOC )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "Times Allocated " );
+	}
+	if ( columns & MEMORYFIELD_FREE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "Times Free " );
+	}
+	if ( columns & MEMORYFIELD_CURRENT )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "Current bytes " );
+	}
+	if ( columns & MEMORYFIELD_PEAK )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "Peak bytes " );
+	}
+	if ( columns & MEMORYFIELD_TOTAL )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 1, "Total bytes " );
+	}
+
+	Journal_PrintfL( stgMemory->infoStream, 1, "\n" );
+}
+
+void MemoryField_PrintSummary( MemoryField* memoryField, const char* tableTitle )
+{
+	Index i;
+
+	if ( MemoryField_StringCompare( memoryField->value, Memory_IgnoreName ) == 0 )
+	{
+		return;
+	}
+
+	if ( memoryField->subCount > 0 )
+	{
+		MemoryField_UpdateAsSumOfSubFields( memoryField );
+
+		MemoryField_Sort( memoryField );
+
+		Journal_Printf( stgMemory->infoStream, "%s\n", memoryField->value );
+
+		Stream_Indent( stgMemory->infoStream );
+		MemoryField_PrintHeader( NULL, (MemoryFieldColumn)(
+			MEMORYFIELD_ALLOC |
+			MEMORYFIELD_FREE |
+			MEMORYFIELD_CURRENT | 
+			MEMORYFIELD_PEAK |
+			MEMORYFIELD_TOTAL) );
+		MemoryField_Print( memoryField, (MemoryFieldColumn)(
+			MEMORYFIELD_ALLOC |
+			MEMORYFIELD_FREE |
+			MEMORYFIELD_CURRENT |
+			MEMORYFIELD_PEAK |
+			MEMORYFIELD_TOTAL) );
+
+		Stream_Indent( stgMemory->infoStream );
+		
+		MemoryField_PrintHeaderAll( tableTitle );
+		for ( i = 0; i < memoryField->subCount; ++i )
+		{
+			if ( memoryField->subFields[i]->allocCount > 0 )
+			{
+				MemoryField_PrintAll( memoryField->subFields[i] );
+			}
+		}
+		
+		Stream_UnIndent( stgMemory->infoStream );
+
+		Stream_UnIndent( stgMemory->infoStream );
+	}
+}
+
+void MemoryField_Sort( MemoryField* memoryField )
+{
+	/* insertion sort */
+	Index i, j;
+	MemoryField* tmp;
+
+	for ( i = 0; i < memoryField->subCount; ++i )
+	{
+		j = i;
+		tmp = memoryField->subFields[j];
+		while ( j > 0 && MemoryField_StringCompare( memoryField->subFields[j - 1]->value, tmp->value ) > 0 )
+		{
+			memoryField->subFields[j] = memoryField->subFields[j - 1];
+			--j;
+		}
+		memoryField->subFields[j] = tmp;
+	}
+}
+
+int MemoryField_StringCompare( const char* s1, const char* s2 )
+{
+	if ( s1 && s2 )
+	{
+		return strcmp( s1, s2 );
+	}
+	return (long)s1 - (long)s2;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,145 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053 Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	A generic representation of a field in a MemoryPointer tuple which has a string type.
+**
+** <b>Assumptions</b>
+**	Memory Module is enabled.
+**
+** <b>Comments</b>
+**	Do not use this class when the Memory Module is switched off.
+**
+** <b>Description</b>
+**	An instance of this class may either represent a value in Type, Name, File or Function fields, a container of a set of these
+**	fields or both.
+**
+**	It holds statistical information of a field such as current, peak and total bytes allocated.
+**
+**	A field may have sub-fields, which forms a relationship with another field. (Heirarchical database.)
+**
+** $Id: MemoryField.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_Foundation_MemoryField_h__
+#define __Base_Foundation_MemoryField_h__
+
+	/** Textual name for MemoryField class. */
+	extern const Type MemoryField_Type;
+	
+	/** Special Name which can be used to ignore an allocation when calculating and querying the Memory database. */
+	extern const Name Memory_IgnoreName;
+	
+	/** The fields which are printable in MemoryField. A binray flag. */
+	typedef enum {
+		MEMORYFIELD_VALUE =	0x0001,
+		MEMORYFIELD_ALLOC =	0x0002,
+		MEMORYFIELD_FREE = 	0x0004,
+		MEMORYFIELD_CURRENT =	0x0008,
+		MEMORYFIELD_PEAK = 	0x0010,
+		MEMORYFIELD_TOTAL = 	0x0020,
+		MEMORYFIELD_ALL = 
+			MEMORYFIELD_VALUE | 
+			MEMORYFIELD_ALLOC | 
+			MEMORYFIELD_FREE | 
+			MEMORYFIELD_CURRENT | 
+			MEMORYFIELD_PEAK | 
+			MEMORYFIELD_TOTAL
+	} MemoryFieldColumn;
+
+	/** \def __MemoryField See MemoryField. */
+	#define __MemoryField \
+		char*		value;			\
+		Index		allocCount;		\
+		Index		freeCount;		\
+		SizeT		currentAllocation;	\
+		SizeT		peakAllocation;		\
+		SizeT		totalAllocation;	\
+		Index		subCount;		\
+		Index		subSize;		\
+		MemoryField**	subFields;		\
+		MemoryField*	memCache;		/**< A cache to speedup localised searches. */
+	struct MemoryField { __MemoryField };
+
+	/** Creates a new MemoryField with a value from a field. */
+	MemoryField* MemoryField_New( const char* value );
+	
+	/** Initialises a MemoryField. */
+	void _MemoryField_Init( MemoryField* memoryField, const char* value );
+	
+	/** Deallocates memory from a MemoryField. */
+	void MemoryField_Delete( MemoryField* memoryField );
+
+
+	/** Registers a sub MemoryField with this instance with the given value. If value exists, the existing field is returned. */
+	MemoryField* MemoryField_Register( MemoryField* memoryField, const char* subValue );
+	
+	/** Updates the statisical information of this field. Should only be used for leaf fields. */
+	void MemoryField_Update( MemoryField* memoryField, SizeT bytes );
+	
+	/** Updates statisical information of this field based on its children (branches and leaves). */
+	void MemoryField_UpdateAsSumOfSubFields( MemoryField* memoryField );
+
+
+	/** Displays the contents of a MemoryField.
+	 **
+	 ** @param columns A Bit flag of The fields to be displayed.
+	 **/
+	void MemoryField_Print( MemoryField* memoryField, MemoryFieldColumn columns );
+	
+	/** Displays all fields of a MemoryField. */
+	#define MemoryField_PrintAll( memoryField ) \
+		MemoryField_Print( memoryField, MEMORYFIELD_ALL ) 
+	
+	/** Displays a heading row for MemoryField printouts.
+	 **
+	 ** @param columns A Bit flag of The fields to be displayed.
+	 **/
+	void MemoryField_PrintHeader( const char* fieldName, MemoryFieldColumn columns );
+	
+	/** Displays all headings of a MemoryField. */
+	#define MemoryField_PrintHeaderAll( fieldName ) \
+		MemoryField_PrintHeader( fieldName, (MemoryFieldColumn)MEMORYFIELD_ALL )
+
+
+	/** Displays a summary of this field and its children. */
+	void MemoryField_PrintSummary( MemoryField* memoryField, const char* tableTitle );
+
+
+	/** Sorts the children of this field lexographically in ascending order. */
+	void MemoryField_Sort( MemoryField* memoryField );
+
+	/** Compares two strings which can potentially NULL, lexographically. NULLs are considered smallest. */
+	int MemoryField_StringCompare( const char* s1, const char* s2 );
+
+#endif /* __Base_Foundation_MemoryField_h__ */
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MemoryPointer.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "Memory.h"
+#include "MemoryField.h"
+#include "MemoryPointer.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stddef.h>
+
+
+const Type MemoryPointer_Type = "MemoryPointer";
+
+
+MemoryPointer* MemoryPointer_New(
+	Pointer ptr,
+	MemoryOpStamp stamp,
+	const char* type,
+	const char* name,
+	const char* file,
+	const char* func,
+	Index line,
+	MemoryAllocType allocType,
+	SizeT itemSize,
+	SizeT totalSize )
+{
+	MemoryPointer* result = (MemoryPointer*) malloc( sizeof(MemoryPointer) );
+	
+	MemoryPointer_Init( result, ptr, stamp, type, name, file, func, line, allocType, itemSize, totalSize );
+	
+	return result;
+}
+	
+void MemoryPointer_Init(
+	MemoryPointer* memoryPointer,
+	Pointer ptr,
+	MemoryOpStamp stamp,
+	const char* type,
+	const char* name,
+	const char* file,
+	const char* func,
+	Index line,
+	MemoryAllocType allocType,
+	SizeT itemSize,
+	SizeT totalSize )
+{
+	memoryPointer->ptr = ptr;
+	memoryPointer->ptrReference = ptr;
+	memoryPointer->status = MEMORY_POINTER_PERSISTENT;
+	memoryPointer->stamp = stamp;
+
+	/* Get/Create records in Memory */
+	memoryPointer->type = MemoryField_Register( stgMemory->types, type );
+	memoryPointer->name = MemoryField_Register( memoryPointer->type, name );
+	memoryPointer->file = MemoryField_Register( stgMemory->files, file );
+	memoryPointer->func = MemoryField_Register( memoryPointer->file, func );
+	
+	memoryPointer->line = line;
+
+	memoryPointer->name->allocCount++;
+	memoryPointer->func->allocCount++;
+	
+	memoryPointer->allocType = allocType;
+	memoryPointer->itemSize = itemSize;
+	memoryPointer->totalSize = totalSize;
+
+	/* Update the statistics of leaf fields. Parent fields can derive values. */
+	MemoryField_Update( memoryPointer->name, totalSize );
+	MemoryField_Update( memoryPointer->func, totalSize );
+}
+	
+void MemoryPointer_Delete( MemoryPointer* memoryPointer )
+{
+	/* Deallocate length according to allocation type */
+	switch ( memoryPointer->allocType )
+	{
+		case MEMORY_OBJECT:
+		case MEMORY_1DARRAY:
+		case MEMORY_2DARRAY:
+		case MEMORY_3DARRAY:
+		case MEMORY_4DARRAY:
+		case MEMORY_2DAS1D:
+		case MEMORY_3DAS1D:
+		case MEMORY_4DAS1D:
+			break;
+		case MEMORY_2DCOMPLEX:
+		case MEMORY_3DSETUP:
+			free( memoryPointer->length.xyz.y );
+			break;
+		case MEMORY_3DCOMPLEX:
+			free( memoryPointer->length.xyz.y );
+			free( memoryPointer->length.xyz.z );
+			break;
+	}
+	
+	if ( memoryPointer ){
+		free( memoryPointer );
+	}
+}
+
+void MemoryPointer_Delete_Helper( void *memoryPointer, void *args )
+{
+	assert( memoryPointer );
+	MemoryPointer_Delete( (MemoryPointer*) memoryPointer );
+}
+
+void MemoryPointer_Print( MemoryPointer* memoryPointer, MemoryPointerColumn columns )
+{
+	Index i, j;
+
+	/*
+	 * Bit compare which flags are set in order.
+	 * Print each field accordingly
+	 */
+	
+	if ( columns & MEMORYPOINTER_ALLOCTYPE )
+	{
+		switch ( memoryPointer->allocType )
+		{
+			case MEMORY_OBJECT:
+				Journal_PrintfL( stgMemory->infoStream, 2, "Object,     " );
+				break;
+			case MEMORY_1DARRAY:
+				Journal_PrintfL( stgMemory->infoStream, 2, "1D Array,   " );
+				break;
+			case MEMORY_2DARRAY:
+				Journal_PrintfL( stgMemory->infoStream, 2, "2D Array,   " );
+				break;
+			case MEMORY_3DARRAY:
+				Journal_PrintfL( stgMemory->infoStream, 2, "3D Array,   " );
+				break;						
+			case MEMORY_4DARRAY:
+				Journal_PrintfL( stgMemory->infoStream, 2, "4D Array,   " );
+				break;				
+			case MEMORY_2DAS1D:
+				Journal_PrintfL( stgMemory->infoStream, 2, "2D as 1D,   " );
+				break;
+			case MEMORY_3DAS1D:
+				Journal_PrintfL( stgMemory->infoStream, 2, "3D as 1D,   " );
+				break;					
+			case MEMORY_4DAS1D:
+				Journal_PrintfL( stgMemory->infoStream, 2, "4D as 1D,   " );
+				break;
+			case MEMORY_2DCOMPLEX:
+				Journal_PrintfL( stgMemory->infoStream, 2, "2D Complex, " );
+				break;
+			case MEMORY_3DSETUP:
+				Journal_PrintfL( stgMemory->infoStream, 2, "3D Setup,   " );
+				break;
+			case MEMORY_3DCOMPLEX:
+				Journal_PrintfL( stgMemory->infoStream, 2, "3D Complex, " );
+				break;
+		}
+	}
+	if ( columns & MEMORYPOINTER_PTR )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "(ptr)%p, ", memoryPointer->ptr );
+	}
+	if ( columns & MEMORYPOINTER_TYPE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "%s, ", memoryPointer->type->value );
+	}
+	if ( columns & MEMORYPOINTER_NAME )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "%s, ", memoryPointer->name->value );
+	}
+	if ( columns & MEMORYPOINTER_FILE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "%s, ", memoryPointer->file->value );
+	}
+	if ( columns & MEMORYPOINTER_FUNC )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "%s(), ", memoryPointer->func->value );
+	}
+	if ( columns & MEMORYPOINTER_LINE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "Line:%d, ", memoryPointer->line );
+	}
+	if ( columns & MEMORYPOINTER_TOTALSIZE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "Total:%d, ", memoryPointer->totalSize );
+	}
+	if ( columns & MEMORYPOINTER_ITEMSIZE )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "ItemSize:%d, ", memoryPointer->itemSize );
+	}
+	if ( columns & MEMORYPOINTER_LENGTH )
+	{
+		Journal_PrintfL( stgMemory->infoStream, 2, "Count: " );
+		switch ( memoryPointer->allocType )
+		{
+			case MEMORY_OBJECT:
+				Journal_PrintfL( stgMemory->infoStream, 2, "N/A" );
+				break;
+			case MEMORY_1DARRAY:
+				Journal_PrintfL( stgMemory->infoStream, 2, "%d", memoryPointer->length );
+				break;
+			case MEMORY_2DARRAY:
+			case MEMORY_2DAS1D:
+				Journal_PrintfL( stgMemory->infoStream, 2, "%d x %d",
+					memoryPointer->length.twoD[0],
+					memoryPointer->length.twoD[1] );
+				break;
+			case MEMORY_3DARRAY:
+			case MEMORY_3DAS1D:
+				Journal_PrintfL( stgMemory->infoStream, 2, "%d x %d x %d",
+					memoryPointer->length.threeD[0],
+					memoryPointer->length.threeD[1],
+					memoryPointer->length.threeD[2] );
+				break;
+			case MEMORY_4DARRAY:
+			case MEMORY_4DAS1D:
+				Journal_PrintfL( stgMemory->infoStream, 2, "%d x %d x %d x %d",
+					memoryPointer->length.fourD[0],
+					memoryPointer->length.fourD[1],
+					memoryPointer->length.fourD[2],
+					memoryPointer->length.fourD[3] );
+				break;				
+			case MEMORY_2DCOMPLEX:
+			case MEMORY_3DSETUP:
+				Journal_PrintfL( stgMemory->infoStream, 3, "%d by { ", memoryPointer->length.xyz.x );
+				for ( i = 0; i < memoryPointer->length.xyz.x; ++i )
+				{
+					Journal_PrintfL( stgMemory->infoStream, 3, "%d", memoryPointer->length.xyz.y[i] );
+					if ( i != memoryPointer->length.xyz.x - 1 )
+					{
+						Journal_PrintfL( stgMemory->infoStream, 3, ", " );
+					}
+				}
+				Journal_PrintfL( stgMemory->infoStream, 3, " }" );
+				break;
+			case MEMORY_3DCOMPLEX:
+				Journal_PrintfL( stgMemory->infoStream, 3, "\n" );
+				for ( i = 0; i < memoryPointer->length.xyz.x; ++i )
+				{
+					Journal_PrintfL( stgMemory->infoStream, 3, "{ " );
+					for ( j = 0; j < memoryPointer->length.xyz.y[i]; ++j )
+					{
+						Journal_PrintfL( stgMemory->infoStream, 3, "%d", memoryPointer->length.xyz.z[i][j] );
+						if ( j != memoryPointer->length.xyz.y[i] - 1 )
+						{
+							Journal_PrintfL( stgMemory->infoStream, 3, ", " );
+						}
+					}
+					Journal_PrintfL( stgMemory->infoStream, 3, " }\n" );
+				}
+				Journal_PrintfL( stgMemory->infoStream, 3, " }" );
+				break;
+		}
+	}
+	Journal_PrintfL( stgMemory->infoStream, 2, "\n" );
+
+}
+
+void MemoryPointer_Print_Type_Name_Func_Helper( void *memoryPointer, void *args )
+{
+	MemoryPointer_Print_Type_Name_Func_Helper_Arg *arguments;
+	MemoryPointer *memPtr;
+	MemoryField* typeField;
+	MemoryField* nameField;
+	
+	
+	assert( memoryPointer );
+	assert( args );
+
+	memPtr = (MemoryPointer*) memoryPointer;
+	arguments = (MemoryPointer_Print_Type_Name_Func_Helper_Arg*) args;
+	
+	typeField = MemoryField_Register( stgMemory->types, arguments->type );
+	nameField = MemoryField_Register( typeField, arguments->name );	
+	
+	if ( memPtr->type == typeField && memPtr->name == nameField ){
+		MemoryPointer_Print ( (MemoryPointer*) memoryPointer, arguments->printOptions );
+	}
+}
+
+void MemoryPointer_Print_File_Func_Helper( void *memoryPointer, void *args )
+{
+	MemoryPointer_Print_File_Func_Helper_Arg *arguments;
+	MemoryPointer *memPtr;
+	MemoryField* fileField;
+	MemoryField* funcField;
+	
+	
+	assert( memoryPointer );
+	assert( args );
+
+	memPtr = (MemoryPointer*) memoryPointer;
+	arguments = (MemoryPointer_Print_File_Func_Helper_Arg*) args;
+	
+	fileField = MemoryField_Register( stgMemory->types, arguments->fileName );
+	funcField = MemoryField_Register( fileField, arguments->funcName );	
+	
+	if ( memPtr->file == fileField && memPtr->func == funcField ){
+		MemoryPointer_Print ( (MemoryPointer*) memoryPointer, arguments->printOptions );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	Represents an allocated block of memory which is a given to a pointer.
+**
+** <b>Assumptions</b>
+**	Memory Module is enabled.
+**
+** <b>Comments</b>
+**	Do not use this class when the Memory Module is switched off.
+**
+** <b>Description</b>
+**	This class is used to store statistical data of memory blocks allocated by the Memory Module.
+**
+** $Id: MemoryPointer.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_Foundation_MemoryPointer_h__
+#define __Base_Foundation_MemoryPointer_h__
+
+	/** Textual name for MemoryPointer class. */
+	extern const Type MemoryPointer_Type;
+
+	/** Types of memory allocations in memory module. */
+	typedef enum { 
+		MEMORY_OBJECT,
+		MEMORY_1DARRAY,
+		MEMORY_2DARRAY,
+		MEMORY_3DARRAY,
+		MEMORY_4DARRAY,
+		MEMORY_2DAS1D,
+		MEMORY_3DAS1D,
+		MEMORY_4DAS1D,
+		MEMORY_2DCOMPLEX,
+		MEMORY_3DSETUP,
+		MEMORY_3DCOMPLEX
+	} MemoryAllocType;
+	
+	/** Fields that are printable in MemoryPointer. A Binary Flag. */
+	typedef enum {
+		MEMORYPOINTER_PTR = 		0x0001,
+		MEMORYPOINTER_TYPE = 		0x0002,
+		MEMORYPOINTER_NAME = 		0x0004,
+		MEMORYPOINTER_FILE = 		0x0008,
+		MEMORYPOINTER_FUNC = 		0x0010,
+		MEMORYPOINTER_LINE = 		0x0020,
+		MEMORYPOINTER_ALLOCTYPE = 	0x0040,
+		MEMORYPOINTER_ITEMSIZE = 	0x0080,
+		MEMORYPOINTER_TOTALSIZE = 	0x0100,
+		MEMORYPOINTER_LENGTH = 		0x0200,
+		MEMORYPOINTER_ALL = 
+			MEMORYPOINTER_PTR |
+			MEMORYPOINTER_TYPE |
+			MEMORYPOINTER_NAME |
+			MEMORYPOINTER_FILE |
+			MEMORYPOINTER_FUNC |
+			MEMORYPOINTER_LINE |
+			MEMORYPOINTER_ALLOCTYPE |
+			MEMORYPOINTER_ITEMSIZE |
+			MEMORYPOINTER_TOTALSIZE |
+			MEMORYPOINTER_LENGTH
+	} MemoryPointerColumn;
+	
+	typedef struct {
+		Index	x;
+		Index*	y;
+		Index**	z;
+	} MemoryPointer_LengthXYZ;
+	
+	typedef union {
+		Index			oneD;
+		Index			twoD[2];
+		Index			threeD[3];
+		Index			fourD[4];
+		MemoryPointer_LengthXYZ	xyz;
+	} MemoryPointer_Length;
+	
+	/** \def __MemoryPointer See MemoryPointer. */
+	#define __MemoryPointer \
+		Pointer			ptr; \
+		Pointer			ptrReference; \
+		MemoryPointerStatus	status; \
+		MemoryOpStamp		stamp; \
+		MemoryField*		type; \
+		MemoryField*		name; \
+		MemoryField*		file; \
+		MemoryField*		func; \
+		Index			line; \
+		MemoryAllocType		allocType; \
+		SizeT			itemSize; \
+		SizeT			totalSize; \
+		MemoryPointer_Length	length;
+	struct MemoryPointer { __MemoryPointer };
+
+	/** Constructs a MemoryPointer, registering the MemoryField(s) it is associated with.
+	 **
+	 ** The length must be manually set. This is because the members of the length union are set
+	 ** depending on the allocation type.
+	 **/
+	MemoryPointer* MemoryPointer_New(
+		Pointer ptr,
+		MemoryOpStamp stamp,
+		const char* type,
+		const char* name,
+		const char* file,
+		const char* func,
+		Index line,
+		MemoryAllocType allocType,
+		SizeT itemSize,
+		SizeT totalSize );
+	
+	/** Initialises a MemoryPointer, registering the MemoryFields it is associated with. */
+	void MemoryPointer_Init(
+		MemoryPointer* memoryPointer,
+		Pointer ptr,
+		MemoryOpStamp stamp,
+		const char* type,
+		const char* name,
+		const char* file,
+		const char* func,
+		Index line,
+		MemoryAllocType allocType,
+		SizeT itemSize,
+		SizeT totalSize );
+	
+	/** Deletes a MemoryPointer. */
+	void MemoryPointer_Delete( MemoryPointer* memoryPointer );
+	void MemoryPointer_Delete_Helper( void* memoryPointer, void *args );
+
+	/** Displays the contents of a MemoryPointer.
+	 **
+	 ** All fields are print at level 2, except for length of 2D and 3D complex arrays, which is printed at level 3.
+	 **
+	 ** @param columns A Bit flag of The fields to be displayed.
+	 **/
+	void MemoryPointer_Print( MemoryPointer* memoryPointer, MemoryPointerColumn columns );
+
+		typedef struct MemoryPointer_Print_Type_Name_Func_Helper_Arg{
+			Type			type;
+			Name			name;
+			MemoryPointerColumn	printOptions;
+		}MemoryPointer_Print_Type_Name_Func_Helper_Arg;
+	void MemoryPointer_Print_Type_Name_Func_Helper( void *memoryPointer, void *args );
+	
+		typedef struct MemoryPointer_Print_File_Func_Helper_Arg{
+			char*			fileName;
+			char*			funcName;
+			MemoryPointerColumn	printOptions;
+		}MemoryPointer_Print_File_Func_Helper_Arg;
+	void MemoryPointer_Print_File_Func_Helper( void *memoryPointer, void *args );
+
+	/** Displays all fields of a MemoryPointer. */
+	#define MemoryPointer_PrintAll( memoryPointer ) MemoryPointer_Print( memoryPointer, MEMORYPOINTER_ALL );			
+			
+#endif /* __Base_Foundation_MemoryPointer_h__ */
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MemoryReport.c 3803 2006-09-27 03:17:12Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "MemoryField.h"
+#include "MemoryPointer.h"
+#include "MemoryReport.h"
+#include "Memory.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stddef.h>
+
+const Type MemoryReport_Type = "MemoryReport";
+
+const int MEMORYREPORT_DELTA = 1;	/**< Number of items to grow by when array resizes. */
+const int MEMORYREPORT_SIZE = 2;	/**< Number of items an array begins with. */
+
+
+/** Returns the index of a given group in an array and -1 if not found. */
+int MemoryReport_Find_Group( int numGroups, MemoryReportGroup* groups, MemoryReportGroup search );
+
+
+MemoryReport* MemoryReport_New( )
+{
+	MemoryReport* result = (MemoryReport*) malloc( sizeof(MemoryReport) );
+	
+	_MemoryReport_Init( result );
+	
+	return result;
+}
+	
+void _MemoryReport_Init( MemoryReport* memoryReport )
+{
+	memoryReport->groupCount = 0;
+	memoryReport->groupSize = MEMORYREPORT_SIZE;
+	memoryReport->groups = (MemoryReportGroup*) malloc( sizeof(MemoryReportGroup) * MEMORYREPORT_SIZE );
+	memoryReport->conditionCount = 0;
+	memoryReport->conditionSize = MEMORYREPORT_SIZE;
+	memoryReport->conditionGroups = (MemoryReportGroup*) malloc( sizeof(MemoryReportGroup) * MEMORYREPORT_SIZE );
+	memoryReport->conditionValues = (char**) malloc( sizeof(char*) * MEMORYREPORT_SIZE );
+}
+	
+void MemoryReport_Delete( MemoryReport* memoryReport )
+{
+	Index i;
+	
+	free( memoryReport->groups );
+	free( memoryReport->conditionGroups );
+	
+	for ( i = 0; i < memoryReport->conditionCount; ++i )
+	{
+		if ( memoryReport->conditionValues[i] != NULL )
+		{
+	 		free( memoryReport->conditionValues[i] );
+	 	}
+	}
+	free( memoryReport->conditionValues );
+}
+
+void MemoryReport_AddGroup( MemoryReport* memoryReport, MemoryReportGroup group )
+{
+	if ( MemoryReport_Find_Group( memoryReport->groupCount, memoryReport->groups, group ) >= 0 )
+	{
+		return;
+	}
+
+	/* Extend the groups array if needed. */
+	if ( memoryReport->groupCount == memoryReport->groupSize )
+	{
+		memoryReport->groupSize += MEMORYREPORT_DELTA;
+		memoryReport->groups = (MemoryReportGroup*)
+			realloc( memoryReport->groups, sizeof(MemoryReportGroup) * memoryReport->groupSize );	
+	}
+	
+	memoryReport->groups[memoryReport->groupCount] = group;
+	memoryReport->groupCount++;
+}
+
+void MemoryReport_AddCondition( MemoryReport* memoryReport, MemoryReportGroup group, const char* condition )
+{
+	/* Add this group if it does not already exist. */
+	if ( MemoryReport_Find_Group( memoryReport->groupCount, memoryReport->groups, group ) < 0 )
+	{
+		MemoryReport_AddGroup( memoryReport, group );	
+	}
+	
+	/* Extend the condition arrays if needed. */
+	if ( memoryReport->conditionCount == memoryReport->conditionSize )
+	{
+		memoryReport->conditionSize += MEMORYREPORT_DELTA;
+		memoryReport->conditionGroups = (MemoryReportGroup*)
+			realloc( memoryReport->conditionGroups, sizeof(MemoryReportGroup) * memoryReport->conditionSize );
+		memoryReport->conditionValues = (char**)
+			realloc( memoryReport->conditionValues, sizeof(char*) * memoryReport->conditionSize );		
+	}
+	
+	memoryReport->conditionGroups[memoryReport->conditionCount] = group;
+	
+	if ( condition )
+	{
+		char*	ptr = memoryReport->conditionValues[memoryReport->conditionCount];
+
+		ptr = (char*)malloc( (strlen(condition) + 1) * sizeof(char) );
+		strcpy( ptr, condition );
+	}
+	else
+	{
+		/* NULL is a condition as well, such as Type_Invalid and Name_Invalid. */
+		memoryReport->conditionValues[memoryReport->conditionCount] = NULL;
+	}
+	
+	memoryReport->conditionCount++;
+}
+
+void MemoryReport_Print( MemoryReport* memoryReport )
+{
+	BTree_ParseTree ( stgMemory->pointers, MemoryReport_Print_Helper, (void*) memoryReport );
+}
+
+void MemoryReport_Print_Helper( void *memoryPointer, void* memReport )
+{
+	MemoryField* rootField;		/* The top level container for where the results begin. */
+	MemoryField* prevField; 	/* A temporary pointer to hold previous fields. */
+	Bool valid;	/* Whether a memory pointer record matches the conditions. */
+	MemoryReport* memoryReport;
+	MemoryPointer* memPtr;
+	Index iGroup, iCondition;	/* Iterators. */
+	
+	assert ( memoryPointer );
+	assert ( memReport );
+
+	memoryReport = (MemoryReport*) memReport;
+		
+	if ( memoryReport->groupCount == 0 )
+	{
+		return;
+	}
+	
+	rootField = MemoryField_New( "Report Query:" );
+
+	/* Algorithm:
+	 * - Iterate through all MemoryPointers recorded.
+	 * - Tuples matching the condition are added to the results.
+	 * - Statistics are derived from tuples.
+	 *
+	 * Reason:
+	 * Allows flexibility to produce any report required. The down side is that the peak bytes used cannot be derived this way.
+	 *
+	 * The alternative is to always record stats for all combinations (useful ones) but that will have a large impact on run
+	 * time as well as memory space.
+	 */
+	memPtr = (MemoryPointer*) memoryPointer;
+
+	/* check condition */
+	valid = True;
+	for ( iCondition = 0; iCondition < memoryReport->conditionCount && valid; ++iCondition )
+	{
+		switch ( memoryReport->conditionGroups[iCondition] )
+		{
+			case MEMORYREPORT_TYPE:
+				if ( MemoryField_StringCompare( memPtr->type->value,
+					memoryReport->conditionValues[iCondition] ) != 0 )
+				{
+					valid = False;
+				}
+				break;
+			case MEMORYREPORT_NAME:
+				if ( MemoryField_StringCompare( memPtr->name->value,
+					memoryReport->conditionValues[iCondition] ) != 0 )
+				{
+					valid = False;
+				}
+				break;
+			case MEMORYREPORT_FILE:
+				if ( MemoryField_StringCompare( memPtr->file->value,
+					memoryReport->conditionValues[iCondition] ) != 0 )
+				{
+					valid = False;
+				}
+				break;
+			case MEMORYREPORT_FUNC:
+				if ( MemoryField_StringCompare( memPtr->func->value,
+					memoryReport->conditionValues[iCondition] ) != 0 )
+				{
+					valid = False;
+				}
+				break;
+		}
+	}
+		
+	if ( valid )
+	{
+		/* Add this entry, sorted by the groups of the report. */
+		prevField = rootField;
+		for ( iGroup = 0; iGroup < memoryReport->groupCount; ++iGroup )
+		{
+			switch ( memoryReport->groups[iGroup] )
+			{
+				case MEMORYREPORT_TYPE:
+					prevField = MemoryField_Register( prevField, memPtr->type->value );
+					break;
+				case MEMORYREPORT_NAME:
+					prevField = MemoryField_Register( prevField, memPtr->name->value );
+					break;
+				case MEMORYREPORT_FILE:
+					prevField = MemoryField_Register( prevField, memPtr->file->value );
+					break;
+				case MEMORYREPORT_FUNC:
+					prevField = MemoryField_Register( prevField, memPtr->func->value );
+					break;
+			}
+		}
+		
+		/* Derive the statistics. */
+		prevField->allocCount++;
+		if ( memPtr->ptr == NULL )
+		{
+			prevField->freeCount++;
+		}
+		else
+		{
+			prevField->currentAllocation += memPtr->totalSize;
+		}
+		prevField->totalAllocation += memPtr->totalSize;
+	}
+	
+	
+	prevField = rootField;
+	while ( prevField->subCount == 1 )
+	{
+		Journal_Printf( stgMemory->infoStream, "%s ", prevField->value );
+		prevField = prevField->subFields[0];
+	}
+	
+	MemoryField_PrintSummary( prevField, "~Report~" );
+
+	MemoryField_Delete( rootField );
+}
+
+int MemoryReport_Find_Group( int numGroups, MemoryReportGroup* groups, MemoryReportGroup search )
+{
+	int result;
+	
+	for ( result = 0; result < numGroups; ++result )
+	{
+		if ( groups[result] == search )
+		{
+			return result;
+		}
+	}
+	
+	return -1;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Used to construct a query and then print a report of the Memory Module.
+**
+** <b>Assumptions</b>
+**	Memory Module is enabled.
+**
+** <b>Comments</b>
+**	Do not use this class when the Memory Module is switched off.
+**
+** <b>Description</b>
+**	To create custom queries of the data in the Memory Module, this class is used.
+**	Note that the peak allocations statistic cannot be produced because it is a time-state dependant variable which cannot be
+**	deduced from the existing data structure. Incorporating this information would otherwise impact the performance of the
+**	module.
+**
+** $Id: MemoryReport.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_Foundation_MemoryReport_h__
+#define __Base_Foundation_MemoryReport_h__
+
+	/** Textual name for MemoryReport class. */
+	extern const Type MemoryReport_Type;
+
+	/** Fields which in statistics which can be grouped or conditionally filtered */
+	typedef enum {
+		MEMORYREPORT_TYPE,
+		MEMORYREPORT_NAME,
+		MEMORYREPORT_FILE,
+		MEMORYREPORT_FUNC
+	} MemoryReportGroup;
+
+	/** \def __MemoryReport See MemoryReport */
+	#define __MemoryReport \
+		Index			groupCount;		\
+		Index			groupSize;		\
+		MemoryReportGroup*	groups; 		/**< The groups to display in order. */ \
+		Index			conditionCount;		\
+		Index			conditionSize;		\
+		MemoryReportGroup*	conditionGroups;	/**< The groups which are to be filtered by a condition. */ \
+		char**			conditionValues;	/**< The value to match in the condition. */
+	struct MemoryReport { __MemoryReport };
+
+	/** Creates an empty report. */
+	MemoryReport* MemoryReport_New();
+
+	/** Initialises an empty report. */
+	void _MemoryReport_Init( MemoryReport* memoryReport );
+	
+	/** Frees memory from a report. */
+	void MemoryReport_Delete( MemoryReport* memoryReport );
+	
+	
+	/** Adds a field to group by. Groups should be added in order of display. */
+	void MemoryReport_AddGroup( MemoryReport* memoryReport, MemoryReportGroup group );
+	
+	/** Adds a condition where a field has to match a given value. If group does not exist, it will be automatically added. */
+	void MemoryReport_AddCondition( MemoryReport* memoryReport, MemoryReportGroup group, const char* condition );
+	
+
+	/** Displays the report of the memory module based on the groups and conditions. */
+	void MemoryReport_Print( MemoryReport* memoryReport );
+	
+	void MemoryReport_Print_Helper( void *memoryPointer, void* memoryReport );
+
+		
+#endif /* __Base_Foundation_MemoryReport_h__ */
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryTag.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryTag.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryTag.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053 Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**
+** <b>Assumptions</b>
+**
+** <b>Comments</b>
+**
+** <b>Description</b>
+**
+** $Id: MemoryTag.h 2940 2005-05-15 00:53:19Z AlanLo $
+**
+**/
+
+#ifndef __Base_Foundation_MemoryTag_h__
+#define __Base_Foundation_MemoryTag_h__
+
+	/* Memory Header that is inserted into every malloc
+	 * As this grows, we can move into separate file.
+	 *
+	 * NOTE: Keep this guy aligned to 8-byte words to avoid misalign problems
+	 *       (not doing as a macro because it may not resolve optimally and slow things down)
+	 */
+	#define __MemoryTag\
+		unsigned long	instCount;		/**< Instance counter. */  \
+		unsigned long   size;
+
+	struct MemoryTag { __MemoryTag };
+
+
+	#define Memory_CountGet( ptr ) ((MemoryTag*)( (ArithPointer)(ptr) - sizeof(MemoryTag) ))->instCount
+	
+	#define Memory_CountInc( ptr ) ( Memory_CountGet( ptr )++ )
+
+	#define Memory_CountDec( ptr ) ( Memory_CountGet( ptr )-- )
+
+	#define Memory_SizeGet( ptr ) ((MemoryTag*)( (ArithPointer)(ptr) - sizeof(MemoryTag) ))->size
+
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: NamedObject_Register.c 2428 2004-12-16 03:33:16Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "Memory.h"
+#include "Class.h"
+#include "Object.h"
+#include "ObjectAdaptor.h"
+#include "ObjectList.h"
+#include "NamedObject_Register.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Stg_Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+const Type NamedObject_Register_Type = "NamedObject_Register";
+
+NamedObject_Register*	NamedObject_Register_New( void ) {
+	return _NamedObject_Register_New(
+		sizeof(NamedObject_Register),
+		NamedObject_Register_Type,
+		_NamedObject_Register_Delete,
+		_NamedObject_Register_Print,
+		_NamedObject_Register_Copy );
+}
+
+NamedObject_Register*	_NamedObject_Register_New( 
+		SizeT			_sizeOfSelf, 
+		Type			type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*	_copy ) 
+{
+	NamedObject_Register*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(NamedObject_Register));
+	self = (NamedObject_Register*)_Stg_Class_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	_NamedObject_Register_Init( self );	
+
+	return self;
+}
+	
+void _NamedObject_Register_Init( NamedObject_Register* self ) {
+	self->objects = Stg_ObjectList_New();
+}
+
+void _NamedObject_Register_Delete( void* namedObjectRegister ) {
+	NamedObject_Register* self = (NamedObject_Register*)namedObjectRegister;
+	
+	Journal_DPrintf( Journal_Register( Debug_Type, NamedObject_Register_Type ), "In: %s()\n", __func__ );
+	
+	Stg_Class_Delete( self->objects ); 
+
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+	
+void _NamedObject_Register_Print( void* namedObjectRegister, struct Stream* stream ) {
+	NamedObject_Register*	self = (NamedObject_Register*)namedObjectRegister;
+
+	/* General info */
+	Journal_Printf( stream, "NamedObject_Register (ptr): %p\n", self);
+	Stream_Indent( stream );
+	
+	/* Use parent print */
+	_Stg_Class_Print( self, stream );
+	
+	/* Print the list of registered objects */
+	Print( self->objects, stream );	
+	
+	Stream_UnIndent( stream );
+}
+
+
+void* _NamedObject_Register_Copy( void* namedObjectRegister, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	NamedObject_Register*	self = (NamedObject_Register*)namedObjectRegister;
+	NamedObject_Register*	newNamedObjectRegister;
+	
+	newNamedObjectRegister = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	Journal_Firewall( 
+		deep, 
+		Journal_Register( Error_Type, NamedObject_Register_Type ), 
+		"Shallow copy not yet implemented\n" );
+	if( deep ) {
+		newNamedObjectRegister->objects = Stg_Class_Copy( self->objects, NULL, deep, nameExt, ptrMap );
+	}
+	
+	return newNamedObjectRegister;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**  <b>Role:</b>
+**	A generic register class for any Object.
+**
+** Assumptions:
+**
+** Comments:
+**	Just uses a Stg_ObjectList to do the grunt work.
+**
+** $Id: NamedObject_Register.h 2428 2004-12-16 03:33:16Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Foundation_NamedObject_Register_h__
+#define __Base_Foundation_NamedObject_Register_h__ 
+
+	extern const Type NamedObject_Register_Type;
+	
+	#define __NamedObject_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Stg_ObjectList*	objects;
+		
+
+	struct NamedObject_Register { __NamedObject_Register };
+	
+	
+	/* Stg_Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	NamedObject_Register*	NamedObject_Register_New( void );
+	
+	NamedObject_Register*	_NamedObject_Register_New( 
+		SizeT			_sizeOfSelf, 
+		Type			type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*	_copy );
+	
+	void _NamedObject_Register_Init( NamedObject_Register* self );
+	
+	void _NamedObject_Register_Delete( void* nameObjectRegister );
+	
+	void _NamedObject_Register_Print( void* nameObjectRegister, struct Stream* stream );
+	
+	void* _NamedObject_Register_Copy( void* namedObjectRegister, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	#define NamedObject_Register_Add( self, nameObject ) \
+		( Stg_ObjectList_Append( (self)->objects, nameObject ) )
+
+	#define NamedObject_Register_GetIndex( self, name ) \
+		( Stg_ObjectList_GetIndex( (self)->objects, name ) )
+
+	#define NamedObject_Register_GetByName( self, name ) \
+		( Stg_ObjectList_Get( (self)->objects, name ) )
+
+	#define NamedObject_Register_GetByIndex( self, index ) \
+		( (self)->objects->data[(index)] )
+	
+	#define NamedObject_Register_PrintAllEntryNames( self, stream ) \
+		( Stg_ObjectList_PrintAllEntryNames( (self)->objects, stream ) )
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Foundation_NamedObject_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Object.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "Memory.h"
+#include "Class.h"
+#include "Object.h"
+#include "CommonRoutines.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+const Type Stg_Object_Type = "Stg_Object";
+
+
+Stg_Object* _Stg_Object_New( 
+		SizeT				_sizeOfSelf, 
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print, 
+		Stg_Class_CopyFunction*		_copy, 
+		Name				name,
+		AllocationType			nameAllocationType )
+{
+	Stg_Object* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_Object) );
+	self = (Stg_Object*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* Stg_Object info */
+	_Stg_Object_Init( self, name, nameAllocationType );
+	
+	return self;
+}
+
+
+void _Stg_Object_Init( Stg_Object* self, Name name, AllocationType nameAllocationType ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_Object info */
+	assert( name );
+	if ( GLOBAL == nameAllocationType )
+		self->name = name;
+	else
+		self->name = StG_Strdup( name );
+
+	self->nameAllocationType = nameAllocationType;	
+}
+
+
+void _Stg_Object_Delete( void* object ) {
+	Stg_Object* self = (Stg_Object*)object;
+	
+	if ( GLOBAL != self->nameAllocationType )
+		Memory_Free( self->name );
+
+	/* Delete parent class */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Stg_Object_Print( void* object, struct Stream* stream) {
+	Stg_Object* self = (Stg_Object*)object;
+	
+	/* General info */
+	Journal_Printf( stream, "Stg_Object (ptr): %p\n", (void*)self );
+	Stream_Indent( stream );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* Stg_Object */
+	Journal_Printf( stream, "name: %s\n", self->name );
+	Journal_Printf( stream, "nameAllocationType: %s\n", self->nameAllocationType == GLOBAL ? "GLOBAL" : "NON_GLOBAL" );
+	
+	Stream_UnIndent( stream );
+}
+
+void* _Stg_Object_Copy( void* object, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_Object*	self = (Stg_Object*)object;
+	Stg_Object*	newObject;
+	
+	newObject = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* TODO: if we are not deep copying we should not copy the name, just the pointer.  There
+	 * is a problem with this; will try to fix it later. */
+	
+	if( nameExt ) {
+		unsigned	nameLen = strlen( self->name );
+		
+		newObject->name = Memory_Alloc_Array_Unnamed( char, nameLen + strlen( nameExt ) + 1 );
+		memcpy( newObject->name, self->name, nameLen );
+		strcpy( newObject->name + nameLen, nameExt );
+	}
+	else {
+		newObject->name = StG_Strdup( self->name );
+	}
+	
+	newObject->nameAllocationType = NON_GLOBAL;
+	
+	return newObject;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+void Stg_Object_SetName( void* object, Name name )
+{
+	Stg_Object* self = (Stg_Object*)object;
+	
+	if ( GLOBAL == self->nameAllocationType )
+	{
+		self->name = name;
+	}
+	else
+	{
+		Memory_Free( self->name );
+		self->name = StG_Strdup( name );
+	}
+}
+
+
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+Name _Stg_Object_GetNameFunc( void* object ) {
+	Stg_Object* self = (Stg_Object*)object;
+	
+	return _Stg_Object_GetNameMacro( self );
+}
+
+Name Stg_Object_AppendSuffix( void* object, Name suffix ) {
+	Stg_Object* self = (Stg_Object*)object;
+	Name        name;
+
+	Stg_asprintf( &name, "%s-%s", _Stg_Object_GetNameMacro( self ), suffix );
+
+	return name;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Abstract class for objects. Objects are named.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Object.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_Foundation_Object_h__
+#define __Base_Foundation_Object_h__
+
+	/** Textual name for Stg_Object class. */
+	extern const Type Stg_Object_Type;
+
+	/** \def __Stg_Object See Object */
+	#define __Stg_Object \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Object info */ \
+		Name				name; \
+		AllocationType			nameAllocationType;
+	
+	struct _Stg_Object { __Stg_Object };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/** Constructor interface. */
+	Stg_Object* _Stg_Object_New( 
+		SizeT				_sizeOfSelf, 
+		Type				type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print, 
+		Stg_Class_CopyFunction*		_copy, 
+		Name				name,
+		AllocationType			nameAllocationType );
+	
+	/** Init interface. */
+	void _Stg_Object_Init( Stg_Object* self, Name name, AllocationType nameAllocationType );
+	
+	/** Delete interface. */
+	void _Stg_Object_Delete( void* object );
+	
+	/** Print interface. */
+	void _Stg_Object_Print( void* object, struct Stream* stream );
+	
+	/** Copy interface. */
+	void* _Stg_Object_Copy( void* object, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/** Sets the name of the object. */
+	void Stg_Object_SetName( void* object, Name name );
+	
+	
+	/** \internal Get the object name. */
+	#define _Stg_Object_GetNameMacro( object ) ( (object)->name )
+	Name _Stg_Object_GetNameFunc( void* object );
+	#ifdef MACRO_AS_FUNC
+		/** Get the object name. */
+		#define Stg_Object_GetName _Stg_Object_GetNameFunc
+	#else
+		#define Stg_Object_GetName _Stg_Object_GetNameMacro
+	#endif
+	
+	/** Function which simply tacks on a suffix to an object's name of form "ObjectName-Suffix" 
+	 *  Pointer returned must be free'd */
+	Name Stg_Object_AppendSuffix( void* object, Name suffix ) ;
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Foundation_Object_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,340 @@
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ObjectAdaptor.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "Memory.h"
+#include "Class.h"
+#include "Object.h"
+#include "ObjectAdaptor.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+const Type Stg_ObjectAdaptor_Type = "Stg_ObjectAdaptor";
+
+
+Stg_ObjectAdaptor* Stg_ObjectAdaptor_NewOfClass( void* dataPtr, Name name, Bool iOwn, Bool isGlobal ) {
+	return _Stg_ObjectAdaptor_New(
+		sizeof(Stg_ObjectAdaptor), 
+		Stg_ObjectAdaptor_Type, 
+		_Stg_ObjectAdaptor_Delete,
+		_Stg_ObjectAdaptor_Print, 
+		_Stg_ObjectAdaptor_Copy,
+		name,
+		dataPtr,
+		iOwn,
+		isGlobal,
+		True,
+		NULL,
+		NULL,
+		NULL ); 
+}
+
+
+void Stg_ObjectAdaptor_InitOfClass( Stg_ObjectAdaptor* self, void* dataPtr, Name name, Bool iOwn, Bool isGlobal ) {
+	/* General info */
+	self->type = Stg_ObjectAdaptor_Type;
+	self->_sizeOfSelf = sizeof(Stg_ObjectAdaptor);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Stg_ObjectAdaptor_Delete;
+	self->_print = _Stg_ObjectAdaptor_Print;
+	self->_copy = _Stg_ObjectAdaptor_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+
+	/* Stg_ObjectAdaptor info */
+	_Stg_ObjectAdaptor_Init( self, dataPtr, iOwn, isGlobal, True, NULL, NULL, NULL );
+}
+
+
+Stg_ObjectAdaptor* Stg_ObjectAdaptor_NewOfPointer(
+		void*						dataPtr, 
+		Name						name, 
+		Bool						iOwn,
+		Bool						isGlobal,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	return _Stg_ObjectAdaptor_New(
+		sizeof(Stg_ObjectAdaptor), 
+		Stg_ObjectAdaptor_Type, 
+		_Stg_ObjectAdaptor_Delete,
+		_Stg_ObjectAdaptor_Print, 
+		_Stg_ObjectAdaptor_Copy,
+		name,
+		dataPtr,
+		iOwn,
+		isGlobal,
+		False,
+		ptrDelete,
+		ptrPrint,
+		ptrCopy ); 
+}
+
+
+void Stg_ObjectAdaptor_InitOfPointer( 
+		Stg_ObjectAdaptor* 				self, 
+		void*						dataPtr, 
+		Name						name, 
+		Bool						iOwn,
+		Bool						isGlobal,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	/* General info */
+	self->type = Stg_ObjectAdaptor_Type;
+	self->_sizeOfSelf = sizeof(Stg_ObjectAdaptor);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Stg_ObjectAdaptor_Delete;
+	self->_print = _Stg_ObjectAdaptor_Print;
+	self->_copy = _Stg_ObjectAdaptor_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, GLOBAL );
+
+	/* Stg_ObjectAdaptor info */
+	_Stg_ObjectAdaptor_Init( self, dataPtr, iOwn, isGlobal, False, ptrDelete, ptrPrint, ptrCopy );
+}
+
+
+Stg_ObjectAdaptor* _Stg_ObjectAdaptor_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy,
+		Name						name,
+		void*						dataPtr,
+		Bool						iOwn,
+		Bool						isGlobal,
+		Bool						isStgClass,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectAdaptor* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_ObjectAdaptor) );
+	self = (Stg_ObjectAdaptor*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* Stg_ObjectAdaptor info */
+	_Stg_ObjectAdaptor_Init( self, dataPtr, iOwn, isGlobal, isStgClass, ptrDelete, ptrPrint, ptrCopy );
+	
+	return self;
+}
+
+
+void _Stg_ObjectAdaptor_Init(
+		Stg_ObjectAdaptor*				self, 
+		void*						dataPtr, 
+		Bool						iOwn, 
+		Bool						isGlobal, 
+		Bool						isStgClass,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	self->dataPtr = dataPtr;
+	self->iOwn = iOwn;
+	self->isGlobal = isGlobal;
+	self->isStgClass = isStgClass;
+	if( isStgClass ) {
+		self->ptrDelete = NULL;
+		self->ptrPrint = NULL;
+		self->ptrCopy = NULL;
+	}
+	else {
+		self->ptrDelete = ptrDelete;
+		self->ptrPrint = ptrPrint;
+		self->ptrCopy = ptrCopy;
+	}
+	
+	Journal_Firewall( 
+		(Bool)self->dataPtr, 
+		Journal_Register( Error_Type, Stg_ObjectAdaptor_Type ), 
+		"Constructing a Stg_ObjectAdaptor where there the data pointer is NULL is illegal.\n" );
+	if( self->isGlobal ) {
+		Journal_Firewall( 
+			!self->iOwn, 
+			Journal_Register( Error_Type, Stg_ObjectAdaptor_Type ), 
+			"Constructing a Stg_ObjectAdaptor where both iOwn and isGlobal are true is illegal.\n" );
+	}
+}
+
+
+void _Stg_ObjectAdaptor_Delete( void* objectAdaptor ) {
+	Stg_ObjectAdaptor*	self = (Stg_ObjectAdaptor*)objectAdaptor;
+	
+	if( !self->isGlobal ) {
+		if( self->isStgClass ) {
+			if( self->iOwn && self->dataPtr ) {
+				Stg_Class_Delete( self->dataPtr );
+			}
+		}
+		else {
+			if( self->iOwn && self->dataPtr ) {
+				if( self->ptrDelete ) {
+					self->ptrDelete( self->dataPtr );
+				}
+				Memory_Free( self->dataPtr );
+			}
+		}
+	}
+	self->dataPtr = NULL;
+	
+	/* Delete parent class */
+	_Stg_Object_Delete( self );
+}
+
+
+void _Stg_ObjectAdaptor_Print( void* objectAdaptor, struct Stream* stream ) {
+	Stg_ObjectAdaptor*	self = (Stg_ObjectAdaptor*)objectAdaptor;
+	
+	/* General info */
+	Journal_Printf( stream, "Stg_ObjectAdaptor (ptr): %p\n", self );
+	Stream_Indent( stream );
+	
+	_Stg_Object_Print( self, stream );
+	
+	Journal_Printf( stream, "iOwn: %s\n", self->iOwn ? "Yes" : "No" );
+	Journal_Printf( stream, "isGlobal: %s\n", self->isGlobal ? "Yes" : "No" );
+	Journal_Printf( stream, "isStgClass: %s\n", self->isStgClass ? "Yes" : "No" );
+	
+	if( self->isStgClass ) {
+		Stg_Class_Print( self->dataPtr, stream );
+	}
+	else {
+		if( self->ptrPrint ) {
+			self->ptrPrint( self->dataPtr, stream );
+		}
+		else {
+			Journal_Printf( stream, "Don't know how to print the pointer (it is not to a StGermain class)\n" );
+		}
+	}
+	
+	Stream_UnIndent( stream );
+}
+
+
+void* _Stg_ObjectAdaptor_Copy( void* objectAdaptor, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_ObjectAdaptor* self = (Stg_ObjectAdaptor*)objectAdaptor;
+	Stg_ObjectAdaptor* newTuple;
+
+	newTuple = _Stg_Object_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newTuple->isGlobal = self->isGlobal;
+	newTuple->isStgClass = self->isStgClass;
+	
+	Journal_Firewall( deep, Journal_Register( Error_Type, Stg_ObjectAdaptor_Type ), "Shallow copy not yet implemented\n" );
+	if( deep ) {
+		if( self->isGlobal ) {
+			newTuple->iOwn = False;
+			newTuple->dataPtr = self->dataPtr;
+		}
+		else {
+			newTuple->iOwn = True;
+			
+			Journal_Firewall( 
+				self->iOwn, 
+				Journal_Register( Error_Type, Stg_ObjectAdaptor_Type ), 
+				"Deep copy for Stg_ObjectAdaptors that do not own the non-global data is not yet implemented\n" );
+			
+			/* TODO: DOES NOT check if the object has already been copied (i.e. use ptrMap). Beacuse if we assume
+			   ownership, we could not do so without an instance count machanism. */
+			/* if not in ptr map */
+			if( self->isStgClass ) {
+				newTuple->dataPtr = Stg_Class_Copy( self->dataPtr, 0, deep, nameExt, ptrMap );
+			}
+			else {
+				Journal_Firewall( 
+					self->ptrCopy != NULL, 
+					Journal_Register( Error_Type, Stg_ObjectAdaptor_Type ), 
+					"Deep copy for pointer based Stg_ObjectAdaptors requires a copy function attached... not provided!\n" );
+				newTuple->dataPtr = self->ptrCopy( self->dataPtr, 0, deep, nameExt, ptrMap );
+			}
+			/* else if in ptr map ... copy ptr value from there. */
+		}
+	}
+	
+	return newTuple;
+}
+	
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+void* Stg_ObjectAdaptor_ObjectFunc( void* objectAdaptor ) {
+	Stg_ObjectAdaptor* self = (Stg_ObjectAdaptor*)objectAdaptor;
+	
+	return Stg_ObjectAdaptor_ObjectMacro( self );
+}
+
+
+Bool Stg_ObjectAdaptor_IOwnFunc( void* objectAdaptor ) {
+	Stg_ObjectAdaptor* self = (Stg_ObjectAdaptor*)objectAdaptor;
+	
+	return Stg_ObjectAdaptor_IOwnMacro( self );
+}
+
+
+Bool Stg_ObjectAdaptor_IsGlobalFunc( void* objectAdaptor ) {
+	Stg_ObjectAdaptor* self = (Stg_ObjectAdaptor*)objectAdaptor;
+	
+	return Stg_ObjectAdaptor_IsGlobalMacro( self );
+}
+
+
+Bool Stg_ObjectAdaptor_IsStgClassFunc( void* objectAdaptor ) {
+	Stg_ObjectAdaptor* self = (Stg_ObjectAdaptor*)objectAdaptor;
+	
+	return Stg_ObjectAdaptor_IsStgClassMacro( self );
+}
+
+
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	Wrapper class allowing us to associate a Name with any StGermain object or non-StGermain object. If ownership is set to
+**	true, then it will attempt to delete the object on deletion.
+**
+** Assumptions:
+**	The attached ptr is to a StGermain class if the "OfClass" constructor(s) are used... there is no safe way to check.
+**
+** Comments:
+**	Deep copying DOES NOT check if the object has already been copied (i.e. use ptrMap). Beacuse if we assume ownership, we
+**		could not do so without an instance count machanism.
+**	Deep copying when we are not the owner and it is not a StGermain class is not yet implemented.
+**	When "OfPointer", 
+**		*) The delete function should delete the content within the pointer (but NOT the pointer itself). It is useful
+**			when the pointer is to something that contains a pointer itself. Pass NULL to do nothing.
+**		*) The print function should print the contents of within the pointer. Pass NULL to print a default message.
+**		*) The copy function should copy the content within the pointer. If NULL is given, the Stg_ObjectAdaptor has NO choice
+**			but to firewall on being copied because it does not know how to copy the pointer (and a pointer copy
+**			will be problematic at Delete time).
+**
+** $Id: ObjectAdaptor.h 2406 2004-12-09 01:20:49Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_ObjectAdaptor_h__
+#define __Base_Automation_ObjectAdaptor_h__
+	
+	/** Delete/Print/Copy function prototypes for attached pointers (not StGermain classes) */
+	/** *Note*: this function should only delete extra memory allocated by the object, _not
+	the object itself_ - the ObjectAdaptor wrapper takes responsibility for this */
+	typedef void  (Stg_ObjectAdaptor_DeletePointerFunction)	( void* ptr );
+	typedef void  (Stg_ObjectAdaptor_PrintPointerFunction)	( void* ptr, struct Stream* stream );
+	typedef void* (Stg_ObjectAdaptor_CopyPointerFunction)	( 
+									void*					ptr, 
+									void*					dest,
+									Bool					deep,
+									Name					nameExt, 
+									struct PtrMap*				ptrMap );
+	
+	extern const Type Stg_ObjectAdaptor_Type;
+	
+	/** Stg_ObjectAdaptor class */
+	#define __Stg_ObjectAdaptor \
+		__Stg_Object \
+		\
+		void*						dataPtr; \
+		Bool						iOwn; \
+		Bool						isGlobal; \
+		Bool						isStgClass; \
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete; \
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint; \
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy;
+	
+	/** Defines key information about a Stg_ObjectAdaptor - see ObjectAdaptor.h. */
+	struct _Stg_ObjectAdaptor{ __Stg_ObjectAdaptor };	
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/** Create a new Stg_ObjectAdaptor, when the the object is a StGermain object. */ 
+	Stg_ObjectAdaptor* Stg_ObjectAdaptor_NewOfClass( void* dataPtr, Name name, Bool iOwn, Bool isGlobal );
+	
+	/** Initialise a Stg_ObjectAdaptor, when the the object is a StGermain object. */
+	void Stg_ObjectAdaptor_InitOfClass( Stg_ObjectAdaptor* self, void* objPtr, Name name, Bool iOwn, Bool isGlobal );
+	
+	
+	/** Create a new Stg_ObjectAdaptor, when the the object is not a StGermain object.
+		See note before Stg_ObjectAdaptor_DeletePointerFunction declaration 
+		about what this function has to be responsible for */ 
+	Stg_ObjectAdaptor* Stg_ObjectAdaptor_NewOfPointer( 
+		void*						dataPtr, 
+		Name						name, 
+		Bool						iOwn,
+		Bool						isGlobal,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Initialise a Stg_ObjectAdaptor, when the the object is not a StGermain object. 
+		See note before Stg_ObjectAdaptor_DeletePointerFunction declaration 
+		about what this function has to be responsible for */ 
+	void Stg_ObjectAdaptor_InitOfPointer( 
+		Stg_ObjectAdaptor* 				self, 
+		void*						dataPtr, 
+		Name						name, 
+		Bool						iOwn,
+		Bool						isGlobal,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	
+	/* Creation implementation */
+	Stg_ObjectAdaptor* _Stg_ObjectAdaptor_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy,
+		Name						name,
+		void*						dataPtr,
+		Bool						iOwn,
+		Bool						isGlobal,
+		Bool						isStgClass,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/* Initialisation implementation */
+	void _Stg_ObjectAdaptor_Init( 
+		Stg_ObjectAdaptor*				self, 
+		void*						dataPtr, 
+		Bool						iOwn,
+		Bool						isGlobal,
+		Bool						isStgClass,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	
+	/* Stg_Class_Delete() implementation */
+	void _Stg_ObjectAdaptor_Delete( void* objectAdaptor );
+	
+	/* Stg_Class_Print() implementation */
+	void _Stg_ObjectAdaptor_Print( void* objectAdaptor, struct Stream* stream );
+	
+	/* Stg_Class_Copy() implementation */
+	void* _Stg_ObjectAdaptor_Copy( void* objectAdaptor, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+		
+
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Obtain the object of the tuple. */
+	#define Stg_ObjectAdaptor_ObjectMacro( self ) \
+		( (self)->dataPtr )
+	void* Stg_ObjectAdaptor_ObjectFunc( void* objectAdaptor );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the object of the tuple. */
+		#define Stg_ObjectAdaptor_Object Stg_ObjectAdaptor_ObjectFunc
+	#else
+		/** Obtain the object of the tuple. */
+		#define Stg_ObjectAdaptor_Object Stg_ObjectAdaptor_ObjectMacro
+	#endif
+	
+	/* Do I own the object (i.e. will I attempt to delete it on my deletion)? */
+	#define Stg_ObjectAdaptor_IOwnMacro( self ) \
+		( (self)->iOwn )
+	Bool Stg_ObjectAdaptor_IOwnFunc( void* objectAdaptor );
+	#ifdef MACRO_AS_FUNC
+		/** Do I own the object (i.e. will I attempt to delete it on my deletion)? */
+		#define Stg_ObjectAdaptor_IOwn Stg_ObjectAdaptor_IOwnFunc
+	#else
+		/** Do I own the object (i.e. will I attempt to delete it on my deletion)? */
+		#define Stg_ObjectAdaptor_IOwn Stg_ObjectAdaptor_IOwnMacro
+	#endif
+	
+	/* Is the data a global object (i.e. there is and should be only one instance... don't deep copy or delete)? */
+	#define Stg_ObjectAdaptor_IsGlobalMacro( self ) \
+		( (self)->iOwn )
+	Bool Stg_ObjectAdaptor_IsGlobalFunc( void* objectAdaptor );
+	#ifdef MACRO_AS_FUNC
+		/** Is the data a global object (i.e. there is and should be only one instance... don't deep copy or delete)? */
+		#define Stg_ObjectAdaptor_IsGlobal Stg_ObjectAdaptor_IsGlobalFunc
+	#else
+		/** Is the data a global object (i.e. there is and should be only one instance... don't deep copy or delete)? */
+		#define Stg_ObjectAdaptor_IsGlobal Stg_ObjectAdaptor_IsGlobalMacro
+	#endif
+	
+	/* Has the object been marked as a StGermain class (i.e. will I attempt to call Stg_Class_Print, Stg_Class_Copy & 
+	   Stg_Class_Delete on it where appropriate)? */
+	#define Stg_ObjectAdaptor_IsStgClassMacro( self ) \
+		( (self)->isStgClass )
+	Bool Stg_ObjectAdaptor_IsStgClassFunc( void* objectAdaptor );
+	#ifdef MACRO_AS_FUNC
+		/** Has the object been marked as a StGermain class (i.e. will I attempt to call Stg_Class_Print, Stg_Class_Copy & 
+		   Stg_Class_Delete on it where appropriate)? */
+		#define Stg_ObjectAdaptor_IsStgClass Stg_ObjectAdaptor_IsStgClassFunc
+	#else
+		/** Has the object been marked as a StGermain class (i.e. will I attempt to call Stg_Class_Print, Stg_Class_Copy & 
+		   Stg_Class_Delete on it where appropriate)? */
+		#define Stg_ObjectAdaptor_IsStgClass Stg_ObjectAdaptor_IsStgClassMacro
+	#endif
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#endif /* __Base_Automation_ObjectAdaptor_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,876 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ObjectList.c 3488 2006-03-15 00:42:31Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "types.h"
+#include "Memory.h"
+#include "forwardDecl.h"
+
+#include "Class.h"
+#include "Object.h"
+#include "ObjectAdaptor.h"
+#include "ObjectList.h"
+#include "CommonRoutines.h"
+#include "shortcuts.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* constants */
+
+/** Textual name of this class */
+const Type Stg_ObjectList_Type = "Stg_ObjectList";
+
+
+Stg_ObjectList* Stg_ObjectList_New2( Index initialSize, Index delta ) {
+	return _Stg_ObjectList_New( 
+		sizeof(Stg_ObjectList), 
+		Stg_ObjectList_Type, 
+		_Stg_ObjectList_Delete,
+		_Stg_ObjectList_Print,
+		_Stg_ObjectList_Copy,
+		_Stg_ObjectList_Append, 
+		_Stg_ObjectList_Prepend, 
+		_Stg_ObjectList_ReplaceAll,
+		_Stg_ObjectList_Replace,
+		_Stg_ObjectList_InsertBefore, 
+		_Stg_ObjectList_InsertAfter, 
+		_Stg_ObjectList_Remove, 
+		_Stg_ObjectList_GetIndex,
+		_Stg_ObjectList_Get, 
+		_Stg_ObjectList_AllocMoreMemory, 
+		_Stg_ObjectList_InsertAtIndex,
+		_Stg_ObjectList_RemoveByIndex, 
+		_Stg_ObjectList_DeleteAllObjects,
+		initialSize, 
+		delta );
+}
+	
+
+void Stg_ObjectList_Init2( Stg_ObjectList* self, Index initialSize, Index delta ) {
+	/* General info */
+	self->type = Stg_ObjectList_Type;
+	self->_sizeOfSelf = sizeof(Stg_ObjectList);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Stg_ObjectList_Delete;
+	self->_print = _Stg_ObjectList_Print;
+	self->_copy = _Stg_ObjectList_Copy;
+	self->_append = _Stg_ObjectList_Append;
+	self->_prepend = _Stg_ObjectList_Prepend;
+	self->_replaceAll = _Stg_ObjectList_ReplaceAll;
+	self->_replace = _Stg_ObjectList_Replace; 
+	self->_insertBefore = _Stg_ObjectList_InsertBefore;  
+	self->_insertAfter = _Stg_ObjectList_InsertAfter;  
+	self->_remove = _Stg_ObjectList_Remove;  
+	self->_getIndex = _Stg_ObjectList_GetIndex;  
+	self->_get = _Stg_ObjectList_Get;  
+	self->_allocMoreMemory = _Stg_ObjectList_AllocMoreMemory;  
+	self->_insertAtIndex = _Stg_ObjectList_InsertAtIndex;  
+	self->_removeByIndex = _Stg_ObjectList_RemoveByIndex;  
+	self->_deleteAllObjects = _Stg_ObjectList_DeleteAllObjects;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_ObjectList_Init( (Stg_ObjectList*)self, initialSize, delta );
+
+}
+	
+
+/* Creation implementation */
+Stg_ObjectList* _Stg_ObjectList_New( 
+	SizeT						_sizeOfSelf, 
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy,
+	Stg_ObjectList_AppendFunction*			_append,
+	Stg_ObjectList_PrependFunction*		_prepend,
+	Stg_ObjectList_ReplaceAllFunction*		_replaceAll,
+	Stg_ObjectList_ReplaceFunction*		_replace,
+	Stg_ObjectList_InsertBeforeFunction*		_insertBefore,
+	Stg_ObjectList_InsertAfterFunction*		_insertAfter,
+	Stg_ObjectList_RemoveFunction*		_remove,
+	Stg_ObjectList_GetIndexFunction*		_getIndex,
+	Stg_ObjectList_GetFunction*			_get,
+	Stg_ObjectList_AllocMoreMemoryFunction*	_allocMoreMemory,
+	Stg_ObjectList_InsertAtIndexFunction*		_insertAtIndex,
+	Stg_ObjectList_RemoveByIndexFunction*		_removeByIndex,
+	Stg_ObjectList_DeleteAllObjectsFunction*	_deleteAllObjects,
+	Index						initialSize,
+	Index						delta ) 
+{
+	Stg_ObjectList* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_ObjectList) );
+	self = (Stg_ObjectList*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	/* Virtual functions */
+	self->_append = _append;
+	self->_prepend = _prepend;
+	self->_replaceAll = _replaceAll;
+	self->_replace = _replace;
+	self->_insertBefore = _insertBefore;
+	self->_insertAfter = _insertAfter;
+	self->_remove = _remove;
+	self->_getIndex = _getIndex;  
+	self->_get = _get;
+	self->_allocMoreMemory = _allocMoreMemory;
+	self->_insertAtIndex = _insertAtIndex;
+	self->_removeByIndex = _removeByIndex;
+	self->_deleteAllObjects = _deleteAllObjects;
+	
+	/* ObjectList info */
+	_Stg_ObjectList_Init( self, initialSize, delta );
+	
+	return self;
+}
+
+
+/* Initialisation implementation */
+void _Stg_ObjectList_Init( Stg_ObjectList* self, Index initialSize, Index delta ) {
+	self->count = 0;
+	self->_size = initialSize;
+	self->_delta = delta;
+	self->data = (Stg_ObjectPtr*)Memory_Alloc_Array( Stg_ObjectPtr, initialSize, "ObjectList->data" );
+	self->_noJournalingInCopy = False;
+}
+
+/* Stg_Class_Delete implementation */
+void _Stg_ObjectList_Delete( void* namedObjectList ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+
+/*TODO - reference counter needs to be used to make sure
+ we are not deleting objects that are being referenced to
+ from other objects.*/
+	
+#if 0
+	Stg_ObjectList_DeleteAllObjects( self );
+#endif
+	
+	Memory_Free( self->data );
+
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete( self );
+
+}
+	
+	
+/* Print implementation */
+void _Stg_ObjectList_Print( void* objectList, struct Stream* stream ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+
+	/* General info */
+	Journal_Printf( stream, "Stg_ObjectList (ptr):%p\n", (void*)self );
+	Stream_Indent( stream );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+
+	/* Virtual info */
+	Journal_Printf( stream, "_append(func ptr): %p\n", (void*)self->_append );
+	Journal_Printf( stream, "_prepend(func ptr): %p\n", (void*)self->_prepend );
+	Journal_Printf( stream, "_replaceAll(func ptr): %p\n", (void*)self->_replaceAll );
+	Journal_Printf( stream, "_replace(func ptr): %p\n", (void*)self->_replace );
+	Journal_Printf( stream, "_insertBefore(func ptr): %p\n", (void*)self->_insertBefore );
+	Journal_Printf( stream, "_insertAfter(func ptr): %p\n", (void*)self->_insertAfter );
+	Journal_Printf( stream, "_remove(func ptr): %p\n", (void*)self->_remove );
+	Journal_Printf( stream, "_getIndex(func ptr): %p\n", (void*)self->_getIndex );
+	Journal_Printf( stream, "_get(func ptr): %p\n", (void*)self->_get );
+	Journal_Printf( stream, "_allocMoreMemory(func ptr): %p\n", (void*)self->_allocMoreMemory );
+	Journal_Printf( stream, "_insertAtIndex(func ptr): %p\n", (void*)self->_insertAtIndex );
+	Journal_Printf( stream, "_removeByIndex(func ptr): %p\n", (void*)self->_removeByIndex );
+	Journal_Printf( stream, "_deleteAllObjects(func ptr): %p\n", (void*)self->_deleteAllObjects );
+
+	/* Stg_ObjectList */
+	Journal_Printf( stream, "_size: %u\n", self->_size );
+	Journal_Printf( stream, "_delta: %u\n", self->_delta );
+	Journal_Printf( stream, "_noJournalingInCopy: %u\n", self->_noJournalingInCopy );
+	Journal_Printf( stream, "count: %u\n", self->count );
+	Journal_Printf( stream, "data[0-%d]:\n", self->count );
+	Stg_ObjectList_PrintAllObjects( self, stream );
+	
+	
+	Stream_UnIndent( stream );
+}
+
+void* _Stg_ObjectList_Copy( void* namedObjectList, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_ObjectList*	self = (Stg_ObjectList*) namedObjectList;
+	Stg_ObjectList*	newObjectList;
+	
+	newObjectList = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newObjectList->_append = self->_append;
+	newObjectList->_prepend = self->_prepend;
+	newObjectList->_append = self->_append;
+	newObjectList->_replaceAll = self->_replaceAll;
+	newObjectList->_replace = self->_replace;
+	newObjectList->_insertBefore = self->_insertBefore;
+	newObjectList->_insertAfter = self->_insertAfter;
+	newObjectList->_remove = self->_remove;
+	newObjectList->_getIndex = self->_getIndex;
+	newObjectList->_get = self->_get;
+	newObjectList->_allocMoreMemory = self->_allocMoreMemory;
+	newObjectList->_insertAtIndex = self->_insertAtIndex;
+	newObjectList->_removeByIndex = self->_removeByIndex;
+	newObjectList->_deleteAllObjects = self->_deleteAllObjects;
+	newObjectList->count = self->count;
+	newObjectList->_size = self->_size;
+	newObjectList->_delta = self->_delta;
+	newObjectList->_noJournalingInCopy = self->_noJournalingInCopy;
+	
+	/* As this class is used by the Journal backend, making Journal calls when used in the Journal backend, is problematic...
+	   in this case work around it. It seems to only be an issue for copying. */
+	if( self->_noJournalingInCopy ) {
+		assert( deep );
+	}
+	else {
+		Journal_Firewall( deep, Journal_Register( Error_Type, Stg_ObjectList_Type ), "Shallow copy not yet implemented\n");
+	}
+	if( deep ) {
+		unsigned obj_I;
+		
+		newObjectList->data = (Stg_ObjectPtr*)Memory_Alloc_Array( 
+			Stg_ObjectPtr, 
+			newObjectList->_size, 
+			"ObjectList->data" );
+		
+		for( obj_I = 0; obj_I < newObjectList->count; obj_I++ ) {
+			newObjectList->data[obj_I] = Stg_Class_Copy( self->data[obj_I], NULL, deep, nameExt, ptrMap );
+		}
+	}
+	
+	return newObjectList;
+}
+
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+static void GlobalPrint( void* ptr, struct Stream* stream ) {
+	Journal_Printf( stream, "(ptr): %p\n", ptr );
+}
+	
+Index Stg_ObjectList_Append( void* objectList, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return self->_append( self, objectPtr );
+}	
+
+Index Stg_ObjectList_ClassAppend( void* objectList, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Append( self, Stg_ObjectAdaptor_NewOfClass( objectPtr, name, True, False ) );
+}
+
+Index Stg_ObjectList_PointerAppend( 
+		void*						objectList, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Append( self, Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, True, False, ptrDelete, ptrPrint, ptrCopy ) );
+}
+
+Index Stg_ObjectList_GlobalPointerAppend( void* objectList, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Append( self, Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, False, True, 0, GlobalPrint, 0 ) );
+}
+
+Index Stg_ObjectList_Prepend( void* objectList, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return self->_prepend( self, objectPtr );
+}
+
+Index Stg_ObjectList_ClassPrepend( void* objectList, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Prepend( self, Stg_ObjectAdaptor_NewOfClass( objectPtr, name, True, False ) );
+}
+
+Index Stg_ObjectList_PointerPrepend( 
+		void*						objectList, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*		ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Prepend( self, Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, True, False, ptrDelete, ptrPrint, ptrCopy ) );
+}
+
+Index Stg_ObjectList_GlobalPointerPrepend( void* objectList, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Prepend( self, Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, False, True, 0, GlobalPrint, 0 ) );
+}
+
+Index Stg_ObjectList_ReplaceAll( void* objectList, ReplacementOption option, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return self->_replaceAll( self, option, objectPtr );
+}
+
+Index Stg_ObjectList_ClassReplaceAll( void* objectList, ReplacementOption option, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_ReplaceAll( self, option, Stg_ObjectAdaptor_NewOfClass( objectPtr, name, True, False ) );
+}
+
+Index Stg_ObjectList_PointerReplaceAll( 
+		void*						objectList, 
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*		ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_ReplaceAll( 
+		self, 
+		option, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, True, False, ptrDelete, ptrPrint, ptrCopy ) );
+}
+
+Index Stg_ObjectList_GlobalPointerReplaceAll( void* objectList, ReplacementOption option, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_ReplaceAll( self, option, Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, False, True, 0, GlobalPrint, 0 ) );
+}
+
+Index Stg_ObjectList_Replace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return self->_replace( self, toReplace, option, objectPtr );
+}
+
+Index Stg_ObjectList_ClassReplace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Replace( self, toReplace, option, Stg_ObjectAdaptor_NewOfClass( objectPtr, name, True, False ) );
+}
+
+Index Stg_ObjectList_PointerReplace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name,
+		Stg_ObjectAdaptor_DeletePointerFunction*		ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Replace( 
+		self, 
+		toReplace, 
+		option, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, True, False, ptrDelete, ptrPrint, ptrCopy ) );
+}
+
+Index Stg_ObjectList_GlobalPointerReplace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_Replace( 
+		self, 
+		toReplace, 
+		option, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, False, True, 0, GlobalPrint, 0 ) );
+}
+
+Index Stg_ObjectList_InsertBefore( void* objectList, Name reference, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return self->_insertBefore( self, reference, objectPtr );	
+}
+
+Index Stg_ObjectList_ClassInsertBefore( void* objectList, Name reference, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_InsertBefore( self, reference, Stg_ObjectAdaptor_NewOfClass( objectPtr, name, True, False ) );
+}
+
+Index Stg_ObjectList_PointerInsertBefore( 
+		void*						objectList, 
+		Name						reference, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*		ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_InsertBefore( 
+		self, 
+		reference, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, True, False, ptrDelete, ptrPrint, ptrCopy ) );
+}
+
+Index Stg_ObjectList_GlobalPointerInsertBefore( void* objectList, Name reference, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_InsertBefore( 
+		self, 
+		reference, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, False, True, 0, GlobalPrint, 0 ) );
+}
+
+
+Index Stg_ObjectList_InsertAfter( void* objectList, Name reference, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return self->_insertAfter( self, reference, objectPtr );
+}
+
+Index Stg_ObjectList_ClassInsertAfter( void* objectList, Name reference, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_InsertAfter( self, reference, Stg_ObjectAdaptor_NewOfClass( objectPtr, name, True, False ) );
+}
+
+Index Stg_ObjectList_PointerInsertAfter( 
+		void*						objectList, 
+		Name						reference, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*		ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy )
+{
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_InsertAfter( 
+		self, 
+		reference, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, True, False, ptrDelete, ptrPrint, ptrCopy ) );
+}
+
+Index Stg_ObjectList_GlobalPointerInsertAfter( void* objectList, Name reference, void* objectPtr, Name name ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_InsertAfter( 
+		self, 
+		reference, 
+		Stg_ObjectAdaptor_NewOfPointer( objectPtr, name, False, True, 0, GlobalPrint, 0 ) );
+}
+
+Index Stg_ObjectList_Remove( void* objectList, Name reference, ReplacementOption option ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+
+	return self->_remove( self, reference, option );
+}
+
+Index Stg_ObjectList_GetIndex( void* objectList, Name toGet ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+
+	return self->_getIndex( self, toGet );
+}
+
+
+void* Stg_ObjectList_Get( void* objectList, Name objectName ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+
+	return self->_get( self, objectName );
+}
+
+
+void Stg_ObjectList_DeleteAllObjects( void* objectList ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+
+	self->_deleteAllObjects( self );
+}
+
+
+void Stg_ObjectList_PrintAllEntryNames( void* objectList, void* _stream ) {
+	Stg_ObjectList* self      = (Stg_ObjectList*) objectList;
+	Stream*         stream    = (Stream*)         _stream;
+	Index           object_I;
+	Index           count     = self->count;
+
+	Journal_Printf( stream, "{ " );
+
+	for ( object_I = 0 ; object_I < count - 1 ; object_I++ ) {
+		Journal_Printf( stream, "'%s' (%s), ", self->data[ object_I ]->name, self->data[ object_I ]->type );
+	}
+	Journal_Printf( stream, "'%s' (%s) }\n", self->data[ object_I ]->name, self->data[ object_I ]->type );
+}
+
+
+void Stg_ObjectList_PrintAllObjects( void* objectList, void* _stream ) {
+	Stg_ObjectList*	self        = (Stg_ObjectList*) objectList;
+	Stream*	         stream      = (Stream*)_stream;
+	Index            objectIndex = 0;
+	
+	for ( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		Print( self->data[ objectIndex ], stream ) ;
+	}
+}
+
+
+void* Stg_ObjectList_AtFunc( void* objectList, Index index ) {
+	Stg_ObjectList*	self        = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_AtMacro( self, index );
+}
+
+
+Index Stg_ObjectList_CountFunc( void* objectList ) {
+	Stg_ObjectList*	self        = (Stg_ObjectList*) objectList;
+	
+	return Stg_ObjectList_CountMacro( self );
+}
+
+
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+Index _Stg_ObjectList_Append( void* namedObjectList, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+
+	assert( objectPtr );
+	assert( self->count <= self->_size );
+	if ( self->count == self->_size ) {
+		self->_allocMoreMemory( self );
+	}
+	
+	self->data[self->count] = (Stg_Object*) objectPtr;
+	
+	return (self->count)++;
+}
+
+
+Index _Stg_ObjectList_Prepend( void* namedObjectList, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+
+	assert( objectPtr );
+	assert( self->count <= self->_size );
+	if ( self->count == self->_size ) {
+		self->_allocMoreMemory( self );
+	}
+
+	self->_insertAtIndex( self, 0, objectPtr );
+	return 0;
+}
+
+
+Index _Stg_ObjectList_ReplaceAll( void* namedObjectList, ReplacementOption option, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+	Index objectIndex;
+
+	assert( objectPtr );
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if ( DELETE == option ) {
+			Stg_Class_Delete( self->data[objectIndex] );
+		}
+		self->data[objectIndex] = 0;
+	}
+	self->data[0] = (Stg_Object*) objectPtr; 
+	self->count = 1;
+	return 0;
+}
+
+
+Index _Stg_ObjectList_Replace( void* namedObjectList, Name toReplace, ReplacementOption option, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+	Index objectIndex;
+
+	assert( objectPtr );
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if ( toReplace == self->data[objectIndex]->name ) {
+			if ( DELETE == option ) {
+				Stg_Class_Delete( self->data[objectIndex] );
+			}
+			self->data[objectIndex] = (Stg_Object*) objectPtr; 
+			return objectIndex;
+		}
+	}
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if (0 == strcmp( toReplace, self->data[objectIndex]->name ) ) {
+			if ( DELETE == option ) {
+				Stg_Class_Delete( self->data[objectIndex] );
+			}
+			self->data[objectIndex] = (Stg_Object*) objectPtr; 
+			return objectIndex;
+		}
+	}
+
+	fprintf( stderr, "Error: %s(): specified object \"%s\" to replace not found.\n",
+		__func__, toReplace ); 
+	assert( 0 );
+	return (Index) -1;
+}
+
+
+Index _Stg_ObjectList_InsertBefore( void* namedObjectList, Name reference, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+	Index objectIndex;
+
+	assert( objectPtr );
+	assert( self->count <= self->_size );
+	if ( self->count == self->_size ) {
+		self->_allocMoreMemory( self );
+	}
+
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if ( reference == self->data[objectIndex]->name ) {
+			self->_insertAtIndex( self, objectIndex, objectPtr );
+			return objectIndex;
+		}
+	}
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if (0 == strcmp( reference, self->data[objectIndex]->name ) ) {
+			self->_insertAtIndex( self, objectIndex, objectPtr );
+			return objectIndex;
+		}
+	}
+
+	fprintf( stderr, "Error: %s(): specified object \"%s\" to insert before not found.\n",
+		__func__, reference ); 
+	assert( 0 );
+	return (Index) -1;
+}
+
+
+Index _Stg_ObjectList_InsertAfter( void* namedObjectList, Name reference, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+	Index objectIndex;
+
+	assert( objectPtr );
+	assert( self->count <= self->_size );
+	if ( self->count == self->_size ) {
+		self->_allocMoreMemory( self );
+	}
+
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if ( reference == self->data[objectIndex]->name ) {
+			self->_insertAtIndex( self, objectIndex+1, objectPtr );
+			return objectIndex;
+		}
+	}
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if (0 == strcmp( reference, self->data[objectIndex]->name ) ) {
+			self->_insertAtIndex( self, objectIndex+1, objectPtr );
+			return objectIndex;
+		}
+	}
+
+	fprintf( stderr, "Error: %s(): specified object \"%s\" to insert after not found.\n",
+		__func__, reference ); 
+	assert( 0 );
+	return (Index) -1;
+}
+
+Index _Stg_ObjectList_Remove( void* namedObjectList, Name reference, ReplacementOption option ) {
+	Stg_ObjectList* self        = (Stg_ObjectList*) namedObjectList;
+	Index            objectIndex;
+	Stream*          errorStream = Journal_Register( Error_Type, self->type );
+
+	objectIndex = self->_getIndex( self, reference );
+
+	Journal_Firewall( objectIndex != (Index) -1, errorStream, 
+			"Error: %s(): specified object \"%s\" to remove not found.\n", __func__, reference ); 
+	
+	self->_removeByIndex( self, objectIndex, option );
+
+	return objectIndex;
+}
+
+
+Index _Stg_ObjectList_GetIndex( void* namedObjectList, Name toGet ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+	Index objectIndex;
+	
+	/* Find the object and return it */
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if ( toGet == self->data[objectIndex]->name ) return objectIndex;
+	}
+	for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if (0 == strcmp( toGet, self->data[objectIndex]->name ) ) return objectIndex;
+	}
+			
+	return (unsigned int) -1;
+}
+
+
+void* _Stg_ObjectList_Get( void* objectList, Name toGet ) {
+        Stg_ObjectList* self = (Stg_ObjectList*) objectList;
+        Index objectIndex;
+                                                                                                                                    
+        /* Find the object and return it */
+        for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) { 
+			if ( toGet == self->data[objectIndex]->name ) { 
+				if ( self->data[objectIndex]->type == Stg_ObjectAdaptor_Type ) { 
+					return Stg_ObjectAdaptor_Object( (Stg_ObjectAdaptor*)self->data[objectIndex] ); 
+				} 
+				else { 
+					return self->data[objectIndex]; 
+				} 
+			}
+        }
+        for( objectIndex = 0; objectIndex < self->count; objectIndex++ ) { 
+			if (0 == strcmp( toGet, self->data[objectIndex]->name ) ) { 
+				if ( self->data[objectIndex]->type == Stg_ObjectAdaptor_Type ) { 
+					return Stg_ObjectAdaptor_Object( (Stg_ObjectAdaptor*)self->data[objectIndex] ); 
+				} 
+				else { 
+					return self->data[objectIndex]; 
+				} 
+			}
+        }
+                                                                                                                                    
+        return NULL;
+}
+
+void _Stg_ObjectList_DeleteAllObjects( void* namedObjectList ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+	Index objectIndex;
+	
+	for ( objectIndex = 0; objectIndex < self->count; objectIndex++ ) {
+		if( self->data[objectIndex] ) {
+			Stg_Class_Delete( self->data[objectIndex] );
+			self->data[objectIndex] = 0;
+		}
+	}
+}
+
+
+void _Stg_ObjectList_AllocMoreMemory( void* namedObjectList ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) namedObjectList;
+
+	self->_size += self->_delta;
+	self->data = Memory_Realloc_Array( self->data, Stg_ObjectPtr, self->_size );
+	assert( self->data );
+}
+
+
+void _Stg_ObjectList_InsertAtIndex( void* objects, Index index, void* objectPtr ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objects;
+	
+	/* Move current content down one position, and add  */
+	if (index != self->count) {
+		memmove( &self->data[index+1], &self->data[index], sizeof(Stg_ObjectPtr) * (self->count - index) );
+	}
+
+	self->data[index] = (Stg_Object*) objectPtr;
+	self->count++;
+}
+
+void _Stg_ObjectList_RemoveByIndex( void* objects, Index index, ReplacementOption option ) {
+	Stg_ObjectList* self = (Stg_ObjectList*) objects;
+	
+	assert( index < self->count );
+
+	if ( option == DELETE )
+		Stg_Class_Delete( self->data[index] );
+	
+	/* Move current content up one position */
+	if (index != self->count - 1) {
+		memmove( &self->data[index], &self->data[index+1], sizeof(Stg_ObjectPtr) * (self->count - index - 1) );
+	}
+
+	self->count--;
+}
+
+typedef struct {
+	Stg_Object*    objectPtr;
+	float          percentageSimilar;
+} Stg_ObjectList_SimilarityObject;
+
+int _Stg_ObjectList_SimilarityCompare( const void *ptr1, const void *ptr2 ) {
+	Stg_ObjectList_SimilarityObject* similarityPtr1 = (Stg_ObjectList_SimilarityObject*) ptr1;
+	Stg_ObjectList_SimilarityObject* similarityPtr2 = (Stg_ObjectList_SimilarityObject*) ptr2;
+
+	if ( similarityPtr1->percentageSimilar > similarityPtr2->percentageSimilar )
+		return -1;
+	else 
+		return 1;
+}
+
+void Stg_ObjectList_PrintSimilar( void* objectList, Name name, void* _stream, unsigned int number ) {
+	Stg_ObjectList*                  self               = (Stg_ObjectList*) objectList;
+	Stream*                          stream             = (Stream*)         _stream;
+	Stg_ObjectList_SimilarityObject* similarityArray;
+	float                            stringLength       = (float) strlen( name );
+	float                            objectStringLength;
+	Index                            object_I;
+	unsigned int                     substringLength;
+
+	similarityArray = Memory_Alloc_Array( Stg_ObjectList_SimilarityObject, self->count, "similarityArray");
+
+	for ( object_I = 0 ; object_I < self->count ; object_I++ ) {
+		substringLength = Stg_LongestMatchingSubsequenceLength( self->data[object_I]->name, name, False );
+		objectStringLength = (float) strlen( self->data[object_I]->name );
+
+		similarityArray[ object_I ].objectPtr = self->data[object_I];
+		similarityArray[ object_I ].percentageSimilar = 
+			(float) substringLength * 100.0 / MAX( objectStringLength, stringLength );
+	}
+
+	qsort( similarityArray, (size_t)self->count, sizeof( Stg_ObjectList_SimilarityObject ), _Stg_ObjectList_SimilarityCompare );
+	
+	if ( number > self->count )
+		number = self->count;
+	for ( object_I = 0 ; object_I < number ; object_I++ ) {
+		Journal_Printf( stream, "%s (%.2f%% similar)\n", similarityArray[ object_I ].objectPtr->name, similarityArray[ object_I ].percentageSimilar );
+	}
+
+	Memory_Free( similarityArray );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,398 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Stg_Class to manage a dynamically extensible list of objects that are stored
+**	within a ObjectAdaptor wrapper class.
+**	Has functionality for insertions, deletions and replacements in the 
+**	list based on the name of each object.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	Interface to store items are categorised into the following types:
+**         - Stg_Object.
+**           Any instance of Stg_Object or one of its sub-classes contain the name (key) as a property
+**           and functions to delete, print and copy itself.
+**
+**         - Stg_Class.
+**           An instance of a Stg_Class or one of its sub-classes which does not have Stg_Object as a parent.
+**           Has functions to delete, print and copy itself but needs to be given a name.
+**
+**         - C Pointer.
+**           A traditional C object, array or multi-dimensional array. It requires a name (key) as well as the
+**           functions to delete, print and copy ifself.
+**
+**         - Global C Pointer.
+**           A C pointer, except it is a global object so the responsibility of deleting, printing or copying itself
+**           belongs elsewhere. All it requires is the name (key) to be associated with.
+**	
+**
+**	TODO: Add a printConcise as part of the interface to named objects. Then have
+**	a Stg_ObjectList_PrintConcise() to print all of these. Would make the output
+**	of printing large lists more meaningful for user info, rather than debugging,
+**	purposes.
+**
+** $Id: ObjectList.h 3670 2006-07-07 03:42:25Z PatrickSunter $
+**
+**/
+
+#ifndef __Base_Foundation_Stg_ObjectList_h__
+#define __Base_Foundation_Stg_ObjectList_h__
+
+	/* function prototype interface */
+	typedef Index (Stg_ObjectList_AppendFunction) ( void* objects, void* objectPtr );
+	typedef Index (Stg_ObjectList_PrependFunction) ( void* objects, void* objectPtr );
+	typedef Index (Stg_ObjectList_ReplaceAllFunction) ( void* objects, ReplacementOption option, void* objectPtr );
+	typedef Index (Stg_ObjectList_ReplaceFunction) ( void* objs, Name toReplace, ReplacementOption option, void* objectPtr );
+	typedef Index (Stg_ObjectList_InsertBeforeFunction) ( void* objects,  Name reference, void* objectPtr );
+	typedef Index (Stg_ObjectList_InsertAfterFunction) ( void* objects,  Name reference, void* objectPtr );
+	typedef Index (Stg_ObjectList_RemoveFunction) ( void* objects,  Name reference, ReplacementOption option );
+	typedef Index (Stg_ObjectList_GetIndexFunction) ( void* objects, Name toGet );
+	typedef void* (Stg_ObjectList_GetFunction) ( void* objects, Name toGet );
+	typedef void  (Stg_ObjectList_AllocMoreMemoryFunction) ( void* objects );
+	typedef void (Stg_ObjectList_InsertAtIndexFunction) ( void* objects, Index index, void* objectPtr );
+	typedef void (Stg_ObjectList_RemoveByIndexFunction) ( void* objects, Index index, ReplacementOption option );
+	typedef void (Stg_ObjectList_DeleteAllObjectsFunction) ( void* objects );
+	
+	/** Textual name of this class */
+	extern const Type Stg_ObjectList_Type;
+	
+	extern const int DEFAULT_LIST_INITIAL_SIZE;
+	extern const int DEFAULT_LIST_DELTA;
+
+	/** \def __ObjectList See ObjectList */
+	#define __Stg_ObjectList \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		Stg_ObjectList_AppendFunction*		_append;           \
+		Stg_ObjectList_PrependFunction*		_prepend;          \
+		Stg_ObjectList_ReplaceAllFunction*		_replaceAll;       \
+		Stg_ObjectList_ReplaceFunction*		_replace;          \
+		Stg_ObjectList_InsertBeforeFunction*	_insertBefore;     \
+		Stg_ObjectList_InsertAfterFunction*		_insertAfter;      \
+		Stg_ObjectList_RemoveFunction*		_remove;           \
+		Stg_ObjectList_GetIndexFunction*		_getIndex;         \
+		Stg_ObjectList_GetFunction*			_get;              \
+		Stg_ObjectList_AllocMoreMemoryFunction*	_allocMoreMemory;  \
+		Stg_ObjectList_InsertAtIndexFunction*	_insertAtIndex;    \
+		Stg_ObjectList_RemoveByIndexFunction*	_removeByIndex;    \
+		Stg_ObjectList_DeleteAllObjectsFunction*	_deleteAllObjects; \
+		\
+		/* Stg_ObjectList info */ \
+		Stg_ObjectPtr*				data;              \
+		Index					count;             \
+		Index					_size;             \
+		Index					_delta;            \
+		Bool					_noJournalingInCopy;
+
+
+	struct _Stg_ObjectList { __Stg_ObjectList };
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Object new and construct interface */
+	#define Stg_ObjectList_New() \
+		Stg_ObjectList_New2( DEFAULT_LIST_INITIAL_SIZE, DEFAULT_LIST_DELTA )
+		
+	Stg_ObjectList* Stg_ObjectList_New2( Index initialSize, Index delta );
+	
+	#define Stg_ObjectList_Init( self ) \
+		Stg_ObjectList_Init2( self, DEFAULT_LIST_INITIAL_SIZE, DEFAULT_LIST_DELTA )
+	
+	void Stg_ObjectList_Init2( Stg_ObjectList* self, Index initialSize, Index delta );
+	
+	/** Creation implementation */
+	Stg_ObjectList* _Stg_ObjectList_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_ObjectList_AppendFunction*			_append,
+		Stg_ObjectList_PrependFunction*			_prepend,
+		Stg_ObjectList_ReplaceAllFunction*			_replaceAll,
+		Stg_ObjectList_ReplaceFunction*			_replace,
+		Stg_ObjectList_InsertBeforeFunction*		_insertBefore,
+		Stg_ObjectList_InsertAfterFunction*			_insertAfter,
+		Stg_ObjectList_RemoveFunction*			_remove,
+		Stg_ObjectList_GetIndexFunction*			_getIndex,
+		Stg_ObjectList_GetFunction*				_get,
+		Stg_ObjectList_AllocMoreMemoryFunction*		_allocMoreMemory,
+		Stg_ObjectList_InsertAtIndexFunction*		_insertAtIndex,
+		Stg_ObjectList_RemoveByIndexFunction*		_removeByIndex,
+		Stg_ObjectList_DeleteAllObjectsFunction*		_deleteAllObjects,
+		Index						initialSize,
+		Index						delta );
+	
+	/** Initialisation implementation */
+	void _Stg_ObjectList_Init( Stg_ObjectList* self, Index initialSize, Index delta );
+	
+	/** Stg_Class_Delete() implementation. Note that we assume ownership of all objects in this list! */
+	void _Stg_ObjectList_Delete( void* namedObjectList );
+	
+	/** Stg_Class_Print() implementation */
+	void _Stg_ObjectList_Print( void* objectList, struct Stream* stream );
+	
+	/** Copy implementation */
+	void* _Stg_ObjectList_Copy( void* namedObjectList, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/** Append Object instance to list. Returns the index where the new object was inserted (the last element) */
+	Index Stg_ObjectList_Append( void* objectList, void* objectPtr );
+	
+	/** Append Stg_Class instance to list. Returns the index where the new object was inserted (the last element) */
+	Index Stg_ObjectList_ClassAppend( void* objectList, void* objectPtr, Name name );
+	
+	/** Append C pointer to list. Returns the index where the new object was inserted 
+	(the last element). See notes in ObjectAdaptor.h about the responsibilities of the
+	3 function pointers required - especially the DeletePointer function. */
+	Index Stg_ObjectList_PointerAppend( 
+		void*						objectList, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Append global C pointer to list. Returns the index where the new object was inserted (the last element) */
+	Index Stg_ObjectList_GlobalPointerAppend( void* objectList, void* objectPtr, Name name );
+	
+	
+	/** Prepend object to list */
+	Index Stg_ObjectList_Prepend( void* objectList, void* objectPtr );
+	
+	/** Prepend class to list */
+	Index Stg_ObjectList_ClassPrepend( void* objectList, void* objectPtr, Name name );
+	
+	/** Prepend pointer to list */
+	Index Stg_ObjectList_PointerPrepend(
+		void*						objectList, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Prepend global pointer to list */
+	Index Stg_ObjectList_GlobalPointerPrepend( void* objectList, void* objectPtr, Name name );
+	
+	
+	/** Replace whole list with a object */
+	Index Stg_ObjectList_ReplaceAll( void* objectList, ReplacementOption option, void* objectPtr );
+	
+	/** Replace whole list with a class */
+	Index Stg_ObjectList_ClassReplaceAll( void* objectList, ReplacementOption option, void* objectPtr, Name name );
+	
+	/** Replace whole list with a pointer */
+	Index Stg_ObjectList_PointerReplaceAll( 
+		void*						objectList, 
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Replace whole list with a global pointer */
+	Index Stg_ObjectList_GlobalPointerReplaceAll( void* objectList, ReplacementOption option, void* objectPtr, Name name );
+	
+	
+	/** Replace a specific entry with a object */
+	Index Stg_ObjectList_Replace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr );
+	
+	/** Replace a specific entry with a class */
+	Index Stg_ObjectList_ClassReplace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name );
+	
+	/** Replace a specific entry with a pointer*/
+	Index Stg_ObjectList_PointerReplace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name,
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Replace a specific entry with a global pointer */
+	Index Stg_ObjectList_GlobalPointerReplace( 
+		void*						objectList, 
+		Name						toReplace,
+		ReplacementOption				option, 
+		void*						objectPtr, 
+		Name						name );
+	
+	
+	/** Insert object before a specific entry */
+	Index Stg_ObjectList_InsertBefore( void* objectList, Name reference, void* objectPtr );
+	
+	/** Insert class before a specific entry */
+	Index Stg_ObjectList_ClassInsertBefore( void* objectList, Name reference, void* objectPtr, Name name );
+	
+	/** Insert pointer before a specific entry */
+	Index Stg_ObjectList_PointerInsertBefore( 
+		void*						objectList, 
+		Name						reference, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Insert global pointer before a specific entry */
+	Index Stg_ObjectList_GlobalPointerInsertBefore( void* objectList, Name reference, void* objectPtr, Name name );
+	
+	
+	/** Insert object after a specific entry */ 
+	Index Stg_ObjectList_InsertAfter( void* objectList, Name reference, void* objectPtr );
+	
+	/** Insert class after a specific entry */ 
+	Index Stg_ObjectList_ClassInsertAfter( void* objectList, Name reference, void* objectPtr, Name name );
+	
+	/** Insert pointer after a specific entry */ 
+	Index Stg_ObjectList_PointerInsertAfter( 
+		void*						objectList, 
+		Name						reference, 
+		void*						objectPtr, 
+		Name						name, 
+		Stg_ObjectAdaptor_DeletePointerFunction*	ptrDelete,
+		Stg_ObjectAdaptor_PrintPointerFunction*		ptrPrint,
+		Stg_ObjectAdaptor_CopyPointerFunction*		ptrCopy );
+	
+	/** Insert global pointer after a specific entry */ 
+	Index Stg_ObjectList_GlobalPointerInsertAfter( void* objectList, Name reference, void* objectPtr, Name name );
+	
+	/** Removes object from list */
+	Index Stg_ObjectList_Remove( void* objectList, Name reference, ReplacementOption option ) ;
+	
+	/** Find an object's index in the list, by name. Returns (unsigned)-1 if not found. */
+	Index Stg_ObjectList_GetIndex( void* objectList, Name toGet );
+	
+	/** Get an object's ptr from the list, by name. Returns NULL if not found. */
+	void* Stg_ObjectList_Get( void* objectList, Name toGet );
+	
+	/** Deletes all the objects in the list. */
+	void Stg_ObjectList_DeleteAllObjects( void* objectList );
+	
+	/** Prints the names of all the object in the list. */
+	void Stg_ObjectList_PrintAllEntryNames( void* objectList, void* _stream );
+	
+	/** Calls Print on all the objects in the list. */
+	void Stg_ObjectList_PrintAllObjects( void* objectList, void* _stream ) ;
+	
+	
+	/* Obtain the object at a given index in the list. */
+	#define Stg_ObjectList_AtMacro( self, index ) \
+		( (self)->data[index] ) 
+	void* Stg_ObjectList_AtFunc( void* objectList, Index index );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the object at a given index in the list. */
+		#define Stg_ObjectList_At Stg_ObjectList_AtFunc
+	#else
+		/** Obtain the object at a given index in the list. */
+		#define Stg_ObjectList_At Stg_ObjectList_AtMacro
+	#endif
+
+	#define Stg_ObjectList_ObjectAt( self, index ) \
+		( Stg_ObjectAdaptor_Object( (Stg_ObjectAdaptor*)( (self)->data[index] ) ) )
+	
+	/* Obtain the number of objects in the list. */
+	#define Stg_ObjectList_CountMacro( self ) \
+		( (self)->count )
+	Index Stg_ObjectList_CountFunc( void* objectList );
+	#ifdef MACRO_AS_FUNC
+		/** Obtain the number of objects in the list. */
+		#define Stg_ObjectList_Count Stg_ObjectList_CountFunc
+	#else
+		/** Obtain the number of objects in the list. */
+		#define Stg_ObjectList_Count Stg_ObjectList_CountMacro
+	#endif
+	
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Default implementation to: Append to list. Returns the index where the new object was inserted (the last element) */
+	Index _Stg_ObjectList_Append( void* objects, void* objectPtr );
+
+	/* Default implementation to: Prepend to list */
+	Index _Stg_ObjectList_Prepend( void* objects, void* objectPtr );
+
+	/* Default implementation to: Replace whole list */
+	Index _Stg_ObjectList_ReplaceAll( void* objects, ReplacementOption option, void* objectPtr );
+
+	/* Default implementation to: Replace a specific entry */
+	Index _Stg_ObjectList_Replace( void* objects, Name toReplace, ReplacementOption option, void* objectPtr );
+
+	/* Default implementation to: Insert before a specific entry */
+	Index _Stg_ObjectList_InsertBefore( void* objects, Name reference, void* objectPtr );
+
+	/* Default implementation to: Insert after a specific entry */ 
+	Index _Stg_ObjectList_InsertAfter( void* objects, Name reference, void* objectPtr );
+
+	/* Default implementation to: Remove an entry by name */
+	Index _Stg_ObjectList_Remove( void* namedStg_ObjectList, Name reference, ReplacementOption option ) ;
+	
+	/* Default implementation to: Find an object's index in the list, by name. Returns (unsigned)-1 if not found. */
+	Index _Stg_ObjectList_GetIndex( void* objects, Name toGet );
+
+	/* Default implementation to: Get an object's ptr from the list, by name. Returns NULL if not found. */
+	void* _Stg_ObjectList_Get( void* objects, Name toGet );
+
+	/* Default implementation to: Deletes all the objects in the list. */
+	void _Stg_ObjectList_DeleteAllObjects( void* namedObjectList );
+
+	/** Allocates more memory, when capacity reached */
+	void _Stg_ObjectList_AllocMoreMemory( void* namedObjectList );
+	
+	/** Inserts a ptr at a given index */
+	void _Stg_ObjectList_InsertAtIndex( void* objects, Index index, void* objectPtr );
+	
+	/** Removes a ptr at a given index */
+	void _Stg_ObjectList_RemoveByIndex( void* objects, Index index, ReplacementOption option ) ;
+
+	/** Prints the first 'number' of names of objects in list which are most similar to 'name' */
+	void Stg_ObjectList_PrintSimilar( void* objectList, Name name, void* _stream, unsigned int number ) ;
+#endif /* __Base_Foundation_Stg_ObjectList_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,229 @@
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ObjectAdaptor.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "types.h"
+#include "forwardDecl.h"
+
+#include "Memory.h"
+#include "Class.h"
+#include "Object.h"
+#include "PrimitiveObject.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+const Type Stg_PrimitiveObject_Type = "Stg_PrimitiveObject";
+
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedChar( unsigned char value, Name name ) {
+	Stg_C_Primitive v;
+	v.asUnsignedChar = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_UnsignedChar, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedShort( unsigned short value, Name name ) {
+	Stg_C_Primitive v;
+	v.asUnsignedShort = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_UnsignedShort, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedInt( unsigned int value, Name name ) {
+	Stg_C_Primitive v;
+	v.asUnsignedInt = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_UnsignedInt, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedLong( unsigned long value, Name name ) {
+	Stg_C_Primitive v;
+	v.asUnsignedLong = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_UnsignedLong, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_Char( char value, Name name ) {
+	Stg_C_Primitive v;
+	v.asChar = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_Char, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_Short( short value, Name name ) {
+	Stg_C_Primitive v;
+	v.asShort = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_Short, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_Int( int value, Name name ) {
+	Stg_C_Primitive v;
+	v.asInt = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_Int, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_Long( long value, Name name ) {
+	Stg_C_Primitive v;
+	v.asLong = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_Long, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_Float( float value, Name name ) {
+	Stg_C_Primitive v;
+	v.asFloat = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_Float, v, name );
+}
+Stg_PrimitiveObject* Stg_PrimitiveObject_New_Double( double value, Name name ) {
+	Stg_C_Primitive v;
+	v.asDouble = value;
+	return _Stg_PrimitiveObject_New( Stg_C_Primitive_Type_Double, v, name );
+}
+
+Stg_PrimitiveObject* _Stg_PrimitiveObject_New( 
+	Stg_C_Primitive_Type	dataType,
+	Stg_C_Primitive		value,
+	Name			name )
+{
+	Stg_PrimitiveObject*  result;
+
+	result = (Stg_PrimitiveObject*)_Stg_Object_New(
+			sizeof(Stg_PrimitiveObject),
+			Stg_PrimitiveObject_Type,
+			_Stg_PrimitiveObject_Delete,
+			_Stg_PrimitiveObject_Print,
+			_Stg_PrimitiveObject_Copy,
+			name,
+			NON_GLOBAL );
+	
+	_Stg_PrimitiveObject_Init( result, dataType, value );
+
+	return result;
+}
+
+void _Stg_PrimitiveObject_Init( 
+	Stg_PrimitiveObject*	self, 
+	Stg_C_Primitive_Type	dataType,
+	Stg_C_Primitive		value )
+{
+	self->dataType = dataType;
+	self->value = value;
+}
+
+
+void _Stg_PrimitiveObject_Delete( void* primitive ) {
+	_Stg_Object_Delete( primitive );
+}
+
+void _Stg_PrimitiveObject_Print( void* primitive, struct Stream* stream ) {
+	Stg_PrimitiveObject* self = (Stg_PrimitiveObject*)primitive;
+	char* typeString;
+
+	switch( self->dataType ) {
+		case Stg_C_Primitive_Type_UnsignedChar:
+			typeString = "unsigned char";
+			break;
+		case Stg_C_Primitive_Type_UnsignedShort:
+			typeString = "unsigned short";
+			break;
+		case Stg_C_Primitive_Type_UnsignedInt:
+			typeString = "unsigned int";
+			break;
+		case Stg_C_Primitive_Type_UnsignedLong:
+			typeString = "unsigned long";
+			break;
+		case Stg_C_Primitive_Type_Char:
+			typeString = "char";
+			break;
+		case Stg_C_Primitive_Type_Short:
+			typeString = "short";
+			break;
+		case Stg_C_Primitive_Type_Int:
+			typeString = "int";
+			break;
+		case Stg_C_Primitive_Type_Long:
+			typeString = "long";
+			break;
+		case Stg_C_Primitive_Type_Float:
+			typeString = "float";
+			break;
+		case Stg_C_Primitive_Type_Double:
+			typeString = "double";
+			break;
+		default:
+			typeString = "";
+			break;
+	}
+	
+	Journal_Printf( stream, "Primitive Object (ptr): %p\n", (void*)self );
+	Stream_Indent( stream );
+
+	Journal_Printf( stream, "%s %s = ", typeString, self->name );
+
+	switch ( self->dataType ) {
+		case Stg_C_Primitive_Type_UnsignedChar:
+		case Stg_C_Primitive_Type_Char: 
+			Journal_Printf( stream, "'%c'", self->value.asChar );
+			break;
+		case Stg_C_Primitive_Type_UnsignedShort:
+			Journal_Printf( stream, "%u", self->value.asUnsignedShort );
+			break;
+		case Stg_C_Primitive_Type_UnsignedInt:
+			Journal_Printf( stream, "%u", self->value.asUnsignedInt );
+			break;
+		case Stg_C_Primitive_Type_UnsignedLong:
+			Journal_Printf( stream, "%u", self->value.asUnsignedLong );
+			break;
+		case Stg_C_Primitive_Type_Short:
+			Journal_Printf( stream, "%d", self->value.asShort );
+			break;
+		case Stg_C_Primitive_Type_Int:
+			Journal_Printf( stream, "%d", self->value.asInt );
+			break;
+		case Stg_C_Primitive_Type_Long:
+			Journal_Printf( stream, "%d", self->value.asLong );
+			break;
+		case Stg_C_Primitive_Type_Float:
+			Journal_Printf( stream, "%.6ff", self->value.asFloat );
+			break;
+		case Stg_C_Primitive_Type_Double:
+			Journal_Printf( stream, "%.6f", self->value.asDouble );
+			break;
+		default:
+			break;
+	}
+	Journal_Printf( stream, ";\n" );
+	
+	Stream_UnIndent( stream );
+}
+
+void* _Stg_PrimitiveObject_Copy( void* primitive, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_PrimitiveObject* self = (Stg_PrimitiveObject*)primitive;
+	Stg_PrimitiveObject* newCopy;
+
+	newCopy = (Stg_PrimitiveObject*)_Stg_Object_Copy( self, dest, deep, nameExt, ptrMap );
+
+	newCopy->dataType = self->dataType;
+	newCopy->value = self->value;
+
+	return newCopy;
+}
+	
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**     A wrapper class for C primitives for object list
+**
+** Assumptions:
+**
+** Comments:
+**     Has large memory overhead so do not use in large arrays or lists.
+**
+** $Id: ObjectAdaptor.h 2406 2004-12-09 01:20:49Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Foundation_PrimitiveObject_h__
+#define __Base_Foundation_PrimitiveObject_h__
+	
+	extern const Type Stg_PrimitiveObject_Type;
+	
+	typedef enum {
+		Stg_C_Primitive_Type_UnsignedChar = 0,
+		Stg_C_Primitive_Type_UnsignedShort,
+		Stg_C_Primitive_Type_UnsignedInt,
+		Stg_C_Primitive_Type_UnsignedLong,
+		Stg_C_Primitive_Type_Char,
+		Stg_C_Primitive_Type_Short,
+		Stg_C_Primitive_Type_Int,
+		Stg_C_Primitive_Type_Long,
+		Stg_C_Primitive_Type_Float,
+		Stg_C_Primitive_Type_Double,
+		Stg_C_Primitive_Num_Type
+	} Stg_C_Primitive_Type;
+
+	typedef union {
+		unsigned char	asUnsignedChar;
+		unsigned short	asUnsignedShort;
+		unsigned int	asUnsignedInt;
+		unsigned long	asUnsignedLong;
+		char		asChar;
+		short		asShort;
+		int		asInt;
+		long		asLong;
+		float		asFloat;
+		double		asDouble;
+	} Stg_C_Primitive;
+	
+	/** Stg_PrimitiveObject class */
+	#define __Stg_PrimitiveObject \
+		__Stg_Object \
+		Stg_C_Primitive_Type dataType; \
+		Stg_C_Primitive      value;
+	
+	/** Defines key information about a Stg_PrimitiveObject - see ObjectAdaptor.h. */
+	struct _Stg_PrimitiveObject { __Stg_PrimitiveObject };	
+ 
+	
+	
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedChar( unsigned char value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedShort( unsigned short value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedInt( unsigned int value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_UnsignedLong( unsigned long value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_Char( char value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_Short( short value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_Int( int value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_Long( long value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_Float( float value, Name name );
+	Stg_PrimitiveObject* Stg_PrimitiveObject_New_Double( double value, Name name );
+	
+	Stg_PrimitiveObject* _Stg_PrimitiveObject_New( 
+		Stg_C_Primitive_Type	dataType,
+		Stg_C_Primitive		value,
+		Name			name );
+
+
+	void _Stg_PrimitiveObject_Init( 
+		Stg_PrimitiveObject*	self, 
+		Stg_C_Primitive_Type	dataType,
+		Stg_C_Primitive		value );
+	
+	
+	/* Stg_Class_Delete() implementation */
+	void _Stg_PrimitiveObject_Delete( void* objectAdaptor );
+	
+	/* Stg_Class_Print() implementation */
+	void _Stg_PrimitiveObject_Print( void* objectAdaptor, struct Stream* stream );
+	
+	/* Stg_Class_Copy() implementation */
+	void* _Stg_PrimitiveObject_Copy( void* objectAdaptor, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+		
+	
+#endif /* __Base_Foundation_PrimitiveObject_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,236 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: TestSuite.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 "types.h"
+#include "shortcuts.h"
+#include "forwardDecl.h"
+#include "MemoryTag.h"
+#include "Memory.h"
+#include "Class.h"
+#include "TestSuite.h"
+
+
+/* Textual name of this class */
+const Type TestSuite_Type = "TestSuite";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+TestSuite* TestSuite_New() {
+	return _TestSuite_New( sizeof(TestSuite), 
+			      TestSuite_Type, 
+			      _TestSuite_Delete, 
+			      _TestSuite_Print, 
+			      _TestSuite_Copy );
+}
+
+TestSuite* _TestSuite_New( TESTSUITE_DEFARGS ) {
+	TestSuite* self;
+
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(TestSuite) );
+	self = (TestSuite*)_Stg_Class_New( STG_CLASS_PASSARGS );
+
+	/* Virtual info */
+
+	/* TestSuite info */
+	_TestSuite_Init( self );
+
+	return self;
+}
+
+void _TestSuite_Init( TestSuite* self ) {
+	assert( self );
+
+	self->nTests = 0;
+	self->tests = NULL;
+	self->watch = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _TestSuite_Delete( void* testSuite ) {
+	TestSuite*	self = (TestSuite*)testSuite;
+
+	assert( self );
+
+	TestSuite_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Class_Delete( self );
+}
+
+void _TestSuite_Print( void* testSuite, struct Stream* stream ) {
+	TestSuite*	self = (TestSuite*)testSuite;
+
+	/* Print parent */
+	Journal_Printf( stream, "TestSuite (ptr): (%p)\n", self );
+	_Stg_Class_Print( self, stream );
+}
+
+void* _TestSuite_Copy( void* testSuite, void* destProc_I, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+#if 0
+	TestSuite*	self = (TestSuite*)testSuite;
+	TestSuite*	newTestSuite;
+	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;
+	}
+	
+	newTestSuite = (TestSuite*)_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*)newTestSuite;
+#endif
+
+	return NULL;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void TestSuite_SetTests( void* testSuite, unsigned nTests, TestSuite_Test* tests ) {
+	TestSuite*	self = (TestSuite*)testSuite;
+
+	assert( self );
+	assert( !nTests || tests );
+
+	TestSuite_Destruct( self );
+
+	self->nTests = nTests;
+	if( nTests ) {
+		self->tests = Memory_Alloc_Array( TestSuite_Test, nTests, "TestSuite::tests" );
+		memcpy( self->tests, tests, nTests * sizeof(TestSuite_Test) );
+	}
+}
+
+void TestSuite_SetProcToWatch( void* testSuite, unsigned watch ) {
+	TestSuite*	self = (TestSuite*)testSuite;
+
+	assert( self );
+#ifndef NDEBUG
+	{
+		unsigned	nProcs;
+
+		MPI_Comm_size( MPI_COMM_WORLD, (int*)&nProcs );
+		assert( watch < nProcs );
+	}
+#endif
+
+	self->watch = watch;
+}
+
+void TestSuite_Run( void* testSuite ) {
+	TestSuite*	self = (TestSuite*)testSuite;
+	unsigned	nProcs;
+	unsigned	rank;
+	unsigned	t_i;
+
+	assert( self );
+
+	MPI_Comm_size( MPI_COMM_WORLD, (int*)&nProcs );
+	MPI_Comm_rank( MPI_COMM_WORLD, (int*)&rank );
+
+	for( t_i = 0; t_i < self->nTests; t_i++ ) {
+		TestSuite_Test*	test = self->tests + t_i;
+		unsigned	success = 0;
+		unsigned	failure = 1;
+		unsigned	r_i;
+
+		assert( test );
+		assert( test->name );
+		assert( test->func );
+
+		if( rank == self->watch )
+			printf( "   Running test '%s'... ", test->name );
+
+		for( r_i = 0; r_i < test->nReps; r_i++ ) {
+			Bool	result = test->func( rank, nProcs, self->watch );
+
+			if( rank == self->watch ) {
+				if( result )
+					MPI_Bcast( &success, 1, MPI_UNSIGNED, self->watch, MPI_COMM_WORLD );
+				else {
+					MPI_Bcast( &failure, 1, MPI_UNSIGNED, self->watch, MPI_COMM_WORLD );
+					break;
+				}
+			}
+			else {
+				unsigned	status;
+
+				MPI_Bcast( &status, 1, MPI_UNSIGNED, self->watch, MPI_COMM_WORLD );
+				if( status == failure ) break;
+			}
+		}
+
+		if( rank == self->watch )
+			printf( "%s\n", (r_i == test->nReps) ? "passed" : "failed" );
+	}
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void TestSuite_Destruct( TestSuite* self ) {
+	assert( self );
+
+	self->nTests = 0;
+	KillArray( self->tests );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: RangeSet.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Foundation_TestSuite_h__
+#define __Base_Foundation_TestSuite_h__
+
+	/** Textual name of this class */
+	extern const Type TestSuite_Type;
+
+	/* Forward declaring Stream */
+	struct Stream;
+	struct PtrMap;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	typedef Bool (TestSuite_TestFunc)( unsigned rank, unsigned nProcs, unsigned watch );
+
+	typedef struct {
+		const char*		name;
+		TestSuite_TestFunc*	func;
+		unsigned		nReps;
+	} TestSuite_Test;
+
+	#define __TestSuite				\
+		/* General info */			\
+		__Stg_Class				\
+							\
+		/* Virtual info */			\
+							\
+		/* TestSuite info */			\
+		unsigned		nTests;		\
+		TestSuite_Test*		tests;		\
+		unsigned		watch;
+
+	struct TestSuite { __TestSuite };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define TESTSUITE_DEFARGS		\
+		STG_CLASS_DEFARGS
+
+	#define TESTSUITE_PASSARGS	\
+		STG_CLASS_PASSARGS
+
+	TestSuite* TestSuite_New();
+	TestSuite* _TestSuite_New( TESTSUITE_DEFARGS );
+	void _TestSuite_Init( TestSuite* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _TestSuite_Delete( void* testSuite );
+	void _TestSuite_Print( void* testSuite, struct Stream* stream );
+
+	#define TestSuite_Copy( self ) \
+		(TestSuite*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define TestSuite_DeepCopy( self ) \
+		(TestSuite*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _TestSuite_Copy( void* testSuite, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void TestSuite_SetTests( void* testSuite, unsigned nTests, TestSuite_Test* tests );
+	void TestSuite_SetProcToWatch( void* testSuite, unsigned watch );
+
+	void TestSuite_Run( void* testSuite );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void TestSuite_Destruct( TestSuite* self );
+
+#endif /* __Base_Foundation_TestSuite_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: TimeMonitor.c 3157 2005-08-07 23:43:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "forwardDecl.h"
+#include "MemoryPointer.h"
+#include "MemoryField.h"
+#include "Memory.h"
+#include "TimeMonitor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#define Stg_TimeMonitor_t0_ZERO_CONDITION (-1.0)
+
+double Stg_TimeMonitor_t0 = Stg_TimeMonitor_t0_ZERO_CONDITION;
+double Stg_TimerWatchCriteria;
+
+const Type Stg_TimeMonitor_Type = "Stg_TimeMonitor";
+const Type Stg_TimeMonitor_InfoStreamName = "TimeMonitor";
+const Type Stg_TimeMonitor_TagType = "Stg_TimeMonitor_Tag";
+
+void Stg_TimeMonitor_Initialise() {
+	Stg_TimeMonitor_t0 = MPI_Wtime();
+	Stg_TimerWatchCriteria = 0.2;
+}
+void Stg_TimeMonitor_Finalise() {
+
+}
+void Stg_TimeMonitor_SetTimerWatchCriteria( double ratioOfTotalTime ) {
+	Stg_TimerWatchCriteria = ratioOfTotalTime;
+}
+
+Stg_TimeMonitor* Stg_TimeMonitor_New( char* tag, Bool criteria, Bool print, int comm ) {
+	Stg_TimeMonitor* tm;
+	
+	tm = Memory_Alloc_Unnamed( Stg_TimeMonitor );
+	tm->tag = Memory_Alloc_Bytes_Unnamed( strlen( tag ) + 1, Stg_TimeMonitor_TagType );
+	strcpy( tm->tag, tag );
+	tm->criteria = criteria;
+	tm->print = print;
+	tm->comm = comm;
+	
+	return tm;
+}
+
+void Stg_TimeMonitor_Delete( Stg_TimeMonitor* tm ) {
+	if( tm->tag ) {
+		Memory_Free( tm->tag );
+	}
+	
+	Memory_Free( tm );
+}
+
+void Stg_TimeMonitor_Begin( Stg_TimeMonitor* tm ) {
+	Journal_Firewall(
+		Stg_TimeMonitor_t0 > Stg_TimeMonitor_t0_ZERO_CONDITION,
+		Journal_Register( Error_Type, Stg_TimeMonitor_Type ),
+		"Time monitor used but not initialised!\n" );
+	
+	tm->t1 = MPI_Wtime();
+	tm->t2 = tm->t1;	
+}
+
+double Stg_TimeMonitor_End( Stg_TimeMonitor* tm ) {
+	double dt;
+	double maxdt;
+	double mindt;
+	double sumdt;
+	double avedt;
+	double maxt;
+	int rank;
+	int size;
+	
+	tm->t2 = MPI_Wtime();
+	dt = tm->t2 - tm->t1;
+	MPI_Comm_size( tm->comm, &size );
+	/*
+	MPI_Reduce( &dt, &maxdt, 1, MPI_DOUBLE, MPI_MAX, 0, tm->comm );
+	MPI_Reduce( &dt, &mindt, 1, MPI_DOUBLE, MPI_MIN, 0, tm->comm );
+	MPI_Allreduce( &dt, &sumdt, 1, MPI_DOUBLE, MPI_SUM, tm->comm );
+	MPI_Reduce( &tm->t2, &maxt, 1, MPI_DOUBLE, MPI_MAX, 0, tm->comm );
+	avedt = sumdt / size;
+	*/
+	/* Note: Above is commented out because cannot use MPI_Reduce functions unless we are sure
+	 * that ALL procs will call end(). This is currently not the case with Stg_Component_Initialise()
+	 * phase as some procs will have more/less variables to call Initialise() on via Variable_Condition
+	 * due to decomposition and Wall boundary conditions */
+	maxdt = dt;
+	mindt = dt;
+	sumdt = dt * size;
+	avedt = (double)dt;
+	maxt = tm->t2;
+
+	/* Note: maybe Stg_Components should store rank and comm??? how do the find their comm? */
+	
+	MPI_Comm_rank( tm->comm, &rank );
+	if( rank == 0 && tm->print ) {
+		if( !tm->criteria || maxdt > Stg_TimerWatchCriteria * (maxt - Stg_TimeMonitor_t0) ) {
+			if( size == 1 ) {
+				Journal_Printf( 
+					Journal_Register( Info_Type, Stg_TimeMonitor_InfoStreamName ),
+					"\t%s(%s):  ts: %.2g (secs), dt(%.2g%%): %.2gs\n", 
+					Stg_TimeMonitor_InfoStreamName,
+					tm->tag,
+					maxt - Stg_TimeMonitor_t0,
+					(avedt) / (maxt - Stg_TimeMonitor_t0) * 100.0,
+					avedt  );
+			}
+			else {
+				Journal_Printf( 
+					Journal_Register( Info_Type, Stg_TimeMonitor_InfoStreamName ),
+					"\t%s(%s):  ts: %.2g (secs), dt(%.g%%): %.2g/%.2g/%.2gs\n", 
+					Stg_TimeMonitor_InfoStreamName,
+					tm->tag,
+					maxt - Stg_TimeMonitor_t0,
+					(avedt) / (maxt - Stg_TimeMonitor_t0) * 100.0,
+					maxdt,
+					mindt,
+					avedt );
+			}
+		}
+	}
+	
+	return avedt;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,60 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: TimeMonitor.c 3157 2005-08-07 23:43:05Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Foundation_TimeMonitor_h__
+#define __Base_Foundation_TimeMonitor_h__
+
+extern double Stg_TimeMonitor_t0;
+extern double Stg_TimerWatchCriteria;
+
+extern const Type Stg_TimeMonitor_Type;
+extern const Type Stg_TimeMonitor_InfoStreamName;
+extern const Type Stg_TimeMonitor_TagType;
+
+typedef struct {
+	double t1;
+	double t2;
+	char* tag;
+	Bool criteria;
+	Bool print;
+	int comm;
+} Stg_TimeMonitor;
+
+void Stg_TimeMonitor_Initialise();
+void Stg_TimeMonitor_Finalise();
+void Stg_TimeMonitor_SetTimerWatchCriteria( double ratioOfTotalTime );
+
+Stg_TimeMonitor* Stg_TimeMonitor_New( char* tag, Bool criteria, Bool print, int comm );
+void Stg_TimeMonitor_Delete( Stg_TimeMonitor* tm );
+
+void Stg_TimeMonitor_Begin( Stg_TimeMonitor* tm );
+double Stg_TimeMonitor_End( Stg_TimeMonitor* tm );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/forwardDecl.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/forwardDecl.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/forwardDecl.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* SPECIAL NOTE.
+ *
+ * This is a dummy header file, listing a subset of function prototypes in the Journal system.
+ * The file has been constructed to allow the Memory Module to use the Journal, which resides in the IO directory.
+ * IO is invisible to the Foundation directory.
+ *
+ * On compilation these types and functions are processed as undefined symbols, and will not be linked until
+ * the Base directory is compiled into archive (.a) and dynamic libraries (.so).
+ *
+ * For this reason, JournalDummy.h must NOT be included in Foundation.h or Makefile.def as this will export it to become a part of
+ * the StGermain framework.
+ */
+
+#ifndef __Base_Foundation_forwardDecl_h__
+#define __Base_Foundation_forwardDecl_h__
+	
+	
+	/* Forward Declaration of Stream ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	typedef struct Stream Stream;
+	
+	void Stream_Indent( void* );
+	void Stream_UnIndent( void* );
+	
+	
+	/* Forward Declaration of Journal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	extern const Type Info_Type;
+	extern const Type Error_Type;
+	extern const Type Debug_Type;
+	
+	Stream* Journal_Register( const char*, const char* );
+	
+	int Journal_Printf( void*, char*, ... );
+	int Journal_PrintfL( void*, unsigned int, char*, ... );
+	int Journal_Firewall( int expression, void* stream, char* fmt, ... );
+	
+	#ifdef DEBUG
+		#define Journal_DPrintf Journal_Printf
+	#else
+		#define Journal_DPrintf if (0) Journal_Printf
+	#endif
+	
+	
+	/* Forward Declaration of PtrMap ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	struct PtrMap* PtrMap_New( unsigned );	
+	void PtrMap_Append( void* ptrMap, void* key, void* ptr );
+	void* PtrMap_Find( void* ptrMap, void* key );
+	
+	
+	/* Forward Declaration of BTree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	typedef struct BTree BTree;
+	typedef struct BTreeNode BTreeNode;
+	
+	typedef int (BTree_compareFunction)		(void*, void*);
+	typedef void (BTree_dataCopyFunction)		(void**, void*, SizeT);
+	typedef void (BTree_dataDeleteFunction)		(void*);
+	typedef void (BTree_dataPrintFunction)		(void*, Stream *);
+	typedef void (BTree_parseFunction)		(void*, void*);
+	
+	typedef enum BTreeProperty_t{
+		BTREE_ALLOW_DUPLICATES,
+		BTREE_NO_DUPLICATES
+	}
+	BTreeProperty;
+	
+	BTree* BTree_New( 
+		BTree_compareFunction*		compareFunction,
+		BTree_dataCopyFunction*		dataCopyFunction,
+		BTree_dataDeleteFunction*	dataDeleteFunction,
+		BTree_dataPrintFunction*	dataPrintFunction,
+		BTreeProperty			property );
+	
+	void BTree_Delete( void* tree );
+	void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args );
+	BTreeNode *BTree_FindNode( BTree *tree, void *data );
+	int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT );
+	void BTree_DeleteNode( BTree *tree, BTreeNode *z );
+	void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction );
+	void* BTree_GetData( BTreeNode *node );
+	
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,131 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+ **	Basic framework types.
+ **
+ ** <b>Assumptions:</b>
+ **	None as yet.
+ **
+ ** <b>Comments:</b>
+ **	None as yet.
+ **
+ ** $Id: shortcuts.h 2940 2005-05-15 00:53:19Z AlanLo $
+ **
+ **/
+
+#ifndef __Base_Foundation_shortcuts_h__
+#define __Base_Foundation_shortcuts_h__
+
+/* If the system does not have these macros, define it here */
+#ifndef MAX
+#define MAX( a, b ) ( ( (a) > (b) ) ? (a) : (b) )
+#endif
+#ifndef MIN
+#define MIN( a, b ) ( ( (a) < (b) ) ? (a) : (b) )
+#endif	
+
+#define FreeArray( ptr )			\
+	if( ptr )				\
+		Memory_Free( ptr )
+	
+	
+#define FreeArray2D( nBlocks, ptr )					\
+	do {								\
+		if( ptr ) {						\
+			unsigned	block_i;			\
+			for( block_i = 0; block_i < nBlocks; block_i++ ) { \
+				if( (ptr)[block_i] ) {			\
+					Memory_Free( (ptr)[block_i] );	\
+				}					\
+			}						\
+			Memory_Free( ptr );				\
+		}							\
+	} while( 0 )
+	
+	
+#define KillArray( ptr )			\
+	do {					\
+		if( ptr ) {			\
+			Memory_Free( ptr );	\
+			(ptr) = NULL;		\
+		}				\
+	} while( 0 )
+	
+	
+#define KillArray2D( nBlocks, ptr )					\
+	do {								\
+		if( ptr ) {						\
+			unsigned	block_i;			\
+			for( block_i = 0; block_i < nBlocks; block_i++ ) { \
+				if( (ptr)[block_i] ) {			\
+					Memory_Free( (ptr)[block_i] );	\
+				}					\
+			}						\
+			Memory_Free( ptr );				\
+			(ptr) = NULL;					\
+		}							\
+	} while( 0 )
+
+#define DeleteArray( ptr, size )					\
+	do {								\
+		if( ptr ) {						\
+			unsigned	__class_i;			\
+			for( __class_i = 0; __class_i < size; __class_i++ ) \
+				if( ptr[__class_i] ) Stg_Delete_Class( ptr[__class_i] ); \
+			ptr = NULL;					\
+		}							\
+	} while( 0 )
+
+#define DeleteOwnArray( ptr, own, size )				\
+	do {								\
+		if( ptr ) {						\
+			unsigned	__class_i;			\
+			for( __class_i = 0; __class_i < size; __class_i++ ) \
+				if( ptr[__class_i] && own[__class_i] )	\
+					Stg_Delete_Class( ptr[__class_i] ); \
+			Memory_Free( ptr );				\
+			Memory_Free( own );				\
+			ptr = NULL;					\
+			own = NULL;					\
+		}							\
+	} while( 0 )
+
+#define FreeObject( obj ) \
+	if( obj ) Stg_Class_Delete( obj )
+
+#define KillObject( obj ) \
+	if( obj ) (Stg_Class_Delete( obj ), (obj) = NULL)
+
+
+#ifndef NDEBUG
+#define insist( expr ) assert( expr )
+#else
+#define insist( expt ) expr
+#endif
+	
+#endif /* __Base_Foundation_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Basic framework types.
+**
+** <b>Assumptions:</b>
+**	None as yet.
+**
+** <b>Comments:</b>
+**	None as yet.
+**
+** $Id: types.h 3758 2006-08-08 09:17:16Z LukeHodkinson $
+**
+**/
+
+#ifndef __Base_Foundation_types_h__
+#define __Base_Foundation_types_h__
+	
+	typedef void*				Pointer;		/**< General Pointer. */
+	typedef unsigned long			Stg_Word;		/**< A word on the cpu architecture */
+	typedef unsigned long			ArithPointer;		/**< Used to do arithmetic on a pointer. Usually a long. */
+	typedef unsigned long			SizeT;			/**< Size of memory allocations. */
+	typedef unsigned int			Index;			/**< Generic array index. Positive, not constrained. */
+
+	/* Generic types */
+	/* Base types/classes */	
+	typedef struct _Stg_Class		Stg_Class;
+		
+	typedef struct _Stg_Object		Stg_Object;
+	typedef Stg_Object*			Stg_ObjectPtr;
+	typedef Index				Stg_Object_Index;
+	
+	typedef struct _Stg_ObjectAdaptor	Stg_ObjectAdaptor;
+	typedef struct _Stg_PrimitiveObject	Stg_PrimitiveObject;
+		
+	typedef struct NamedObject_Register	NamedObject_Register;
+	typedef struct _Stg_ObjectList		Stg_ObjectList;
+
+	typedef struct TestSuite		TestSuite;
+	
+	/* Memory module classes */
+	typedef struct MemoryTag		MemoryTag;
+	typedef struct MemoryField		MemoryField;
+	typedef struct MemoryPointer		MemoryPointer;
+	typedef struct MemoryReport		MemoryReport;
+	typedef struct Memory			Memory;
+	typedef unsigned long			MemoryOpStamp;
+	
+
+	typedef char*				Name;			/**< A string used for names. */
+	#define					Name_Invalid	0	/**< An invalid or empty name. */
+	
+	/** Unique ID of a type/class. (runtime-proc persistance). Pointer used as ID. Must point to a valid string. */
+	typedef char*				Type;
+	#define					Type_Invalid	0	/**< An invalid or empty type. */
+	
+	
+	/*
+	 * #ifdef barrier for Bool type. Added 07-Sep-2004 -- Alan
+	 *
+	 * Change for Cecile so that she may procede with gLucifier work.
+	 * This was causing problems when compiling StGermain with gLucifier/vtk using g++.
+	 * It seems to suggest that this line was trying to redefine the int primitive.
+	 *
+	 * Grep searches reveal that neither gLucifier or vtk use the "Bool" word.
+	 *
+	 * TODO: Find a more elegant way to fix this issue.
+	 */
+	#ifndef Bool	
+		/** Boolean type in StGermain. */
+		typedef enum			Bool { False=0, True=1 } Bool;
+	#endif
+	
+
+	typedef enum MemoryPointerStatus_t{
+		MEMORY_POINTER_RELEASED,				/**< If memory held by pointer is released. */
+		MEMORY_POINTER_PERSISTENT				/**< If memory held by pointer still exists. */
+	}
+	MemoryPointerStatus;
+
+	/** Used to indicate whether an allocation is for a global variable or deleted locally.
+	 ** Currently used in NamedObject.
+	 **/
+	typedef enum AllocationType {
+		GLOBAL,
+		NON_GLOBAL
+	} AllocationType;
+
+
+	/** Enum to tell the replace function whether to delete the replaced object or not. */
+	typedef enum ReplacementOption {
+		KEEP,
+		DELETE
+	} ReplacementOption;
+	
+#endif /* __Base_Foundation_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,152 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLibStGermainDynamic.c 2742 2005-03-05 05:33:43Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "BTreeWrappers.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+BTree* BTree_New( 
+	BTree_compareFunction*		compareFunction,
+	BTree_dataCopyFunction*		dataCopyFunction,
+	BTree_dataDeleteFunction*	dataDeleteFunction,
+	BTree_dataPrintFunction*	dataPrintFunction,
+	BTreeProperty				property)
+{
+	BTree* result = (BTree*)malloc( sizeof(BTree) );
+
+	/* Manual fill data for this wrapper */
+        result->_sizeOfSelf = sizeof(BTree);
+	result->_deleteSelf = True;
+	result->type = "BTree";
+	result->_delete = _BTree_Delete;
+	result->_print = NULL;
+
+	result->numItems = 0;
+	result->currentItem = 0;
+	result->items = NULL;
+
+	result->compareFunction = compareFunction;
+	
+	return result;
+}
+
+void _BTree_Delete( void* self ) {
+
+	BTree* tree = (BTree*)self;
+	int ii;
+	
+	for ( ii = 0; ii < tree-> currentItem; ++ii ) {
+		if ( tree->items[ii] != NULL ) {
+			free( tree->items[ii] );
+			tree->items[ii] = NULL;
+		}
+	}
+	
+	free( tree );
+
+}
+
+int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT sizeOfData)
+{
+	if ( tree->currentItem == tree->numItems ) {
+		tree->numItems++;
+		tree->items = (BTreeNode**)realloc( tree->items, sizeof(BTreeNode*) * tree->numItems );
+	}
+	tree->items[tree->currentItem] = (BTreeNode*)malloc( sizeof(BTreeNode) );
+	tree->items[tree->currentItem]->data = newNodeData;
+
+	tree->currentItem++;
+	
+	return 1;
+}
+	
+void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction )
+{
+	tree->compareFunction = compareFunction;
+}
+	
+BTreeNode *BTree_FindNode( BTree *tree, void *data )
+{
+	int ii;
+
+	if ( tree->numItems == 0 ) {
+		return NULL;
+	}
+
+	for ( ii = 0; ii < tree->numItems; ++ii ) {
+		if ( tree->items[ii] != NULL ) {
+			if ( tree->compareFunction ( tree->items[ii]->data, data ) == 0 ) {
+				return tree->items[ii];
+			}
+		}
+	}
+	return NULL;	
+}
+	
+void BTree_DeleteNode( BTree *tree, BTreeNode *z )
+{
+	int ii;
+
+	if ( z == NULL || tree->numItems == 0 ) {
+		return;
+	}
+
+	for ( ii = 0; ii < tree->numItems; ++ii ) {
+		if ( tree->items[ii] != NULL ) {
+			if ( tree->compareFunction( tree->items[ii]->data, z->data ) == 0 ) {
+				tree->items[ii] = NULL;
+				free( z );
+				return;
+			}
+		}
+	}
+}
+
+void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args )
+{
+	int ii;
+
+	for ( ii = 0; ii < tree->numItems; ++ii ) {
+		if ( tree->items[ii] != NULL ) {
+			parseFunction( tree->items[ii]->data, args );
+		}
+	}
+}
+	
+void* BTree_GetData( BTreeNode *node )
+{
+	return node->data;
+}
+
+void BTree_Delete( void* tree ) {
+	Stg_Class_Delete( tree );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053 Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* SPECIAL NOTE.
+ *
+ * This is a dummy header file, listing a subset of function prototypes in the BTree container class.
+ * The file has been constructed to allow the Memory Module to use the Container, which resides in the Container directory.
+ * Container is invisible to the Foundation directory.
+ *
+ * On compilation these types and functions are processed as undefined symbols, and will not be linked until
+ * the Base directory is compiled into archive (.a) and dynamic libraries (.so).
+ *
+ * For this reason, BTreeDummy.h must NOT be included in Foundation.h or Makefile.def as this will export it to become a part of
+ * the StGermain framework.
+ */
+
+#ifndef __Base_Foundation_BTreeWrappers_h__
+#define __Base_Foundation_BTreeWrappers_h__
+
+	typedef enum BTreeProperty_t{
+		BTREE_ALLOW_DUPLICATES,
+		BTREE_NO_DUPLICATES
+	}
+	BTreeProperty;
+
+	typedef struct Stream Stream;
+	typedef int (BTree_compareFunction)		(void*, void*);
+	typedef void (BTree_dataCopyFunction)		(void**, void*, SizeT);
+	typedef void (BTree_dataDeleteFunction)		(void*);
+	typedef void (BTree_dataPrintFunction)		(void*, Stream*);
+	typedef void (BTree_parseFunction)		(void*, void*);
+	
+	/* Hack linear search implementation for the wrapper to allow tests to run */
+	typedef struct {
+		void* data;
+	} BTreeNode;
+	typedef struct {
+		__Stg_Class
+
+		int			numItems;
+		int			currentItem;
+		BTreeNode**		items;
+		BTree_compareFunction*	compareFunction;
+	} BTree;
+
+	extern const Type BTree_Type;
+
+	BTree* BTree_New( 
+		BTree_compareFunction*		compareFunction,
+		BTree_dataCopyFunction*		dataCopyFunction,
+		BTree_dataDeleteFunction*	dataDeleteFunction,
+		BTree_dataPrintFunction*	dataPrintFunction,
+		BTreeProperty				property);
+
+	void _BTree_Delete( void* self );
+
+	int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT );
+		
+	void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction );
+	
+	BTreeNode *BTree_FindNode( BTree *tree, void *data );
+	
+	void BTree_DeleteNode( BTree *tree, BTreeNode *z );
+		
+	void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args );
+	
+	void* BTree_GetData( BTreeNode *node );
+
+	void BTree_Delete( void* tree );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: JournalWrappers.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "JournalWrappers.h"
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+#include <assert.h>
+
+const Type Info_Type = "info";
+const Type Error_Type = "error";
+const Type Debug_Type = "debug";
+
+struct Stream* Journal_Register( Type type, Name name )
+{
+	return (void*)1;
+}
+
+int Journal_Printf ( void *stream, char *fmt, ... )
+{
+	va_list ap;
+
+	va_start( ap, fmt );
+	
+	vfprintf( stdout, fmt, ap );
+
+	va_end( ap );
+	
+	return 0;
+}
+
+int Journal_PrintfL ( void *stream, unsigned int level, char *fmt, ... )
+{
+	va_list ap;
+
+	va_start( ap, fmt );
+	
+	vfprintf( stdout, fmt, ap );
+
+	va_end( ap );
+	
+	return 0;
+}
+
+int Journal_Firewall ( int expression, void *stream, char *fmt, ... )
+{
+	va_list ap;
+
+	va_start( ap, fmt );
+	
+	if( !expression ) {
+		vfprintf( stdout, fmt, ap );
+		assert( expression );
+	}
+	
+	va_end( ap );
+	
+	return 0;
+}
+
+void Stream_Indent( void* stream )
+{
+
+}
+void Stream_UnIndent( void* stream )
+{
+
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: JournalWrappers.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_FoundationTests_JournalWrappers_h__
+#define __Base_FoundationTests_JournalWrappers_h__
+
+struct Stream;
+typedef struct Stream Stream;
+
+struct Stream* Journal_Register( Type type, Name name );
+
+int  Journal_Printf (void *stream, char *fmt,...);
+int Journal_Firewall( int expression, void* stream, char* fmt, ... );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_TEST_OBJS = ${addprefix ${BLD_TMPDIR}/test-${def_tst}/, ${addsuffix .o, ${basename ${def_test_support_srcs}}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+.SECONDARY: ${PROJ_TEST_OBJS}
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${BLD_TMPDIR}/test-${def_tst}/%.o: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${BLD_TMPDIR}/test-${def_tst}; then ${MKDIR} ${BLD_TMPDIR}/test-${def_tst}; fi
+	${CC} -c -o $@  $<  $(CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) -I$(PROJ_INCDIR)
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES} ${PROJ_TEST_OBJS}
+	echo PTO=${PROJ_TEST_OBJS}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< ${PROJ_TEST_OBJS} $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 3512 2006-04-03 01:04:54Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseFoundation
+
+def_test_support_srcs = \
+	JournalWrappers.c \
+	BTreeWrappers.c \
+	PtrMapWrappers.c
+
+def_srcs = \
+	testMemory2DArray.c \
+	testMemory2DArrayAs1D.c \
+	testMemory2DComplex.c \
+	testMemory3DArray.c \
+	testMemory3DArrayAs1D.c \
+	testMemory3DComplex.c \
+	testMemory4DArray.c \
+	testMemory4DArrayAs1D.c \
+	testMemoryRealloc.c \
+	testObjectList.c \
+	testNamedObject_Register.c \
+	testCommonRoutines.c \
+	testTimeMonitor.c \
+	testMemMonitor.c \
+	testPrimitiveObject.c \
+	testStg_asprintf.c
+
+def_checks = \
+	testObjectList.0of1.sh \
+	testNamedObject_Register.0of1.sh \
+	testTimeMonitor.0of1.sh \
+	testCommonRoutines.0of1.sh \
+	testPrimitiveObject.0of1.sh
+
+ifdef USE_MEMORY_STATS
+	def_srcs += \
+		testMemory0.c \
+		testMemory1.c \
+		testMemory2.c 
+
+	def_checks += \
+		testMemory0.0of1.sh \
+		testMemory1.0of1.sh \
+		testMemory2.0of1.sh \
+		testMemory2DArray.0of1.sh \
+		testMemory2DArrayAs1D.0of1.sh \
+		testMemory2DComplex.0of1.sh \
+		testMemory3DArray.0of1.sh \
+		testMemory3DArrayAs1D.0of1.sh \
+		testMemory3DComplex.0of1.sh \
+		testMemory4DArray.0of1.sh \
+		testMemory4DArrayAs1D.0of1.sh \
+		testMemoryRealloc.0of1.sh \
+		testMemMonitor.0of1.sh \
+		testMemMonitor.0of2.sh 
+endif	
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/PtrMapWrappers.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/PtrMapWrappers.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/PtrMapWrappers.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testLibStGermainDynamic.c 2742 2005-03-05 05:33:43Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+
+struct PtrMap* PtrMap_New( unsigned  delta ) {
+	return NULL;
+}
+
+void PtrMap_Append( void* ptrMap, void* key, void* ptr ) {
+}
+
+
+void* PtrMap_Find( void* ptrMap, void* key ) {
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $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
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+TEST_SUPPORT_SRCS = ${def_test_support_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+	packages += CSOAP NANOHTTP
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+Longest case-sensitive matching subsequence length of 'Acrobat' and 'BOAT' is 1.
+Longest case-sensitive matching subsequence length of 'Abracadabra' and 'Yabbadabbadoo' is 6.
+Longest case-insensitive matching subsequence length of 'Abracadabra' and 'Yabbadabbadoo' is 7.
+Longest case-insensitive matching subsequence length of 'Python' and 'PythonShape' is 6.
+Stg_StringIsNumeric( 'nan' ) = False
+Stg_StringIsNumeric( '567' ) = True
+Stg_StringIsNumeric( '1.0e90' ) = True
+Stg_StringIsNumeric( '1e90e80' ) = False
+Stg_StringIsNumeric( '.asdfasdf' ) = False
+Stg_StringIsNumeric( '.0032' ) = True
+Stg_StringIsNumeric( '.0032.00' ) = False
+Stg_StringIsEmpty( '	 
+' ) = True
+Stg_StringIsEmpty( 'asdf' ) = False
+Stg_StringIsEmpty( '    ' ) = True
+Stg_StringIsEmpty( '    
+' ) = True
+Stg_StringIsEmpty( '  sdf  
+' ) = False
+
+Testing rounding to certain number of decimal places:
+Value        0 rounded to 0 dec places was within tolerance of expected value        0.
+Value        0 rounded to 1 dec places was within tolerance of expected value        0.
+Value        0 rounded to 2 dec places was within tolerance of expected value        0.
+Value        0 rounded to 3 dec places was within tolerance of expected value        0.
+Value 3.4562e-30 rounded to 0 dec places was within tolerance of expected value        0.
+Value 3.4562e-30 rounded to 1 dec places was within tolerance of expected value        0.
+Value 3.4562e-30 rounded to 2 dec places was within tolerance of expected value        0.
+Value 3.4562e-30 rounded to 3 dec places was within tolerance of expected value        0.
+Value   9.7324 rounded to 0 dec places was within tolerance of expected value       10.
+Value   9.7324 rounded to 1 dec places was within tolerance of expected value      9.7.
+Value   9.7324 rounded to 2 dec places was within tolerance of expected value     9.73.
+Value   9.7324 rounded to 3 dec places was within tolerance of expected value    9.732.
+Value   97.654 rounded to 0 dec places was within tolerance of expected value       98.
+Value   97.654 rounded to 1 dec places was within tolerance of expected value     97.7.
+Value   97.654 rounded to 2 dec places was within tolerance of expected value    97.65.
+Value   97.654 rounded to 3 dec places was within tolerance of expected value   97.654.
+Value  104.321 rounded to 0 dec places was within tolerance of expected value      104.
+Value  104.321 rounded to 1 dec places was within tolerance of expected value    104.3.
+Value  104.321 rounded to 2 dec places was within tolerance of expected value   104.32.
+Value  104.321 rounded to 3 dec places was within tolerance of expected value  104.321.
+Value -13762.1 rounded to 0 dec places was within tolerance of expected value   -13762.
+Value -13762.1 rounded to 1 dec places was within tolerance of expected value -13762.1.
+Value -13762.1 rounded to 2 dec places was within tolerance of expected value -13762.1.
+Value -13762.1 rounded to 3 dec places was within tolerance of expected value -13762.1.
+Value 0.0043253 rounded to 0 dec places was within tolerance of expected value        0.
+Value 0.0043253 rounded to 1 dec places was within tolerance of expected value        0.
+Value 0.0043253 rounded to 2 dec places was within tolerance of expected value        0.
+Value 0.0043253 rounded to 3 dec places was within tolerance of expected value    0.004.
+
+Testing rounding to certain number of significant figures:
+Value        0 rounded to 1 sig. figures was within tolerance of expected value        0.
+Value        0 rounded to 2 sig. figures was within tolerance of expected value        0.
+Value        0 rounded to 3 sig. figures was within tolerance of expected value        0.
+Value 3.4562e-30 rounded to 1 sig. figures was within tolerance of expected value    3e-30.
+Value 3.4562e-30 rounded to 2 sig. figures was within tolerance of expected value  3.5e-30.
+Value 3.4562e-30 rounded to 3 sig. figures was within tolerance of expected value 3.46e-30.
+Value   9.7324 rounded to 1 sig. figures was within tolerance of expected value       10.
+Value   9.7324 rounded to 2 sig. figures was within tolerance of expected value      9.7.
+Value   9.7324 rounded to 3 sig. figures was within tolerance of expected value     9.73.
+Value   97.654 rounded to 1 sig. figures was within tolerance of expected value      100.
+Value   97.654 rounded to 2 sig. figures was within tolerance of expected value       98.
+Value   97.654 rounded to 3 sig. figures was within tolerance of expected value     97.7.
+Value  104.321 rounded to 1 sig. figures was within tolerance of expected value      100.
+Value  104.321 rounded to 2 sig. figures was within tolerance of expected value      100.
+Value  104.321 rounded to 3 sig. figures was within tolerance of expected value      104.
+Value -13762.1 rounded to 1 sig. figures was within tolerance of expected value   -10000.
+Value -13762.1 rounded to 2 sig. figures was within tolerance of expected value   -14000.
+Value -13762.1 rounded to 3 sig. figures was within tolerance of expected value   -13800.
+Value 0.0043253 rounded to 1 sig. figures was within tolerance of expected value    0.004.
+Value 0.0043253 rounded to 2 sig. figures was within tolerance of expected value   0.0043.
+Value 0.0043253 rounded to 3 sig. figures was within tolerance of expected value  0.00433.

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testCommonRoutines " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,198 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testCommonRoutines.c 3706 2006-07-25 02:19:37Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+#include <math.h>
+
+void TestLMS( Stream* stream, char* string1, char* string2, Bool caseSensitive ) {
+	Journal_Printf( stream, "Longest case-%ssensitive matching subsequence length of '%s' and '%s' is %d.\n", 
+		( caseSensitive ? "" : "in" ), string1, string2, 
+		Stg_LongestMatchingSubsequenceLength( string1, string2, caseSensitive ) );
+}
+
+void TestIsStringNumeric( Stream* stream, char* string ) {
+	Journal_Printf( stream, "Stg_StringIsNumeric( '%s' ) = %s\n", 
+			string, Stg_StringIsNumeric( string ) ? "True" : "False" );
+}
+void TestIsStringEmpty( Stream* stream, char* string ) {
+	Journal_Printf( stream, "Stg_StringIsEmpty( '%s' ) = %s\n", 
+			string, Stg_StringIsEmpty( string ) ? "True" : "False" );
+}
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Foundation/ObjectList" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if ( rank == procToWatch ) {
+		Index  nTestValues = 7;
+		double testValues[] = {
+			0.0,
+			3.4562e-30,
+			9.7324,
+			97.654,
+			104.321,
+			-13762.1,
+			0.0043253 };
+		double tolerances[] = {
+			1e-40,
+			1e-40,
+			1e-12,
+			1e-12,
+			1e-12,
+			1e-12,
+			1e-12 };
+		double expectedRoundedToDecPlaces[7][4] = {
+			{ 0.0, 0.0, 0.0, 0.0 },
+			{ 0.0, 0.0, 0.0, 0.0 },
+			{ 10., 9.7, 9.73, 9.732 },
+			{ 98., 97.7, 97.65, 97.654 },
+			{ 104., 104.3, 104.32, 104.321 },
+			{ -13762., -13762.1, -13762.10, -13762.100 },
+			{ 0.,    0.0, 0.00, 0.004 } };
+		double expectedRoundedToSigFigs[7][4] = {
+			{ 0.0, 0.0, 0.0, 0.0 },
+			{ 0.0, 3e-30, 3.5e-30, 3.46e-30 },
+			{ 0., 10, 9.7, 9.73 },
+			{ 0., 100, 98, 97.7 },
+			{ 0., 100, 100, 104 },
+			{ 0., -10000, -14000, -13800 },
+			{ 0., 0.004, 0.0043, 0.00433 } };
+		double roundedValue;
+		double errorMargin;
+		Index testValue_I;
+		Index nDecPlaces;
+		Index nSigFigs;
+		
+		TestLMS( stream, "Acrobat", "BOAT", True );
+		TestLMS( stream, "Abracadabra", "Yabbadabbadoo", True );
+		TestLMS( stream, "Abracadabra", "Yabbadabbadoo", False );
+		TestLMS( stream, "Python", "PythonShape", False );
+		
+		TestIsStringNumeric( stream, "nan" );
+		TestIsStringNumeric( stream, "567" );
+		TestIsStringNumeric( stream, "1.0e90" );
+		TestIsStringNumeric( stream, "1e90e80" );
+		TestIsStringNumeric( stream, ".asdfasdf" );
+		TestIsStringNumeric( stream, ".0032" );
+		TestIsStringNumeric( stream, ".0032.00" );
+		
+		TestIsStringEmpty( stream, "\t \n" );
+		TestIsStringEmpty( stream, "asdf" );
+		TestIsStringEmpty( stream, "    " );
+		TestIsStringEmpty( stream, "    \n" );
+		TestIsStringEmpty( stream, "  sdf  \n" );
+
+		printf("\nTesting rounding to certain number of decimal places:\n");
+		for ( testValue_I = 0; testValue_I < nTestValues; testValue_I++ ) {
+			for ( nDecPlaces = 0; nDecPlaces <=3; nDecPlaces++ ) {
+				roundedValue = StG_RoundDoubleToNDecimalPlaces(
+					testValues[testValue_I], nDecPlaces );
+				errorMargin = fabs( roundedValue -
+					expectedRoundedToDecPlaces[testValue_I][nDecPlaces] );
+
+				if ( errorMargin <= tolerances[testValue_I] ) {
+					printf( "Value %8g rounded to %u dec places was within "
+						"tolerance of expected value %8g.\n",
+						testValues[testValue_I], nDecPlaces,
+						expectedRoundedToDecPlaces[testValue_I][nDecPlaces] );
+				}
+				else {
+					printf( "Value %8g rounded to %u dec places was not within "
+						"tolerance of expected value %8g.\n",
+						testValues[testValue_I], nDecPlaces,
+						expectedRoundedToDecPlaces[testValue_I][nDecPlaces] );
+					printf( "(error margin was %.8g)\n", errorMargin );
+				}
+			}
+		}
+
+		printf("\nTesting rounding to certain number of significant figures:\n");
+		for ( testValue_I = 0; testValue_I < nTestValues; testValue_I++ ) {
+			for ( nSigFigs = 1; nSigFigs <=3; nSigFigs++ ) {
+				roundedValue = StG_RoundDoubleToNSigFigs(
+					testValues[testValue_I], nSigFigs );
+				errorMargin = fabs( roundedValue -
+					expectedRoundedToSigFigs[testValue_I][nSigFigs] );
+				if ( errorMargin <= tolerances[testValue_I] ) {
+					printf( "Value %8g rounded to %u sig. figures was within "
+						"tolerance of expected value %8g.\n",
+						testValues[testValue_I], nSigFigs,
+						expectedRoundedToSigFigs[testValue_I][nSigFigs] );
+				}
+				else {
+					printf( "Value %8g rounded to %u sig. figures was not within "
+						"tolerance of expected value %8g.\n",
+						testValues[testValue_I], nSigFigs,
+						expectedRoundedToSigFigs[testValue_I][nSigFigs] );
+					printf( "(error margin was %.8g)\n", errorMargin );
+				}
+			}
+		}
+	}
+
+	RegressionTest_Finalise();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+	MemMonitor(test): Current total: 3037bytes, dt(65.85%): 2000bytes
+b, Total:2000, 
+	MemMonitor(test): Current total: 103137bytes, dt(97.06%): 100100bytes
+d, Total:100000, 
+	MemMonitor(test): Current total: 22037bytes, dt(90.76%): 20000bytes
+e, Total:10000, 
+f, Total:10000, 

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemMonitor " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+	MemMonitor(test): Current total: 3037bytes, dt(66%):
+	2000bytes (max), 2000bytes (min), 00bytes (ave)
+b, Total:2000, 
+	MemMonitor(test): Current total: 103137bytes, dt(97%):
+	100100bytes (max), 100100bytes (min), 00bytes (ave)
+d, Total:100000, 
+	MemMonitor(test): Current total: 22037bytes, dt(91%):
+	20000bytes (max), 20000bytes (min), 00bytes (ave)
+e, Total:10000, 
+f, Total:10000, 

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemMonitor " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+#include <unistd.h>
+
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Foundation/MemMonitor" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	Stg_MemMonitor_SetMemoryWatchCriteria( 0.25 );
+
+	{
+		char *a;
+		char *b;
+		char *c;
+		char *d;
+		char *e;
+		char *f;
+		
+		Stg_MemMonitor* tm = Stg_MemMonitor_New( "test", True, True, MPI_COMM_WORLD );
+		a = Memory_Alloc_Array( char, 1000, "a" );
+	
+		Stg_MemMonitor_Begin( tm );
+		b = Memory_Alloc_Array( char, 2000, "b" );
+		Stg_MemMonitor_End( tm );
+	
+		Stg_MemMonitor_Begin( tm );
+		c = Memory_Alloc_Array( char, 100, "c" );
+		d = Memory_Alloc_Array( char, 100000, "d" );
+		Stg_MemMonitor_End( tm );
+		
+		Stg_MemMonitor_Begin( tm );
+		Memory_Free( a );
+		Memory_Free( c );
+		Memory_Free( d );
+		Stg_MemMonitor_End( tm );
+
+		Stg_MemMonitor_Begin( tm );
+		e = Memory_Alloc_Array( char, 10000, "e" );
+		f = Memory_Alloc_Array( char, 10000, "f" );
+		Stg_MemMonitor_End( tm );
+		
+		Memory_Free( b );
+		Memory_Free( e );
+		Memory_Free( f );
+		Stg_MemMonitor_Delete( tm );
+	}
+
+	RegressionTest_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,105 @@
+Watching rank: 0
+2D Array
+0.000000 0.100000 0.200000 
+1.000000 1.100000 1.200000 
+3D Array
+0.000000 0.010000 
+0.100000 0.110000 
+0.200000 0.210000 
+1.000000 1.010000 
+1.100000 1.110000 
+1.200000 1.210000 
+2.000000 2.010000 
+2.100000 2.110000 
+2.200000 2.210000 
+3.000000 3.010000 
+3.100000 3.110000 
+3.200000 3.210000 
+4D Array
+0.000000 0.001000 0.002000 
+0.010000 0.011000 0.012000 
+0.100000 0.101000 0.102000 
+0.110000 0.111000 0.112000 
+0.200000 0.201000 0.202000 
+0.210000 0.211000 0.212000 
+1.000000 1.001000 1.002000 
+1.010000 1.011000 1.012000 
+1.100000 1.101000 1.102000 
+1.110000 1.111000 1.112000 
+1.200000 1.201000 1.202000 
+1.210000 1.211000 1.212000 
+2.000000 2.001000 2.002000 
+2.010000 2.011000 2.012000 
+2.100000 2.101000 2.102000 
+2.110000 2.111000 2.112000 
+2.200000 2.201000 2.202000 
+2.210000 2.211000 2.212000 
+3.000000 3.001000 3.002000 
+3.010000 3.011000 3.012000 
+3.100000 3.101000 3.102000 
+3.110000 3.111000 3.112000 
+3.200000 3.201000 3.202000 
+3.210000 3.211000 3.212000 
+2D as 1D
+0.000000 0.100000 
+1.000000 1.100000 
+2.000000 2.100000 
+3D as 1D 
+0.000000 0.010000 
+0.100000 0.110000 
+0.200000 0.210000 
+1.000000 1.010000 
+1.100000 1.110000 
+1.200000 1.210000 
+2.000000 2.010000 
+2.100000 2.110000 
+2.200000 2.210000 
+3.000000 3.010000 
+3.100000 3.110000 
+3.200000 3.210000 
+4D as 1D
+0.000000 0.001000 0.002000 
+0.010000 0.011000 0.012000 
+0.100000 0.101000 0.102000 
+0.110000 0.111000 0.112000 
+0.200000 0.201000 0.202000 
+0.210000 0.211000 0.212000 
+1.000000 1.001000 1.002000 
+1.010000 1.011000 1.012000 
+1.100000 1.101000 1.102000 
+1.110000 1.111000 1.112000 
+1.200000 1.201000 1.202000 
+1.210000 1.211000 1.212000 
+2.000000 2.001000 2.002000 
+2.010000 2.011000 2.012000 
+2.100000 2.101000 2.102000 
+2.110000 2.111000 2.112000 
+2.200000 2.201000 2.202000 
+2.210000 2.211000 2.212000 
+3.000000 3.001000 3.002000 
+3.010000 3.011000 3.012000 
+3.100000 3.101000 3.102000 
+3.110000 3.111000 3.112000 
+3.200000 3.201000 3.202000 
+3.210000 3.211000 3.212000 
+2D Complex
+0.000000 
+1.000000 1.100000 
+2.000000 2.100000 2.200000 
+3.000000 3.100000 3.200000 3.300000 
+4.000000 4.100000 4.200000 4.300000 4.400000 
+3D Complex
+0.000000 0.010000 
+0.100000 0.110000 0.120000 
+0.200000 0.210000 
+0.300000 0.310000 0.320000 
+1.000000 
+1.100000 1.110000 1.120000 1.130000 1.140000 
+2.000000 2.010000 
+2.100000 2.110000 2.120000 2.130000 
+2.200000 2.210000 
+Testing Memory_IsAllocated() for true: OK
+Testing instance counter init value: OK
+Testing instance counter inc: OK
+Testing instance counter dec: OK
+Testing Memory_IsAllocated() for false: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory0 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,267 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 accuracy of memory statistics generation.
+**
+** $Id: testMemory0.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double**	array2d;
+	double***	array3d;
+	double****	array4d;
+	
+	double*		one2d;
+	double*		one3d;
+	double*		one4d;
+
+	double**	complex2d;
+
+	Index**		setup;
+	double***	complex3d;
+
+	Index x1 = 5;
+	Index y1[] = { 1, 2, 3, 4, 5 };
+
+	Index x2 = 3;
+	Index y2[] = { 4, 2, 3 };
+
+	Index i, j, k, l;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( stream,  "Watching rank: %i\n", rank );
+
+	Journal_Printf( stream, "2D Array\n" );
+	array2d = Memory_Alloc_2DArray_Unnamed( double, 2, 3 );
+	for ( i = 0; i < 2; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			array2d[i][j] = i + (j / 10.0);
+			Journal_Printf( stream, "%lf ", array2d[i][j] );			
+		}
+		Journal_Printf( stream, "\n");
+	}
+
+	Journal_Printf( stream, "3D Array\n" );
+	array3d = Memory_Alloc_3DArray_Unnamed( double, 4, 3, 2 );
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				array3d[i][j][k] = i + (j / 10.0) + (k / 100.0);
+				Journal_Printf( stream, "%lf ", array3d[i][j][k] );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+
+	Journal_Printf( stream, "4D Array\n" );
+	array4d = Memory_Alloc_4DArray_Unnamed( double, 4, 3, 2, 3 );
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				for ( l = 0; l < 3; ++l )
+				{
+					array4d[i][j][k][l] = i + (j / 10.0) + (k / 100.0) + (l / 1000.0);
+					Journal_Printf( stream, "%lf ", array4d[i][j][k][l] );
+				}
+				Journal_Printf( stream, "\n");
+			}
+		}
+	}
+
+	Journal_Printf( stream, "2D as 1D\n" );
+	one2d = Memory_Alloc_2DArrayAs1D_Unnamed( double, 3, 2 );
+	for ( i = 0; i < 3; ++i )
+	{
+		for ( j = 0; j < 2; ++j )
+		{
+			Memory_Access2D( one2d, i, j, 2 ) = i + (j / 10.0);
+			Journal_Printf( stream, "%lf ", Memory_Access2D( one2d, i, j, 2 ) );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+
+
+	Journal_Printf( stream, "3D as 1D \n" );
+	one3d = Memory_Alloc_3DArrayAs1D_Unnamed( double, 4, 3, 2 );
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				Memory_Access3D( one3d, i, j, k, 3, 2 ) = i + (j / 10.0) + (k / 100.0);
+				Journal_Printf( stream, "%lf ", Memory_Access3D( one3d, i, j, k, 3, 2 ) );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+
+
+	Journal_Printf( stream, "4D as 1D\n" );
+	one4d = Memory_Alloc_4DArrayAs1D_Unnamed( double, 4, 3, 2, 3 );
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				for ( l = 0; l < 3; ++l )
+				{
+					Memory_Access4D( one4d, i, j, k, l, 3, 2, 3 ) = i + (j / 10.0) + (k / 100.0) + (l / 1000.0);
+					Journal_Printf( stream, "%lf ", Memory_Access4D( one4d, i, j, k, l, 3, 2, 3 ) );
+				}
+				Journal_Printf( stream, "\n");
+			}
+		}
+	}
+
+	Journal_Printf( stream, "2D Complex\n" );
+	complex2d = Memory_Alloc_2DComplex_Unnamed( double, x1, y1 );
+	for (i = 0; i < x1; ++i)
+	{
+		for (j = 0; j < y1[i]; ++j)
+		{
+			complex2d[i][j] = i + (double)(j / 10.0);
+			Journal_Printf( stream, "%lf ", complex2d[i][j] );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+	
+	Journal_Printf( stream, "3D Complex\n" );
+	setup = Memory_Alloc_3DSetup( x2, y2 );
+	setup[0][0] = 2;
+	setup[0][1] = 3;
+	setup[0][2] = 2;
+	setup[0][3] = 3;
+	setup[1][0] = 1;
+	setup[1][1] = 5;
+	setup[2][0] = 2;
+	setup[2][1] = 4;
+	setup[2][2] = 2;
+
+	complex3d = Memory_Alloc_3DComplex_Unnamed( double, x2, y2, setup );	
+	for (i = 0; i < x2; ++i)
+	{
+		for (j = 0; j < y2[i]; ++j)
+		{
+			for (k = 0; k < setup[i][j]; ++k)
+			{
+				complex3d[i][j][k] = i + (j / 10.0) + (k / 100.0);
+				Journal_Printf( stream, "%lf ", complex3d[i][j][k] );
+			}
+			Journal_Printf( stream, "\n" );
+		}
+	}
+
+	Journal_Printf( 
+		stream, 
+		"Testing Memory_IsAllocated() for true: %s\n",
+		( Memory_IsAllocated( array2d ) ) ? "OK" : "Fail" );
+
+	Journal_Printf(
+		stream,
+		"Testing instance counter init value: %s\n",
+		( Memory_CountGet( array2d ) == 0 ) ? "OK" : "Fail" );
+
+	Memory_CountInc( array2d );
+	
+	Journal_Printf(
+		stream,
+		"Testing instance counter inc: %s\n",
+		( Memory_CountGet( array2d ) == 1 ) ? "OK" : "Fail" );
+
+	Memory_CountDec( array2d );
+	
+	Journal_Printf(
+		stream,
+		"Testing instance counter dec: %s\n",
+		( Memory_CountGet( array2d ) == 0 ) ? "OK" : "Fail" );
+	
+	Memory_Free( array2d );
+	Memory_Free( array3d );
+	Memory_Free( array4d );
+	
+	Journal_Printf( 
+		stream, 
+		"Testing Memory_IsAllocated() for false: %s\n",
+		( ! Memory_IsAllocated( array2d ) ) ? "OK" : "Fail" );
+	
+	Memory_Free( one2d );
+	Memory_Free( one3d );
+	Memory_Free( one4d );
+	
+	Memory_Free( complex2d );
+	Memory_Free( setup );
+	Memory_Free( complex3d );
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,120 @@
+Watching rank: 0
+Before Freeing memory
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+             13          0          3527       3527        3527
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Bytes                              2          0            35         35          35
+Index                              1          0            16         16          16
+StructA                            4          0           552        552         552
+StructB                            3          0          2284       2284        2284
+StructC                            3          0           640        640         640
+
+Bytes
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              2          0            35         35          35
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Test1                              2          0            35         35          35
+
+Index
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0            16         16          16
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+MEMORY_SETUP                       1          0            16         16          16
+
+StructA
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              4          0           552        552         552
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0           144        144         144
+Test1                              2          0            88         88          88
+Test2                              1          0           320        320         320
+
+StructB
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          0          2284       2284        2284
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0          1300       1300        1300
+Test1                              1          0           960        960         960
+Test2                              1          0            24         24          24
+
+StructC
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          0           640        640         640
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0           128        128         128
+Test1                              1          0           176        176         176
+Test2                              1          0           336        336         336
+
+Test search pointer function
+Object,     (ptr)0x809fac8, Bytes, Test1, testMemory1.c, main(), Line:105, Item:5, Total:5, N/A
+1D Array,   (ptr)0x809ff60, StructB, Test2, testMemory1.c, main(), Line:109, Item:8, Total:24, 3
+3D as 1D,   (ptr)0x80a0ad0, StructA, (null), testMemory1.c, main(), Line:114, Item:12, Total:144, 2 x 2 x 3
+2D Complex, (ptr)0x80a1038, StructC, Test1, testMemory1.c, main(), Line:117, Item:16, Total:176, 4 by { 1, 2, 3, 4 }
+
+After Memory Free
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+             13         12             5       3527           5
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Bytes                              2          1             5         35           5
+Index                              1          1             0         16           0
+StructA                            4          4             0        552           0
+StructB                            3          3             0       2284           0
+StructC                            3          3             0        640           0
+
+Bytes
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              2          1             5         35           5
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Test1                              2          1             5         35           5
+
+Index
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0         16           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+MEMORY_SETUP                       1          1             0         16           0
+
+StructA
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              4          4             0        552           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0        144           0
+Test1                              2          2             0         88           0
+Test2                              1          1             0        320           0
+
+StructB
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          3             0       2284           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0       1300           0
+Test1                              1          1             0        960           0
+Test2                              1          1             0         24           0
+
+StructC
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          3             0        640           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0        128           0
+Test1                              1          1             0        176           0
+Test2                              1          1             0        336           0
+
+Test search/print functions
+Type: StructB
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Name_Test2                         0          0             0          0           0
+
+StructC
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          3             0        640           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0        128           0
+Test1                              1          1             0        176           0
+Test2                              1          1             0        336           0
+
+Test Memory Leak print.
+Warning. Possible memory leak:
+Object,     (ptr)0x809fac8, Bytes, Test1, testMemory1.c, main(), Line:105, Item:5, Total:5, N/A
+
+Possible leaks detected: 1
+

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory1 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Tests accuracy of memory statistics generation.
+**
+** $Id: testMemory1.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+struct StructA
+{
+	int x;
+	float y;
+	char z;
+};
+typedef struct StructA StructA;
+
+struct StructB
+{
+	double x;
+};
+typedef struct StructB StructB;
+
+struct StructC
+{
+	char* x;
+	StructA a;
+};
+typedef struct StructC StructC;
+
+int main( int argc, char* argv[] )
+{	
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	void* bytesObj;
+	void* bytesArray;
+
+	StructA*	object;
+	StructB*	array1d;
+	StructC**	array2d;
+	StructA***	array3d;
+	StructB****	array4d;
+	StructC*	one2d;
+	StructA*	one3d;
+	StructB*	one4d;
+	StructC**	complex2d;
+
+	Index**		setup;
+	StructA***	complex3d;
+
+	Index x1 = 4;
+	Index y1[] = { 1, 2, 3, 4 };
+
+	Index x2 = 2;
+	Index y2[] = { 1, 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( stream,  "Watching rank: %i\n", rank );
+
+	bytesObj = Memory_Alloc_Bytes( 5, "Bytes", "Test1" );
+	bytesArray = Memory_Alloc_Array_Bytes( 3, 10, "Bytes", "Test1" );
+
+	object = Memory_Alloc( StructA, "Test1" );
+	array1d = Memory_Alloc_Array( StructB, 3, "Test2" );
+	array2d = Memory_Alloc_2DArray( StructC, 4, 5, "Test2" );
+	array3d = Memory_Alloc_3DArray( StructA, 2, 3, 4, "Test2" );
+	array4d = Memory_Alloc_4DArray_Unnamed( StructB, 5, 4, 3, 2 );
+	one2d = Memory_Alloc_2DArrayAs1D_Unnamed( StructC, 4, 2 );
+	one3d = Memory_Alloc_3DArrayAs1D_Unnamed( StructA, 2, 2, 3 );
+	one4d = Memory_Alloc_4DArrayAs1D( StructB, 4, 2, 3, 5, "Test1" );
+
+	complex2d = Memory_Alloc_2DComplex( StructC, x1, y1, "Test1" );
+
+	setup = Memory_Alloc_3DSetup( x2, y2 );
+	setup[0][0] = 2;
+	setup[1][0] = 3;
+	complex3d = Memory_Alloc_3DComplex( StructA, x2, y2, setup, "Test1" );
+
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Before Freeing memory\n" );
+		Memory_Print();
+		Journal_Printf( stream,  "\nTest search pointer function\n" );
+		Memory_Print_Pointer( bytesObj );
+		Memory_Print_Pointer( array1d );
+		Memory_Print_Pointer( one3d );
+		Memory_Print_Pointer( complex2d );
+		Journal_Printf( stream,  "\n" );
+	}
+
+	/* Do not free to cause intentional memory leak.
+		Memory_Free( bytesObj );
+	*/
+
+	Memory_Free( bytesArray );
+	Memory_Free_Type_Name( StructA, "Test1" );
+	Memory_Free_Type( StructB );
+	
+	Memory_Free( array2d );
+	Memory_Free( array3d );
+	Memory_Free( one2d );
+	Memory_Free( one3d );
+	Memory_Free( complex2d );
+	Memory_Free( setup );
+
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "After Memory Free\n" );
+		Memory_Print();
+		Journal_Printf( stream,  "\nTest search/print functions\n" );
+		Memory_Print_Type_Name( StructB, "Name_Test2" );
+		Journal_Printf( stream,  "\n" );
+		Memory_Print_Type( StructC );
+		Journal_Printf( stream,  "\n" );
+
+		Journal_Printf( stream,  "Test Memory Leak print.\n" );
+		Memory_Print_Leak();
+		Journal_Printf( stream,  "\n" );
+	}
+
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+Watching rank: 0
+Before Freeing memory
+Report Query: Bytes Report Query: Bytes Report Query: StructA Report Query: StructB Report Query: StructC Report Query: StructA Report Query: StructB Report Query: StructC Report Query: StructA Report Query: StructB Report Query: StructC Report Query: Index Report Query: StructA Report Query: Test1 Report Query: Test1 Report Query: Test1 Report Query: Test1 Report Query: Test1 Report Query: Test1 Report Query: testMemory2.c main Bytes Report Query: testMemory2.c main Bytes Report Query: testMemory2.c main StructA Report Query: testMemory2.c main StructB Report Query: testMemory2.c main StructC Report Query: testMemory2.c main StructA Report Query: testMemory2.c main StructB Report Query: testMemory2.c main StructC Report Query: testMemory2.c main StructA Report Query: testMemory2.c main StructB Report Query: testMemory2.c main StructC Report Query: testMemory2.c main Index Report Query: testMemory2.c main StructA Report Query: StructA Test2 
\ No newline at end of file

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory2 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests accuracy of memory statistics generation.
+**
+** $Id: testMemory2.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+struct StructA
+{
+	int x;
+	float y;
+	char z;
+};
+typedef struct StructA StructA;
+
+struct StructB
+{
+	double x;
+};
+typedef struct StructB StructB;
+
+struct StructC
+{
+	char* x;
+	StructA a;
+};
+typedef struct StructC StructC;
+
+int main( int argc, char* argv[] )
+{	
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	MemoryReport* report;
+
+	void* bytesObj;
+	void* bytesArray;
+
+	StructA*	object;
+	StructB*	array1d;
+	StructC**	array2d;
+	StructA***	array3d;
+	StructB****	array4d;
+	StructC*	one2d;
+	StructA*	one3d;
+	StructB*	one4d;
+	StructC**	complex2d;
+
+	Index**		setup;
+	StructA***	complex3d;
+
+	Index x1 = 4;
+	Index y1[] = { 1, 2, 3, 4 };
+
+	Index x2 = 2;
+	Index y2[] = { 1, 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) Journal_Printf( stream,  "Watching rank: %i\n", rank );
+
+	bytesObj = Memory_Alloc_Bytes( 5, "Bytes", "Test1" );
+	bytesArray = Memory_Alloc_Array_Bytes( 3, 10, "Bytes", "Test1" );
+
+	object = Memory_Alloc( StructA, "Test1" );
+	array1d = Memory_Alloc_Array( StructB, 3, "Test2" );
+	array2d = Memory_Alloc_2DArray( StructC, 4, 5, "Test2" );
+	array3d = Memory_Alloc_3DArray( StructA, 2, 3, 4, "Test2" );
+	array4d = Memory_Alloc_4DArray_Unnamed( StructB, 5, 4, 3, 2 );
+	one2d = Memory_Alloc_2DArrayAs1D_Unnamed( StructC, 4, 2 );
+	one3d = Memory_Alloc_3DArrayAs1D_Unnamed( StructA, 2, 2, 3 );
+	one4d = Memory_Alloc_4DArrayAs1D( StructB, 4, 2, 3, 5, "Test1" );
+
+	complex2d = Memory_Alloc_2DComplex( StructC, x1, y1, "Test1" );
+
+	setup = Memory_Alloc_3DSetup( x2, y2 );
+	setup[0][0] = 2;
+	setup[1][0] = 3;
+	complex3d = Memory_Alloc_3DComplex( StructA, x2, y2, setup, "Test1" );
+
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Before Freeing memory\n" );
+
+		report = MemoryReport_New();
+		MemoryReport_AddGroup( report, MEMORYREPORT_TYPE );
+		MemoryReport_AddGroup( report, MEMORYREPORT_NAME );
+		MemoryReport_Print( report );
+	
+		report = MemoryReport_New();
+		MemoryReport_AddCondition( report, MEMORYREPORT_NAME, "Test1" );
+		MemoryReport_AddGroup( report, MEMORYREPORT_TYPE );
+		MemoryReport_Print( report );
+
+		report = MemoryReport_New();
+		MemoryReport_AddGroup( report, MEMORYREPORT_FILE );
+		MemoryReport_AddGroup( report, MEMORYREPORT_FUNC );
+		MemoryReport_AddGroup( report, MEMORYREPORT_TYPE );
+		MemoryReport_AddGroup( report, MEMORYREPORT_NAME );
+		MemoryReport_Print( report );
+
+		report = MemoryReport_New();
+		MemoryReport_AddCondition( report, MEMORYREPORT_TYPE, "StructA" );
+		MemoryReport_AddCondition( report, MEMORYREPORT_NAME, "Test2" );
+		MemoryReport_AddGroup( report, MEMORYREPORT_FUNC );
+		MemoryReport_Print( report );
+	}
+
+	Memory_Free( bytesObj );
+	Memory_Free( bytesArray );
+	Memory_Free_Type( StructA );
+	Memory_Free_Type( StructB );
+	Memory_Free_Type( StructC );
+	
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,43 @@
+Watching rank: 0
+2D Array
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0            56         56          56
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0            56         56          56
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0            56         56          56
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0            56         56          56
+0.000000 0.100000 0.200000 
+1.000000 1.100000 1.200000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           144        144         144
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0           144        144         144
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           144        144         144
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0           144        144         144
+0.000000 0.100000 0.200000 
+1.000000 1.100000 1.200000 
+0.000000 0.100000 0.200000 0.300000 
+1.000000 1.100000 1.200000 1.300000 
+2.000000 2.100000 2.200000 2.300000 
+3.000000 3.100000 3.200000 3.300000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0        144           0
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          1             0        144           0
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0        144           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0        144           0

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory2DArray " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,145 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the allocation, reading and writing of 2D arrays.
+**
+** $Id: testMemory2DArray.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double**	array2d;
+	Index i, j;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if ( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	Journal_Printf( stream, "2D Array\n" );
+	array2d = Memory_Alloc_2DArray_Unnamed( double, 2, 3 );
+
+	Memory_Print();
+
+	/* write */
+	for ( i = 0; i < 2; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			array2d[i][j] = i + (j / 10.0);
+		}
+	}
+	
+	/* read */
+	for ( i = 0; i < 2; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			Journal_Printf( stream, "%lf ", array2d[i][j] );			
+		}
+		Journal_Printf( stream, "\n");
+	}
+
+	array2d = Memory_Realloc_2DArray( array2d, double, 4, 4 );
+	
+	Memory_Print();
+	
+	/* read again */
+	for ( i = 0; i < 2; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			Journal_Printf( stream, "%lf ", array2d[i][j] );			
+		}
+		Journal_Printf( stream, "\n");
+	}
+
+	/* write */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 4; ++j )
+		{
+			array2d[i][j] = i + (j / 10.0);
+		}
+	}
+	
+	/* read */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 4; ++j )
+		{
+			Journal_Printf( stream, "%lf ", array2d[i][j] );			
+		}
+		Journal_Printf( stream, "\n");
+	}
+
+
+	Memory_Free( array2d );
+	
+	Memory_Print();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,45 @@
+Watching rank: 0
+2D as 1D
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0            48         48          48
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0            48         48          48
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0            48         48          48
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0            48         48          48
+0.000000 0.100000 
+1.000000 1.100000 
+2.000000 2.100000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           128        128         128
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0           128        128         128
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           128        128         128
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0           128        128         128
+0.000000 0.100000 
+1.000000 1.100000 
+2.000000 2.100000 
+0.000000 0.100000 0.200000 0.300000 
+1.000000 1.100000 1.200000 1.300000 
+2.000000 2.100000 2.200000 2.300000 
+3.000000 3.100000 3.200000 3.300000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0        128           0
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          1             0        128           0
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0        128           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0        128           0

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory2DArrayAs1D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,145 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the allocation, reading and writing of 2D arrays in 1D form.
+**
+** $Id: testMemory2DArrayAs1D.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double*		one2d;
+	Index i, j;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	Journal_Printf( stream, "2D as 1D\n" );
+	one2d = Memory_Alloc_2DArrayAs1D_Unnamed( double, 3, 2 );
+
+	Memory_Print();
+
+	/* write */	
+	for ( i = 0; i < 3; ++i )
+	{
+		for ( j = 0; j < 2; ++j )
+		{
+			Memory_Access2D( one2d, i, j, 2 ) = i + (j / 10.0);
+		}
+	}
+
+	/* read */
+	for ( i = 0; i < 3; ++i )
+	{
+		for ( j = 0; j < 2; ++j )
+		{
+			Journal_Printf( stream, "%lf ", Memory_Access2D( one2d, i, j, 2 ) );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+
+	one2d = Memory_Realloc_2DArrayAs1D( one2d, double, 3, 2, 4, 4 );
+
+	Memory_Print();
+
+	/* read again */
+	for ( i = 0; i < 3; ++i )
+	{
+		for ( j = 0; j < 2; ++j )
+		{
+			Journal_Printf( stream, "%lf ", Memory_Access2D( one2d, i, j, 4 ) );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+	
+	/* write */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 4; ++j )
+		{
+			Memory_Access2D( one2d, i, j, 4 ) = i + (j / 10.0);
+		}
+	}
+
+	/* read */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 4; ++j )
+		{
+			Journal_Printf( stream, "%lf ", Memory_Access2D( one2d, i, j, 4 ) );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+
+
+	Memory_Free( one2d );
+
+	Memory_Print();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+Watching rank: 0
+2D Complex
+0.000000 
+1.000000 1.100000 
+2.000000 2.100000 2.200000 
+3.000000 3.100000 3.200000 3.300000 
+4.000000 4.100000 4.200000 4.300000 4.400000 

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory2DComplex " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the allocation, reading and writing of 2D complex arrays.
+**
+** $Id: testMemory2DComplex.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double**	complex2d;
+
+	Index x1 = 5;
+	Index y1[] = { 1, 2, 3, 4, 5 };
+
+
+	Index i, j;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	Journal_Printf( stream, "2D Complex\n" );
+	complex2d = Memory_Alloc_2DComplex_Unnamed( double, x1, y1 );
+	
+	/* write */
+	for (i = 0; i < x1; ++i)
+	{
+		for (j = 0; j < y1[i]; ++j)
+		{
+			complex2d[i][j] = i + (double)(j / 10.0);
+		}
+	}
+	
+	/* read */
+	for (i = 0; i < x1; ++i)
+	{
+		for (j = 0; j < y1[i]; ++j)
+		{
+			Journal_Printf( stream, "%lf ", complex2d[i][j] );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+	
+	
+	Memory_Free( complex2d );
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,84 @@
+Watching rank: 0
+3D Array
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           256        256         256
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0           256        256         256
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           256        256         256
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0           256        256         256
+0.000000 0.010000 
+0.100000 0.110000 
+0.200000 0.210000 
+1.000000 1.010000 
+1.100000 1.110000 
+1.200000 1.210000 
+2.000000 2.010000 
+2.100000 2.110000 
+2.200000 2.210000 
+3.000000 3.010000 
+3.100000 3.110000 
+3.200000 3.210000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0          1120       1120        1120
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0          1120       1120        1120
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0          1120       1120        1120
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0          1120       1120        1120
+0.000000 0.010000 
+0.100000 0.110000 
+0.200000 0.210000 
+1.000000 1.010000 
+1.100000 1.110000 
+1.200000 1.210000 
+2.000000 2.010000 
+2.100000 2.110000 
+2.200000 2.210000 
+3.000000 3.010000 
+3.100000 3.110000 
+3.200000 3.210000 
+0.000000 0.010000 0.020000 0.030000 0.040000 
+0.100000 0.110000 0.120000 0.130000 0.140000 
+0.200000 0.210000 0.220000 0.230000 0.240000 
+0.300000 0.310000 0.320000 0.330000 0.340000 
+0.400000 0.410000 0.420000 0.430000 0.440000 
+1.000000 1.010000 1.020000 1.030000 1.040000 
+1.100000 1.110000 1.120000 1.130000 1.140000 
+1.200000 1.210000 1.220000 1.230000 1.240000 
+1.300000 1.310000 1.320000 1.330000 1.340000 
+1.400000 1.410000 1.420000 1.430000 1.440000 
+2.000000 2.010000 2.020000 2.030000 2.040000 
+2.100000 2.110000 2.120000 2.130000 2.140000 
+2.200000 2.210000 2.220000 2.230000 2.240000 
+2.300000 2.310000 2.320000 2.330000 2.340000 
+2.400000 2.410000 2.420000 2.430000 2.440000 
+3.000000 3.010000 3.020000 3.030000 3.040000 
+3.100000 3.110000 3.120000 3.130000 3.140000 
+3.200000 3.210000 3.220000 3.230000 3.240000 
+3.300000 3.310000 3.320000 3.330000 3.340000 
+3.400000 3.410000 3.420000 3.430000 3.440000 
+4.000000 4.010000 4.020000 4.030000 4.040000 
+4.100000 4.110000 4.120000 4.130000 4.140000 
+4.200000 4.210000 4.220000 4.230000 4.240000 
+4.300000 4.310000 4.320000 4.330000 4.340000 
+4.400000 4.410000 4.420000 4.430000 4.440000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0       1120           0
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          1             0       1120           0
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0       1120           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0       1120           0

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory3DArray " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,160 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the allocation, reading and writing of 3D arrays.
+**
+** $Id: testMemory3DArray.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double***	array3d;
+
+	Index i, j, k;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	Journal_Printf( stream, "3D Array\n" );
+	array3d = Memory_Alloc_3DArray_Unnamed( double, 4, 3, 2 );
+	
+	Memory_Print();
+	
+	/* write */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				array3d[i][j][k] = i + (j / 10.0) + (k / 100.0);
+			}
+		}
+	}
+
+	/* read */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				Journal_Printf( stream, "%lf ", array3d[i][j][k] );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+	
+	array3d = Memory_Realloc_3DArray( array3d, double, 5, 5, 5 );
+	
+	Memory_Print();
+	
+	/* read again */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				Journal_Printf( stream, "%lf ", array3d[i][j][k] );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+	
+	/* write */
+	for ( i = 0; i < 5; ++i )
+	{
+		for ( j = 0; j < 5; ++j )
+		{
+			for ( k = 0; k < 5; ++k )
+			{
+				array3d[i][j][k] = i + (j / 10.0) + (k / 100.0);
+			}
+		}
+	}
+
+	/* read */	
+	for ( i = 0; i < 5; ++i )
+	{
+		for ( j = 0; j < 5; ++j )
+		{
+			for ( k = 0; k < 5; ++k )
+			{
+				Journal_Printf( stream, "%lf ", array3d[i][j][k] );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+	
+	Memory_Free( array3d );
+
+	Memory_Print();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,84 @@
+Watching rank: 0
+3D as 1D 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           192        192         192
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0           192        192         192
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0           192        192         192
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0           192        192         192
+0.000000 0.010000 
+0.100000 0.110000 
+0.200000 0.210000 
+1.000000 1.010000 
+1.100000 1.110000 
+1.200000 1.210000 
+2.000000 2.010000 
+2.100000 2.110000 
+2.200000 2.210000 
+3.000000 3.010000 
+3.100000 3.110000 
+3.200000 3.210000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0          1000       1000        1000
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          0          1000       1000        1000
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0          1000       1000        1000
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0          1000       1000        1000
+0.000000 0.010000 
+0.100000 0.110000 
+0.200000 0.210000 
+1.000000 1.010000 
+1.100000 1.110000 
+1.200000 1.210000 
+2.000000 2.010000 
+2.100000 2.110000 
+2.200000 2.210000 
+3.000000 3.010000 
+3.100000 3.110000 
+3.200000 3.210000 
+0.000000 0.010000 0.020000 0.030000 0.040000 
+0.100000 0.110000 0.120000 0.130000 0.140000 
+0.200000 0.210000 0.220000 0.230000 0.240000 
+0.300000 0.310000 0.320000 0.330000 0.340000 
+0.400000 0.410000 0.420000 0.430000 0.440000 
+1.000000 1.010000 1.020000 1.030000 1.040000 
+1.100000 1.110000 1.120000 1.130000 1.140000 
+1.200000 1.210000 1.220000 1.230000 1.240000 
+1.300000 1.310000 1.320000 1.330000 1.340000 
+1.400000 1.410000 1.420000 1.430000 1.440000 
+2.000000 2.010000 2.020000 2.030000 2.040000 
+2.100000 2.110000 2.120000 2.130000 2.140000 
+2.200000 2.210000 2.220000 2.230000 2.240000 
+2.300000 2.310000 2.320000 2.330000 2.340000 
+2.400000 2.410000 2.420000 2.430000 2.440000 
+3.000000 3.010000 3.020000 3.030000 3.040000 
+3.100000 3.110000 3.120000 3.130000 3.140000 
+3.200000 3.210000 3.220000 3.230000 3.240000 
+3.300000 3.310000 3.320000 3.330000 3.340000 
+3.400000 3.410000 3.420000 3.430000 3.440000 
+4.000000 4.010000 4.020000 4.030000 4.040000 
+4.100000 4.110000 4.120000 4.130000 4.140000 
+4.200000 4.210000 4.220000 4.230000 4.240000 
+4.300000 4.310000 4.320000 4.330000 4.340000 
+4.400000 4.410000 4.420000 4.430000 4.440000 
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0       1000           0
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+double                             1          1             0       1000           0
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0       1000           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0       1000           0

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory3DArrayAs1D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the allocation, reading and writing of 3D arrays in 1D form.
+**
+** $Id: testMemory3DArrayAs1D.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double*		one3d;
+
+	Index i, j, k;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+
+	Journal_Printf( stream, "3D as 1D \n" );
+	one3d = Memory_Alloc_3DArrayAs1D_Unnamed( double, 4, 3, 2 );
+
+	Memory_Print();
+
+	/* write */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				Memory_Access3D( one3d, i, j, k, 3, 2 ) = i + (j / 10.0) + (k / 100.0);
+			}
+		}
+	}
+
+	/* read */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				Journal_Printf( stream, "%lf ", Memory_Access3D( one3d, i, j, k, 3, 2 ) );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+
+	one3d = Memory_Realloc_3DArrayAs1D( one3d, double, 4, 3, 2, 5, 5, 5 );
+
+	Memory_Print();
+
+	/* read again */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				Journal_Printf( stream, "%lf ", Memory_Access3D( one3d, i, j, k, 5, 5 ) );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+	
+	/* write */	
+	for ( i = 0; i < 5; ++i )
+	{
+		for ( j = 0; j < 5; ++j )
+		{
+			for ( k = 0; k < 5; ++k )
+			{
+				Memory_Access3D( one3d, i, j, k, 5, 5 ) = i + (j / 10.0) + (k / 100.0);
+			}
+		}
+	}
+
+	/* read */	
+	for ( i = 0; i < 5; ++i )
+	{
+		for ( j = 0; j < 5; ++j )
+		{
+			for ( k = 0; k < 5; ++k )
+			{
+				Journal_Printf( stream, "%lf ", Memory_Access3D( one3d, i, j, k, 5, 5 ) );
+			}
+			Journal_Printf( stream, "\n");
+		}
+	}
+	
+	
+	Memory_Free( one3d );
+
+	Memory_Print();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+Watching rank: 0
+3D Complex
+0.000000 0.010000 
+0.100000 0.110000 0.120000 
+0.200000 0.210000 
+0.300000 0.310000 0.320000 
+1.000000 
+1.100000 1.110000 1.120000 1.130000 1.140000 
+2.000000 2.010000 
+2.100000 2.110000 2.120000 2.130000 
+2.200000 2.210000 

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory3DComplex " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the allocation, reading and writing of 3D complex arrays.
+**
+** $Id: testMemory3DComplex.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	Index**		setup;
+	double***	complex3d;
+
+	Index x2 = 3;
+	Index y2[] = { 4, 2, 3 };
+
+	Index i, j, k;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	
+	Journal_Printf( stream, "3D Complex\n" );
+	setup = Memory_Alloc_3DSetup( x2, y2 );
+	setup[0][0] = 2;
+	setup[0][1] = 3;
+	setup[0][2] = 2;
+	setup[0][3] = 3;
+	setup[1][0] = 1;
+	setup[1][1] = 5;
+	setup[2][0] = 2;
+	setup[2][1] = 4;
+	setup[2][2] = 2;
+
+	complex3d = Memory_Alloc_3DComplex_Unnamed( double, x2, y2, setup );	
+	
+	/* write */
+	for (i = 0; i < x2; ++i)
+	{
+		for (j = 0; j < y2[i]; ++j)
+		{
+			for (k = 0; k < setup[i][j]; ++k)
+			{
+				complex3d[i][j][k] = i + (j / 10.0) + (k / 100.0);
+			}
+		}
+	}
+
+	/* read */
+	for (i = 0; i < x2; ++i)
+	{
+		for (j = 0; j < y2[i]; ++j)
+		{
+			for (k = 0; k < setup[i][j]; ++k)
+			{
+				Journal_Printf( stream, "%lf ", complex3d[i][j][k] );
+			}
+			Journal_Printf( stream, "\n" );
+		}
+	}
+
+
+
+	Memory_Free( setup );
+	Memory_Free( complex3d );
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+Watching rank: 0
+4D Array
+0.000000 0.001000 0.002000 
+0.010000 0.011000 0.012000 
+0.100000 0.101000 0.102000 
+0.110000 0.111000 0.112000 
+0.200000 0.201000 0.202000 
+0.210000 0.211000 0.212000 
+1.000000 1.001000 1.002000 
+1.010000 1.011000 1.012000 
+1.100000 1.101000 1.102000 
+1.110000 1.111000 1.112000 
+1.200000 1.201000 1.202000 
+1.210000 1.211000 1.212000 
+2.000000 2.001000 2.002000 
+2.010000 2.011000 2.012000 
+2.100000 2.101000 2.102000 
+2.110000 2.111000 2.112000 
+2.200000 2.201000 2.202000 
+2.210000 2.211000 2.212000 
+3.000000 3.001000 3.002000 
+3.010000 3.011000 3.012000 
+3.100000 3.101000 3.102000 
+3.110000 3.111000 3.112000 
+3.200000 3.201000 3.202000 
+3.210000 3.211000 3.212000 

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory4DArray " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the allocation, reading and writing of 4D arrays.
+**
+** $Id: testMemory4DArray.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double****	array4d;
+	
+	Index i, j, k, l;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	Journal_Printf( stream, "4D Array\n" );
+	array4d = Memory_Alloc_4DArray_Unnamed( double, 4, 3, 2, 3 );
+	
+	/* write */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				for ( l = 0; l < 3; ++l )
+				{
+					array4d[i][j][k][l] = i + (j / 10.0) + (k / 100.0) + (l / 1000.0);
+				}
+			}
+		}
+	}
+
+	/* read */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				for ( l = 0; l < 3; ++l )
+				{
+					Journal_Printf( stream, "%lf ", array4d[i][j][k][l] );
+				}
+				Journal_Printf( stream, "\n");
+			}
+		}
+	}
+	
+	Memory_Free( array4d );
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+Watching rank: 0
+4D as 1D
+0.000000 0.001000 0.002000 
+0.010000 0.011000 0.012000 
+0.100000 0.101000 0.102000 
+0.110000 0.111000 0.112000 
+0.200000 0.201000 0.202000 
+0.210000 0.211000 0.212000 
+1.000000 1.001000 1.002000 
+1.010000 1.011000 1.012000 
+1.100000 1.101000 1.102000 
+1.110000 1.111000 1.112000 
+1.200000 1.201000 1.202000 
+1.210000 1.211000 1.212000 
+2.000000 2.001000 2.002000 
+2.010000 2.011000 2.012000 
+2.100000 2.101000 2.102000 
+2.110000 2.111000 2.112000 
+2.200000 2.201000 2.202000 
+2.210000 2.211000 2.212000 
+3.000000 3.001000 3.002000 
+3.010000 3.011000 3.012000 
+3.100000 3.101000 3.102000 
+3.110000 3.111000 3.112000 
+3.200000 3.201000 3.202000 
+3.210000 3.211000 3.212000 

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemory4DArrayAs1D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the allocation, reading and writing of 4D arrays with 1D form.
+**
+** $Id: testMemory4DArrayAs1D.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+
+	double*		one4d;
+
+	Index i, j, k, l;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+	Journal_Printf( stream, "4D as 1D\n" );
+	one4d = Memory_Alloc_4DArrayAs1D_Unnamed( double, 4, 3, 2, 3 );
+
+	/* write */	
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				for ( l = 0; l < 3; ++l )
+				{
+					Memory_Access4D( one4d, i, j, k, l, 3, 2, 3 ) = i + (j / 10.0) + (k / 100.0) + (l / 1000.0);
+				}
+			}
+		}
+	}
+
+	/* read */
+	for ( i = 0; i < 4; ++i )
+	{
+		for ( j = 0; j < 3; ++j )
+		{
+			for ( k = 0; k < 2; ++k )
+			{
+				for ( l = 0; l < 3; ++l )
+				{
+					Journal_Printf( stream, "%lf ", Memory_Access4D( one4d, i, j, k, l, 3, 2, 3 ) );
+				}
+				Journal_Printf( stream, "\n");
+			}
+		}
+	}
+
+	Memory_Free( one4d );
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,98 @@
+Watching rank: 0
+Allocation results.
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              5          0           138        138         138
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Bytes                              2          0            26         26          26
+double                             3          0           112        112         112
+
+Bytes
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              2          0            26         26          26
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Alloced                            2          0            26         26          26
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          0           112        112         112
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Alloced                            3          0           112        112         112
+hello
+0.000000 1.000000 2.000000 
+
+Reallocaiton results.
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+             11          0          1026       1026        1026
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0            50         50          50
+Bytes                              2          0            60         60          60
+char                               5          0           200        200         200
+double                             3          0           716        716         716
+
+(null)
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          0            50         50          50
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          0            50         50          50
+
+Bytes
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              2          0            60         60          60
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Alloced                            2          0            60         60          60
+
+char
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              5          0           200        200         200
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             5          0           200        200         200
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          0           716        716         716
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Alloced                            3          0           716        716         716
+
+New pointers from realloc:
+Object,     (ptr)0x80a1378, (null), (null), testMemoryRealloc.c, main(), Line:137, Item:50, Total:50, N/A
+1D Array,   (ptr)0x80a1448, char, (null), testMemoryRealloc.c, main(), Line:138, Item:1, Total:50, 50
+2D Array,   (ptr)0x80a1518, char, (null), testMemoryRealloc.c, main(), Line:139, Item:1, Total:32, 4 x 4
+3D Array,   (ptr)0x80a1578, char, (null), testMemoryRealloc.c, main(), Line:140, Item:1, Total:75, 3 x 3 x 3
+2D as 1D,   (ptr)0x80a0e78, char, (null), testMemoryRealloc.c, main(), Line:141, Item:1, Total:16, 4 x 4
+3D as 1D,   (ptr)0x80a1670, char, (null), testMemoryRealloc.c, main(), Line:142, Item:1, Total:27, 3 x 3 x 3
+
+Free results
+Memory Statistics
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+             11         11             0       1026           0
+Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0         50           0
+Bytes                              2          2             0         60           0
+char                               5          5             0        200           0
+double                             3          3             0        716           0
+
+(null)
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              1          1             0         50           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             1          1             0         50           0
+
+Bytes
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              2          2             0         60           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Alloced                            2          2             0         60           0
+
+char
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              5          5             0        200           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+(null)                             5          5             0        200           0
+
+double
+Times Allocated Times Free Current bytes Peak bytes Total bytes 
+              3          3             0        716           0
+Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+Alloced                            3          3             0        716           0

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMemoryRealloc " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,194 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 reallocation of objects, 1D arrays and the byte versions.
+**
+** $Id: testMemoryRealloc.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] )
+{	
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	
+	Stream* stream;
+	
+	int i;
+
+	void* bytesObj;
+	void* bytesArray;
+
+	double*	array1d;
+
+	double** array2d;
+	double*** array3d;
+
+	void* fromReallocObj;
+	char* fromReallocArray;
+	char** fromRealloc2DArray;
+	char*** fromRealloc3DArray;
+	char* fromRealloc2DAs1D;
+	char* fromRealloc3DAs1D;
+
+	/* 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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	stream = Journal_Register ( "info", "MyInfo" );
+	
+	if( argc >= 2 )
+	{
+		procToWatch = atoi( argv[1] );
+	}
+	else
+	{
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) 
+	{
+		Journal_Printf( stream,  "Watching rank: %i\n", rank );
+	}
+
+
+	/*
+	 * 1 - Create allocs
+	 */
+	bytesObj = Memory_Alloc_Bytes( 6, "Bytes", "Alloced" );
+	bytesArray = Memory_Alloc_Array_Bytes( 2, 10, "Bytes", "Alloced" );	/* Array of three 10 byte objects */
+
+	array1d = Memory_Alloc_Array( double, 3, "Alloced" );
+	array2d = Memory_Alloc_2DArray( double, 1, 3, "Alloced" );		/* Test Realloc safe */
+	array3d = Memory_Alloc_3DArray( double, 1, 2, 3, "Alloced" );		/* Test Realloc safe */
+	
+	/*
+	 * 2 - Write values
+	 */
+	strcpy( (char*)bytesObj, "hello" );
+	
+	for ( i = 0; i < 3; ++i )
+	{
+		array1d[i] = (double)i;
+	}
+	
+	
+	if ( rank == procToWatch )
+	{
+		Journal_Printf( stream, "Allocation results.\n" );
+		Memory_Print();
+	}
+	
+	
+	/*
+	 * 3 - Realloc
+	 */
+	bytesObj = Memory_Realloc( bytesObj, 10 );				/* enlarged object. */
+	bytesArray = Memory_Realloc_Array_Bytes( bytesArray, 5, 10 );		/* enlarged array. */
+	
+	array1d = Memory_Realloc_Array( array1d, double, 5 );			/* enlarged array. */
+	array2d = Memory_Realloc_2DArraySafe( array2d, double, 1, 3, 3, 3 );
+	array3d = Memory_Realloc_3DArraySafe( array3d, double, 1, 2, 3, 4, 4, 4 );
+	
+	/*
+	 * 4 - Read to make sure they are still there.
+	 */
+	Journal_Printf( stream, "%s\n", (char*)bytesObj );
+	
+	for ( i = 0; i < 3; ++i )
+	{
+		Journal_Printf( stream, "%lf ", array1d[i] );
+	}
+	Journal_Printf( stream, "\n" );
+
+	
+	/*
+	 * 5 - Making new allocs from Realloc() NULL
+	 */
+	fromReallocObj = Memory_Realloc( NULL, 50 );
+	fromReallocArray = Memory_Realloc_Array( NULL, char, 50 );
+	fromRealloc2DArray = Memory_Realloc_2DArray( NULL, char, 4, 4 );
+	fromRealloc3DArray = Memory_Realloc_3DArray( NULL, char, 3, 3, 3 );
+	fromRealloc2DAs1D = Memory_Realloc_2DArrayAs1D( NULL, char, 0, 0, 4, 4 );
+	fromRealloc3DAs1D = Memory_Realloc_3DArrayAs1D( NULL, char, 0, 0, 0, 3, 3, 3 );
+
+
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "\nReallocaiton results.\n" );
+		Memory_Print();
+
+		Journal_Printf( stream, "\nNew pointers from realloc:\n" );
+		Memory_Print_Pointer( fromReallocObj );
+		Memory_Print_Pointer( fromReallocArray );
+		Memory_Print_Pointer( fromRealloc2DArray );
+		Memory_Print_Pointer( fromRealloc3DArray );
+		Memory_Print_Pointer( fromRealloc2DAs1D );
+		Memory_Print_Pointer( fromRealloc3DAs1D );	
+	}
+
+	Memory_Free( bytesObj );
+	Memory_Free( bytesArray );
+	Memory_Free( array1d );
+	Memory_Free( array2d );
+	Memory_Free( array3d );
+	Memory_Free( fromReallocObj );
+	Memory_Free( fromReallocArray );
+	Memory_Free( fromRealloc2DArray );
+	Memory_Free( fromRealloc3DArray );
+	Memory_Free( fromRealloc2DAs1D );
+	Memory_Free( fromRealloc3DAs1D );
+
+
+	if( rank == procToWatch )
+	{
+		Journal_Printf( stream,  "\nFree results\n" );
+		Memory_Print();
+		Memory_Print_Leak();
+	}
+
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,105 @@
+NamedObject_Register (ptr): 0x80b5234
+Stg_Class (ptr): 0x80b5234
+sizeOfSelf: 28
+_deleteSelf: Yes
+type: NamedObject_Register
+_delete (func ptr): 0x804d4a6
+_print (func ptr): 0x804d4dd
+_copy (func ptr): 0x804d554
+Stg_ObjectList (ptr):0x80b525c
+Stg_Class (ptr): 0x80b525c
+sizeOfSelf: 96
+_deleteSelf: Yes
+type: Stg_ObjectList
+_delete (func ptr): 0x804b872
+_print (func ptr): 0x804b8a9
+_copy (func ptr): 0x804bb4b
+_append(func ptr): 0x804c73d
+_prepend(func ptr): 0x804c803
+_replaceAll(func ptr): 0x804c8c7
+_replace(func ptr): 0x804c982
+_insertBefore(func ptr): 0x804cb23
+_insertAfter(func ptr): 0x804cce2
+_remove(func ptr): 0x804cea3
+_getIndex(func ptr): 0x804cf49
+_get(func ptr): 0x804cffb
+_allocMoreMemory(func ptr): 0x804d1d3
+_insertAtIndex(func ptr): 0x804d259
+_removeByIndex(func ptr): 0x804d2d7
+_deleteAllObjects(func ptr): 0x804d152
+_size: 8
+_delta: 8
+_noJournalingInCopy: 0
+count: 5
+data[0-5]:
+Stg_Object (ptr): 0x80b52ec
+Stg_Class (ptr): 0x80b52ec
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: a
+nameAllocationType: NON_GLOBAL
+Stg_Object (ptr): 0x80b5324
+Stg_Class (ptr): 0x80b5324
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: b
+nameAllocationType: NON_GLOBAL
+Stg_Object (ptr): 0x80b535c
+Stg_Class (ptr): 0x80b535c
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: c
+nameAllocationType: NON_GLOBAL
+Stg_Object (ptr): 0x80b5394
+Stg_Class (ptr): 0x80b5394
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: d
+nameAllocationType: NON_GLOBAL
+Stg_Object (ptr): 0x80b53cc
+Stg_Class (ptr): 0x80b53cc
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: e
+nameAllocationType: NON_GLOBAL
+Index of "b": 1
+Stg_Object (ptr): 0x80b5394
+Stg_Class (ptr): 0x80b5394
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: d
+nameAllocationType: NON_GLOBAL
+Stg_Object (ptr): 0x80b535c
+Stg_Class (ptr): 0x80b535c
+sizeOfSelf: 32
+_deleteSelf: Yes
+type: TestObject
+_delete (func ptr): 0x804b2e7
+_print (func ptr): 0x804b327
+_copy (func ptr): 0x804b3e1
+name: c
+nameAllocationType: NON_GLOBAL

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testNamedObject_Register " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testFieldVariable_Register.c 2432 2004-12-16 23:01:59Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+
+typedef struct {
+	__Stg_Object
+} TestObject;
+
+Stg_Object* TestObject_New( Name name ) {
+	return _Stg_Object_New(
+		sizeof( TestObject ),
+		"TestObject",
+		_Stg_Object_Delete,
+		_Stg_Object_Print,
+		_Stg_Object_Copy, 
+		name,
+		NON_GLOBAL );
+}
+
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	BaseFoundation_Init( &argc, &argv );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if ( rank == procToWatch ) {
+		NamedObject_Register* reg = NamedObject_Register_New();
+	
+		NamedObject_Register_Add( reg, TestObject_New( "a" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "b" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "c" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "d" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "e" ) );
+	
+		Print( reg, stream );
+
+		Journal_Printf( stream, "Index of \"b\": %d\n", NamedObject_Register_GetIndex( reg, "b" ) );
+		Print( NamedObject_Register_GetByName( reg, "d" ), stream );
+		Print( NamedObject_Register_GetByIndex( reg, 2 ), stream );
+	}
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+Passed test Construction: Can we use New()?
+Passed test Append: Can we append the first entry?
+Passed test Prepend: Can we prepend the second entry?
+Passed test Insert Before: Can we insert before "a" the third entry
+Passed test Insert After: Can we insert after "c" the fourth entry?
+Passed test Replace: Can we replace "d" with the fifth entry?
+Passed test Remove: Can we remove the "c" entry?
+Passed test ReplaceAll: Can we replace all with the sixth entry?
+Passed test Copy: Copying
+Passed test Destruction: Deleting all allocated memory

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testObjectList " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,414 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+
+const Type DummyClass_Type = "DummyClass_Type";
+
+Stg_Class* DummyClass_New( void ) {
+	return _Stg_Class_New( 
+		sizeof(Stg_Class),
+		DummyClass_Type,
+		_Stg_Class_Delete,
+		_Stg_Class_Print,
+		_Stg_Class_Copy );
+}
+
+
+int* DummyPointer_New( void ) {
+	return Memory_Alloc_Unnamed( int );
+}
+
+void DummyPointer_Print( void* ptr, struct Stream* stream ) {
+	Journal_Printf( stream, "value: %i\n", *(int*)ptr );
+}
+
+void* DummyPointer_Copy( void* ptr, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	int* newInt;
+	
+	newInt = Memory_Alloc_Unnamed( int );
+	*newInt = *(int*)ptr;
+	
+	return newInt;
+}
+
+
+void DummyFunc1( void ) {
+}
+
+void DummyFunc2( void ) {
+}
+
+void DummyFunc3( void ) {
+}
+
+void DummyFunc4( void ) {
+}
+
+void DummyFunc5( void ) {
+}
+
+void DummyFunc6( void ) {
+}
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Foundation/ObjectList" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if ( rank == procToWatch ) {
+		Stg_ObjectList* ol0;
+		Stg_ObjectList* ol0deep;
+		Stg_Class* addPtr0;
+		Stg_ObjectList ol1;
+		Stg_ObjectList* ol1deep;
+		Stg_Class* addPtr1;
+		Stg_ObjectList* ol2;
+		Stg_ObjectList* ol2deep;
+		int* addPtr2;
+		Stg_ObjectList* ol3;
+		Stg_ObjectList* ol3deep;
+		int* addPtr3;
+		
+		
+		/* Test 1: Construction */
+		ol0 = Stg_ObjectList_New();
+		Stg_ObjectList_Init( &ol1 );
+		ol2 = Stg_ObjectList_New();
+		ol3 = Stg_ObjectList_New();
+		RegressionTest_Check(
+			ol0 &&
+			ol2 &&
+			ol3,
+			stream,
+			"Construction",
+			"Can we use New()?" );
+		
+		/* Test 2: Can we append the first entry? */
+		Stg_ObjectList_ClassAppend(  ol0, (addPtr0 = DummyClass_New()), "a" );
+		Stg_ObjectList_ClassAppend( &ol1, (addPtr1 = DummyClass_New()), "a" );
+		Stg_ObjectList_PointerAppend(  ol2, (addPtr2 = DummyPointer_New()), "a", 0, DummyPointer_Print, DummyPointer_Copy );
+		Stg_ObjectList_GlobalPointerAppend(  ol3, (addPtr3 = (void*)DummyFunc1), "a" );
+		RegressionTest_Check(
+			addPtr0 == Stg_ObjectList_Get( ol0, "a" ) &&
+			addPtr0 == Stg_ObjectList_ObjectAt( ol0, 0 ) &&
+			Stg_ObjectList_Count( ol0 ) == 1 &&
+			addPtr1 == Stg_ObjectList_Get( &ol1, "a" ) &&
+			addPtr1 == Stg_ObjectList_ObjectAt( &ol1, 0 ) &&
+			Stg_ObjectList_Count( &ol1 ) == 1 &&
+			addPtr2 == Stg_ObjectList_Get( ol2, "a" ) &&
+			addPtr2 == Stg_ObjectList_ObjectAt( ol2, 0 ) &&
+			Stg_ObjectList_Count( ol2 ) == 1 &&
+			addPtr3 == Stg_ObjectList_Get( ol3, "a" ) &&
+			addPtr3 == Stg_ObjectList_ObjectAt( ol3, 0 ) &&
+			Stg_ObjectList_Count( ol3 ) == 1,
+			stream,
+			"Append",
+			"Can we append the first entry?" );
+		
+		/* Test 3: Can we prepend the second entry? */
+		Stg_ObjectList_ClassPrepend(  ol0, (addPtr0 = DummyClass_New()), "b" );
+		Stg_ObjectList_ClassPrepend( &ol1, (addPtr1 = DummyClass_New()), "b" );
+		Stg_ObjectList_PointerPrepend(  ol2, (addPtr2 = DummyPointer_New()), "b", 0, DummyPointer_Print, DummyPointer_Copy );
+		Stg_ObjectList_GlobalPointerPrepend(  ol3, (addPtr3 = (void*)DummyFunc2), "b" );
+		RegressionTest_Check(
+			addPtr0 == Stg_ObjectList_Get( ol0, "b" ) &&
+			addPtr0 == Stg_ObjectList_ObjectAt( ol0, 0 ) &&
+			Stg_ObjectList_Count( ol0 ) == 2 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 1 ) ), "a" ) == 0 &&
+			addPtr1 == Stg_ObjectList_Get( &ol1, "b" ) &&
+			addPtr1 == Stg_ObjectList_ObjectAt( &ol1, 0 ) &&
+			Stg_ObjectList_Count( &ol1 ) == 2 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 1 ) ), "a" ) == 0 &&
+			addPtr2 == Stg_ObjectList_Get( ol2, "b" ) &&
+			addPtr2 == Stg_ObjectList_ObjectAt( ol2, 0 ) &&
+			Stg_ObjectList_Count( ol2 ) == 2 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 1 ) ), "a" ) == 0 &&
+			addPtr3 == Stg_ObjectList_Get( ol3, "b" ) &&
+			addPtr3 == Stg_ObjectList_ObjectAt( ol3, 0 ) &&
+			Stg_ObjectList_Count( ol3 ) == 2 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 1 ) ), "a" ) == 0,
+			stream,
+			"Prepend",
+			"Can we prepend the second entry?" );
+		
+		/* Test 4: Can we insert before "a" the third entry? */
+		Stg_ObjectList_ClassInsertBefore(  ol0, "a", (addPtr0 = DummyClass_New()), "c" );
+		Stg_ObjectList_ClassInsertBefore( &ol1, "a", (addPtr1 = DummyClass_New()), "c" );
+		Stg_ObjectList_PointerInsertBefore(  
+			ol2, 
+			"a", 
+			(addPtr2 = DummyPointer_New()), 
+			"c", 
+			0, 
+			DummyPointer_Print, 
+			DummyPointer_Copy );
+		Stg_ObjectList_GlobalPointerInsertBefore(  ol3, "a", (addPtr3 = (void*)DummyFunc3), "c" );
+		RegressionTest_Check(
+			addPtr0 == Stg_ObjectList_Get( ol0, "c" ) &&
+			addPtr0 == Stg_ObjectList_ObjectAt( ol0, 1 ) &&
+			Stg_ObjectList_Count( ol0 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 2 ) ), "a" ) == 0 &&
+			addPtr1 == Stg_ObjectList_Get( &ol1, "c" ) &&
+			addPtr1 == Stg_ObjectList_ObjectAt( &ol1, 1 ) &&
+			Stg_ObjectList_Count( &ol1 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 2 ) ), "a" ) == 0 &&
+			addPtr2 == Stg_ObjectList_Get( ol2, "c" ) &&
+			addPtr2 == Stg_ObjectList_ObjectAt( ol2, 1 ) &&
+			Stg_ObjectList_Count( ol2 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 2 ) ), "a" ) == 0 &&
+			addPtr3 == Stg_ObjectList_Get( ol3, "c" ) &&
+			addPtr3 == Stg_ObjectList_ObjectAt( ol3, 1 ) &&
+			Stg_ObjectList_Count( ol3 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 2 ) ), "a" ) == 0,
+			stream,
+			"Insert Before",
+			"Can we insert before \"a\" the third entry" );
+		
+		/* Test 5: Can we insert after "c" the fourth entry? */
+		Stg_ObjectList_ClassInsertAfter(  ol0, "c", (addPtr0 = DummyClass_New()), "d" );
+		Stg_ObjectList_ClassInsertAfter( &ol1, "c", (addPtr1 = DummyClass_New()), "d" );
+		Stg_ObjectList_PointerInsertAfter(  
+			ol2, 
+			"c", 
+			(addPtr2 = DummyPointer_New()), 
+			"d", 
+			0, 
+			DummyPointer_Print, 
+			DummyPointer_Copy );
+		Stg_ObjectList_GlobalPointerInsertAfter(  ol3, "c", (addPtr3 = (void*)DummyFunc4), "d" );
+		RegressionTest_Check(
+			addPtr0 == Stg_ObjectList_Get( ol0, "d" ) &&
+			addPtr0 == Stg_ObjectList_ObjectAt( ol0, 2 ) &&
+			Stg_ObjectList_Count( ol0 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 3 ) ), "a" ) == 0 &&
+			addPtr1 == Stg_ObjectList_Get( &ol1, "d" ) &&
+			addPtr1 == Stg_ObjectList_ObjectAt( &ol1, 2 ) &&
+			Stg_ObjectList_Count( &ol1 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 3 ) ), "a" ) == 0 &&
+			addPtr2 == Stg_ObjectList_Get( ol2, "d" ) &&
+			addPtr2 == Stg_ObjectList_ObjectAt( ol2, 2 ) &&
+			Stg_ObjectList_Count( ol2 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 3 ) ), "a" ) == 0 &&
+			addPtr3 == Stg_ObjectList_Get( ol3, "d" ) &&
+			addPtr3 == Stg_ObjectList_ObjectAt( ol3, 2 ) &&
+			Stg_ObjectList_Count( ol3 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 3 ) ), "a" ) == 0,
+			stream,
+			"Insert After",
+			"Can we insert after \"c\" the fourth entry?" );
+		
+		/* Test 6: Can we replace "d" with the fifth entry? */
+		Stg_ObjectList_ClassReplace(  ol0, "d", DELETE, (addPtr0 = DummyClass_New()), "e" );
+		Stg_ObjectList_ClassReplace( &ol1, "d", DELETE, (addPtr1 = DummyClass_New()), "e" );
+		Stg_ObjectList_PointerReplace(  
+			ol2, 
+			"d", 
+			DELETE, 
+			(addPtr2 = DummyPointer_New()), 
+			"e", 
+			0, 
+			DummyPointer_Print, 
+			DummyPointer_Copy );
+		Stg_ObjectList_GlobalPointerReplace(  ol3, "d", DELETE, (addPtr3 = (void*)DummyFunc5), "e" );
+		RegressionTest_Check(
+			addPtr0 == Stg_ObjectList_Get( ol0, "e" ) &&
+			addPtr0 == Stg_ObjectList_ObjectAt( ol0, 2 ) &&
+			Stg_ObjectList_Count( ol0 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 3 ) ), "a" ) == 0 &&
+			addPtr1 == Stg_ObjectList_Get( &ol1, "e" ) &&
+			addPtr1 == Stg_ObjectList_ObjectAt( &ol1, 2 ) &&
+			Stg_ObjectList_Count( &ol1 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 3 ) ), "a" ) == 0 &&
+			addPtr2 == Stg_ObjectList_Get( ol2, "e" ) &&
+			addPtr2 == Stg_ObjectList_ObjectAt( ol2, 2 ) &&
+			Stg_ObjectList_Count( ol2 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 3 ) ), "a" ) == 0 &&
+			addPtr3 == Stg_ObjectList_Get( ol3, "e" ) &&
+			addPtr3 == Stg_ObjectList_ObjectAt( ol3, 2 ) &&
+			Stg_ObjectList_Count( ol3 ) == 4 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 1 ) ), "c" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 3 ) ), "a" ) == 0,
+			stream,
+			"Replace",
+			"Can we replace \"d\" with the fifth entry?" );
+		
+		/* Test 7: Can we remove the "c" entry? */
+		Stg_ObjectList_Remove(  ol0, "c", DELETE );
+		Stg_ObjectList_Remove( &ol1, "c", DELETE );
+		Stg_ObjectList_Remove(  ol2, "c", DELETE );
+		Stg_ObjectList_Remove(  ol3, "c", DELETE );
+		RegressionTest_Check(
+			Stg_ObjectList_Count( ol0 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 1 ) ), "e" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0, 2 ) ), "a" ) == 0 &&
+			Stg_ObjectList_Count( &ol1 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 1 ) ), "e" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( &ol1, 2 ) ), "a" ) == 0 &&
+			Stg_ObjectList_Count( ol2 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 1 ) ), "e" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2, 2 ) ), "a" ) == 0 &&
+			Stg_ObjectList_Count( ol3 ) == 3 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 0 ) ), "b" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 1 ) ), "e" ) == 0 &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3, 2 ) ), "a" ) == 0,
+			stream,
+			"Remove",
+			"Can we remove the \"c\" entry?" );
+		
+		/* Test 8: Can we replace all with the sixth entry? */
+		Stg_ObjectList_ClassReplaceAll(  ol0, DELETE, (addPtr0 = DummyClass_New()), "f" );
+		Stg_ObjectList_ClassReplaceAll( &ol1, DELETE, (addPtr1 = DummyClass_New()), "f" );
+		Stg_ObjectList_PointerReplaceAll(  
+			ol2, 
+			DELETE, 
+			(addPtr2 = DummyPointer_New()), 
+			"f", 
+			0, 
+			DummyPointer_Print, 
+			DummyPointer_Copy );
+		Stg_ObjectList_GlobalPointerReplaceAll(  ol3, DELETE, (addPtr3 = (void*)DummyFunc6), "f" );
+		RegressionTest_Check(
+			addPtr0 == Stg_ObjectList_Get( ol0, "f" ) &&
+			addPtr0 == Stg_ObjectList_ObjectAt( ol0, 0 ) &&
+			Stg_ObjectList_Count( ol0 ) == 1 &&
+			addPtr1 == Stg_ObjectList_Get( &ol1, "f" ) &&
+			addPtr1 == Stg_ObjectList_ObjectAt( &ol1, 0 ) &&
+			Stg_ObjectList_Count( &ol1 ) == 1 &&
+			addPtr2 == Stg_ObjectList_Get( ol2, "f" ) &&
+			addPtr2 == Stg_ObjectList_ObjectAt( ol2, 0 ) &&
+			Stg_ObjectList_Count( ol2 ) == 1 &&
+			addPtr3 == Stg_ObjectList_Get( ol3, "f" ) &&
+			addPtr3 == Stg_ObjectList_ObjectAt( ol3, 0 ) &&
+			Stg_ObjectList_Count( ol3 ) == 1,
+			stream,
+			"ReplaceAll",
+			"Can we replace all with the sixth entry?" );
+		
+		/* Test 9: Copying */
+		/* Shallow copying not yet implemented */
+		/* Deep copying "OfPointer" (i.e. non-StGermain class) not yet implemented */
+		ol0deep = Stg_Class_Copy(  ol0, 0, True, 0, 0 );
+		ol1deep = Stg_Class_Copy( &ol1, 0, True, 0, 0 );
+		ol2deep = Stg_Class_Copy(  ol2, 0, True, 0, 0 );
+		ol3deep = Stg_Class_Copy(  ol3, 0, True, 0, 0 );
+		RegressionTest_Check(
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol0deep, 0 ) ), "f" ) == 0 &&
+			Stg_ObjectList_Count( ol0deep ) == 1 &&
+			Stg_ObjectList_ObjectAt( ol0, 0 ) != Stg_ObjectList_ObjectAt( ol0deep, 0 ) &&
+			Stg_Class_GetType( (Stg_Class*)Stg_ObjectList_ObjectAt( ol0, 0 ) ) == Stg_Class_GetType( (Stg_Class*)Stg_ObjectList_ObjectAt( ol0deep, 0 ) ) &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol1deep, 0 ) ), "f" ) == 0 &&
+			Stg_ObjectList_Count( ol1deep ) == 1 &&
+			Stg_ObjectList_ObjectAt( &ol1, 0 ) != Stg_ObjectList_ObjectAt( ol1deep, 0 ) &&
+			Stg_Class_GetType( (Stg_Class*)Stg_ObjectList_ObjectAt( &ol1, 0 ) ) == Stg_Class_GetType( (Stg_Class*)Stg_ObjectList_ObjectAt( ol1deep, 0 ) ) &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol2deep, 0 ) ), "f" ) == 0 &&
+			Stg_ObjectList_Count( ol2deep ) == 1 &&
+			Stg_ObjectList_ObjectAt( ol2, 0 ) != Stg_ObjectList_ObjectAt( ol2deep, 0 ) &&
+			strcmp( Stg_Object_GetName( (Stg_Object*)Stg_ObjectList_At( ol3deep, 0 ) ), "f" ) == 0 &&
+			Stg_ObjectList_Count( ol3deep ) == 1 &&
+			Stg_ObjectList_ObjectAt( ol3, 0 ) == Stg_ObjectList_ObjectAt( ol3deep, 0 ) && /* different to others */
+			Stg_Class_GetType( (Stg_Class*)Stg_ObjectList_ObjectAt( ol3, 0 ) ) == Stg_Class_GetType( (Stg_Class*)Stg_ObjectList_ObjectAt( ol3deep, 0 ) ),
+			stream,
+			"Copy",
+			"Copying" );
+		
+		/* Test 9: Destruction */
+		Stg_Class_Delete(  ol3deep );
+		Stg_Class_Delete(  ol2deep );
+		Stg_Class_Delete(  ol1deep );
+		Stg_Class_Delete(  ol0deep );
+		Stg_Class_Delete(  ol3 );
+		Stg_Class_Delete(  ol2 );
+		Stg_Class_Delete( &ol1 );
+		Stg_Class_Delete(  ol0 );
+		RegressionTest_Check( 1, stream, "Destruction", "Deleting all allocated memory" );
+	}
+
+	RegressionTest_Finalise();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,20 @@
+Primitive Object (ptr): 0x805c294
+unsigned char char item = 'a';
+Primitive Object (ptr): 0x805c2e4
+unsigned short short item = 123;
+Primitive Object (ptr): 0x805c334
+unsigned int int item = 456;
+Primitive Object (ptr): 0x805c384
+unsigned long long item = 789;
+Primitive Object (ptr): 0x805c3d4
+char char item = 'a';
+Primitive Object (ptr): 0x805c424
+short short item = -123;
+Primitive Object (ptr): 0x805c474
+int int item = -456;
+Primitive Object (ptr): 0x805c4c4
+long long item = -789;
+Primitive Object (ptr): 0x805c514
+float float item = 1.200000f;
+Primitive Object (ptr): 0x805c5ac
+double double item = 2.400000;

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testPrimitiveObject " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+#include <unistd.h>
+
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Foundation/PrimitiveObject" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	{
+		Stg_ObjectList* list;
+
+		list = Stg_ObjectList_New();
+
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_UnsignedChar( 'a', "char item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_UnsignedShort( 123, "short item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_UnsignedInt( 456, "int item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_UnsignedLong( 789, "long item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_Char( 'a', "char item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_Short( -123, "short item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_Int( -456, "int item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_Long( -789, "long item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_Float( 1.2f, "float item" ) );
+		Stg_ObjectList_Append( list, Stg_PrimitiveObject_New_Double( 2.4, "double item" ) );
+
+		Stg_ObjectList_PrintAllObjects( list, stream );
+
+		Stg_Class_Delete( list );
+	}
+	
+	RegressionTest_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+Stress testing Stg_asprintf beyond the default alloc number of bytes
+01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testStg_asprintf " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,90 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Foundation/CommonRoutines" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if ( rank == procToWatch ) {
+		const char* fiftyBytes = "01234567890123456789012345678901234567890123456789";
+
+		char* testString;
+
+		Journal_Printf( stream, "Stress testing Stg_asprintf beyond the default alloc number of bytes\n" );
+
+		Stg_asprintf( &testString, "%s%s%s%s", fiftyBytes, fiftyBytes, fiftyBytes, fiftyBytes );
+
+		Journal_Printf( stream, "%s\n", testString );
+
+		Memory_Free( testString );
+	}
+
+	RegressionTest_Finalise();
+
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+	TimeMonitor(test):  ts: 3 (secs), dt(67%): 2s

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testTimeMonitor " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,90 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include "JournalWrappers.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+#include <unistd.h>
+
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+	
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Foundation/TimeMonitor" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	Stg_TimeMonitor_SetTimerWatchCriteria( 0.5 );
+
+	{
+		Stg_TimeMonitor* tm = Stg_TimeMonitor_New( "test", True, True, MPI_COMM_WORLD );
+		sleep( 1 );
+
+		Stg_TimeMonitor_Begin( tm );
+		sleep( 2 );
+		Stg_TimeMonitor_End( tm );
+	
+		Stg_TimeMonitor_Delete( tm );
+	}
+
+	RegressionTest_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainBaseIO
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests Python

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Python/Dictionary.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Python/Dictionary.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Python/Dictionary.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,67 @@
+#!/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: Dictionary.py 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import StGermain.Base.Bindings.Dictionary as bindings
+
+def copyright():
+	return "StGermain.Base.IO.Dictionary Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+def new():
+	return bindings.New()
+
+class Dictionary:
+	def Print( self ):
+		return bindings.Print( self._handle )
+	
+	def add( self, name, value ):
+		# If the value has a handle, add it as a struct/dictionary
+		try:
+			return bindings.AddStruct( self._handle, name, value._handle )
+		except AttributeError:
+			if value.__class__ == "<type 'list'>":
+				bindings.AddList( self._handle, name, value )
+				addToList( self._handle, name, value )
+			else:
+				return bindings.AddString( self._handle, name, value )
+	
+	def addToList( self, listName, value ):
+		#TODO addToList( self, listName, value )
+		return None
+	
+	def LoadFromFile( self, filename ):
+		return bindings.LoadFromFile( self._handle, filename )
+	
+	def __init__( self, handle ):
+		self._handle = handle
+		return
+
+# version
+__id__ = "$Id: Dictionary.py 3462 2006-02-19 06:53:24Z WalterLandry $"

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Base/IO
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = 
+
+def_pyc_package = StGermain/Base/IO
+def_pyc = __init__.py Dictionary.py

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.Base.IO 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 $"

Added: long/3D/SNAC/trunk/StGermain/Base/IO/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Base/IO/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: CFile.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "JournalFile.h"
+#include "CFile.h"
+#include "Stream.h"
+#include "Journal.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+const Type CFile_Type = "CFile";
+
+
+JournalFile* CFile_New()
+{
+	return (JournalFile*)_CFile_New( sizeof(CFile), CFile_Type, _CFile_Delete, _CFile_Print, NULL );
+}
+
+JournalFile* CFile_New2( char* fileName )
+{
+	JournalFile* result = CFile_New();
+
+	if ( !JournalFile_Open( result, fileName ) )
+	{
+		/* File could not be opened successfully. Return cleanly. */
+		Stg_Class_Delete( result );
+		result = NULL;
+	}
+	
+	return result;
+}
+
+CFile* _CFile_New(
+	SizeT _sizeOfSelf,
+	Type type,
+	Stg_Class_DeleteFunction* _delete,
+	Stg_Class_PrintFunction* _print,
+	Stg_Class_CopyFunction* _copy )
+{
+	CFile* self;
+	
+	self = (CFile*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	_CFile_Init( self );
+	
+	return self;
+}
+	
+void CFile_Init( CFile* self )
+{
+	/* Set virtual info. */
+	self->_sizeOfSelf = sizeof(CFile);
+	self->type = CFile_Type;
+	self->_delete = _CFile_Delete;
+	self->_print = _CFile_Print;
+	self->_copy = NULL;
+	
+	_CFile_Init( self );
+}
+	
+void _CFile_Init( CFile* self )
+{
+	_JournalFile_Init( (JournalFile*)self, _CFile_Open, _CFile_Append, _CFile_Close, _CFile_Flush );
+}
+	
+void _CFile_Delete( void* cfile )
+{
+	CFile* self = (CFile*)cfile;
+	
+	_JournalFile_Delete( self );
+}
+void _CFile_Print( void* cfile, Stream* stream )
+{
+	CFile* self = (CFile*)cfile;
+	
+	_JournalFile_Print( self, stream );
+}
+
+	
+Bool _CFile_Open( void* file, char* fileName )
+{
+	CFile* self = (CFile*) file;
+	FILE* filePtr;
+	
+	filePtr = fopen( fileName, "w" );
+	
+	if ( filePtr == NULL )
+	{
+		return False;
+	}
+
+	self->fileHandle = (void*) filePtr;
+	
+	return True;	
+}
+	
+Bool _CFile_Append( void* file, char* fileName )
+{
+	CFile* self = (CFile*) file;
+	FILE* filePtr;
+	
+	filePtr = fopen( fileName, "a" );
+	
+	if ( filePtr == NULL )
+	{
+		return False;
+	}
+
+	self->fileHandle = (void*) filePtr;
+	
+	return True;	
+}
+Bool _CFile_Close( void* file )
+{
+	CFile* self = (CFile*) file;
+	if ( self->fileHandle != NULL )
+	{
+		return fclose(  (FILE*) self->fileHandle ) == 0;
+	}
+	return False;
+}
+
+Bool _CFile_Flush( void* file )
+{
+	CFile* self = (CFile*) file;
+	if ( self->fileHandle != NULL )
+	{
+		return fflush( (FILE*) self->fileHandle ) == 0;	
+	}
+	return False;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Encapsulation of a C file.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	Be careful in parallel situations where more than one processor may try to open the same file due
+**	to executing the same piece of code. When writing to files other than stdout and stderr, only
+**	allow one process to perform output.
+**
+** <b>Description</b>
+**	CFile wraps around traditional C file operations such as fopen() and fclose() to alloc output
+**	for a file.
+**
+** $Id: CFile.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_IO_CFile_h__
+#define __Base_IO_CFile_h__
+
+	/** Textual name for CFile class. */
+	extern const Type CFile_Type;
+	
+	/** \def __CFile See CFile. */
+	#define __CFile \
+		/* General info */ \
+		__JournalFile
+	struct CFile { __CFile };
+
+
+	/** Creates a new CFile with no opened file. JournalFile_Open() must be called. */
+	JournalFile* CFile_New();
+
+	/** Creates a new CFile, opening the file given by fileName. Returns NULL if system is unable to open the given file. */
+	JournalFile* CFile_New2( char* fileName );
+
+	/** Initialises an instance of CFile. Will not open any files. */
+	void CFile_Init( CFile* self );
+
+
+	/** Constructor interface. */
+	CFile* _CFile_New(
+		SizeT _sizeOfSelf,
+		Type type,
+		Stg_Class_DeleteFunction* _delete,
+		Stg_Class_PrintFunction* _print,
+		Stg_Class_CopyFunction* _copy );
+		
+	/** Init interface. */
+	void _CFile_Init( CFile* self );
+	
+	/** Stg_Class_Delete interface. */
+	void _CFile_Delete( void* cfile );
+
+	/** Print interface. */
+	void _CFile_Print( void* cfile, Stream* stream );
+	
+	
+	/** Implementation for Open function. */
+	Bool _CFile_Open( void* file, char* fileName );
+
+	/** Implementation for Append function. */
+	Bool _CFile_Append( void* file, char* fileName );
+
+	/** Implementation for Close function. */
+	Bool _CFile_Close( void* file );
+
+	/** Implementation for Flush function. */
+	Bool _CFile_Flush( void* file );
+	
+
+#endif /* __Base_IO_CFile_h__ */
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: CStream.c 3570 2006-05-15 03:28:02Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "JournalFile.h"
+#include "CFile.h"
+#include "Stream.h"
+#include "CStream.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include <stdarg.h>   /* Subsequent files need this for variable argument lists. */
+
+#include "Journal.h"
+
+
+const Type CStream_Type = "CStream";
+
+
+Stream* CStream_New( Name name )
+{
+	return (Stream*)_CStream_New( sizeof(CStream), CStream_Type, _CStream_Delete, _CStream_Print, _Stream_Copy, 
+		name, _CStream_Printf, _CStream_Write, _CStream_Dump, _CStream_SetFile );
+}
+
+void CStream_Init( CStream* self, Name name )
+{
+	
+}
+
+
+CStream* _CStream_New( 
+	SizeT			_sizeOfSelf, 
+	Type			type, 
+	Stg_Class_DeleteFunction*	_delete, 
+	Stg_Class_PrintFunction* 	_print,
+	Stg_Class_CopyFunction*	_copy, 
+	Name			name,
+	Stream_PrintfFunction*	_printf, 
+	Stream_WriteFunction*	_write, 
+	Stream_DumpFunction*	_dump,
+	Stream_SetFileFunction*	_setFile )
+{
+	CStream* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(CStream) );
+	self = (CStream*)_Stream_New( _sizeOfSelf, type, _delete, _print, _copy, name, 
+		_printf, _write, _dump, _setFile );
+	
+	_CStream_Init( self );
+	
+	return self;
+}
+
+void _CStream_Init( CStream* self )
+{
+	self->defaultFileType = CFile_New;
+
+}
+	
+void _CStream_Delete( void* cStream )
+{
+	CStream* self = (CStream*)cStream;
+	
+	/* Stg_Class_Delete parent */
+	_Stream_Delete( self );
+}
+
+void _CStream_Print( void* cStream, Stream* stream ) {
+
+	CStream* self = (CStream*)cStream;
+	
+	/* General info */
+	Journal_Printf( stream, "CStream (ptr): %p\n", cStream );
+	
+	/* Print parent */
+	_Stream_Print( self, stream );
+		
+}
+	
+SizeT _CStream_Printf( Stream* stream, char *fmt, va_list args )
+{
+	CStream* self = (CStream*)stream;
+	SizeT    printResult;
+
+	if ( self->_file == NULL )
+	{
+		return 0;
+	}
+
+	printResult = vfprintf( (FILE*) self->_file->fileHandle, fmt, args );
+	return printResult;
+}
+	
+SizeT _CStream_Write( Stream* stream, void *data, SizeT elem_size, SizeT num_elems )
+{
+	CStream* self = (CStream*)stream;
+	return fwrite( data, elem_size, num_elems, (FILE*) (self->_file->fileHandle) );
+}
+	
+Bool _CStream_Dump( Stream* stream, void *data )
+{
+	/* Traditional C does not have a dumping function. Hence, CStream performs no operation here. */
+	return False;
+}
+
+Bool _CStream_SetFile( Stream* stream, JournalFile* file )
+{
+	if ( file->type == CFile_Type )
+	{
+		stream->_file = file;
+		return True;
+	}
+	return False;
+}
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Encapsulation of C-style printing.
+**
+** <b>Assumptions</b>
+**	None
+**
+** <b>Comments</b>
+**	None
+**
+** <b>Description</b>
+**	A Wrapper class for C output functions such as fprintf() and fwrite().
+**
+** Comments:
+**
+** $Id: CStream.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_IO_CStream_h__
+#define __Base_IO_CStream_h__
+	
+	/** Textual name for CStream class. */
+	extern const Type CStream_Type;
+	
+	
+	/** \def __CStream See CStream. */
+	#define __CStream \
+		/* General info */ \
+		__Stream
+	struct CStream { __CStream };
+
+
+	/** Create a new CStream */
+	Stream* CStream_New( Name name );
+
+	/** Inits a CStream. */
+	void CStream_Init( CStream* self, Name name );
+
+	/** Constructor interface. */
+	CStream* _CStream_New( 
+		SizeT			_sizeOfSelf, 
+		Type			type, 
+		Stg_Class_DeleteFunction*	_delete, 
+		Stg_Class_PrintFunction* 	_print,
+		Stg_Class_CopyFunction*	_copy, 
+		Name			name,
+		Stream_PrintfFunction*	_printf, 
+		Stream_WriteFunction*	_write, 
+		Stream_DumpFunction*	_dump,
+		Stream_SetFileFunction*	_setFile );
+
+	/** Init interface. */
+	void _CStream_Init( CStream *self );
+	
+	/** Stg_Class_Delete interface. */
+	void _CStream_Delete( void* cStream );
+	
+	/** Print interface. */
+	void _CStream_Print( void* cStream, Stream* stream );
+
+
+	/** Printf() implementation. */
+	SizeT _CStream_Printf( Stream* stream, char *fmt, va_list args );
+	
+	/** Write() implementation. */
+	SizeT _CStream_Write( Stream* stream, void *data, SizeT elem_size, SizeT num_elems );
+	
+	/** Dump() implementation. Performs no operation for CStreams. */
+	Bool _CStream_Dump( Stream* stream, void *data );
+	
+	/** SetFile() implementation. */
+	Bool _CStream_SetFile( Stream* stream, JournalFile* file );
+	
+	
+#endif /* __IO_CStreamFile_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,791 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Dictionary.c 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Dictionary.h"
+#include "Journal.h"
+#include "JournalFile.h"
+#include "Stream.h"
+#include "Dictionary_Entry_Value.h"
+#include "Dictionary_Entry.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* Textual name of this class */
+const Type Dictionary_Type = "dictionary";
+
+/* Controlling struct behaviour */
+static const int DEFAULT_INIT_SIZE = 10;
+static const int DEFAULT_DELTA = 5;
+static const int STRUCT_INIT_SIZE = 2;
+static const int STRUCT_DELTA = 2;
+
+Dictionary* Dictionary_New( void ) {
+	return _Dictionary_New( sizeof(Dictionary), Dictionary_Type, _Dictionary_Delete, _Dictionary_Print, NULL, 
+		_Dictionary_Add, _Dictionary_AddWithSource, _Dictionary_Set, _Dictionary_SetWithSource, _Dictionary_Get, _Dictionary_GetSource );
+}
+
+Dictionary* _Dictionary_New( 
+		SizeT				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 		_delete,
+		Stg_Class_PrintFunction* 		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Dictionary_AddFunction* 	add,
+		Dictionary_AddWithSourceFunction*	addWithSource,
+		Dictionary_SetFunction* 	set,
+		Dictionary_SetWithSourceFunction*	setWithSource,
+		Dictionary_GetFunction* 	get,
+		Dictionary_GetSourceFunction	getSource)
+{		
+	Dictionary* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Dictionary) );
+	self = (Dictionary*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* virtual functions */
+	self->add = add;
+	self->addWithSource = addWithSource;
+	self->set = set;
+	self->setWithSource = setWithSource;
+	self->get = get;
+	self->getSource = getSource;
+	
+	/* Dictionary info */
+	_Dictionary_Init( self );
+	
+	return self;
+}
+
+
+void Dictionary_Init( Dictionary* self ) {
+	/* General info */
+	self->_sizeOfSelf = sizeof( Dictionary );
+	self->type = Dictionary_Type;
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_print = _Dictionary_Print;
+	self->_delete = _Dictionary_Delete;
+	self->add = _Dictionary_Add;
+	self->addWithSource = _Dictionary_AddWithSource;
+	self->set = _Dictionary_Set;
+	self->setWithSource = _Dictionary_SetWithSource;
+	self->get = _Dictionary_Get;
+	self->getSource = _Dictionary_GetSource;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Dictionary info */
+	_Dictionary_Init( self );
+}
+
+void _Dictionary_Init( Dictionary* self ) {
+	self->size = DEFAULT_INIT_SIZE;
+	self->delta = DEFAULT_DELTA;
+	self->count = 0;
+	self->entryPtr = Memory_Alloc_Array( Dictionary_Entry*, self->size, "Dictionary->entryPtr" );
+
+	self->debugStream = Journal_Register( Debug_Type, "DictionaryWarning" );
+}
+
+
+void _Dictionary_Delete( void* dictionary ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+	
+	for( index = 0; index < self->count; index++ ) {
+		Dictionary_Entry_Delete( self->entryPtr[index] );
+	}
+	Memory_Free( self->entryPtr );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Dictionary_Print( void* dictionary, Stream* stream ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+
+	Journal_Printf( (void*)stream, "Dictionary:\n" );
+	Journal_Printf( (void*)stream, "\tsize: %u\n", self->size );
+	Journal_Printf( (void*)stream, "\tdelta: %u\n", self->delta );
+	Journal_Printf( (void*)stream, "\tcount: %u\n", self->count );
+	Journal_Printf( (void*)stream, "\tentryPtr[0-%u]: {\n", self->count );
+	Stream_Indent( stream );
+	Stream_Indent( stream );
+	for( index = 0; index < self->count; index++ ) {
+		/*Journal_Printf( (void*)stream, "\t\t" );*/
+		Dictionary_Entry_Print( self->entryPtr[index], stream ); 
+		Journal_Printf( (void*)stream, "\n" );
+	}
+	Journal_Printf( (void*)stream, "\t}\n" );
+	Stream_UnIndent( stream );
+	Stream_UnIndent( stream );
+}
+
+void Dictionary_PrintConcise( void* dictionary, Stream* stream ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+
+	Journal_Printf( stream, "Dictionary contains %u entries:\n", self->count );
+
+	Stream_Indent( stream );
+	for( index = 0; index < self->count; index++ ) {
+		Journal_Printf( stream, "\t" );
+		Dictionary_Entry_Print( self->entryPtr[index], stream ); 
+		Journal_Printf( stream, "\n" );
+	}
+	Journal_Printf( stream, "}\n" );
+	Stream_UnIndent( stream );
+}
+
+void Dictionary_Add( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value ) {
+	Dictionary* self = (Dictionary*)dictionary;
+	self->add( dictionary, key, value );
+}
+
+void Dictionary_AddWithSource( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value, 
+				Dictionary_Entry_Source source ) 
+{
+	Dictionary* self = (Dictionary*)dictionary;
+	self->addWithSource( dictionary, key, value, source );
+}
+
+Bool Dictionary_Set( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value ) {
+	Dictionary* self = (Dictionary*)dictionary;
+	return self->set( dictionary, key, value );
+}
+
+Dictionary_Entry_Value* Dictionary_Get( void* dictionary, Dictionary_Entry_Key key ) {
+	Dictionary* self = (Dictionary*)dictionary;
+	return self->get( dictionary, key );
+}
+
+Dictionary_Entry_Source Dictionary_GetSource( void* dictionary, Dictionary_Entry_Key key ) {
+	Dictionary* self = (Dictionary*)dictionary;
+	return self->getSource( dictionary, key );
+}
+
+Dictionary_Entry_Value* Dictionary_GetByIndex( void* dictionary, Dictionary_Index index ) {
+	return _Dictionary_GetByIndex( dictionary, index );
+}
+
+Dictionary_Entry* Dictionary_GetEntry( void* dictionary, Dictionary_Entry_Key key ) {
+	Dictionary* self = dictionary;
+	Dictionary_Index index;
+	
+	for( index = 0; index < self->count; index++ ) {
+		if( Dictionary_Entry_Compare( self->entryPtr[index], key ) != 0 ) {
+			return self->entryPtr[index];
+		}
+	}
+	return 0;
+}
+
+Dictionary_Entry* Dictionary_GetEntryByIndex( void* dictionary, Dictionary_Index index) {
+	Dictionary* self = dictionary;
+
+	// Check that self->entryPtr[index] is NOT NULL
+	if( ! self->entryPtr[index] )
+		return 0;
+	else
+		return self->entryPtr[index];
+}
+
+
+
+void _Dictionary_Add( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	assert( self->count <= self->size );
+	if( self->count == self->size ) {
+		self->size += self->delta;
+		self->entryPtr = Memory_Realloc_Array( self->entryPtr, Dictionary_Entry*, self->size );
+	}
+	
+	self->entryPtr[self->count] = Dictionary_Entry_New( key, value );
+	self->count++;
+}
+
+void _Dictionary_AddWithSource( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value, 
+				Dictionary_Entry_Source source ) 
+{
+	Dictionary* self = (Dictionary*) dictionary;
+	assert( self->count <= self->size );
+	if( self->count == self->size ) {
+		self->size += self->delta;
+		self->entryPtr = Memory_Realloc_Array( self->entryPtr, Dictionary_Entry*, self->size );
+	}
+	
+	self->entryPtr[self->count] = Dictionary_Entry_NewWithSource( key, value, source );
+	self->count++;
+}
+
+Dictionary_Entry_Value* Dictionary_AddMerge( 
+		void*						dictionary, 
+		Dictionary_Entry_Key				key, 
+		Dictionary_Entry_Value*				value,
+		Dictionary_MergeType				mergeType )
+{
+	Dictionary*					self = (Dictionary*)dictionary;
+	Dictionary_Entry*				existingEntry = Dictionary_GetEntry( self, key );
+	Dictionary_Entry_Value*				newValue = value;
+	Dictionary_Entry_Value*				updatedValue = value;
+	Dictionary_Entry_Value*				curValue;
+	
+	if( existingEntry ) {
+		Dictionary_Entry_Value*				existingValue = Dictionary_Entry_Get( existingEntry );
+		Index						i;
+		
+		switch( existingValue->type ) {
+			/* parameters... all behave the same */
+			case Dictionary_Entry_Value_Type_String:
+			case Dictionary_Entry_Value_Type_Double:
+			case Dictionary_Entry_Value_Type_UnsignedInt:
+			case Dictionary_Entry_Value_Type_Int:
+			case Dictionary_Entry_Value_Type_Bool:
+			case Dictionary_Entry_Value_Type_UnsignedLong:
+			case Dictionary_Entry_Value_Type_VoidPtr:
+				switch( mergeType ) {
+					/* "Append", means add to end... default add behaviour */
+					case Dictionary_MergeType_Append:
+						_Dictionary_Add( dictionary, key, newValue );
+						break;
+					/* "Merge" and "Replace" means override */
+					case Dictionary_MergeType_Merge:
+					case Dictionary_MergeType_Replace:
+						Dictionary_Entry_Set( existingEntry, newValue );
+						break;
+				};
+				break;
+			case Dictionary_Entry_Value_Type_Struct:
+				switch( mergeType ) {
+					/* "Append", means add to end... default add behaviour */
+					case Dictionary_MergeType_Append: /* create at end */
+						_Dictionary_Add( dictionary, key, newValue );
+						break;
+					/* "Merge" means for all struct items, add to end... i.e. do nothing here .*/
+					case Dictionary_MergeType_Merge:
+						for( i = 0; i < newValue->as.typeStruct->count; i++ ) {
+							Dictionary_AddMerge( existingValue->as.typeStruct,
+								newValue->as.typeStruct->entryPtr[i]->key, 
+								newValue->as.typeStruct->entryPtr[i]->value, mergeType );
+						}
+						
+						newValue->as.typeStruct->count = 0;
+						Stg_Class_Delete( newValue->as.typeStruct );
+						Memory_Free( newValue );
+						updatedValue = existingValue;
+						break;
+					/* "Replace" means remove current entry and create a newey */
+					case Dictionary_MergeType_Replace:
+						Dictionary_Entry_Set( existingEntry, newValue );
+						break;
+				};
+				break;
+			case Dictionary_Entry_Value_Type_List:
+				switch( mergeType ) {
+					/* "Append", means add to end... default add behaviour */
+					case Dictionary_MergeType_Append: /* create at end */
+						_Dictionary_Add( dictionary, key, newValue );
+						break;
+					/* "Merge": 2 different cases... */
+					/* means for all list items, add to end... i.e. do nothing here .*/
+					case Dictionary_MergeType_Merge:
+						curValue = newValue->as.typeList->first;
+						for( i = 0; i < newValue->as.typeList->count; i++ ) {
+							Dictionary_Entry_Value_AddElement( existingValue, curValue );
+							curValue = curValue->next;
+						}
+						
+						Memory_Free( newValue );
+						updatedValue = existingValue;
+						break;
+					/* "Replace" means remove current entry and create a newey */
+					case Dictionary_MergeType_Replace:
+						Dictionary_Entry_Set( existingEntry, newValue );
+						break;
+				};
+				break;
+			default:
+				Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"Error in func %s: Bad existingValue type '%u'\n", __func__, existingValue->type ); 
+				break;
+		}
+	}
+	else {
+		_Dictionary_Add( self, key, value );
+	}
+	
+	return updatedValue;
+}
+
+Dictionary_Entry_Value* Dictionary_AddMergeWithSource( 
+		void*						dictionary, 
+		Dictionary_Entry_Key				key, 
+		Dictionary_Entry_Value*				value,
+		Dictionary_MergeType				mergeType,
+		Dictionary_Entry_Source				source )
+{
+	Dictionary*					self = (Dictionary*)dictionary;
+	Dictionary_Entry*				existingEntry = Dictionary_GetEntry( self, key );
+	Dictionary_Entry_Value*				newValue = value;
+	Dictionary_Entry_Value*				updatedValue = value;
+	Dictionary_Entry_Value*				curValue;
+	
+	if( existingEntry ) {
+		Dictionary_Entry_Value*				existingValue = Dictionary_Entry_Get( existingEntry );
+		Index						i;
+		
+		switch( existingValue->type ) {
+			/* parameters... all behave the same */
+			case Dictionary_Entry_Value_Type_String:
+			case Dictionary_Entry_Value_Type_Double:
+			case Dictionary_Entry_Value_Type_UnsignedInt:
+			case Dictionary_Entry_Value_Type_Int:
+			case Dictionary_Entry_Value_Type_Bool:
+			case Dictionary_Entry_Value_Type_UnsignedLong:
+			case Dictionary_Entry_Value_Type_VoidPtr:
+				switch( mergeType ) {
+					/* "Append", means add to end... default add behaviour */
+					case Dictionary_MergeType_Append:
+						_Dictionary_AddWithSource( dictionary, key, newValue, source );
+						break;
+					/* "Merge" and "Replace" means override */
+					case Dictionary_MergeType_Merge:
+					case Dictionary_MergeType_Replace:
+						Dictionary_Entry_SetWithSource( existingEntry, newValue, source );
+						break;
+				};
+				break;
+			case Dictionary_Entry_Value_Type_Struct:
+				switch( mergeType ) {
+					/* "Append", means add to end... default add behaviour */
+					case Dictionary_MergeType_Append: /* create at end */
+						_Dictionary_AddWithSource( dictionary, key, newValue, source );
+						break;
+					/* "Merge" means for all struct items, add to end... i.e. do nothing here .*/
+					case Dictionary_MergeType_Merge:
+						for( i = 0; i < newValue->as.typeStruct->count; i++ ) {
+							Dictionary_AddMergeWithSource( existingValue->as.typeStruct,
+								newValue->as.typeStruct->entryPtr[i]->key, 
+								newValue->as.typeStruct->entryPtr[i]->value, 
+								mergeType, source );
+						}
+						
+						newValue->as.typeStruct->count = 0;
+						Stg_Class_Delete( newValue->as.typeStruct );
+						Memory_Free( newValue );
+						updatedValue = existingValue;
+						break;
+					/* "Replace" means remove current entry and create a newey */
+					case Dictionary_MergeType_Replace:
+						Dictionary_Entry_SetWithSource( existingEntry, newValue, source );
+						break;
+				};
+				break;
+			case Dictionary_Entry_Value_Type_List:
+				switch( mergeType ) {
+					/* "Append", means add to end... default add behaviour */
+					case Dictionary_MergeType_Append: /* create at end */
+						_Dictionary_AddWithSource( dictionary, key, newValue, source );
+						break;
+					/* "Merge": 2 different cases... */
+					/* means for all list items, add to end... i.e. do nothing here .*/
+					case Dictionary_MergeType_Merge:
+						curValue = newValue->as.typeList->first;
+						for( i = 0; i < newValue->as.typeList->count; i++ ) {
+							Dictionary_Entry_Value_AddElementWithSource( existingValue, curValue, 
+													source );
+							curValue = curValue->next;
+						}
+						
+						Memory_Free( newValue );
+						updatedValue = existingValue;
+						break;
+					/* "Replace" means remove current entry and create a newey */
+					case Dictionary_MergeType_Replace:
+						Dictionary_Entry_SetWithSource( existingEntry, newValue, source );
+						break;
+				};
+				break;
+			default:
+				Journal_Firewall( False, Journal_Register( Error_Type, self->type ),
+					"Error in func %s: Bad existingValue type '%u'\n", __func__, existingValue->type ); 
+				break;
+		}
+	}
+	else {
+		_Dictionary_AddWithSource( self, key, value, source );
+	}
+	
+	return updatedValue;
+}
+
+Bool _Dictionary_Set( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+	
+	for( index = 0; index < self->count; index++ ) {
+		if( Dictionary_Entry_Compare( self->entryPtr[index], key ) != 0 ) {
+			Dictionary_Entry_Set( self->entryPtr[index], value );
+			return True;
+		}
+	}
+
+	/* If we reach here and haven't found it, add new entry */
+	Dictionary_Add( self, key, value );
+
+	return True;
+}
+
+Bool _Dictionary_SetWithSource( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value,
+				Dictionary_Entry_Source source ) 
+{
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+	
+	for( index = 0; index < self->count; index++ ) {
+		if( Dictionary_Entry_CompareWithSource( self->entryPtr[index], key, source ) != 0 ) {
+			Dictionary_Entry_SetWithSource( self->entryPtr[index], value, source );
+			return True;
+		}
+	}
+
+	/* If we reach here and haven't found it, add new entry */
+	Dictionary_AddWithSource( self, key, value, source );
+
+	return True;
+}
+
+Dictionary_Entry_Value* _Dictionary_Get( void* dictionary, Dictionary_Entry_Key key ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+	
+	for( index = 0; index < self->count; index++ ) {
+		if( Dictionary_Entry_Compare( self->entryPtr[index], key ) != 0 ) {
+			return Dictionary_Entry_Get( self->entryPtr[index] );
+		}
+	}
+	return 0;
+}
+
+Dictionary_Entry_Source _Dictionary_GetSource( void* dictionary, Dictionary_Entry_Key key) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+
+	for( index = 0; index < self->count; index++ ) {
+                if( Dictionary_Entry_Compare( self->entryPtr[index], key ) != 0 ) {
+                        return Dictionary_Entry_GetSource( self->entryPtr[index] );
+                }
+        }
+        return 0;
+}
+
+
+Dictionary_Entry_Value* _Dictionary_GetByIndex( void* dictionary, Dictionary_Index index ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	return Dictionary_Entry_Get(self->entryPtr[index]);
+}
+
+Dictionary_Entry_Value* Dictionary_GetDefault( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	Dictionary_Index index;
+	
+	for( index = 0; index < self->count; index++ ) {
+		if( Dictionary_Entry_Compare( self->entryPtr[index], key ) != 0 ) {
+			/* key found, so delete the default value */
+			Dictionary_Entry_Value_Delete( value );
+			return Dictionary_Entry_Get( self->entryPtr[index] );
+		}
+	}
+	
+	Journal_Printf( self->debugStream, "Warning - value %s not found in dictionary, using default value of ", key );
+	Dictionary_Entry_Value_Print( value, self->debugStream );
+	Journal_Printf( self->debugStream, "\n" );
+	
+	Dictionary_Add( dictionary, key, value );
+	return value;
+}
+
+Index Dictionary_GetCount( void* dictionary ) {
+	Dictionary* self = (Dictionary*) dictionary;
+	return self->count;
+}
+
+void Dictionary_ParseCommandLineParam( void* self, char* paramString, char* valueString ) {
+	Dictionary* dictionary = (Dictionary*)self;
+	char* point;
+	char* lbracket;
+
+	point = strchr( paramString, '.' );
+	lbracket = strchr( paramString, '[' );
+
+	/* If there's neither a point or left-bracket in the (supposed) param string, them treat as a parameter */
+	if( !point && !lbracket ) {
+		Dictionary_Entry_Value* ev;
+
+		ev = Dictionary_Get( dictionary, paramString );
+
+		/* Add value to dictionary */
+		if( ev == NULL ) {
+			/* If there isn't already an entry in dictionary - create one */
+			Dictionary_Add( dictionary, paramString, Dictionary_Entry_Value_FromString( valueString ) );
+		}
+		else {
+			/* If is already in dictionary - then update value */
+			Dictionary_Entry_Value_SetFromStringKeepCurrentType( ev, valueString );
+		}
+	}
+	else {
+		/* It is either a struct or list or both. Work out one at a time, from the left */
+		if( point && lbracket ) {
+			if( point < lbracket ) {
+				lbracket = 0;
+			}
+			else {
+				point = 0;
+			}
+		}
+
+		if( point ) {
+			char* structString;
+			char* memberString;
+			char* point2;
+			Dictionary* structDictionary; 
+			Dictionary_Entry_Value*  ev;
+			
+			/* Create the struct and member strings from the source */
+			structString = StG_Strdup( paramString );
+			point2 = strchr( structString, '.' );
+			*point2 = 0;
+			memberString = point2 + 1;
+			
+			/* Add value to dictionary */
+			ev = Dictionary_Get( dictionary, structString );
+			if( !ev ) {
+				/* If there isn't already an entry in the dictionary - create one */
+				structDictionary = Dictionary_New();
+				Dictionary_Add( dictionary, structString, Dictionary_Entry_Value_FromStruct( structDictionary ) );
+			}
+			else {
+				/* Entry found. Ensure its a struct */
+				structDictionary = Dictionary_Entry_Value_AsDictionary( ev );
+				Journal_Firewall( 
+					(Bool)structDictionary, 
+					Journal_Register( Error_Type, Dictionary_Type ), 
+					"Command line argument \"%s\" parsed as struct, and is in dictionary, but not as a struct",
+						structString );
+			}
+			Dictionary_ParseCommandLineParam( structDictionary, memberString, valueString );
+			Memory_Free( structString );
+		}
+		else if( lbracket ) {
+			char* listString;
+			char* lbracket2;
+			char* indexString;
+			char* rbracket2;
+			char* remainderString;
+			Index index;
+			Bool emptyIndex;
+			Bool isStruct;
+			char* memberString;
+
+			Dictionary_Entry_Value* ev;
+
+			/* Create the list string and index from the source */
+			listString = StG_Strdup( paramString );
+			lbracket2 = strchr( listString, '[' );
+			*lbracket2 = 0;
+			indexString = lbracket2 + 1;
+			
+			/* Make sure there is a right bracket in the string */
+			rbracket2 = strchr( indexString, ']' );
+			Journal_Firewall( 
+				(Bool)rbracket2, 
+				Journal_Register( Error_Type, Dictionary_Type ), 
+				"Command line argument \"%s\" parsed as list but missing closing \']\'.",
+					listString );
+			*rbracket2 = 0;
+			remainderString = rbracket2 + 1;
+			
+			/* Obtain the index */
+			if( strlen( indexString ) ) {
+				emptyIndex = False;
+				index = strtoul( indexString, 0, 0 );
+			}
+			else {
+				emptyIndex = True;
+				index = 0;
+			}
+			
+			if( strlen( remainderString ) ) {
+				/* TODO: parse out recursive lists SQ20060206 */
+				/* TODO: parse out structures (properly) SQ20060206 */
+				if( remainderString[0] == '.' ) {
+					memberString = remainderString + 1;
+					isStruct = True;
+				}
+				else {
+					memberString = 0;
+					isStruct = False;
+				}
+			}
+			else {
+				memberString = 0;
+				isStruct = False;
+			}
+			
+			
+			/* Assume it is a parameter */
+			ev = Dictionary_Get( dictionary, listString );
+
+			/* Add value to dictionary */
+			if( ev == NULL ) {
+				/* If there isn't already an entry in dictionary - create one. Verify index is 0 (0th/add)*/
+				Journal_Firewall( 
+					emptyIndex, 
+					Journal_Register( Error_Type, Dictionary_Type ), 
+					"Command line argument \"%s\" parsed as list but list not found and "\
+					"index not specified as add (i.e. '[]').",
+						listString );
+				ev = Dictionary_Entry_Value_NewList();
+				Dictionary_Add( dictionary, listString, ev );
+				if( isStruct ) {
+					Dictionary* newStruct = Dictionary_New();
+					
+					Dictionary_Entry_Value_AddElement( 
+						ev, 
+						Dictionary_Entry_Value_FromStruct( newStruct ) );
+					Dictionary_ParseCommandLineParam( newStruct, memberString, valueString );
+				}
+				else {
+					Dictionary_Entry_Value_AddElement( 
+						ev, 
+						Dictionary_Entry_Value_FromString( valueString ) );
+				}
+			}
+			else {
+				/* Obtain the ith element or add if specified */
+				if( emptyIndex ) {
+					if( isStruct ) {
+						Dictionary* newStruct = Dictionary_New();
+					
+						Dictionary_Entry_Value_AddElement( 
+							ev, 
+							Dictionary_Entry_Value_FromStruct( newStruct ) );
+						Dictionary_ParseCommandLineParam( newStruct, memberString, valueString );
+					}
+					else {
+						Dictionary_Entry_Value_AddElement( 
+							ev, 
+							Dictionary_Entry_Value_FromString( valueString ) );
+					}
+				}
+				else {
+					Dictionary_Entry_Value* item;
+				
+					item = Dictionary_Entry_Value_GetElement( ev, index );
+					Journal_Firewall( 
+						(Bool)item, 
+						Journal_Register( Error_Type, Dictionary_Type ), 
+						"Command line argument \"%s\" parsed as list, requesting index \"%u\", "\
+						"but that index does not exist.",
+							listString,
+							index );
+					
+					if( isStruct ) {
+						Dictionary* newStruct = Dictionary_Entry_Value_AsDictionary( item );
+						Dictionary_ParseCommandLineParam( newStruct, memberString, valueString );
+					}
+					else {
+						Dictionary_Entry_Value_SetFromStringKeepCurrentType( item, valueString );
+					}
+				}
+			}
+			Memory_Free( listString );
+		}
+	}
+}
+
+void Dictionary_ReadAllParamFromCommandLine( void* dictionary, int argc, char* argv[] ) {
+	Index                   arg_I;
+	const char*             preceedingString = "--";
+	char*                   argumentString;
+	char*                   paramString;
+	char*                   valueString;
+	char*                   equalsSign;
+	unsigned int            preceedingStringLength = strlen( preceedingString );
+
+	/* Loop over all the arguments from command line and reads all arguments of form "--param=value" */
+	for ( arg_I = 1 ; arg_I < argc ; arg_I++ ) {
+		argumentString = argv[ arg_I ];
+
+		/* Check is string has preceeding string "--" if not then continue in loop */
+		if ( strncmp( preceedingString, argumentString , preceedingStringLength ) != 0 )
+			continue;
+
+		/* Make sure there is an equals sign in the string */
+		equalsSign = strchr( argumentString, '=' ) ;
+
+		/* Make sure that there are characters after equals sign */
+		if ( equalsSign == NULL ) 
+			continue;
+
+		/* Paramater name starts right after these dashes */
+		paramString = StG_Strdup(&argumentString[ preceedingStringLength ]);
+
+		/* Find Pointer to equals sign in this new string we've just created */
+		equalsSign = strchr( paramString, '=' ) ;
+
+		/* Put in null terminator at equals sign */
+		*equalsSign = '\0';
+
+		/* Get Value String - which is everything after the "=" */
+		valueString = equalsSign + 1;
+
+		Dictionary_ParseCommandLineParam( dictionary, paramString, valueString );
+		
+		/* Free memory that we have allocated */
+		Memory_Free( paramString );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	Facilitates a dictionary style repository of information.
+**
+** <b>Assumptions:</b>
+**	calling Dictionary_Entry_Value_AsString puts the result into a temporary
+**		buffer:- if you want to use it for other than printing, you should copy
+**		it to your own string.
+**
+** <b>Comments:</b>
+**	Made to be compatible/comparable/interchangable with Pythia's PropertySheets.
+**	Currently, error handling is very basic - input values checked and set to
+**	defaults if necessary, pointers checked, 0 returned when getting an invalid
+**	value. Needs to be extended once we decide how we're simulating Journal.
+**	Have made some facility to have the content as a void*... but not completed and not sure if necessary.
+**	May need to add methods to remove entries from dictionaries and structs, but
+**	not yet.
+**	The Dictionary_Entry_Value_As... functions can accept the "self" as null, and will provide a zero-like or empty
+**	string-like answer. This enables a simple line for accessing values (no need for error checking).
+**
+** $Id: Dictionary.h 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**/
+
+#ifndef __Base_IO_Dictionary_h__
+#define __Base_IO_Dictionary_h__
+	
+	typedef Index Dictionary_Index;		/**< Index type for Dictionary, */
+	
+	/** Enum to dictionary add/merging type */
+	typedef enum { 
+		Dictionary_MergeType_Append, 
+		Dictionary_MergeType_Merge, 
+		Dictionary_MergeType_Replace 
+	} Dictionary_MergeType;
+	
+	
+	/** Textual name for Dictionary class. */
+	extern const Type Dictionary_Type;
+	
+	/* Virtual Function pointers */
+	typedef void (Dictionary_AddFunction) (void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	typedef void (Dictionary_AddWithSourceFunction) (void* dictionary, Dictionary_Entry_Key key, 
+								Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	typedef Bool (Dictionary_SetFunction) (void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	typedef Bool (Dictionary_SetWithSourceFunction) (void* dictionary, Dictionary_Entry_Key key, 
+								Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	typedef Dictionary_Entry_Value*	(Dictionary_GetFunction) (void* dictionary, Dictionary_Entry_Key key );
+	typedef Dictionary_Entry_Source	(Dictionary_GetSourceFunction) (void* dictionary, Dictionary_Entry_Key key );
+
+	/** \def __Dictionary See Dictionary */
+	#define __Dictionary \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		Dictionary_AddFunction*		add; \
+		Dictionary_AddWithSourceFunction*	addWithSource; \
+		Dictionary_SetFunction*		set; \
+		Dictionary_SetWithSourceFunction*	setWithSource; \
+		Dictionary_GetFunction*		get; \
+		Dictionary_GetSourceFunction*	getSource; \
+		\
+		/* Dictionary info */ \
+		Dictionary_Index		size; \
+		Dictionary_Index		delta; \
+		\
+		Dictionary_Index		count; \
+		Dictionary_Entry**		entryPtr; \
+		\
+		Stream*				debugStream;
+	struct _Dictionary { __Dictionary };
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Dictionary
+	*/
+	
+	/** Initialise a Dictionary construct */
+	Dictionary* Dictionary_New( void );
+	
+	/** Constructor interface. */
+	Dictionary* _Dictionary_New( 
+		SizeT				_sizeOfSelf, 
+		Type 				type, 
+		Stg_Class_DeleteFunction* 		_delete,
+		Stg_Class_PrintFunction* 		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		Dictionary_AddFunction* 	add,
+		Dictionary_AddWithSourceFunction*	addWithSource,
+		Dictionary_SetFunction* 	set,
+		Dictionary_SetWithSourceFunction*	setWithSource,
+		Dictionary_GetFunction* 	get,
+		Dictionary_GetSourceFunction*	getSource);
+	
+	/** Initialises a Dictionary. */
+	void Dictionary_Init( Dictionary* self );
+	
+	/** Init interface. */
+	void _Dictionary_Init( Dictionary* self );
+	
+	/** Stg_Class_Delete dictionary implementation */
+	void _Dictionary_Delete( void* dictionary );
+	
+	/** Print dictionary implementation */
+	void _Dictionary_Print( void* dictionary, Stream* stream );
+	
+	/** Concise dictionary info print */
+	void Dictionary_PrintConcise( void* dictionary, Stream* stream );
+	
+	/** Add an entry to the dictionary... orignal implementation... appends keys */
+	void Dictionary_Add( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+
+	/** Add an entry to the dictionary... orignal implementation... appends keys, with source file */
+	void Dictionary_AddWithSource( void* dictionary, Dictionary_Entry_Key key, 
+					Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	
+	/** Add an entry to the dictionary... specifying how the entry values are merged if key present already */
+	Dictionary_Entry_Value* Dictionary_AddMerge( 
+		void*						dictionary, 
+		Dictionary_Entry_Key				key, 
+		Dictionary_Entry_Value*				value,
+		Dictionary_MergeType				mergeType );
+	
+	/** Add an entry to the dictionary... specifying how the entry values are merged if key present already */
+	Dictionary_Entry_Value* Dictionary_AddMergeWithSource( 
+		void*						dictionary, 
+		Dictionary_Entry_Key				key, 
+		Dictionary_Entry_Value*				value,
+		Dictionary_MergeType				mergeType,
+		Dictionary_Entry_Source				source );
+
+	/** Set a value in the dictionary */
+	Bool Dictionary_Set( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	
+	/** Set a value in the dictionary */
+	Bool Dictionary_SetWithSource( void* dictionary, Dictionary_Entry_Key key, 
+					Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+
+	/** Get a value from the dictionary */
+	Dictionary_Entry_Value* Dictionary_Get( void* dictionary, Dictionary_Entry_Key key );
+
+	/** Get a source from the dictionary */
+	Dictionary_Entry_Source Dictionary_GetSource( void* dictionary, Dictionary_Entry_Key key );
+
+	/** Get a value from the dictionary by index */
+	Dictionary_Entry_Value* Dictionary_GetByIndex( void* dictionary, Dictionary_Index index );
+
+	/** Get a value from the dictionary */
+	Dictionary_Entry_Value* Dictionary_GetDefault( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	
+	
+	/** Add an entry to the dictionary implementation */
+	void _Dictionary_Add( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	
+	/** Add an entry to the dictionary implementation */
+	void _Dictionary_AddWithSource( void* dictionary, Dictionary_Entry_Key key, 
+					Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	
+	/** Set a value in the dictionary implementation */
+	Bool _Dictionary_Set( void* dictionary, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	
+	/** Set a value in the dictionary implementation */
+	Bool _Dictionary_SetWithSource( void* dictionary, Dictionary_Entry_Key key, 
+					Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+
+	/** Get a value from the dictionary implementation */
+	Dictionary_Entry_Value* _Dictionary_Get( void* dictionary, Dictionary_Entry_Key key );
+	
+	/** Get a source from the dictionary implementation */
+	Dictionary_Entry_Source _Dictionary_GetSource( void* dictionary, Dictionary_Entry_Key key );
+	
+	Dictionary_Entry_Value* _Dictionary_GetByIndex( void* dictionary, Dictionary_Index index );
+		
+	/** Get an entry from the dictionary */
+	Dictionary_Entry* Dictionary_GetEntry( void* dictionary, Dictionary_Entry_Key key );
+
+	/** Get an entry from the dictionary by index */
+	Dictionary_Entry* Dictionary_GetEntryByIndex( void* dictionary, Dictionary_Index index);
+
+	/** Get count of entries in the dictionary */
+	Index Dictionary_GetCount( void* dictionary );
+
+	/** Loops over command line arguments and reads in values with format "--param=value" */
+	void Dictionary_ReadAllParamFromCommandLine( void* dictionary, int argc, char* argv[] ) ;
+
+#endif /* __Base_IO_Dictionary_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,156 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Dictionary_Entry.c 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include "Dictionary_Entry_Value.h"
+#include "Dictionary_Entry.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+Dictionary_Entry* Dictionary_Entry_New( Dictionary_Entry_Key key, Dictionary_Entry_Value* value )
+{
+	Dictionary_Entry* self;
+	
+	self = Memory_Alloc( Dictionary_Entry, "Entry" );
+	Dictionary_Entry_Init( self, key, value );
+	
+	return self;
+}
+
+Dictionary_Entry* Dictionary_Entry_NewWithSource( Dictionary_Entry_Key key, Dictionary_Entry_Value* value, Dictionary_Entry_Source source )
+{
+	Dictionary_Entry* self;
+	
+	self = Memory_Alloc( Dictionary_Entry, "Entry" );
+	Dictionary_Entry_InitWithSource( self, key, value, source );
+
+	return self;
+}
+
+void Dictionary_Entry_Init( Dictionary_Entry* self, Dictionary_Entry_Key key, Dictionary_Entry_Value* value )
+{
+	assert( key );
+	assert( value );
+
+	self->key = StG_Strdup( key );
+	self->value = value;
+	self->source = NULL;
+}
+
+void Dictionary_Entry_InitWithSource( Dictionary_Entry* self, Dictionary_Entry_Key key, Dictionary_Entry_Value* value, Dictionary_Entry_Source source )
+{
+	assert( key );
+	assert( value );
+	
+	self->key = StG_Strdup( key );
+	self->value = value;
+	if( source != NULL )
+		self->source = StG_Strdup( source );
+	else
+		self->source = NULL;
+}
+
+void Dictionary_Entry_Delete( Dictionary_Entry* self )
+{
+	Memory_Free( self->key );
+	Dictionary_Entry_Value_Delete( self->value );
+	if( self->source != NULL )
+		Memory_Free( self->source );
+	Memory_Free( self );
+}
+
+void Dictionary_Entry_Print( Dictionary_Entry* self, Stream* stream )
+{
+	Journal_Printf( stream, "%s: ", self->key );
+	Dictionary_Entry_Value_Print( self->value, stream );
+	if( self->source != NULL )
+		Journal_Printf( stream, " (original source file: %s)", self->source );
+}
+
+Bool Dictionary_Entry_Compare( Dictionary_Entry* self, Dictionary_Entry_Key key )
+{
+	return !strcmp( self->key, key );
+}
+
+Bool Dictionary_Entry_CompareWithSource( Dictionary_Entry* self, Dictionary_Entry_Key key, Dictionary_Entry_Source source )
+{
+	if( self->source == NULL )
+	{
+		if( source == NULL )
+			return !strcmp( self->key, key );
+		else
+			return False;
+	}
+	else
+	{
+		if( source == NULL )
+			return False;
+		else
+			return ( !strcmp( self->key, key ) && !strcmp( self->source, source ) ); 
+	}
+}
+
+void Dictionary_Entry_Set( Dictionary_Entry* self, Dictionary_Entry_Value* value )
+{
+	assert( value );
+	Dictionary_Entry_Value_Delete( self->value );
+	self->value = value;
+}
+
+void Dictionary_Entry_SetWithSource( Dictionary_Entry* self, Dictionary_Entry_Value* value, Dictionary_Entry_Source source )
+{
+	assert( value );
+	Dictionary_Entry_Value_Delete( self->value );
+	self->value = value;
+
+	if( self->source != NULL )
+		Memory_Free( self->source );
+	if( source != NULL )
+		self->source = StG_Strdup( source );
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Get( Dictionary_Entry* self )
+{
+	return self->value;
+}
+
+Dictionary_Entry_Source Dictionary_Entry_GetSource( Dictionary_Entry* self )
+{
+	return self->source;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**	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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	A tuple in the Dictionary database.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	- A copy of the entry key is created and deleted internally.
+**	- If not NULL, a copy of the originalSource is created and deleted internally.
+**	- Assumes ownership of the entry value, and will destroy it when Dictionary_Entry_Delete() is called.
+**
+** <b>Description:</b>
+**	A data structure which holds a key-value-originalSource (third may be NULL) triplet for a dictionary.
+**
+** $Id: Dictionary_Entry.h 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**/
+
+#ifndef __Base_IO_Dictionary_Entry_h__
+#define __Base_IO_Dictionary_Entry_h__
+	
+	/** \def __Dictionary_Entry See Dictionary_Entry */
+	#define __Dictionary_Entry  \
+		Dictionary_Entry_Key		key; \
+		Dictionary_Entry_Value*		value; \
+		Dictionary_Entry_Source		source;
+
+	struct _Dictionary_Entry { __Dictionary_Entry };
+
+	/** Constant value used for Dictionary_Entry source when no source file was specified */
+	#define NO_SOURCEFILE "created_in_code"
+	
+	
+	/** Create a new Dictionary_Entry (assumes ownership of the value) */
+	Dictionary_Entry* Dictionary_Entry_New( Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+
+	/** Create a new Dictionary_Entry with a source file (assumes ownership of the value) */
+	Dictionary_Entry* Dictionary_Entry_NewWithSource( Dictionary_Entry_Key key, Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+
+	/** Initialise a Dictionary_Entry (assumes ownership of the value) */
+	void Dictionary_Entry_Init( Dictionary_Entry* self, Dictionary_Entry_Key key, Dictionary_Entry_Value* value );
+	
+	/** Initialise a Dictionary_Entry with a source file (assumes ownership of the value) */
+	void Dictionary_Entry_InitWithSource( Dictionary_Entry* self, Dictionary_Entry_Key key, Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	
+	/** Destroy a Dictionary_Entry instance */
+	void Dictionary_Entry_Delete( Dictionary_Entry* self );
+	
+	/** Print the contents of a Dictionary_Entry construct */
+	void Dictionary_Entry_Print( Dictionary_Entry* self, Stream* stream );
+	
+
+	/** Compare a Dictionary_Entry to a key */
+	Bool Dictionary_Entry_Compare( Dictionary_Entry* self, Dictionary_Entry_Key key );
+
+	/** Compare a Dictionary_Entry to a key, and source */
+	Bool Dictionary_Entry_CompareWithSource( Dictionary_Entry* self, Dictionary_Entry_Key key, Dictionary_Entry_Source source );
+
+	/** Set/Replace an entry's value (assumes ownership of the value) */
+	void Dictionary_Entry_Set( Dictionary_Entry* self, Dictionary_Entry_Value* value );
+	
+	/** Set/Replace an entry's value with new source file (assumes ownership of the value) */
+	void Dictionary_Entry_SetWithSource( Dictionary_Entry* self, Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	
+	/** Get an entry's value */
+	Dictionary_Entry_Value* Dictionary_Entry_Get( Dictionary_Entry* self );
+
+	/** Get an entry's originalSource */
+	Dictionary_Entry_Source Dictionary_Entry_GetSource( Dictionary_Entry* self );
+	
+#endif /* __Base_IO_Dictionary_Entry_h__ */
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1087 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Dictionary_Entry_Value.c 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include "JournalFile.h"
+#include "Stream.h" 
+#include "Dictionary.h"
+#include "Dictionary_Entry.h"
+#include "Dictionary_Entry_Value.h"
+#include "PathUtils.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Private functions */
+static void Dictionary_Entry_Value_SetValueUnsignedInt( Dictionary_Entry_Value* self, unsigned int value );
+static void Dictionary_Entry_Value_SetValueInt( Dictionary_Entry_Value* self, unsigned int value );
+static void Dictionary_Entry_Value_SetValueDouble( Dictionary_Entry_Value* self, double value );
+static void Dictionary_Entry_Value_SetValueUnsignedLong( Dictionary_Entry_Value* self, unsigned long value );
+static void Dictionary_Entry_Value_SetValueString( Dictionary_Entry_Value* self, const char* const value );
+static void Dictionary_Entry_Value_SetValueBool( Dictionary_Entry_Value* self, Bool value );
+static void Dictionary_Entry_Value_SetValueNewStruct( Dictionary_Entry_Value* self);
+static void Dictionary_Entry_Value_SetValueStruct( Dictionary_Entry_Value* self, void* value );
+static void Dictionary_Entry_Value_SetValueNewList( Dictionary_Entry_Value* self );
+static void Dictionary_Entry_Value_DeleteContents( Dictionary_Entry_Value* self);
+
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromUnsignedInt( unsigned int value ) {
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Signed Int" );
+	
+	Dictionary_Entry_Value_InitFromUnsignedInt( self, value );
+	
+	return self;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromInt( int value ) {
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Int" );
+	
+	Dictionary_Entry_Value_InitFromInt( self, value );
+	
+	return self;
+}
+
+void Dictionary_Entry_Value_InitFromUnsignedInt( Dictionary_Entry_Value* self, unsigned int value ) {
+	Dictionary_Entry_Value_SetValueUnsignedInt( self, value );
+	self->next = 0;
+}
+
+void Dictionary_Entry_Value_InitFromInt( Dictionary_Entry_Value* self, int value ) {
+	Dictionary_Entry_Value_SetValueInt( self, value );
+	self->next = 0;
+}
+
+static void Dictionary_Entry_Value_SetValueUnsignedInt( Dictionary_Entry_Value* self, unsigned int value ) {
+	self->as.typeUnsignedInt = value;
+	self->type = Dictionary_Entry_Value_Type_UnsignedInt;
+}
+
+static void Dictionary_Entry_Value_SetValueInt( Dictionary_Entry_Value* self, unsigned int value ) {
+	self->as.typeInt = value;
+	self->type = Dictionary_Entry_Value_Type_Int;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromDouble( double value ) {
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Double" );
+	
+	Dictionary_Entry_Value_InitFromDouble( self, value );
+	
+	return self;
+}
+
+void Dictionary_Entry_Value_InitFromDouble( Dictionary_Entry_Value* self, double value ) {
+	Dictionary_Entry_Value_SetValueDouble( self, value );
+	self->next = 0;
+}
+
+
+static void Dictionary_Entry_Value_SetValueDouble( Dictionary_Entry_Value* self, double value ) {
+	self->as.typeDouble = value;
+	self->type = Dictionary_Entry_Value_Type_Double;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromUnsignedLong( unsigned long value ) {
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Unsigned Long" );
+	
+	Dictionary_Entry_Value_InitFromUnsignedLong( self, value );
+	
+	return self;
+}
+
+void Dictionary_Entry_Value_InitFromUnsignedLong( Dictionary_Entry_Value* self, unsigned long value ) {
+	Dictionary_Entry_Value_SetValueUnsignedLong( self, value );
+	self->next = 0;
+}
+
+static void Dictionary_Entry_Value_SetValueUnsignedLong( Dictionary_Entry_Value* self, unsigned long value ) {
+	self->as.typeUnsignedLong = value;
+	self->type = Dictionary_Entry_Value_Type_UnsignedLong;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromString( const char* const value ) {
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value String" );
+	
+	Dictionary_Entry_Value_InitFromString( self, value );
+	
+	return self;
+}
+	
+void Dictionary_Entry_Value_InitFromString( Dictionary_Entry_Value* self, const char* const value ) {
+	Dictionary_Entry_Value_SetValueString( self, value );
+	self->next = 0;
+}
+
+static void Dictionary_Entry_Value_SetValueString( Dictionary_Entry_Value* self, const char* const value ) {
+	self->as.typeString = StG_Strdup( value );
+	self->type = Dictionary_Entry_Value_Type_String;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromStringTo( char* string, char type ) {
+	Dictionary_Entry_Value* retValue = Memory_Alloc( Dictionary_Entry_Value, "Return Value" );
+	
+	/* need to create the value temporarily so it can be converted if necessary */
+	retValue->type = Dictionary_Entry_Value_Type_String;
+
+	if ( string ) {
+		retValue->as.typeString = ExpandEnvironmentVariables( string );
+	}
+	else {
+		retValue->as.typeString = string;
+	}
+	
+	switch (type) {
+		case Dictionary_Entry_Value_Type_String:
+			Dictionary_Entry_Value_InitFromString( retValue, retValue->as.typeString );
+			break;
+		case Dictionary_Entry_Value_Type_Double:
+			Dictionary_Entry_Value_InitFromDouble( retValue, Dictionary_Entry_Value_AsDouble( retValue ) );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			Dictionary_Entry_Value_InitFromUnsignedInt( retValue, Dictionary_Entry_Value_AsUnsignedInt( retValue ) );
+			break;
+		case Dictionary_Entry_Value_Type_Int:
+			Dictionary_Entry_Value_InitFromInt( retValue, Dictionary_Entry_Value_AsInt( retValue ) );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			Dictionary_Entry_Value_InitFromUnsignedLong( retValue, Dictionary_Entry_Value_AsUnsignedLong( retValue ) );
+			break;
+		case Dictionary_Entry_Value_Type_Bool:
+			Dictionary_Entry_Value_InitFromBool( retValue, Dictionary_Entry_Value_AsBool( retValue ) );
+			break;
+		case Dictionary_Entry_Value_Type_Struct:
+			Dictionary_Entry_Value_InitNewStruct( retValue );
+			break;
+		case Dictionary_Entry_Value_Type_List:
+			Dictionary_Entry_Value_InitNewList( retValue );
+			break;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: type '%d' is invalid.\n", __func__, type );
+		}
+	}		
+	
+	return retValue;
+}
+
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromBool( Bool value ) {
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Bool" );
+	
+	Dictionary_Entry_Value_InitFromBool( self, value );
+	
+	return self;
+}
+
+void Dictionary_Entry_Value_InitFromBool( Dictionary_Entry_Value* self, Bool value ) {
+	Dictionary_Entry_Value_SetValueBool( self, value );
+	self->next = 0;
+}
+
+static void Dictionary_Entry_Value_SetValueBool( Dictionary_Entry_Value* self, Bool value ) {
+	self->as.typeBool = value;
+	if( self->as.typeBool != False && self->as.typeBool != True ) {
+		self->as.typeBool = True;
+	}
+	self->type = Dictionary_Entry_Value_Type_Bool;
+}
+
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_NewStruct( void )
+{
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Struct" );
+	
+	Dictionary_Entry_Value_InitNewStruct( self );
+	return self;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_FromStruct( void* dictionary )
+{
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value Struct" );
+	
+	Dictionary_Entry_Value_InitFromStruct( self, dictionary );
+	return self;
+}
+
+void Dictionary_Entry_Value_InitNewStruct( Dictionary_Entry_Value* self )
+{
+	Dictionary_Entry_Value_SetValueNewStruct( self );
+	self->next = 0;
+}
+
+void Dictionary_Entry_Value_InitFromStruct( Dictionary_Entry_Value* self, void* dictionary )
+{
+	Dictionary_Entry_Value_SetValueStruct( self, dictionary );
+	self->next = 0;
+}
+
+static void Dictionary_Entry_Value_SetValueNewStruct( Dictionary_Entry_Value* self ) {
+	Dictionary_Entry_Value_SetValueStruct( self, Dictionary_New() );
+}
+
+static void Dictionary_Entry_Value_SetValueStruct( Dictionary_Entry_Value* self, void* value )
+{
+	self->as.typeStruct = (Dictionary*) value;
+	self->type = Dictionary_Entry_Value_Type_Struct;
+}
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_NewList( void )
+{
+	Dictionary_Entry_Value* self = Memory_Alloc( Dictionary_Entry_Value, "Entry Value List" );
+	
+	Dictionary_Entry_Value_InitNewList( self );
+	return self;
+}
+
+void Dictionary_Entry_Value_InitNewList( Dictionary_Entry_Value* self )
+{
+	Dictionary_Entry_Value_SetValueNewList( self );
+	self->next = 0;
+}
+
+static void Dictionary_Entry_Value_SetValueNewList( Dictionary_Entry_Value* self )
+{
+	self->as.typeList = Memory_Alloc( Dictionary_Entry_Value_List, "Entry Value List" );
+	self->as.typeList->first = NULL;
+	self->as.typeList->last = NULL;
+	self->as.typeList->count = 0;
+	self->as.typeList->encoding = Default;
+	self->type = Dictionary_Entry_Value_Type_List;
+}
+
+
+void Dictionary_Entry_Value_AddMember( Dictionary_Entry_Value* self, Dictionary_Entry_Key name,	Dictionary_Entry_Value* value )
+{
+	self->as.typeStruct->add( self->as.typeStruct, name, value);
+}
+
+void Dictionary_Entry_Value_AddMemberWithSource( Dictionary_Entry_Value* self, Dictionary_Entry_Key name,
+							Dictionary_Entry_Value* value, Dictionary_Entry_Source source )
+{
+	self->as.typeStruct->addWithSource( self->as.typeStruct, name, value, source);
+}
+
+void Dictionary_Entry_Value_AddElement( Dictionary_Entry_Value* self, Dictionary_Entry_Value* element )
+{
+	/* check type - convert to a list if not so... */
+	if (Dictionary_Entry_Value_Type_List != self->type) {
+		Dictionary_Entry_Value* copy;
+		
+		switch (self->type) {
+			case Dictionary_Entry_Value_Type_String:
+				copy = Dictionary_Entry_Value_FromString( self->as.typeString );
+				break;
+			case Dictionary_Entry_Value_Type_Double:
+				copy = Dictionary_Entry_Value_FromDouble( self->as.typeDouble );
+				break;
+			case Dictionary_Entry_Value_Type_UnsignedInt:
+				copy = Dictionary_Entry_Value_FromUnsignedInt( self->as.typeUnsignedInt );
+				break;
+			case Dictionary_Entry_Value_Type_Int:
+				copy = Dictionary_Entry_Value_FromInt( self->as.typeInt );
+				break;
+			case Dictionary_Entry_Value_Type_UnsignedLong:
+				copy = Dictionary_Entry_Value_FromUnsignedLong( self->as.typeUnsignedLong );
+				break;
+			case Dictionary_Entry_Value_Type_Bool:
+				copy = Dictionary_Entry_Value_FromBool( self->as.typeBool );
+				break;
+			case Dictionary_Entry_Value_Type_Struct:
+				copy = Dictionary_Entry_Value_NewStruct();
+				copy->as.typeStruct = self->as.typeStruct;
+				break;
+			default: {
+				Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+				Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+			}
+		}
+		
+		Dictionary_Entry_Value_SetNewList( self );	
+		Dictionary_Entry_Value_AddElement( self, copy );
+	}
+	
+	if (!self->as.typeList->first) {
+		self->as.typeList->first = element;
+	} else {
+		self->as.typeList->last->next = element;
+	}
+	self->as.typeList->last = element;
+	self->as.typeList->count++;
+}
+
+
+void Dictionary_Entry_Value_AddElementWithSource( Dictionary_Entry_Value* self, Dictionary_Entry_Value* element,
+							Dictionary_Entry_Source source )
+{
+	/* check type - convert to a list if not so... */
+	if (Dictionary_Entry_Value_Type_List != self->type) {
+		Dictionary_Entry_Value* copy;
+		
+		switch (self->type) {
+			case Dictionary_Entry_Value_Type_String:
+				copy = Dictionary_Entry_Value_FromString( self->as.typeString );
+				break;
+			case Dictionary_Entry_Value_Type_Double:
+				copy = Dictionary_Entry_Value_FromDouble( self->as.typeDouble );
+				break;
+			case Dictionary_Entry_Value_Type_UnsignedInt:
+				copy = Dictionary_Entry_Value_FromUnsignedInt( self->as.typeUnsignedInt );
+				break;
+			case Dictionary_Entry_Value_Type_Int:
+				copy = Dictionary_Entry_Value_FromInt( self->as.typeInt );
+				break;
+			case Dictionary_Entry_Value_Type_UnsignedLong:
+				copy = Dictionary_Entry_Value_FromUnsignedLong( self->as.typeUnsignedLong );
+				break;
+			case Dictionary_Entry_Value_Type_Bool:
+				copy = Dictionary_Entry_Value_FromBool( self->as.typeBool );
+				break;
+			case Dictionary_Entry_Value_Type_Struct:
+				copy = Dictionary_Entry_Value_NewStruct();
+				copy->as.typeStruct = self->as.typeStruct;
+				break;
+			default: {
+				Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+				Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+			}
+		}
+		
+		Dictionary_Entry_Value_SetNewList( self );	
+		Dictionary_Entry_Value_AddElementWithSource( self, copy, source );
+	}
+	
+	if (!self->as.typeList->first) {
+		self->as.typeList->first = element;
+	} else {
+		self->as.typeList->last->next = element;
+	}
+	self->as.typeList->last = element;
+	self->as.typeList->count++;
+}
+
+
+void Dictionary_Entry_Value_Delete( Dictionary_Entry_Value* self ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Memory_Free( self );
+}
+
+
+static void Dictionary_Entry_Value_DeleteContents( Dictionary_Entry_Value* self ) {
+	Dictionary_Entry_Value* cur         = NULL;
+	Dictionary_Entry_Value* next        = NULL;
+	Stream*                 errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_String:
+			Journal_Firewall( self->as.typeString != NULL, errorStream, "In func %s: self->as.typeString is NULL.\n", __func__ );
+			Memory_Free( self->as.typeString );
+			break;
+		case Dictionary_Entry_Value_Type_Struct:
+			Journal_Firewall( self->as.typeStruct != NULL, errorStream, "In func %s: self->as.typeStruct is NULL.\n", __func__ );
+			Stg_Class_Delete( self->as.typeStruct );
+			break;
+		case Dictionary_Entry_Value_Type_List:
+			cur = self->as.typeList->first;
+			while ( cur ) {
+				next = cur->next;
+				Dictionary_Entry_Value_Delete( cur );
+				cur = next;
+			}	
+			Memory_Free( self->as.typeList );
+			break;
+		case Dictionary_Entry_Value_Type_Double:
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+		case Dictionary_Entry_Value_Type_Int:
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+		case Dictionary_Entry_Value_Type_Bool:
+			break;
+		default:
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+	};
+}
+
+
+void Dictionary_Entry_Value_Print( Dictionary_Entry_Value* self, Stream* stream ) {
+	Dictionary_Index index;
+	
+	if( !self ) {
+		return;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_String:
+			Journal_Printf( stream, "\"%s\"", self->as.typeString );
+			return;
+		case Dictionary_Entry_Value_Type_Double:
+			Journal_Printf( stream, "%g", self->as.typeDouble );
+			return;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			Journal_Printf( stream, "%u", self->as.typeUnsignedInt );
+			return;
+		case Dictionary_Entry_Value_Type_Int:
+			Journal_Printf( stream, "%d", self->as.typeInt );
+			return;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			Journal_Printf( stream, "%ld", self->as.typeUnsignedLong );
+			return;
+		case Dictionary_Entry_Value_Type_Bool:
+			Journal_Printf( stream, "%s", Dictionary_Entry_Value_AsString( self ) );
+			return;
+		case Dictionary_Entry_Value_Type_List:
+			if (self->as.typeList->first) {
+				Dictionary_Entry_Value* cur = self->as.typeList->first;
+				Dictionary_Entry_Value_Print( cur, stream );
+				cur = cur->next;
+				
+				while (cur) {
+					Journal_Printf( stream, ", " );
+					Dictionary_Entry_Value_Print( cur, stream );
+					cur = cur->next;
+				}
+			}
+			return;
+		case Dictionary_Entry_Value_Type_Struct:
+			Stream_Indent( stream );
+			for( index = 0; index < self->as.typeStruct->count; index++ ) {
+				Journal_Printf( stream, "\n");
+				Journal_Printf( stream, "%s: ", self->as.typeStruct->entryPtr[index]->key );
+				Dictionary_Entry_Value_Print( self->as.typeStruct->entryPtr[index]->value, stream );
+			}
+			Stream_UnIndent( stream );
+			return;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+}
+
+
+void Dictionary_Entry_Value_SetFrom( Dictionary_Entry_Value* self, void* value, const char type) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	
+	switch (type) {
+		case Dictionary_Entry_Value_Type_String:
+			Dictionary_Entry_Value_SetValueString( self, *( (char**) value) );
+			break;
+		case Dictionary_Entry_Value_Type_Double:
+			Dictionary_Entry_Value_SetValueDouble( self, *( (double*) value) );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			Dictionary_Entry_Value_SetValueUnsignedInt( self, *( (unsigned int*) value) );
+			break;
+		case Dictionary_Entry_Value_Type_Int:
+			Dictionary_Entry_Value_SetValueInt( self, *( (unsigned int*) value) );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			Dictionary_Entry_Value_SetValueUnsignedLong( self, *( (unsigned long*) value) );
+			break;
+		case Dictionary_Entry_Value_Type_Bool:
+			Dictionary_Entry_Value_SetValueBool( self, *( (Bool*) value) );
+			break;
+		case Dictionary_Entry_Value_Type_Struct:
+			Dictionary_Entry_Value_SetValueStruct( self, value );
+			break;
+		case Dictionary_Entry_Value_Type_List:
+			Dictionary_Entry_Value_SetValueNewList( self );
+			break;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+}
+
+
+void Dictionary_Entry_Value_SetFromUnsignedInt( Dictionary_Entry_Value* self, unsigned int value ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueUnsignedInt( self, value );
+}
+
+void Dictionary_Entry_Value_SetFromInt( Dictionary_Entry_Value* self, int value ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueInt( self, value );
+}
+
+void Dictionary_Entry_Value_SetFromDouble( Dictionary_Entry_Value* self, double value ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueDouble( self, value );
+}
+
+void Dictionary_Entry_Value_SetFromUnsignedLong( Dictionary_Entry_Value* self, unsigned long value ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueUnsignedLong( self, value );
+}
+
+void Dictionary_Entry_Value_SetFromString( Dictionary_Entry_Value* self, char* value ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueString( self, value );
+}
+
+
+void Dictionary_Entry_Value_SetFromStringKeepCurrentType( Dictionary_Entry_Value* self, char* string ) {
+	Dictionary_Entry_Value_Type currType = self->type;
+	Dictionary_Entry_Value_DeleteContents( self );
+	self->type = Dictionary_Entry_Value_Type_String;
+	self->as.typeString = string;
+	
+	switch (currType) {
+		case Dictionary_Entry_Value_Type_String:
+			Dictionary_Entry_Value_SetValueString( self, string );
+			break;
+		case Dictionary_Entry_Value_Type_Double:
+			Dictionary_Entry_Value_SetValueDouble( self, Dictionary_Entry_Value_AsDouble( self ) );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			Dictionary_Entry_Value_SetValueUnsignedInt( self, Dictionary_Entry_Value_AsUnsignedInt( self ) );
+			break;
+		case Dictionary_Entry_Value_Type_Int:
+			Dictionary_Entry_Value_SetValueInt( self, Dictionary_Entry_Value_AsInt( self ) );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			Dictionary_Entry_Value_SetValueUnsignedLong( self, Dictionary_Entry_Value_AsUnsignedLong( self ) );
+			break;
+		case Dictionary_Entry_Value_Type_Bool:
+			Dictionary_Entry_Value_SetValueBool( self, Dictionary_Entry_Value_AsBool( self ) );
+			break;
+		case Dictionary_Entry_Value_Type_Struct:
+			Dictionary_Entry_Value_SetValueNewStruct( self );
+			break;
+		case Dictionary_Entry_Value_Type_List:
+			Dictionary_Entry_Value_SetValueNewList( self );
+			break;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+}
+
+
+void Dictionary_Entry_Value_SetFromBool( Dictionary_Entry_Value* self, Bool value ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueBool( self, value );
+}
+
+
+void Dictionary_Entry_Value_SetNewStruct( Dictionary_Entry_Value* self )
+{
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueNewStruct( self );
+}
+
+
+void Dictionary_Entry_Value_SetNewList( Dictionary_Entry_Value* self )
+{
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueNewList( self );
+}
+
+void Dictionary_Entry_Value_SetFromStruct( Dictionary_Entry_Value* self, void* dictionary ) {
+	Dictionary_Entry_Value_DeleteContents( self );
+	Dictionary_Entry_Value_SetValueStruct( self, dictionary );
+}
+
+unsigned int Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value* self ) {
+	if( !self ) {
+		return 0;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			/* Do nothing (later will print a warning) */
+			return 0;
+		case Dictionary_Entry_Value_Type_List:
+			/* returns the first element as an unsigned int */
+			if (self->as.typeList->first) {
+				return Dictionary_Entry_Value_AsUnsignedInt( self->as.typeList->first );
+			} else {	
+				return 0;
+			}	
+		case Dictionary_Entry_Value_Type_String:
+			return strtoul( self->as.typeString, 0, 0 );
+		case Dictionary_Entry_Value_Type_Double:
+			return (unsigned int)self->as.typeDouble;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			return self->as.typeUnsignedInt;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return self->as.typeUnsignedLong;
+		case Dictionary_Entry_Value_Type_Bool:
+			return (unsigned int)self->as.typeBool;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return 0;
+}
+
+int Dictionary_Entry_Value_AsInt( Dictionary_Entry_Value* self ) {
+	if( !self ) {
+		return 0;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			/* Do nothing (later will print a warning) */
+			return 0;
+		case Dictionary_Entry_Value_Type_List:
+			/* returns the first element as an unsigned int */
+			if (self->as.typeList->first) {
+				return Dictionary_Entry_Value_AsInt( self->as.typeList->first );
+			} else {	
+				return 0;
+			}	
+		case Dictionary_Entry_Value_Type_String:
+			return strtoul( self->as.typeString, 0, 0 );
+		case Dictionary_Entry_Value_Type_Double:
+			return (unsigned int)self->as.typeDouble;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			return self->as.typeUnsignedInt;
+		case Dictionary_Entry_Value_Type_Int:
+			return self->as.typeInt;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return self->as.typeUnsignedLong;
+		case Dictionary_Entry_Value_Type_Bool:
+			return (unsigned int)self->as.typeBool;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return 0;
+}
+
+double Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value* self ) {
+	if( !self ) {
+		return 0.0f;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			/* Do nothing (later will print a warning) */
+			return 0;
+		case Dictionary_Entry_Value_Type_List:
+			/* returns the first element as an unsigned int */
+			if (self->as.typeList->first) {
+				return Dictionary_Entry_Value_AsDouble( self->as.typeList->first );
+			} else {	
+				return 0;
+			}	
+		case Dictionary_Entry_Value_Type_String:
+			return strtod( self->as.typeString, 0 );
+		case Dictionary_Entry_Value_Type_Double:
+			return self->as.typeDouble;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			return (double)self->as.typeUnsignedInt;
+		case Dictionary_Entry_Value_Type_Int:
+			return self->as.typeInt;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return self->as.typeUnsignedLong;
+		case Dictionary_Entry_Value_Type_Bool:
+			return (double)self->as.typeBool;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	
+	return 0.0f;
+}
+
+unsigned long Dictionary_Entry_Value_AsUnsignedLong( Dictionary_Entry_Value* self ) {
+	if( !self ) {
+		return 0.0;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			/* Do nothing (later will print a warning) */
+			return 0;
+		case Dictionary_Entry_Value_Type_List:
+			/* returns the first element as an unsigned long */
+			if (self->as.typeList->first) {
+				return Dictionary_Entry_Value_AsUnsignedLong( self->as.typeList->first );
+			} else {	
+				return 0;
+			}	
+		case Dictionary_Entry_Value_Type_String:
+			return strtod( self->as.typeString, 0 );
+		case Dictionary_Entry_Value_Type_Double:
+			return self->as.typeDouble;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			return (double)self->as.typeUnsignedInt;
+		case Dictionary_Entry_Value_Type_Int:
+			return self->as.typeInt;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return self->as.typeUnsignedLong;
+		case Dictionary_Entry_Value_Type_Bool:
+			return (double)self->as.typeBool;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	
+	return 0.0;
+}
+
+char* Dictionary_Entry_Value_AsString( Dictionary_Entry_Value* self ) {
+	static char buf[256];
+	
+	if( !self ) {
+		strcpy( buf, "" );
+		return buf;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			strcpy( buf, "" );
+			return buf;
+		case Dictionary_Entry_Value_Type_List:
+			/* returns the first element as a string */
+			if (self->as.typeList->first) {
+				return Dictionary_Entry_Value_AsString( self->as.typeList->first );
+			} else {	
+				return 0;
+			}	
+		case Dictionary_Entry_Value_Type_String:
+			return self->as.typeString;
+		case Dictionary_Entry_Value_Type_Double:
+			sprintf( buf, "%g", self->as.typeDouble );
+			return buf;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			sprintf( buf, "%u", self->as.typeUnsignedInt );
+			return buf;
+		case Dictionary_Entry_Value_Type_Int:
+			sprintf( buf, "%d", self->as.typeInt );
+			return buf;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			sprintf( buf, "%ld", self->as.typeUnsignedLong );
+			return buf;
+		case Dictionary_Entry_Value_Type_Bool:
+			if (True == self->as.typeBool) {
+				 sprintf( buf, "true" );
+			}	 
+			else if (False == self->as.typeBool) {
+				 sprintf( buf, "false" );
+			}	 
+			return buf;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return buf;
+}
+
+
+Bool Dictionary_Entry_Value_AsBool( Dictionary_Entry_Value* self ) {
+	if( !self ) {
+		return 0;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			/* Do nothing (later will print a warning) */
+			return 0;
+		case Dictionary_Entry_Value_Type_List:
+			/* returns the first element as an unsigned int */
+			if (self->as.typeList->first) {
+				return Dictionary_Entry_Value_AsBool( self->as.typeList->first );
+			} else {	
+				return 0;
+			}	
+		case Dictionary_Entry_Value_Type_String:
+			if( !strcmp( "1", self->as.typeString ) ) {
+				return True;
+			}
+			else if( !strcmp( "0", self->as.typeString ) ) {
+				return False;
+			}
+			else if( !strcasecmp( "true", self->as.typeString ) ) {
+				return True;
+			}
+			else if( !strcasecmp( "false", self->as.typeString ) ) {
+				return False;
+			}
+			else if( !strcasecmp( "t", self->as.typeString ) ) {
+				return True;
+			}
+			else if( !strcasecmp( "f", self->as.typeString ) ) {
+				return False;
+			}
+			else if( !strcasecmp( "yes", self->as.typeString ) ) {
+				return True;
+			}
+			else if( !strcasecmp( "no", self->as.typeString ) ) {
+				return False;
+			}
+			else if( !strcasecmp( "y", self->as.typeString ) ) {
+				return True;
+			}
+			else if( !strcasecmp( "n", self->as.typeString ) ) {
+				return False;
+			}
+			else if( !strcasecmp( "on", self->as.typeString ) ) {
+				return True;
+			}
+			else if( !strcasecmp( "off", self->as.typeString ) ) {
+				return False;
+			}
+			else {
+				Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+				Journal_Firewall( False, errorStream, "In func %s: Cannot convert string '%s' to Bool.\n", __func__, self->as.typeString );
+			}
+		case Dictionary_Entry_Value_Type_Double:
+			if( (Bool)self->as.typeDouble ) {
+				return True;
+			}
+			else {
+				return False;
+			}
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			if( (Bool)self->as.typeUnsignedInt ) {
+				return True;
+			}
+			else {
+				return False;
+			}
+		case Dictionary_Entry_Value_Type_Int:
+			if( (Bool)self->as.typeInt ) {
+				return True;
+			}
+			else {
+				return False;
+			}
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			if( (Bool)self->as.typeUnsignedLong ) {
+				return True;
+			}
+			else {
+				return False;
+			}
+		case Dictionary_Entry_Value_Type_Bool:
+			return self->as.typeBool;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return False;
+}
+
+
+Dictionary* Dictionary_Entry_Value_AsDictionary( Dictionary_Entry_Value* self ) {
+	if( !self ) {
+		return 0;
+	}
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			return self->as.typeStruct;
+		case Dictionary_Entry_Value_Type_List:
+			return 0;
+		case Dictionary_Entry_Value_Type_String:
+			return 0;
+		case Dictionary_Entry_Value_Type_Double:
+			return 0;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			return 0;
+		case Dictionary_Entry_Value_Type_Int:
+			return 0;
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return 0;
+		case Dictionary_Entry_Value_Type_Bool:
+			return 0;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return 0;
+}
+
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_GetFirstElement( Dictionary_Entry_Value* self )
+{
+	return Dictionary_Entry_Value_GetElement( self, 0 );
+}
+
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_GetElement( Dictionary_Entry_Value* self, Index index )
+{
+	Index currIndex = 0;
+	Dictionary_Entry_Value* currElement = NULL;
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_List:
+			if ( index > self->as.typeList->count ) {
+				return NULL;
+			}
+			
+			currElement = self->as.typeList->first;
+			while ( currIndex++ < index ) {
+				currElement = currElement->next;
+			}	
+			
+			return currElement;
+		case Dictionary_Entry_Value_Type_Struct:
+		case Dictionary_Entry_Value_Type_String:
+		case Dictionary_Entry_Value_Type_Bool:
+		case Dictionary_Entry_Value_Type_Double:
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+		case Dictionary_Entry_Value_Type_Int:
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return self;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return self;
+}
+
+
+Index Dictionary_Entry_Value_GetCount( Dictionary_Entry_Value* self )
+{
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_List:
+			return self->as.typeList->count;
+		case Dictionary_Entry_Value_Type_Struct:
+			return self->as.typeStruct->count;
+		case Dictionary_Entry_Value_Type_String:
+		case Dictionary_Entry_Value_Type_Bool:
+		case Dictionary_Entry_Value_Type_Double:
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+		case Dictionary_Entry_Value_Type_Int:
+			return 1;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return 1;
+}
+
+
+void Dictionary_Entry_Value_SetEncoding( Dictionary_Entry_Value* self, const Encoding encoding ) {
+	if ( Dictionary_Entry_Value_Type_List == self->type ) {
+		self->as.typeList->encoding = encoding;
+	}	
+}
+
+
+Encoding Dictionary_Entry_Value_GetEncoding( Dictionary_Entry_Value* self ) {
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_List:
+			return self->as.typeList->encoding;
+		case Dictionary_Entry_Value_Type_Struct:
+		case Dictionary_Entry_Value_Type_String:
+		case Dictionary_Entry_Value_Type_Bool:
+		case Dictionary_Entry_Value_Type_Double:
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+		case Dictionary_Entry_Value_Type_Int:
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			return Default;
+		default: {
+			Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+		}
+	}
+	return Default;
+}
+
+
+Dictionary_Entry_Value* Dictionary_Entry_Value_GetMember( Dictionary_Entry_Value* self, Dictionary_Entry_Key name) {
+	Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+
+	Journal_Firewall( self->as.typeStruct != NULL, 
+			errorStream, "In func %s: self->as.typeStruct is NULL.\n", __func__, self->as.typeStruct );
+	if ( Dictionary_Entry_Value_Type_Struct != self->type ) {
+		return NULL;
+	}
+	
+	return self->as.typeStruct->get( self->as.typeStruct, name );
+}
+
+
+void Dictionary_Entry_Value_SetMember( Dictionary_Entry_Value* self,
+	Dictionary_Entry_Key name, Dictionary_Entry_Value* member ) {
+	Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			self->as.typeStruct->set( self->as.typeStruct, name, member );
+			return;
+		case Dictionary_Entry_Value_Type_List:
+		case Dictionary_Entry_Value_Type_String:
+		case Dictionary_Entry_Value_Type_Bool:
+		case Dictionary_Entry_Value_Type_Double:
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+		case Dictionary_Entry_Value_Type_Int:
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			/* should print a warning once journal set up */
+			Journal_Printf( errorStream, "Func %s does not support Dictionary_Entry_Values of type '%d'.\n", __func__, self->type );
+			return;
+		default:
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+	};
+}
+
+
+void Dictionary_Entry_Value_SetMemberWithSource( Dictionary_Entry_Value* self,
+	Dictionary_Entry_Key name, Dictionary_Entry_Value* member, Dictionary_Entry_Source source ) {
+	Stream* errorStream = Journal_Register( Error_Type, "Dictionary_Entry_Value" );
+	
+	switch( self->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			self->as.typeStruct->setWithSource( self->as.typeStruct, name, member, source );
+			return;
+		case Dictionary_Entry_Value_Type_List:
+		case Dictionary_Entry_Value_Type_String:
+		case Dictionary_Entry_Value_Type_Bool:
+		case Dictionary_Entry_Value_Type_Double:
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+		case Dictionary_Entry_Value_Type_Int:
+		case Dictionary_Entry_Value_Type_UnsignedLong:
+			/* should print a warning once journal set up */
+			Journal_Printf( errorStream, "Func %s does not support Dictionary_Entry_Values of type '%d'.\n", __func__, self->type );
+			return;
+		default:
+			Journal_Firewall( False, errorStream, "In func %s: self->type '%d' is invalid.\n", __func__, self->type );
+	};
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,250 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	Represents a value in the dictionary.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	None.
+**
+** <b>Description:</b>
+**	A generic value. Can be read as a primitive, as a struct or a list.
+**	Contains many functions which perform the conversions to get/set a value to different types.
+**
+** $Id: Dictionary_Entry_Value.h 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**/
+
+#ifndef __Base_IO_Dictionary_Entry_Value_h__
+#define __Base_IO_Dictionary_Entry_Value_h__
+
+
+	/** The available formats which a dictionary can be written to output. */
+	typedef enum _Encoding { Default, RawASCII, RawBinary } Encoding;
+
+
+	/** \def __Dictionary_Entry_Value_List See Dictionary_Entry_Value_List */
+	#define __Dictionary_Entry_Value_List \
+		Dictionary_Entry_Value*		first; \
+		Dictionary_Entry_Value*		last; \
+		Index				count; \
+		Encoding			encoding;
+	struct _Dictionary_Entry_Value_List { __Dictionary_Entry_Value_List };
+
+
+	/* TODO */
+	#if 0	
+	#define __Dictionary_Entry_Value_Validator \
+		union minVal { \
+			unsigned int asUnsignedInt; \
+			double asDouble; \
+		}; \
+		union maxVal { \
+			unsigned int asUnsignedInt; \
+			double asDouble; \
+		}; \
+		 \
+		Dictionary_Entry_Value_Validator type; \
+		SetType* set; \
+	struct _Dictionary_Entry_Value_Validator { __Dictionary_Entry_Value_Validator };
+	#endif
+
+
+	typedef union {
+		char*				typeString;
+		double				typeDouble;
+		unsigned int			typeUnsignedInt;
+		int				typeInt;
+		unsigned long			typeUnsignedLong;
+		Bool				typeBool;
+		Dictionary*			typeStruct;
+		Dictionary_Entry_Value_List*	typeList;
+		void*				typeVoid; /* proposed... not in use yet */ \
+	} Dictionary_Entry_Value_AsType;
+
+	/** \def __Dictionary_Entry_Value See Dictionary_Entry_Value */
+	#define __Dictionary_Entry_Value				\
+		Dictionary_Entry_Value_AsType		as; \
+		Dictionary_Entry_Value_Type		type;		/**< The member of the union currently in use. */ \
+		Dictionary_Entry_Value*			next; 		\
+		/* TODO Dictionary_Entry_Value_Validator* validator; */
+	struct _Dictionary_Entry_Value { __Dictionary_Entry_Value };
+	
+	
+	/** Create a value from an unsigned int */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromUnsignedInt( unsigned int value );
+	void                    Dictionary_Entry_Value_InitFromUnsignedInt( Dictionary_Entry_Value* self, unsigned int value );
+	
+	/** Create a value from an signed int */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromInt( int value );
+	void                    Dictionary_Entry_Value_InitFromInt( Dictionary_Entry_Value* self, int value );
+	
+	/** Create a value from a double */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromDouble( double value );
+	void                    Dictionary_Entry_Value_InitFromDouble( Dictionary_Entry_Value* self, double value );
+
+	/** Create a value from an unsigned long */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromUnsignedLong( unsigned long value );
+	void                    Dictionary_Entry_Value_InitFromUnsignedLong( Dictionary_Entry_Value* self, unsigned long value );
+	
+	/** Create a value from a string */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromString( const char* const value );
+	void                    Dictionary_Entry_Value_InitFromString( Dictionary_Entry_Value* self, const char* const value );
+	
+	/** Create a dictionary entry value of the specified type from the specified string */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromStringTo( char* value, char type );
+	
+	/** Create a value from a boolean value */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromBool( Bool value );
+	void                    Dictionary_Entry_Value_InitFromBool( Dictionary_Entry_Value* self, Bool value );
+	
+	/** Create a value from a struct, begining with an empty value. */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_NewStruct( void );
+	void                    Dictionary_Entry_Value_InitNewStruct( Dictionary_Entry_Value* );
+	
+	/** Create a value from a struct. */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_FromStruct( void* dictionary );
+	void                    Dictionary_Entry_Value_InitFromStruct( Dictionary_Entry_Value*, void* dictionary );
+	
+	/** Create a value from a list */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_NewList( void );
+	void                    Dictionary_Entry_Value_InitNewList( Dictionary_Entry_Value* );
+	
+	
+	/** Add a member into a struct, with a given value associated with the given key. */
+	void Dictionary_Entry_Value_AddMember( Dictionary_Entry_Value*, Dictionary_Entry_Key, Dictionary_Entry_Value* );
+	
+	/** Add a member into a struct, with a given value associated with the given key from a given source file. */
+	void Dictionary_Entry_Value_AddMemberWithSource( Dictionary_Entry_Value*, Dictionary_Entry_Key, 
+								Dictionary_Entry_Value*, Dictionary_Entry_Source );
+
+	/** Add an element into a list, with a given value */
+	void Dictionary_Entry_Value_AddElement( Dictionary_Entry_Value* self, Dictionary_Entry_Value* element );
+	
+	/** Add an element into a list, with a given value */
+	void Dictionary_Entry_Value_AddElementWithSource( Dictionary_Entry_Value* self, Dictionary_Entry_Value* element, 
+								Dictionary_Entry_Source source );
+	
+	/** Deletes a Dictionary_Entry_Value */
+	void Dictionary_Entry_Value_Delete( Dictionary_Entry_Value* self );
+	
+	/** Printing the semantic value of element in its current state */
+	void Dictionary_Entry_Value_Print( Dictionary_Entry_Value* self, Stream* stream );
+	
+	
+	/** Set a dictionary entry value to the given type and value */
+	void Dictionary_Entry_Value_SetFrom( Dictionary_Entry_Value* self, void* value, char type );
+	
+	/** Set/Change value to an unsigned int */
+	void Dictionary_Entry_Value_SetFromUnsignedInt( Dictionary_Entry_Value* self, unsigned int value );
+	
+	/** Set/Change value to an int */
+	void Dictionary_Entry_Value_SetFromInt( Dictionary_Entry_Value* self, int value );
+	
+	/** Set/Change value to a double */
+	void Dictionary_Entry_Value_SetFromDouble( Dictionary_Entry_Value* self, double value );
+	
+	/** Set/Change value to an unsigned long */
+	void Dictionary_Entry_Value_SetFromUnsignedLong( Dictionary_Entry_Value* self, unsigned long value );
+
+	/** Set/Change value to a string */
+	void Dictionary_Entry_Value_SetFromString( Dictionary_Entry_Value* self, char* value );
+	
+	/** Set the value from a string, but keeping as the current type */
+	void Dictionary_Entry_Value_SetFromStringKeepCurrentType( Dictionary_Entry_Value* self, char* string );
+	
+	/** Set/Change value to a Bool */
+	void Dictionary_Entry_Value_SetFromBool( Dictionary_Entry_Value* self, Bool value );
+	
+	/** Set the value to be of struct type, but empty */
+	void Dictionary_Entry_Value_SetNewStruct( Dictionary_Entry_Value* self );
+	
+	/** Set/Change value to be a a struct */
+	void Dictionary_Entry_Value_SetFromStruct( Dictionary_Entry_Value* self, void* dictionary );
+	
+	/** Set the value to be of list type, begining with an empty list */
+	void Dictionary_Entry_Value_SetNewList( Dictionary_Entry_Value* self );
+	
+
+	
+	/** Obtain the value as an unsigned int */
+	unsigned int Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value* self );
+	
+	/** Obtain the value as an unsigned int */
+	int Dictionary_Entry_Value_AsInt( Dictionary_Entry_Value* self );
+	
+	/** Obtain the value as a double */
+	double Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value* self );
+
+	/** Obtain the value as an unsigned long */
+	unsigned long Dictionary_Entry_Value_AsUnsignedLong( Dictionary_Entry_Value* self );
+
+	/** Obtain the value as a string */
+	char* Dictionary_Entry_Value_AsString( Dictionary_Entry_Value* self );
+	
+	/** Obtain the value as a Bool */
+	Bool Dictionary_Entry_Value_AsBool( Dictionary_Entry_Value* self );
+	
+	/** Obtain the value as a Dictionary */
+	Dictionary* Dictionary_Entry_Value_AsDictionary( Dictionary_Entry_Value* self );
+	
+	/** get the first element out of a list */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_GetFirstElement( Dictionary_Entry_Value* self );
+	
+	/** get any element from a list (bear in mind whole list must be processed */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_GetElement( Dictionary_Entry_Value* self, Index index );
+	
+
+	
+	/** Get the number of elements currently in a list */
+	Index Dictionary_Entry_Value_GetCount( Dictionary_Entry_Value* self );
+		
+	/** Set the encoding type of a list */
+	void Dictionary_Entry_Value_SetEncoding( Dictionary_Entry_Value* self, const Encoding encoding );
+	
+	/** Get the encoding type of a list */
+	Encoding Dictionary_Entry_Value_GetEncoding( Dictionary_Entry_Value* self );
+	
+
+	
+	/** Setting the value of a struct member */
+	void Dictionary_Entry_Value_SetMember( Dictionary_Entry_Value* self, Dictionary_Entry_Key name, 
+						Dictionary_Entry_Value* member );
+		
+	/** Setting the value of a struct member from a source file */
+	void Dictionary_Entry_Value_SetMemberWithSource( Dictionary_Entry_Value* self, Dictionary_Entry_Key name, 
+								Dictionary_Entry_Value* member, Dictionary_Entry_Source source );
+	
+	/** Getting/accessing members out of a struct */
+	Dictionary_Entry_Value* Dictionary_Entry_Value_GetMember( Dictionary_Entry_Value* self, Dictionary_Entry_Key name );
+
+	
+	
+#endif /* __Base_IO_Dictionary_Entry_Value_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Finalise.c 3594 2006-05-18 06:34:43Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include "StreamFormatter.h"
+#include "Finalise.h"
+
+
+#include <stdio.h>
+
+Bool BaseIO_Finalise( void )
+{
+	Stream* stream;
+	if ( stJournal->flushCount > 0 ) {
+		stream = Journal_Register( Debug_Type, (char*)__func__ );
+		Journal_Printf( stream, "StGermain IO Report - File Flush called %d times.\n", stJournal->flushCount );
+	}
+	Journal_Delete();
+	/* Now clean up the special memory streams seeing as these aren't in the journal */
+	Stg_Class_Delete( stgMemory->infoStream );
+	Stg_Class_Delete( stgMemory->debugStream );
+	Stg_Class_Delete( stgMemory->errorStream );
+	StreamFormatter_Buffer_Delete( stgStreamFormatter_Buffer );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+** <b>Role:</b>
+**	Ends the operation of the IO directory and releases resources used.
+**
+**	In particular, this function will end the operation of the Journal system.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_BaseIO_Finalise_h__
+#define __Base_BaseIO_Finalise_h__
+	
+	Bool BaseIO_Finalise( void );
+	
+#endif /* __Base_BaseIO_Finalise_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/IO.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/IO.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/IO.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,70 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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>
+**	External header file to this library.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	None.
+**
+** $Id: IO.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_IO_h__
+#define __Base_IO_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "Dictionary.h"
+	#include "Dictionary_Entry.h"
+	#include "Dictionary_Entry_Value.h"
+	#include "IO_Handler.h"
+	#include "XML_IO_Handler.h"
+	#include "Init.h"
+	#include "Journal.h"
+	#include "JournalFile.h"
+	#include "CFile.h"
+	#include "MPIFile.h"
+	#include "Stream.h"
+	#include "CStream.h"
+	#include "MPIStream.h"
+	#include "StreamFormatter.h"
+	#include "LineFormatter.h"
+	#include "IndentFormatter.h"
+	#include "RankFormatter.h"
+	#include "PathUtils.h"
+	#include "Finalise.h"
+
+	#include "StGermain/Base/IO/mpirecord/mpimessaging.h"
+
+#endif /* __Base_IO_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,443 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**face Factory
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: IO_Handler.c 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Dictionary.h"
+#include "Dictionary_Entry.h"
+#include "Dictionary_Entry_Value.h"
+#include "IO_Handler.h"
+
+#include "Journal.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/** Textual name of this class */
+const Type IO_Handler_Type = Type_Invalid;
+
+/* TODO: register with IO_Handler registry */
+
+
+
+IO_Handler* _IO_Handler_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		IO_Handler_ReadAllFromFileFunction*		_readAllFromFile,
+		IO_Handler_ReadAllFromFileForceSourceFunction*		_readAllFromFileForceSource,
+		IO_Handler_ReadAllFromBufferFunction*		_readAllFromBuffer,
+		IO_Handler_WriteAllToFileFunction*		_writeAllToFile )
+{
+	IO_Handler* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IO_Handler) );
+	self = (IO_Handler*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_readAllFromFile = _readAllFromFile;
+	self->_readAllFromFileForceSource = _readAllFromFileForceSource;
+	self->_readAllFromBuffer = _readAllFromBuffer;
+	self->_writeAllToFile = _writeAllToFile;
+	
+	/* IO_Handler info */
+	_IO_Handler_Init( self );
+	
+	return self;
+}
+
+void _IO_Handler_Init( IO_Handler* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* IO_Handler info */
+	self->currDictionary = NULL;
+	self->resource = NULL;
+	self->currPath = NULL;
+}
+
+
+/** delete the object's memory at this level */
+void _IO_Handler_Delete( void* io_handler ) {
+	IO_Handler* self = (IO_Handler*)io_handler;
+	
+	if( self->currPath ) Memory_Free( self->currPath );
+	if( self->resource ) Memory_Free( self->resource );
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete( self );
+}
+
+
+/** print this level's info */
+void _IO_Handler_Print( void* io_handler, Stream* stream ) {
+	IO_Handler* self = (IO_Handler*) io_handler;
+	
+	/* General info */
+	printf( "IO_Handler (ptr): %p\n", (void*)self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	printf( "\t_readAllFromFile (func ptr): %p\n", (void*)self->_readAllFromFile );
+	printf( "\t_readAllFromFileForceSource (func ptr): %p\n", (void*)self->_readAllFromFileForceSource );
+	printf( "\t_writeAllToFile (func ptr): %p\n", (void*)self->_writeAllToFile );
+	
+	/* IO_Handler */
+	printf( "\tcurrDictionary (ptr): %p\n", (void*)self->currDictionary );
+	if( self->resource ) {
+		printf( "\tresource: %s\n", self->resource );
+	}
+	else {
+		printf( "\tresource: (null)\n" );
+	}
+}
+
+
+/** Read a dictionary entry of a given name from file */
+Bool IO_Handler_ReadAllFromFile( void* io_handler, const char* filename, Dictionary* dictionary )
+{
+	IO_Handler* self = (IO_Handler*) io_handler;
+	Index chr_I;
+	
+	for( chr_I = strlen(filename); chr_I > 0; chr_I--)
+		if( filename[chr_I - 1] == '/' )
+		{
+			self->currPath = Memory_Alloc_Array( char, (chr_I + 1), "IO_Handler->currPath" );
+			strncpy(self->currPath, filename, chr_I);
+			self->currPath[chr_I] = 0;
+			break;
+		}
+		
+	if( chr_I == 0 )
+	{
+		self->currPath = Memory_Alloc_Array( char, 3, "IO_Handler->currPath" );
+		strcpy(self->currPath, "./");
+		self->currPath[2] = 0;
+	}
+	
+	return self->_readAllFromFile( self, filename, dictionary );
+}
+
+/** Read a dictionary entry of a given name from file, include source files in dictionary_Entries. */
+Bool IO_Handler_ReadAllFromFileForceSource( void* io_handler, const char* filename, Dictionary* dictionary )
+{
+	IO_Handler* self = (IO_Handler*) io_handler;
+	Index chr_I;
+	
+	for( chr_I = strlen(filename); chr_I > 0; chr_I--)
+		if( filename[chr_I - 1] == '/' )
+		{
+			self->currPath = Memory_Alloc_Array( char, (chr_I + 1), "IO_Handler->currPath" );
+			strncpy(self->currPath, filename, chr_I);
+			self->currPath[chr_I] = 0;
+			break;
+		}
+		
+	if( chr_I == 0 )
+	{
+		self->currPath = Memory_Alloc_Array( char, 3, "IO_Handler->currPath" );
+		strcpy(self->currPath, "./");
+		self->currPath[2] = 0;
+	}
+	
+	return self->_readAllFromFileForceSource( self, filename, dictionary );
+}
+
+/** Read a dictionary entry of a given name from file */
+Bool IO_Handler_ReadAllFromBuffer( void* io_handler, const char* buffer, Dictionary* dictionary )
+{
+	IO_Handler* self = (IO_Handler*) io_handler;
+
+	return self->_readAllFromBuffer( self, buffer, dictionary );
+}
+
+/** write a given dictionary entry to file */
+Bool IO_Handler_WriteAllToFile(void* io_handler, const char* filename, Dictionary* dictionary )
+{
+	IO_Handler* self = (IO_Handler*) io_handler;
+	return self->_writeAllToFile( self, filename, dictionary );
+}
+
+
+/** Add a new dictionary value depending on the parent type, or replace the existing value if found.
+ *	if parent is NULL, add as a plain entry. If parent is a list, add as an element to that
+ *	list. If parent is a struct, add as a member of that struct. */
+Dictionary_Entry_Value* IO_Handler_DictSetAddValue( 
+	void*							io_handler, 
+	Dictionary_Entry_Key					name,
+	char*							newValue, 
+	char							newDictValType,
+	Dictionary_Entry_Value*					parent, 
+	Dictionary_MergeType					mergeType )
+{
+	IO_Handler* self = (IO_Handler*) io_handler;
+	Dictionary_Entry_Value* newDictVal = NULL;
+	#if DEBUG
+		assert( self );
+	#endif
+	
+	/* If parent == NULL... then this is being added to no list or struct, but the dictionary itself */
+	if ( NULL == parent ) {
+		if ( NULL == name ) {
+			fprintf( stdout, "Warning- while parsing file %s: entry that isn't a list element "
+				"given with no name. Not adding this parameter to the dictionary.\n",
+				self->resource );
+			return NULL;
+		}
+		
+		newDictVal = Dictionary_Entry_Value_FromStringTo( newValue, newDictValType );
+		newDictVal = Dictionary_AddMerge( 
+				self->currDictionary, 
+				name, 
+				newDictVal,
+				mergeType );
+	}
+	else if( parent->type == Dictionary_Entry_Value_Type_List ) {
+		if ( NULL != name ) {
+			fprintf( stdout, "Warning - while parsing file %s: entry inside a list given with a name. Adding the "
+				"entry to the list, but ignoring the name.\n", self->resource );
+		}	
+		
+		newDictVal = Dictionary_Entry_Value_FromStringTo( newValue, newDictValType );
+		Dictionary_Entry_Value_AddElement( parent, newDictVal );
+	}
+	else if	( parent->type == Dictionary_Entry_Value_Type_Struct ) {
+	/*	Dictionary_Entry_Value* member = NULL;		*/
+		newDictVal = Dictionary_Entry_Value_FromStringTo( newValue, newDictValType );
+		
+		if ( NULL == name ) {
+			fprintf( stdout, "Warning - while parsing file %s: entry that isn't a list element given with no name. "
+				"Not adding it to the dictionary.\n", self->resource );
+			return NULL;
+		}
+		
+		newDictVal = Dictionary_AddMerge( 
+				parent->as.typeStruct, 
+				name, 
+				newDictVal,
+				mergeType );
+	
+	/*
+	**      This code overrides the merge code, disabling...
+	**
+		if ( (member = Dictionary_Entry_Value_GetMember( parent, name ) ) )
+		{
+			Dictionary_Entry_Value_SetMember( parent, name, newDictVal );
+		}
+		else {
+			Dictionary_Entry_Value_AddMember( parent, name, newDictVal );
+		}
+	*/
+	}
+	else {
+		fprintf( stdout, "Warning - while parsing file %s: IO_Handler_SetAdd passed a parent not of list "
+			"or struct type. Ignoring.\n", self->resource );
+	}
+	
+	return newDictVal;
+} /* IO_Handler_SetAdd */
+
+/** Add a new dictionary value depending on the parent type, or replace the existing value if found.
+ *	if parent is NULL, add as a plain entry. If parent is a list, add as an element to that
+ *	list. If parent is a struct, add as a member of that struct. */
+Dictionary_Entry_Value* IO_Handler_DictSetAddValueWithSource( 
+	void*							io_handler, 
+	Dictionary_Entry_Key					name,
+	char*							newValue, 
+	char							newDictValType,
+	Dictionary_Entry_Value*					parent, 
+	Dictionary_MergeType					mergeType,
+	Dictionary_Entry_Source					source )
+{
+	IO_Handler* self = (IO_Handler*) io_handler;
+	Dictionary_Entry_Value* newDictVal = NULL;
+	#if DEBUG
+		assert( self );
+	#endif
+	
+	/* If parent == NULL... then this is being added to no list or struct, but the dictionary itself */
+	if ( NULL == parent ) {
+		if ( NULL == name ) {
+			fprintf( stdout, "Warning- while parsing file %s: entry that isn't a list element "
+				"given with no name. Not adding this parameter to the dictionary.\n",
+				self->resource );
+			return NULL;
+		}
+		
+		newDictVal = Dictionary_Entry_Value_FromStringTo( newValue, newDictValType );
+		newDictVal = Dictionary_AddMergeWithSource( 
+				self->currDictionary, 
+				name, 
+				newDictVal,
+				mergeType,
+				source );
+	}
+	else if( parent->type == Dictionary_Entry_Value_Type_List ) {
+		if ( NULL != name ) {
+			fprintf( stdout, "Warning - while parsing file %s: entry inside a list given with a name. Adding the "
+				"entry to the list, but ignoring the name.\n", self->resource );
+		}	
+		
+		newDictVal = Dictionary_Entry_Value_FromStringTo( newValue, newDictValType );
+		Dictionary_Entry_Value_AddElementWithSource( parent, newDictVal, source );
+	}
+	else if	( parent->type == Dictionary_Entry_Value_Type_Struct ) {
+	/*	Dictionary_Entry_Value* member = NULL;		*/
+		newDictVal = Dictionary_Entry_Value_FromStringTo( newValue, newDictValType );
+		
+		if ( NULL == name ) {
+			fprintf( stdout, "Warning - while parsing file %s: entry that isn't a list element given with no name. "
+				"Not adding it to the dictionary.\n", self->resource );
+			return NULL;
+		}
+		
+		newDictVal = Dictionary_AddMergeWithSource( 
+				parent->as.typeStruct, 
+				name, 
+				newDictVal,
+				mergeType,
+				source );
+	
+	/*
+	**      This code overrides the merge code, disabling...
+	**
+		if ( (member = Dictionary_Entry_Value_GetMember( parent, name ) ) )
+		{
+			Dictionary_Entry_Value_SetMember( parent, name, newDictVal );
+		}
+		else {
+			Dictionary_Entry_Value_AddMember( parent, name, newDictVal );
+		}
+	*/
+	}
+	else {
+		fprintf( stdout, "Warning - while parsing file %s: IO_Handler_SetAdd passed a parent not of list "
+			"or struct type. Ignoring.\n", self->resource );
+	}
+	
+	return newDictVal;
+} /* IO_Handler_SetAddWithSource */
+
+Index IO_Handler_ReadAllFilesFromCommandLine( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) {
+	IO_Handler* self          = (IO_Handler*) ioHandler;
+	Stream*     errorStream   = Journal_Register( Error_Type, CURR_MODULE_NAME );
+	Index       arg_I;
+	char*       filename;
+	char*       extension;
+	Bool        result;
+	Index       filesRead = 0;
+
+	/* Loop over all the arguments from command line */
+	for ( arg_I = 1 ; arg_I < argc ; arg_I++ ) {
+		filename = argv[ arg_I ];
+
+		/* Find extension of potential filename by finding the pointer to the last dot in the string */
+		extension = strrchr( filename, '.' );
+
+		/* Check if there was a '.' in the filename at all - if not, then bail */
+		if ( extension == NULL )
+			continue;
+
+		/* Check if file has a ".xml" extension - if not, then bail */
+		if ( strcasecmp( extension, ".xml" ) != 0 )
+			continue;
+	
+		/* Read file */
+		result = IO_Handler_ReadAllFromFile( self, filename, dictionary );
+		Journal_Firewall( result, errorStream, 
+				"Error: %s could not read input file %s. Exiting.\n", argv[0], filename );
+		filesRead++;		
+	}
+
+	return filesRead;
+}
+
+
+Index IO_Handler_ReadAllFilesFromCommandLineForceSource( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) {
+	IO_Handler* self          = (IO_Handler*) ioHandler;
+	Stream*     errorStream   = Journal_Register( Error_Type, CURR_MODULE_NAME );
+	Index       arg_I;
+	char*       filename;
+	char*       extension;
+	Bool        result;
+	Index       filesRead = 0;
+
+	/* Loop over all the arguments from command line */
+	for ( arg_I = 1 ; arg_I < argc ; arg_I++ ) {
+		filename = argv[ arg_I ];
+
+		/* Find extension of potential filename by finding the pointer to the last dot in the string */
+		extension = strrchr( filename, '.' );
+
+		/* Check if there was a '.' in the filename at all - if not, then bail */
+		if ( extension == NULL )
+			continue;
+
+		/* Check if file has a ".xml" extension - if not, then bail */
+		if ( strcasecmp( extension, ".xml" ) != 0 )
+			continue;
+	
+		/* Read file */
+		result = IO_Handler_ReadAllFromFileForceSource( self, filename, dictionary );
+		Journal_Firewall( result, errorStream, 
+				"Error: %s could not read input file %s. Exiting.\n", argv[0], filename );
+		filesRead++;		
+	}
+
+	return filesRead;
+}
+
+
+Index IO_Handler_ReadAllFromCommandLine( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) {
+	Index       filesRead = 0;
+	filesRead = IO_Handler_ReadAllFilesFromCommandLine( ioHandler, argc, argv, dictionary );
+	Dictionary_ReadAllParamFromCommandLine( dictionary, argc, argv );
+
+	return filesRead;
+}
+
+
+Index IO_Handler_ReadAllFromCommandLineForceSource( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) {
+	Index       filesRead = 0;
+	filesRead = IO_Handler_ReadAllFilesFromCommandLineForceSource( ioHandler, argc, argv, dictionary );
+	Dictionary_ReadAllParamFromCommandLine( dictionary, argc, argv );
+
+	return filesRead;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Provides an interface (and certain key functions) for reading from/ writing to files with useful information.
+**	Files are read to/from the dictionary provided by the user.
+**
+** Assumptions:
+**
+** Comments:
+**	When writing files, I should change the interface to add an option to update, rather than overwrite, files.
+**
+** $Id: IO_Handler.h 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_IO_IO_Handler_h__
+#define __Base_IO_IO_Handler_h__
+	
+	/* Function pointer interface for inherited classes to use */
+	typedef void (IO_Handler_DeleteFunction) (void* io_handler);
+	typedef void (IO_Handler_PrintFunction) (void* io_handler);
+	typedef Bool (IO_Handler_ReadAllFromFileFunction) (void* io_handler, const char* filename, Dictionary* dictionary );
+	typedef Bool (IO_Handler_ReadAllFromFileForceSourceFunction) (void* io_handler, const char* filename, 
+									Dictionary* dictionary );
+	typedef Bool (IO_Handler_ReadAllFromBufferFunction) (void* io_handler, const char* buffer, Dictionary* dictionary );
+	typedef Bool (IO_Handler_WriteAllToFileFunction) (void* io_handler, const char* filename, Dictionary* dictionary );
+	typedef Bool (IO_Handler_DictSetAddValueFunction)
+		( void* io_handler, const char* filename, Dictionary* dictionary, Dictionary_MergeType mergeType );
+	
+	/** Textual name for IO_Handler class */
+	extern const Type IO_Handler_Type;
+	
+	/** \def __IO_Handler See IO_Handler */
+	#define __IO_Handler \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		IO_Handler_ReadAllFromFileFunction*	_readAllFromFile; \
+		IO_Handler_ReadAllFromFileForceSourceFunction*	_readAllFromFileForceSource; \
+		IO_Handler_ReadAllFromBufferFunction*	_readAllFromBuffer; \
+		IO_Handler_WriteAllToFileFunction*	_writeAllToFile; \
+		\
+		/* IO_Handler info */ \
+		Dictionary*				currDictionary; \
+		char*					resource; \
+		char*					currPath;
+	struct _IO_Handler { __IO_Handler };
+	
+	/* No "IO_Handler_New" and "IO_Handler_Init" as this is an abstract class */
+	
+	/** Creation implementation */
+	IO_Handler* _IO_Handler_New( 
+		SizeT						sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		IO_Handler_ReadAllFromFileFunction*		_readAllFromFile,
+		IO_Handler_ReadAllFromFileForceSourceFunction*		_readAllFromFileForceSource,
+		IO_Handler_ReadAllFromBufferFunction*		_readAllFromBuffer,
+		IO_Handler_WriteAllToFileFunction*		_writeAllToFile );
+	
+	/** Initialisation implementation */
+	void _IO_Handler_Init( IO_Handler* self );
+	
+	/** Stg_Class_Delete implementation */
+	extern void _IO_Handler_Delete( void* io_handler ); 
+	
+	/** Print current information */
+	extern void _IO_Handler_Print( void* io_handler, Stream* stream );
+	
+	/** Read a dictionary entry of a given name from file */
+	extern Bool IO_Handler_ReadAllFromFile( void* io_handler, const char* filename, Dictionary* dictionary );
+	
+	/** Read a dictionary entry of a given name from file, force it to include source file where applicable. */
+	extern Bool IO_Handler_ReadAllFromFileForceSource( void* io_handler, const char* filename, Dictionary* dictionary );
+	
+	/** Read a dictionary entry of a given name from buffer */
+	extern Bool IO_Handler_ReadAllFromBuffer( void* io_handler, const char* buffer, Dictionary* dictionary );
+	
+	/** Write a given dictionary entry to file */
+	/* TODO: option to overwrite / update */
+	extern Bool IO_Handler_WriteAllToFile( void* io_handler, const char* filename, Dictionary* dictionary );
+	
+	/** Set/add entry to dictionary given parent */
+	extern Dictionary_Entry_Value* IO_Handler_DictSetAddValue( 
+		void*						io_handler, 
+		Dictionary_Entry_Key				name,
+		char*						newValue, 
+		char						newDictValType, 
+		Dictionary_Entry_Value*				parent, 
+		Dictionary_MergeType				mergeType );
+
+	/** Set/add entry to dictionary given parent */
+	extern Dictionary_Entry_Value* IO_Handler_DictSetAddValueWithSource( 
+		void*						io_handler, 
+		Dictionary_Entry_Key				name,
+		char*						newValue, 
+		char						newDictValType, 
+		Dictionary_Entry_Value*				parent, 
+		Dictionary_MergeType				mergeType,
+		Dictionary_Entry_Source				source );
+
+	/** Finds all references to files in command line args with extension ".xml" and reads them with the IO
+	handler. Returns the number of files successfully read. */
+	Index IO_Handler_ReadAllFilesFromCommandLine( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) ;
+
+	/** Finds all references to files in command line args with extension ".xml" and reads them with the IO
+	handler. Forces the sourceFile to be included in Dictionary_Entry. Returns the number of files successfully read. */
+	Index IO_Handler_ReadAllFilesFromCommandLineForceSource( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) ;
+
+	/** Runs IO_Handler_ReadAllFilesFromCommandLine and Dictionary_ReadAllParamFromCommandLine.
+	Returns the number of files successfully read. */
+	Index IO_Handler_ReadAllFromCommandLine( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) ;
+	
+	/** Runs IO_Handler_ReadAllFilesFromCommandLineForceSource and Dictionary_ReadAllParamFromCommandLine.
+	Returns the number of files successfully read. */
+	Index IO_Handler_ReadAllFromCommandLineForceSource( void* ioHandler, int argc, char* argv[], Dictionary* dictionary ) ;
+	
+#endif /* __Base_IO_IO_Handler_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: IndentFormatter.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "StreamFormatter.h"
+#include "LineFormatter.h"
+#include "IndentFormatter.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include <stdarg.h>   /* subsequent files need this */
+
+
+const Type IndentFormatter_Type = "IndentFormatter";
+const char IndentFormatter_IndentChar = '\t';
+
+/** Makes the string which forms the identation for printing. */
+void IndentFormatter_MakeTag( IndentFormatter* formatter );
+
+
+StreamFormatter* IndentFormatter_New()
+{
+	return (StreamFormatter*)_IndentFormatter_New( sizeof(IndentFormatter), IndentFormatter_Type,
+		_IndentFormatter_Delete, _IndentFormatter_Print, _IndentFormatter_Copy, _LineFormatter_Format,
+		IndentFormatter_IndentChar );
+}
+
+StreamFormatter* IndentFormatter_New2( char _character )
+{
+	return (StreamFormatter*)_IndentFormatter_New( sizeof(IndentFormatter), IndentFormatter_Type,
+		_IndentFormatter_Delete, _IndentFormatter_Print, _IndentFormatter_Copy, _LineFormatter_Format,
+		_character );
+}
+
+void IndentFormatter_Init( IndentFormatter* self )
+{
+	self->_sizeOfSelf = sizeof(IndentFormatter);
+	self->type = IndentFormatter_Type;
+	self->_delete = _IndentFormatter_Delete;
+	self->_print = _IndentFormatter_Print;
+	self->_copy = _IndentFormatter_Copy;
+	
+	_IndentFormatter_Init( self, _LineFormatter_Format, IndentFormatter_IndentChar );
+}
+
+IndentFormatter* _IndentFormatter_New(
+	SizeT 				_sizeOfSelf,
+	Type 				type,
+	Stg_Class_DeleteFunction*		_delete,
+	Stg_Class_PrintFunction*		_print,
+	Stg_Class_CopyFunction*		_copy, 
+	StreamFormatter_FormatFunction*	_format,
+	char				_character )
+{
+	IndentFormatter* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IndentFormatter) );
+	self = (IndentFormatter*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+                                                                                
+	_IndentFormatter_Init( self, _format, _character );
+
+	return self;
+}
+
+void _IndentFormatter_Init(
+	IndentFormatter*		self,
+	StreamFormatter_FormatFunction*	_format,
+	char				_character )
+{
+	_LineFormatter_Init( (LineFormatter*)self, _format );
+	
+	self->_indent = 0;
+	self->_character = _character;
+}
+
+void _IndentFormatter_Delete( void* formatter )
+{
+	IndentFormatter* self = (IndentFormatter*)formatter;
+	
+	#if DEBUG
+		assert( self );
+	#endif
+
+	/* Stg_Class_Delete parent */
+	_LineFormatter_Delete( self );
+}
+void _IndentFormatter_Print( void* formatter, Stream* stream )
+{
+	/*IndentFormatter* self = (IndentFormatter*) formatter;*/
+
+	#if DEBUG
+		assert( formatter );
+		assert( stream );
+	#endif
+	
+	/* General info */
+	printf( "IndentFormatter (ptr): %p\n", formatter );
+	
+	_LineFormatter_Print( formatter, stream );
+}
+
+void* _IndentFormatter_Copy( void* indentFormatter, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	IndentFormatter*	self = (IndentFormatter*)indentFormatter;
+	IndentFormatter*	newIndentFormatter;
+	
+	newIndentFormatter = _LineFormatter_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	IndentFormatter_SetIndent( newIndentFormatter, self->_indent );
+	
+	return newIndentFormatter;
+}
+
+void IndentFormatter_SetIndent( void* formatter, Index indent )
+{
+	IndentFormatter* self = (IndentFormatter*)formatter;
+	
+	self->_indent = indent;
+	IndentFormatter_MakeTag( self );
+}
+
+void IndentFormatter_Increment( void* formatter )
+{
+	IndentFormatter* self = (IndentFormatter*)formatter;
+	
+	self->_indent++;
+	IndentFormatter_MakeTag( self );
+}
+
+void IndentFormatter_Decrement( void* formatter )
+{
+	IndentFormatter* self = (IndentFormatter*)formatter;
+	
+	self->_indent = ( self->_indent <= 0 ) ? 0 : self->_indent - 1;
+	IndentFormatter_MakeTag( self );
+}
+
+void IndentFormatter_Zero( void* formatter)
+{
+	IndentFormatter* self = (IndentFormatter*)formatter;
+	
+	self->_indent = 0;
+	IndentFormatter_MakeTag( self );
+}
+
+void IndentFormatter_MakeTag( IndentFormatter* formatter )
+{
+	int i;
+	
+	/* Release previous tag if existing. */
+	if ( formatter->_tag != NULL )
+	{
+		Memory_Free( formatter->_tag );
+	}
+	
+	/* Stop if no indentation. */
+	if ( formatter->_indent <= 0 )
+	{
+		formatter->_tag = NULL;
+		return;
+	}
+	
+	/* Produce tag. */
+	formatter->_tag = Memory_Alloc_Array( char, formatter->_indent + 1, Memory_IgnoreName );
+	for ( i = 0; i < formatter->_indent; ++i )
+	{
+		formatter->_tag[i] = formatter->_character;
+	}
+	formatter->_tag[i] = '\0';
+}
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Formats output such that every line is indented to an adjustable level.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** <b>Description:</b>
+**
+** $Id: IndentFormatter.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_IO_IndentFormatter_h__
+#define __Base_IO_IndentFormatter_h__
+
+
+	/** Textual name for IndentFormatter class. */
+	extern const Type IndentFormatter_Type;
+
+
+	/** \def __IndentFormatter See IndentFormatter. */
+	#define __IndentFormatter \
+		__LineFormatter \
+		Index	_indent; \
+		char	_character;
+	struct IndentFormatter { __IndentFormatter };
+
+
+	/** Creates a new IndentFormatter. */
+	StreamFormatter* IndentFormatter_New();
+
+	/** Creates a new IndentFormatter which indents with the given char. */
+	StreamFormatter* IndentFormatter_New2( char _character );
+
+	/** Initialise a IndentFormatter. */
+	void IndentFormatter_Init( IndentFormatter* self );
+
+
+	/** Constructor interface. */
+	IndentFormatter* _IndentFormatter_New(
+		SizeT 				_sizeOfSelf,
+		Type 				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		StreamFormatter_FormatFunction*	_format,
+		char				_character );
+
+	/** Init interface. */
+	void _IndentFormatter_Init(
+		IndentFormatter*		self,
+		StreamFormatter_FormatFunction*	_format,
+		char				_character );
+
+	/** Stg_Class_Delete interface. */
+	void _IndentFormatter_Delete( void* formatter );
+
+	/** Print interface. */
+	void _IndentFormatter_Print( void* formatter, Stream* stream );
+
+	/** Copy implementation. */
+	void* _IndentFormatter_Copy( void* indentFormatter, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+
+	/** Set the value of indentation. */
+	void IndentFormatter_SetIndent( void* formatter, Index indent );
+
+	/** Increase the level of indentation by 1. */
+	void IndentFormatter_Increment( void* formatter );
+
+	/** Decrease the level of indentation by 1. */
+	void IndentFormatter_Decrement( void* formatter );
+
+	/** Sets the level of indentation to zero. */
+	void IndentFormatter_Zero( void* formatter);
+	
+	/** Sets the character to indent with */
+	void IndentFormatter_SetCharacter( char _character );
+
+
+#endif /* __Base_IO_IndentFormatter_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Init.c 3573 2006-05-15 07:51:14Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "mpi.h"
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "JournalFile.h"
+#include "Stream.h"
+#include "CStream.h"
+#include "MPIStream.h"
+#include "StreamFormatter.h"
+#include "LineFormatter.h"
+#include "RankFormatter.h"
+#include "Journal.h"
+#include "Init.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+
+const Name     LiveDebugName = "LiveDebug";
+Stream*        LiveDebug = NULL;
+
+Bool BaseIO_Init( int* argc, char** argv[] )
+{
+	Stream* typedStream;
+
+	stgStreamFormatter_Buffer = StreamFormatter_Buffer_New(); 
+
+	stJournal = Journal_New();
+
+	/* Create default Typed Streams. */
+
+	/* info */
+	typedStream = CStream_New( Info_Type );
+	Stream_Enable( typedStream, True );
+	Stream_SetLevel( typedStream, 1 );
+	Stream_SetFile( typedStream, stJournal->stdOut );
+	Stream_SetAutoFlush( typedStream, True );
+	
+	Journal_RegisterTypedStream( typedStream );
+
+	/* debug */
+	typedStream = CStream_New( Debug_Type );
+	Stream_Enable( typedStream, False );
+	Stream_SetLevel( typedStream, 1 );
+	Stream_SetFile( typedStream, stJournal->stdOut );
+	Stream_SetAutoFlush( typedStream, True );
+	Stream_AddFormatter( typedStream, RankFormatter_New() );
+	
+	Journal_RegisterTypedStream( typedStream );
+	
+	/* dump */
+	typedStream = CStream_New( Dump_Type );
+	Stream_Enable( typedStream, False );
+	Stream_SetLevel( typedStream, 1 );
+	Stream_SetFile( typedStream, stJournal->stdOut );
+	
+	Journal_RegisterTypedStream( typedStream );
+	
+	/* error */
+	typedStream = CStream_New( Error_Type );
+	Stream_Enable( typedStream, True );
+	Stream_SetLevel( typedStream, 1 );
+	Stream_SetFile( typedStream, stJournal->stdErr );
+	Stream_SetAutoFlush( typedStream, True );
+	Stream_AddFormatter( typedStream, RankFormatter_New() );
+	
+	Journal_RegisterTypedStream( typedStream );
+	
+	/* mpi stream */
+	typedStream = MPIStream_New( MPIStream_Type );
+	Stream_Enable( typedStream, True );
+	Stream_SetLevel( typedStream, 1 );
+	
+	Journal_RegisterTypedStream( typedStream );
+
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	stgMemory->infoStream = Stg_Class_Copy( Journal_GetTypedStream( Info_Type ), 0, True, 0, 0 );
+	stgMemory->debugStream = Stg_Class_Copy( Journal_GetTypedStream( Debug_Type ), 0, True, 0, 0 );
+	stgMemory->errorStream = Stg_Class_Copy( Journal_GetTypedStream( Error_Type ), 0, True, 0, 0 );
+
+
+	/* more inits from the Foundation level */
+	Stream_Enable( Journal_Register( Info_Type, Stg_TimeMonitor_InfoStreamName ), False );
+	Stream_Enable( Journal_Register( Info_Type, Stg_MemMonitor_InfoStreamName ), False );
+
+	/* The LiveDebug stream */
+	LiveDebug = Journal_Register( Info_Type, LiveDebugName );
+	Stream_Enable( LiveDebug, True );
+	Stream_SetLevel( LiveDebug, 1 );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Performs and pre-running initialisation necessary in this directory.
+**
+**	In particular, this will begin the operation of the Journal system.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: Init.h 3473 2006-03-06 07:34:22Z PatrickSunter $
+**
+**/
+
+#ifndef __Base_BaseIO_Init_h__
+#define __Base_BaseIO_Init_h__
+	
+	extern const Name    LiveDebugName;
+	/** A global stream for interactive debugging through GDB. Note that the 
+	    code shouldn't send output to this stream */
+	extern Stream*       LiveDebug;
+	
+	Bool      BaseIO_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_BaseIO_Init_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,636 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Journal.c 3855 2006-10-13 07:20:36Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Dictionary.h"
+#include "Dictionary_Entry.h"
+#include "Dictionary_Entry_Value.h"
+#include "Journal.h"
+#include "JournalFile.h"
+#include "CFile.h"
+#include "Stream.h"
+#include "CStream.h"
+#include "MPIStream.h"
+#include "StreamFormatter.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+
+Journal* stJournal = NULL;
+
+const Type Journal_Type = "Journal";
+
+/* String constants for default Journal typed streams. */
+const Type Info_Type = "info";
+const Type Debug_Type = "debug";
+const Type Dump_Type = "dump";
+const Type Error_Type = "error";
+
+/* Depricated string constants. */
+const Type InfoStream_Type = "info";
+const Type DebugStream_Type = "debug";
+const Type DumpStream_Type = "dump";
+const Type ErrorStream_Type = "error";
+
+/* Parsing constants for Dictionary reading. */
+const char* JOURNAL_DELIMITER = ".";
+const char* JOURNAL_KEY = "journal";
+const char* JOURNAL_ENABLE_KEY = "journal";
+const char* JOURNAL_ENABLE_BRANCH_KEY = "journal-enable-branch";
+const char* JOURNAL_LEVEL_KEY = "journal-level";
+const char* JOURNAL_LEVEL_BRANCH_KEY = "journal-level-branch";
+const char* JOURNAL_FILE_KEY = "journal-file";
+const char* JOURNAL_RANK_KEY = "journal-rank";
+const char* JOURNAL_FLUSH_KEY = "journal-autoflush";
+const char* JOURNAL_MPI_OFFSET_KEY = "journal-mpi-offset";
+
+const char* JOURNAL_ON = "on";
+const char* JOURNAL_OFF = "off";
+
+
+static const int JOURNAL_START_SIZE = 16;	/**< Initial size of lists in Journal. */
+static const int JOURNAL_DELTA_SIZE = 8;	/**< Number of elements to extend by for lists in Journal. */
+
+
+/** Retrieves the given named stream. Dotted-decimal notation may be used to get sub streams.
+ ** If the stream does not exists, a new stream is created from the parent stream.
+ **/
+Stream* Journal_GetNamedStream( Stream* typedStream, const Name name );
+
+
+Journal* Journal_New()
+{
+	Journal* self = Memory_Alloc( Journal, "Singleton" );
+	
+	self->_files = Stg_ObjectList_New2( JOURNAL_START_SIZE, JOURNAL_DELTA_SIZE );
+	self->_typedStreams = Stg_ObjectList_New2( JOURNAL_START_SIZE, JOURNAL_DELTA_SIZE );
+	self->enable = True;
+
+	/** Initialise default files. */
+	self->stdOut = CFile_New();
+	self->stdOut->fileHandle = stdout;
+	self->stdOut->_opened = True;
+	
+	self->stdErr = CFile_New();
+	self->stdErr->fileHandle = stderr;
+	self->stdErr->_opened = True;
+	
+	self->firewallProducesAssert = True;
+
+	self->flushCount = 0;
+	
+	return self;
+}
+
+void Journal_Delete( )
+{
+	int i;
+	
+	Stg_Class_Delete( stJournal->stdOut );
+	Stg_Class_Delete( stJournal->stdErr );
+	
+	Stg_ObjectList_DeleteAllObjects( stJournal->_typedStreams );
+	Stg_Class_Delete( stJournal->_typedStreams );
+	
+	for ( i = 0; i < stJournal->_files->count; ++i )
+	{
+		if ( !JournalFile_Close( (JournalFile*) stJournal->_files->data[i] ) )
+		{
+			/* TODO: warning can't close */
+		}
+	}
+	Stg_ObjectList_DeleteAllObjects( stJournal->_files );
+	Stg_Class_Delete( stJournal->_files );
+	
+	Memory_Free( stJournal );
+
+}
+
+void Journal_ReadFromDictionary( Dictionary* dictionary )
+{
+	Dictionary_Index index;
+
+	Stream* stream = NULL; /* The stream which the operation will be applied to. */
+	
+	char* keyCopy;	
+	char* typedToken;
+	char* namedToken;
+	
+	char* operation;
+				
+	Bool valid;
+	
+	/* Iterate through the whole dictionary, checking for journal related commands */
+	for ( index = 0; index < dictionary->count; ++index )
+	{
+		/* Check to see if it is a journal operation by searching for the JOURNAL_KEY. */
+		if ( (0 == strncasecmp( dictionary->entryPtr[index]->key, JOURNAL_KEY, strlen(JOURNAL_KEY))) )
+		{
+			valid = True;
+
+			/* Make copy to tokenise so original contents will not be destroyed */
+			keyCopy = StG_Strdup( dictionary->entryPtr[index]->key );
+			
+			/* The first token determines the operation to perform. */
+			operation = strtok( keyCopy, JOURNAL_DELIMITER );
+			
+			typedToken = strtok( NULL, JOURNAL_DELIMITER );
+			namedToken = strtok( NULL, "" );
+				
+			if ( strcmp( operation, JOURNAL_ENABLE_KEY ) == 0 )
+			{
+				/* Enable function */
+				Bool enable = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				
+				if ( typedToken == NULL )
+				{
+					/* no more tokens, set the entire journal */
+					stJournal->enable = enable;
+				}
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						/* no more tokens, set the entire type */
+						Journal_Enable_TypedStream( typedToken, enable );
+					}
+					else
+					{
+						Journal_Enable_NamedStream( typedToken, namedToken, enable );
+					}
+				}
+				
+			} /* END Enable function */
+			if ( strcmp( operation, JOURNAL_ENABLE_BRANCH_KEY ) == 0 )
+			{
+				Stream* branchStream;
+				/* Enable function */
+				Bool enable = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+		
+				assert( typedToken );
+				if ( namedToken == NULL ) {
+					branchStream = Journal_GetTypedStream( typedToken );
+				}
+				else {
+					branchStream = Journal_Register( typedToken, namedToken );
+				}
+				Stream_EnableBranch( branchStream, enable );
+				
+			} /* END Enable function */
+			else if ( strcmp( operation, JOURNAL_LEVEL_KEY ) == 0 )
+			{
+				/* Set level function */
+				JournalLevel level;
+				
+				level = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+				
+				if ( typedToken == NULL )
+				{
+					printf( "Warning - Can only change level for typed and named streams.\n" );
+				}
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						stream = Journal_GetTypedStream( typedToken );
+					}
+					else
+					{
+						stream = Journal_Register( typedToken, namedToken );
+					}
+					Stream_SetLevel( stream, level );
+				}
+			} /* END SetLevel function */
+			else if ( strcmp( operation, JOURNAL_LEVEL_BRANCH_KEY ) == 0 )
+			{
+				/* Set level function */
+				JournalLevel level;
+				
+				level = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+				
+				if ( typedToken == NULL )
+				{
+					printf( "Warning - Can only change level for typed and named streams.\n" );
+				}
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						stream = Journal_GetTypedStream( typedToken );
+					}
+					else
+					{
+						stream = Journal_Register( typedToken, namedToken );
+					}
+					Stream_SetLevelBranch( stream, level );
+				}
+			} /* END SetLevelBranch function */
+			else if ( strcmp( operation, JOURNAL_FILE_KEY ) == 0 )
+			{
+				/* Set file destination function */
+				JournalFile* file = NULL;
+				char* fileName = Dictionary_Entry_Value_AsString( dictionary->entryPtr[index]->value );
+				
+				if ( typedToken == NULL )
+				{
+					printf( "Warning - Can only change files for typed and named streams.\n" );
+				}
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						/* setting file for typed stream */
+						stream = Journal_GetTypedStream( typedToken );
+					}
+					else
+					{
+						stream = Journal_Register( typedToken, namedToken );
+					}
+					
+					file = Journal_GetFile( fileName );
+					if ( file == NULL )
+					{
+						file = stream->defaultFileType();
+						if ( JournalFile_Open( file, fileName ) ) {
+							Journal_RegisterFile( file );
+						}
+						else {
+							/* error/warning */
+						}
+					}
+					if ( !Stream_SetFile( stream, file ) )
+					{
+						/* file is not valid */
+					}
+				}
+			} /* END File function */
+			else if ( strcmp( operation, JOURNAL_RANK_KEY ) == 0 )
+			{
+				int rank;
+
+				rank = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+
+				if ( typedToken == NULL )
+				{
+					printf( "Warning - Can only set printing rank for typed and named streams.\n" );
+				}
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						stream = Journal_GetTypedStream( typedToken );
+					}
+					else
+					{
+						stream = Journal_Register( typedToken, namedToken );
+					}
+					Stream_SetPrintingRank( stream, rank );
+				}
+			} /* END Printing Rank funciton. */
+			else if ( strcmp( operation, JOURNAL_FLUSH_KEY ) == 0 )
+			{
+				Bool flush = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+
+				if ( typedToken == NULL )
+				{
+					printf( "Warning - Can only set auto-flush for typed and named streams.\n" );
+				}
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						stream = Journal_GetTypedStream( typedToken );
+					}
+					else
+					{
+						stream = Journal_Register( typedToken, namedToken );
+					}
+
+					Stream_SetAutoFlush( stream, flush );
+				}
+			}
+			else if ( strcmp( operation, JOURNAL_MPI_OFFSET_KEY ) == 0 )
+			{
+				MPI_Offset offset = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+
+				if ( typedToken == NULL ) 
+				{
+					printf( "Warning - Can only set mpi-offset for typed and named streams.\n" );
+				}	
+				else
+				{
+					if ( namedToken == NULL )
+					{
+						stream = Journal_GetTypedStream( typedToken );
+					}
+					else
+					{
+						stream = Journal_Register( typedToken, namedToken );
+					}
+
+					if ( ! MPIStream_SetOffset( stream, offset, MPI_COMM_WORLD ) )
+					{
+						printf( "Warning - Failed to set mpi-offset for %s", typedToken );
+						if ( namedToken )
+						{
+							printf( ".%s", namedToken );
+						}
+						printf( "\n" );
+					}	
+				}
+			}	
+			
+			Memory_Free( keyCopy );
+		}	
+	}
+}
+
+void Journal_RegisterTypedStream( Stream* typedStream )
+{
+	/* check exists and update */
+	Stg_ObjectList_Append( stJournal->_typedStreams, typedStream );
+}
+Stream* Journal_GetTypedStream( const Type type )
+{
+	Stream* typedStream = NULL;
+
+	typedStream = (Stream*)Stg_ObjectList_Get( stJournal->_typedStreams, (Name)type );	
+	if ( typedStream == NULL )
+	{
+		/* Make a default stream for this name. */
+		typedStream = CStream_New( type );
+		Stream_Enable( typedStream, True );
+		Stream_SetLevel( typedStream, 1 );
+		Stream_SetFile( typedStream, stJournal->stdOut );
+
+		Journal_RegisterTypedStream( typedStream );
+	}
+	
+	return typedStream;
+}
+Stream* Journal_GetNamedStream( Stream* typedStream, const Name name )
+{
+	Stream* currentStream ;
+	char* nameCopy;
+	char* token;
+	
+	currentStream = typedStream;
+	nameCopy = StG_Strdup( name );
+	
+	
+	token = strtok( nameCopy, JOURNAL_DELIMITER );
+	while ( token != NULL )
+	{
+		currentStream = Stream_RegisterChild( currentStream, token );
+		token = strtok( NULL, JOURNAL_DELIMITER );
+	}
+	
+	Memory_Free( nameCopy );
+	
+	if ( currentStream == typedStream )
+	{
+		return NULL;
+	}
+	
+	return currentStream;
+}
+
+Stream* Journal_Register( const Type type, const Name name )
+{
+	Stream* typedStream = NULL;
+	Stream* namedStream = NULL;
+
+	typedStream = Journal_GetTypedStream( type );
+	namedStream = Journal_GetNamedStream( typedStream, name );	
+
+	return namedStream;
+}
+Stream* Journal_Register2( const Type streamType, const Type componentType, const Name componentName ) {
+	Stream* componentStream;
+	Stream* instanceStream;
+	componentStream = Journal_Register( streamType, componentType );
+	instanceStream = Stream_RegisterChild( componentStream, componentName );
+
+	return instanceStream;
+}
+
+JournalFile* Journal_GetFile( char* fileName )
+{
+	return (JournalFile*) Stg_ObjectList_Get( stJournal->_files, fileName );
+}
+
+
+void Journal_RegisterFile( JournalFile* newFile )
+{
+	if ( newFile == NULL )
+	{
+		/* Warning */
+		return;
+	}
+	Stg_ObjectList_Append( stJournal->_files, newFile );
+}
+
+void Journal_DeregisterFile( JournalFile* file )
+{
+	if ( file == NULL ) {
+		return;
+	}
+	Stg_ObjectList_Remove( stJournal->_files, file->name, KEEP );
+}
+
+void Journal_Enable_TypedStream( const Type type, Bool enable )
+{
+	Stream* typedStream = Journal_GetTypedStream( type );
+	Stream_Enable( typedStream, enable );
+}
+
+void Journal_Enable_NamedStream( const Type type, const Name name, Bool enable )
+{
+	Stream* stream = Journal_Register( type, name );
+	Stream_Enable( stream, enable );
+}
+
+void Journal_PrintConcise()
+{
+	Stream* stream;
+	int i;
+	
+	if ( stJournal == NULL )
+	{
+		return;
+	}
+
+	stream = Journal_Register( Info_Type, "Journal" );
+
+	Journal_Printf( stream, "\nSummary of Journal and Stream Status:\n" );
+	Journal_Printf( stream, "Journal Enabled: %s\n", stJournal->enable ? "True" : "False" );
+	
+	Journal_Printf( stream, "Explanation of the following stream status printout:\n"
+		"The streams are organised hierarchically, as trees, according to the\n"
+		"purpose of the stream - the key stream types \"info\", \"debug\" and \"error\"\n"
+		"are at the top, with all other streams as their children.\n"
+		"We also display the status of each stream: the \"Enabled\" parameter, which can\n"
+		"be individually set from input files/command line, determines whether output sent\n"
+		"to a given stream will print or not. The \"Level\" parameter determines the level\n"
+		"of detail that it will output - 1 is the default, 4 means very verbose.\n"
+		"For full details on Journalling, go to https://csd.vpac.org/twiki/bin/view/Stgermain/Journal\n\n");
+
+	Journal_Printf( stream, "Typed Streams:\n" );
+	for ( i = 0; i < stJournal->_typedStreams->count; ++i )
+	{
+		Stream_PrintConcise( stJournal->_typedStreams->data[i], stream );
+	}
+	Journal_Printf( stream, "\n" );
+}
+
+int Journal_Printf ( void* _stream, char* fmt, ... )
+{
+	int result;
+	Stream* stream = (Stream*)_stream;
+	
+	va_list ap;
+
+	if ( !stJournal->enable || !Stream_IsEnable( stream ) )
+	{
+		return 0;
+	}
+
+	va_start( ap, fmt );
+ 	
+	result = Stream_Printf( stream, fmt, ap );
+	
+	va_end(ap);
+	
+	return result;
+}
+
+int Journal_PrintfL( void* _stream, JournalLevel level, char* fmt, ... )
+{
+	int result;
+	Stream* stream = (Stream*)_stream;
+	
+	va_list ap;
+
+	if ( !stJournal->enable || !Stream_IsEnable( stream ) || !Stream_IsPrintableLevel( stream, level ) )
+	{
+		return 0;
+	}
+
+	va_start( ap, fmt );
+ 	
+	result = Stream_Printf( stream, fmt, ap );
+	
+	va_end(ap);
+	return result;
+}
+/*
+int Journal_Firewall_Func( int expression, char* expressionText, 
+	const char* file, const char* func, int line, void* _stream, char* fmt, ... )
+*/
+int Journal_Firewall( int expression, void* _stream, char* fmt, ... )
+{
+	int result = 0;
+	Stream* stream = (Stream*)_stream;
+	int nProc = 0;
+
+	va_list ap;
+	
+	MPI_Comm_size( MPI_COMM_WORLD, &nProc );
+	
+	if ( expression )
+	{
+		/* Every thing is OK! Back to work as normal */
+		return 0;
+	}
+	
+	Stream_Enable( stream, True ); /* Enforce enabling of stream because we really do want to see this */
+
+	if ( stJournal->enable && Stream_IsEnable( stream ) )
+	{
+		va_start( ap, fmt );
+/*
+		Journal_Printf( stream, "Expression: %s\n", expressionText );
+		Journal_Printf( stream, "From File: %s\n", file );
+		Journal_Printf( stream, "     Function: %s\n", func );
+		Journal_Printf( stream, "     Line: %d\n", line );
+*/	
+		result = Stream_Printf( stream, fmt, ap );
+		Stream_Flush( stream );
+
+		va_end(ap);
+	}
+	
+	if ( stJournal->firewallProducesAssert == True ) {
+		assert( expression );
+	}
+	else {
+		/* TODO: Don't use FAILURE until Pat beef's up the test scripts to do .error checks
+			exit( EXIT_FAILURE );
+		*/
+
+		// SGI MPI on the ess does not always print out everything before it exits
+		// To ensure all output is displayed before the program quits on firewall, sleep for one second
+		// Alan & Kath 20061006
+		sleep( 1 );
+		if ( nProc == 1 ) {
+			exit(EXIT_SUCCESS);
+		}
+		else {
+			MPI_Abort( MPI_COMM_WORLD, EXIT_SUCCESS );
+		}
+	}
+	
+	return result;	
+}
+
+SizeT Journal_Write( void* _stream, void* data, SizeT elem_size, SizeT num_elems )
+{
+	Stream* stream = (Stream*)_stream;
+
+	return Stream_Write( stream, data, elem_size, num_elems );
+}
+
+Bool Journal_Dump( void* _stream, void* data )
+{
+	Stream* stream = (Stream*)_stream;
+
+	return Stream_Dump( stream, data );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	A system which manages all output systems of a program.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	The StGermain Journal contains 4 default typed streams: Info, Debug, Dump and Error. 
+**	
+**	By default, the streams use CStream for outputing and display to standard displays.
+**
+** <b>Description:</b>
+**	The Journal class is a singleton that stores all information about available streams ("typed streams") and currently
+**	active stream instances ("named streams"). The user is able to create and access named streams of any type at a whim
+**	using the Journal singleton.
+**
+**	Please visit the twiki page for details on how to use this module.
+**
+**	http://csd.vpac.org/twiki/bin/view/Stgermain/Journal 
+**
+** $Id: Journal.h 3573 2006-05-15 07:51:14Z AlanLo $
+**
+**/
+
+#ifndef __Base_IO_Journal_h__
+#define __Base_IO_Journal_h__
+
+#include <stdarg.h>
+
+	/** Textual name for Journal class. */
+	extern const Type Journal_Type;
+	
+	/** The Journal singleton. */
+	extern Journal* stJournal;
+
+	extern const Type Info_Type;		/**< Use this constant to retrieve the Info stream. */
+	extern const Type Debug_Type;		/**< Use this constant to retrieve the Debug stream. */
+	extern const Type Dump_Type;		/**< Use this constant to retrieve the Dump stream. */
+	extern const Type Error_Type;		/**< Use this constant to retrieve the Error stream. */
+
+	extern const Type InfoStream_Type;	/**< \deprecated Info stream. */
+	extern const Type DebugStream_Type;	/**< \deprecated Debug stream. */
+	extern const Type DumpStream_Type;	/**< \deprecated Dump stream. */
+	extern const Type ErrorStream_Type;	/**< \deprecated Error stream. */
+
+	extern const char* JOURNAL_DELIMITER;
+	extern const char* JOURNAL_KEY;
+	extern const char* JOURNAL_ENABLE_KEY;
+	extern const char* JOURNAL_ENABLE_BRANCH_KEY;
+	extern const char* JOURNAL_LEVEL_KEY;
+	extern const char* JOURNAL_LEVEL_BRANCH_KEY;
+	extern const char* JOURNAL_FILE_KEY;
+	extern const char* JOURNAL_RANK_KEY;
+	extern const char* JOURNAL_FLUSH_KEY;
+	extern const char* JOURNAL_MPI_OFFSET_KEY;
+
+	extern const char* JOURNAL_ON;
+	extern const char* JOURNAL_OFF;
+
+	/** \def __Journal See Journal. */
+	#define __Journal \
+		Bool                    enable;		\
+		JournalFile*            stdOut;		/**< Default file for stdout. */ \
+		JournalFile*            stdErr;		/**< Default file for stderr. */ \
+		Stg_ObjectList*         _files;		\
+		Stg_ObjectList*         _typedStreams;  \
+		Bool			firewallProducesAssert; /**< Can be overruled by compile flag NDEBUG even if True */ \
+		Index                   flushCount;
+
+	struct Journal { __Journal };
+
+
+	/** Creates a Journal instance. */
+	Journal* Journal_New();
+
+	/** Deallocates the Journal singleton. */
+	void Journal_Delete( );
+
+
+	/** Reads entries from the the given dictionary object to create/configure streams in Journal. */
+	void Journal_ReadFromDictionary( Dictionary* dictionary );
+
+
+	/** Adds the given stream as a typed stream to the journal. The name of the stream should be set to a unique value.
+	 ** If an existing typed stream in the system has the same name, the argument will be rejected and deallocated. 
+	 **/
+	void Journal_RegisterTypedStream( Stream* typedStream );
+
+	/** Returns a typed stream registered in the Journal. If the stream does not exists, NULL is returned. */
+	Stream* Journal_GetTypedStream( const Type type );
+
+	
+	/** Retrives a named stream from the system of the the given type and name.
+	 ** If the instance does not exist, a new stream is created as a duplicate of the typed stream.
+	 **
+	 ** It is possible to provide a dotted-decimal name to retrive a sub stream.
+	 **/
+	Stream* Journal_Register( const Type streamType, const Name name );	
+	
+	/** Designed for components to have their own stream.
+	 ** If the instance does not exist, a new stream is created as a duplicate of the typed stream.
+	 **
+	 ** @param componentType The type of the component
+	 ** @param componentName The name of the component
+	 **/
+	Stream* Journal_Register2( const Type streamType, const Type componentType, const Name componentName );	
+
+	/** Shortcut for objects and components to retrive their own stream */
+	#define Journal_MyStream( streamType, component ) \
+		Journal_Register2( (streamType), (component)->type, (component)->name )
+
+	/** Returns a registered file from the system. If the file does not exist, NULL is returned. */
+	JournalFile* Journal_GetFile( char* fileName );
+
+	/** Registers a file with the Journal system. If the argument is NULL, no operation is performed. */
+	void Journal_RegisterFile( JournalFile* newFile );
+	
+	/** Deregisters a file with the Journal system, deleting the reference from the object list.
+	 ** If the argument is NULL, no operation is performed. */
+	void Journal_DeregisterFile( JournalFile* file ); 
+
+
+
+	/** Enables/Disables the specified typed stream. */
+	void Journal_Enable_TypedStream( const Type type, Bool enable );
+
+	/** Enables/Disables the given named stream.
+	 **
+	 ** If enabling, this will enable all parent streams to ensure output is possible.
+	 ** Dotted-decimal notation is available to access sub streams. 
+	 **/
+	void Journal_Enable_NamedStream( const Type type, const Name name, Bool enable );
+
+
+	/** Prints a summary of the status of each stream in Journal */
+	void Journal_PrintConcise();
+
+
+
+	/** Performs a printf() with the given stream. */
+	int Journal_Printf( void* _stream, char* fmt, ... );
+
+	/** Performs a printf() with the given stream and level of printing.
+	 **
+	 ** Output is only produced if the stream's level of printing is equal or greater.
+	 **/
+	int Journal_PrintfL( void* _stream, JournalLevel level, char* fmt, ... );
+	
+	#ifdef DEBUG
+		/** Performs a Journal_Printf() only if DEBUG is defined. */
+		#define Journal_DPrintf	Journal_Printf
+	#else
+		/* Removes from compilation using if (0)
+		 * Compilers won't compile if (0) code even without optimisation options
+		 */
+		#define Journal_DPrintf if (0) Journal_Printf
+	#endif
+
+	#ifdef DEBUG
+		/** Performs a Journal_PrintfL() only if DEBUG is defined. */
+		#define Journal_DPrintfL Journal_PrintfL
+	#else
+		/* Removes from compilation using if (0)
+		 * Compilers won't compile if (0) code even without optimisation options
+		 */
+		#define Journal_DPrintfL if (0) Journal_PrintfL
+	#endif
+
+
+	
+
+	/** If expression is zero, this function will display a printf to the stream, and exit the program.
+	 **
+	 ** If NDEBUG is defined, a graceful exit is performed, otherwise an assert() is called to produce
+	 ** a core file.
+	 **
+	 ** Not to be called on its own. Please use Journal_Firewall() macro.
+	 **/
+	/* 
+	int Journal_Firewall_Func( int expression, char* expressionText, 
+		const char* file, const char* func, int line, void* stream, char* fmt, ... );
+	*/
+	
+	/** Macro for calling Journal_Firewall()
+	 **
+	 ** Call this function as if the prototype was:
+	 **    int Journal_Firewall( int expression, void* stream, char* fmt, ... );
+	 **
+	 ** The 'char* fmt' argument is passed as a part of __VA_ARGS__. This is intentional as
+	 ** old cc compilers (such as cc on grendel) must have at least 1 argument. C99 compliant
+	 ** compilers can have 0 arguments as it will consume the last comma ',' to prevent a syntax error.
+	 **/
+	/*
+	#define Journal_Firewall( expression, stream, ... ) \
+		Journal_Firewall_Func( expression, #expression, __FILE__, __func__, __LINE__, stream, ##__VA_ARGS__ )
+	*/
+	
+	/* Temporary revert back to old protoype to avoid compilation issues. Need to fix. */
+	int Journal_Firewall( int expression, void* stream, char* fmt, ... );
+	
+	#ifdef DEBUG
+		/** Performs a Journal_Firewall() only if DEBUG is defined. */
+		#define Journal_DFirewall	Journal_Firewall
+	#else
+		/* Removes from compilation using if (0)
+		 * Compilers won't compile if (0) code even without optimisation options
+		 */
+		#define Journal_DFirewall	if (0) Journal_Firewall
+	#endif
+
+	/** Performs a write() to the given stream.
+	 **
+	 ** @param data A contiguous block of data to write, generally a 1D array.
+	 ** @param elem_size The size of each element in the block.
+	 ** @param num_elems The number of elements in this array.
+	 **/
+	SizeT Journal_Write( void* stream, void* data, SizeT elem_size, SizeT num_elems );
+
+	/** Performs a dump depending on the implemenation of the given stream. */
+	Bool Journal_Dump( void* stream, void* data );
+	
+#endif /* __Base_IO_Journal_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: JournalFile.c 3573 2006-05-15 07:51:14Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "JournalFile.h"
+#include "Journal.h"
+#include "Stream.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type JournalFile_Type = "JournalFile";
+
+
+JournalFile* _JournalFile_New(
+	SizeT				_sizeOfSelf,
+	Type				type,
+	Stg_Class_DeleteFunction*	_delete,
+	Stg_Class_PrintFunction*	_print,
+	Stg_Class_CopyFunction*		_copy, 
+	JournalFile_OpenFunction*	_open,
+	JournalFile_AppendFunction*	_append,
+	JournalFile_CloseFunction*	_close,
+	JournalFile_FlushFunction*	_flush )
+{
+	JournalFile* self;
+	
+	assert( _sizeOfSelf >= sizeof(JournalFile) );
+	self = (JournalFile*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	_JournalFile_Init( self, _open, _append, _close, _flush );
+	
+	return self;
+}
+	
+void _JournalFile_Init(
+	JournalFile*			self,
+	JournalFile_OpenFunction*	_open,
+	JournalFile_AppendFunction*	_append,
+	JournalFile_CloseFunction*	_close,
+	JournalFile_FlushFunction*	_flush )
+{
+	_Stg_Object_Init( (Stg_Object*)self, "", NON_GLOBAL );
+	
+	self->_open = _open;
+	self->_append = _append;
+	self->_close = _close;
+	self->_flush = _flush;
+	
+	self->fileHandle = NULL;
+	self->_opened = False;
+}
+
+void _JournalFile_Delete( void* journalFile )
+{
+	_Stg_Object_Delete( journalFile );
+}
+void _JournalFile_Print( void* journalFile, Stream* stream )
+{
+	JournalFile* self = (JournalFile*)journalFile;
+                                                                                
+        Journal_Printf( stream, "JournalFile (ptr): %p\n", self );
+         
+        _Stg_Object_Print( self, stream );
+         
+        Journal_Printf( stream, "\tfileHandle (ptr): %p\n", self->fileHandle );
+}
+
+Bool JournalFile_Open( void* file, char* fileName )
+{
+	JournalFile* self = (JournalFile*)file;
+	
+	Bool result = self->_open( self, fileName );
+	
+	if ( result )
+	{
+		/* File opened, set the name. */
+		Stg_Object_SetName( self, fileName );
+		self->_opened = True;
+	}
+	
+	return result;
+}
+Bool JournalFile_Reopen( void* journalFile ) {
+	JournalFile* self = (JournalFile*)journalFile;
+
+	Bool result;
+
+	if ( self->_opened ) {
+		return True;
+	}
+	result = self->_open( self, self->name );
+	if ( result ) {
+		self->_opened = True;
+	}
+	return result;
+}
+
+Bool JournalFile_Append( void* file, char* fileName ) {
+	JournalFile* self = (JournalFile*)file;
+	
+	Bool result = self->_append( self, fileName );
+	
+	if ( result )
+	{
+		/* File opened, set the name. */
+		Stg_Object_SetName( self, fileName );
+		self->_opened = True;
+	}
+	
+	return result;
+}
+Bool JournalFile_Close( void* file )
+{
+	JournalFile* self = (JournalFile*)file;
+	Bool result = False;
+	if ( self->_opened ) {
+		result = self->_close( file );
+		if ( result ) {
+			self->_opened = False;
+		}
+	}
+	return result;
+}
+Bool JournalFile_IsOpened( void* journalFile ) {
+	JournalFile* self = (JournalFile*)journalFile;
+	return self->_opened;
+}
+
+Bool JournalFile_Flush( void* file )
+{
+	JournalFile* self = (JournalFile*)file;
+	stJournal->flushCount++;
+	return self->_flush( self );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,152 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 representation of a file.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	The abstraction of this class has come from a number of reasons:
+**	- Other than using traditional C files, StGermain will use HDF5 and potentially other alternatives for writing data to file.
+**	  These use different functions other than fopen(), fclose()...etc. 
+**
+**	  Hence a level of abstract is created to allow for various implementations.
+**
+**	- The concept of 'File' is separated from 'Stream' to allow more flexibility. It allows users to direct output of a
+**	  child stream to a different location from the parent.
+**
+**	  However, this will introduce a potential of mis-use when uses accidentally attempts to set a HDF5 file to a normal
+**	  CStream or vice-versa. Stream_SetFile will catch this error and will print a warning message.
+**
+** <b>Description:</b>
+**	Parent class for all files. Sub classes should implement the open, close and flush functions.
+**	JournalFile is a sub-class of NamedObject, where its name is the name of the file it has opened if any.
+**
+** $Id: JournalFile.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_IO_JournalFile_h__
+#define __Base_IO_JournalFile_h__
+
+	/** Textual name for JournalFile class. */
+	extern const Type JournalFile_Type;
+
+	typedef JournalFile* (JournalFile_Constructor) (void);
+	typedef Bool (JournalFile_OpenFunction) (void* file, char* fileName );
+	typedef Bool (JournalFile_AppendFunction) (void* file, char* fileName );
+	typedef Bool (JournalFile_CloseFunction) (void* file );
+	typedef Bool (JournalFile_FlushFunction) (void* file );
+		
+	/** \def __JournalFile See JournalFile */
+	#define __JournalFile \
+		__Stg_Object					\
+								\
+		/* Virtual functions */				\
+		JournalFile_OpenFunction*	_open; 		\
+		JournalFile_AppendFunction*	_append; 		\
+		JournalFile_CloseFunction*	_close; 	\
+		JournalFile_FlushFunction*	_flush; 	\
+								\
+		/* JournalFile members */			\
+		void*				fileHandle;	/* Generic file handle for any file. */ \
+		Bool				_opened;
+	struct JournalFile { __JournalFile };
+
+
+	/** Constructor interface. */
+	JournalFile* _JournalFile_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		JournalFile_OpenFunction*	_open,
+		JournalFile_AppendFunction*	_append,
+		JournalFile_CloseFunction*	_close,
+		JournalFile_FlushFunction*	_flush );
+	
+	/** Init interface. */
+	void _JournalFile_Init(
+		JournalFile*			self,
+		JournalFile_OpenFunction*	_open,
+		JournalFile_AppendFunction*	_append,
+		JournalFile_CloseFunction*	_close,
+		JournalFile_FlushFunction*	_flush );
+	
+	/** Stg_Class_Delete interface. */
+	void _JournalFile_Delete( void* journalFile );
+
+	/** Print interface. */
+	void _JournalFile_Print( void* journalFile, Stream* stream );		
+	
+
+	/** Open a file for writing. If successful, sets the name for this instance to the file name and returns True.
+	 **
+	 ** @param journalFile An instance of a JournalFile sub-class.
+	 **/
+	Bool JournalFile_Open( void* journalFile, char* fileName );
+	
+	
+	/** Reopen a file for writing. It will use the previous name it was opened with.
+	 **
+	 ** @param journalFile An instance of a JournalFile sub-class.
+	 **/
+	Bool JournalFile_Reopen( void* journalFile );
+	
+	/** Macro to improve readability */
+	#define JournalFile_ReopenIfClosed JournalFile_Reopen
+	
+	/** Opens a file for writing, if the file exists then append future print statements to this file.
+	 ** If successful, sets the name for this instance to the file name and returns True.
+	 **
+	 ** @param journalFile An instance of a JournalFile sub-class.
+	 **/
+	Bool JournalFile_Append( void* journalFile, char* fileName );
+
+	/** Close a file. If successful, returns True.
+	 **
+	 ** @param journalFile An instance of a JournalFile sub-class.
+	 **/
+	Bool JournalFile_Close( void* journalFile );
+
+	/** Checks whether a file is opened.
+	 **
+	 ** @param journalFile An instance of a JournalFile sub-class.
+	 **/
+	Bool JournalFile_IsOpened( void* journalFile );
+
+	/** Flush a file, outputting all un-written data from input buffers to device/file. If successful, returns True.
+	 **
+	 ** @param journalFile An instance of a JournalFile sub-class.
+	 **/
+	Bool JournalFile_Flush( void* journalFile );
+
+
+#endif /* __Base_IO_JournalFile_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,226 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: LineFormatter.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "StreamFormatter.h"
+#include "LineFormatter.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include <mpi.h>
+#include <stdarg.h>  
+
+
+const Type LineFormatter_Type = "LineFormatter";
+
+LineFormatter* _LineFormatter_New(
+	SizeT 				_sizeOfSelf,
+	Type 				type,
+	Stg_Class_DeleteFunction*		_delete,
+	Stg_Class_PrintFunction*		_print,
+	Stg_Class_CopyFunction*		_copy, 
+	StreamFormatter_FormatFunction*	_format )
+{
+	LineFormatter* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(LineFormatter) );
+	self = (LineFormatter*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+                                                                                
+	_LineFormatter_Init( self, _format );
+
+	return self;
+}
+
+void _LineFormatter_Init(
+	LineFormatter*			self,
+	StreamFormatter_FormatFunction*	_format )
+{
+	_StreamFormatter_Init( (StreamFormatter*)self, _format );
+	self->_newLine = True;
+	self->_tag = NULL;
+}
+
+void _LineFormatter_Delete( void* formatter )
+{
+	LineFormatter* self = (LineFormatter*)formatter;
+	
+	#if DEBUG
+		assert( self );
+	#endif
+
+	if ( self->_tag != NULL )
+	{
+		Memory_Free( self->_tag );
+	}
+
+	/* Stg_Class_Delete parent */
+	_StreamFormatter_Delete( self );
+}
+void _LineFormatter_Print( void* formatter, Stream* stream )
+{
+	LineFormatter* self = (LineFormatter*) formatter;
+
+	#if DEBUG
+		assert( self );
+		assert (stream);
+	#endif
+	
+	/* General info */
+	printf( "LineFormatter (ptr): %p\n", formatter );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* print _newLine and _tag */
+}
+
+void* _LineFormatter_Copy( void* lineFormatter, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	LineFormatter*	self = (LineFormatter*)lineFormatter;
+	LineFormatter*	newLineFormatter;
+	
+	/* Create new instance. Copy virtual info */
+	newLineFormatter = _StreamFormatter_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* Copy member info. */
+	newLineFormatter->_newLine = self->_newLine;
+	if ( self->_tag != NULL ) {
+		newLineFormatter->_tag = StG_Strdup( self->_tag );
+	}
+	else {
+		newLineFormatter->_tag = NULL;
+	}
+	
+	return newLineFormatter;
+}
+
+char* _LineFormatter_Format( void* formatter, char* fmt )
+{
+	LineFormatter* self = (LineFormatter*)formatter;
+	char* result;
+	char* currentLine;
+	int numInsert;
+	int fmtLength;
+	int prependLength;
+	int newLength;
+
+			
+	char* destPtr;
+	char* srcPtr;
+		
+	#if DEBUG
+		assert( self );
+	#endif
+
+	if ( self->_tag == NULL )
+	{
+		/* No tag to add, so return same format */
+		return fmt;
+	}
+
+	/* count number of inserts */
+	numInsert = 0;
+	currentLine = strchr( fmt, '\n' );
+	while ( currentLine != NULL )
+	{
+		numInsert++;	
+		currentLine = strchr( currentLine + 1, '\n' );
+	}
+	if ( self->_newLine )
+	{
+		numInsert++;
+	}
+	
+	fmtLength = strlen( fmt );
+	if ( fmtLength > 0 && fmt[fmtLength - 1] == '\n' )
+	{
+		numInsert--;
+	}
+
+	prependLength = strlen( self->_tag );
+	
+	/* Calculate length of new string */
+	if ( numInsert > 0 )
+	{
+		newLength = fmtLength + ( prependLength * numInsert );
+	}
+	else
+	{
+		newLength = fmtLength;
+	}
+	
+/*	result = Memory_Alloc_Array( char, newLength + 1, Memory_IgnoreName );*/
+	result = StreamFormatter_Buffer_AllocNext( newLength + 1 );
+	
+	destPtr = result;
+	srcPtr = fmt;
+	
+	/* If we were upto a new line, begin with a prepend. */
+	if ( self->_newLine )
+	{
+		sprintf( destPtr, "%s", self->_tag );
+		destPtr += prependLength;
+	}
+	
+	self->_newLine = False;
+	
+	while ( *srcPtr != '\0' )
+	{
+		*destPtr = *srcPtr;
+		
+		destPtr++;
+		
+		if ( *srcPtr == '\n' )
+		{
+			/* if not the last endline */
+			if ( (srcPtr - fmt) != (fmtLength - 1) )
+			{
+				sprintf( destPtr, "%s", self->_tag );
+				destPtr += prependLength;
+			}
+			else
+			{
+				/* If we are at the last line, and it was a new line, prepend the next time this is called. */
+				self->_newLine = True;
+			}
+		}
+		srcPtr++;
+	}
+	*destPtr = '\0';
+	
+	return result;	
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	An abstract class representing a formatter which adds text per line.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** <b>Description:</b>
+**	Encapsulates a set of code which formats printf() statements by line.
+**	Sub-classes are written to describe what is prepended.
+**
+** $Id: LineFormatter.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+
+#ifndef __Base_IO_LineFormatter_h__
+#define __Base_IO_LineFormatter_h__
+
+	/** Textual name for LineFormatter class. */
+	extern const Type LineFormatter_Type;
+
+
+	/** \def __LineFormatter See LineFormatter */
+	#define __LineFormatter \
+		__StreamFormatter			/* Inherit StreamFormatter. */ \
+							\
+		Bool	_newLine;			/* Whether the current stream is at a new line. */ \
+		char*	_tag;				/* The string to prepend at the start of every line. */
+	struct LineFormatter { __LineFormatter };
+
+
+	/** Constructor interface. */
+	LineFormatter* _LineFormatter_New(
+		SizeT 				_sizeOfSelf,
+		Type 				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		StreamFormatter_FormatFunction*	_format );
+
+	/** Init interface. */
+	void _LineFormatter_Init(
+		LineFormatter*			self,
+		StreamFormatter_FormatFunction*	_format );
+			
+	/** Stg_Class_Delete interface. */
+	void _LineFormatter_Delete( void* formatter );
+
+	/** Print interface. */
+	void _LineFormatter_Print( void* formatter, Stream* stream );
+	
+	/** Copy interface. */
+	#define LineFormatter_Copy( self ) \
+		(LineFormatter*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define LineFormatter_DeepCopy( self ) \
+		(LineFormatter*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _LineFormatter_Copy( void* lineFormatter, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+
+	/** Formats a output string of printf by prepending a tag in front of every line detected. */
+	char* _LineFormatter_Format( void* formatter, char* fmt );
+
+
+#endif /* __Base_IO_LineFormatter_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: MPIFile.c 2745 2005-03-05 08:12:18Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "JournalFile.h"
+#include "MPIFile.h"
+#include "Stream.h"
+#include "Journal.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+
+
+const Type MPIFile_Type = "MPIFile";
+
+
+JournalFile* MPIFile_New()
+{
+	return (JournalFile*)_MPIFile_New( sizeof(MPIFile), MPIFile_Type, _MPIFile_Delete, _MPIFile_Print, NULL );
+}
+
+JournalFile* MPIFile_New2( char* fileName )
+{
+	JournalFile* result = MPIFile_New();
+
+	if ( !JournalFile_Open( result, fileName ) )
+	{
+		/* File could not be opened successfully. Return cleanly. */
+		Stg_Class_Delete( result );
+		result = NULL;
+	}
+	
+	return result;
+}
+
+MPIFile* _MPIFile_New(
+	SizeT _sizeOfSelf,
+	Type type,
+	Stg_Class_DeleteFunction* _delete,
+	Stg_Class_PrintFunction* _print,
+	Stg_Class_CopyFunction* _copy )
+{
+	MPIFile* self;
+	
+	self = (MPIFile*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	_MPIFile_Init( self );
+	
+	return self;
+}
+	
+void MPIFile_Init( MPIFile* self )
+{
+	/* Set virtual info. */
+	self->_sizeOfSelf = sizeof(MPIFile);
+	self->type = MPIFile_Type;
+	self->_delete = _MPIFile_Delete;
+	self->_print = _MPIFile_Print;
+	self->_copy = NULL;
+	
+	_MPIFile_Init( self );
+}
+	
+void _MPIFile_Init( MPIFile* self )
+{
+	_JournalFile_Init( (JournalFile*)self, _MPIFile_Open, _MPIFile_Append, _MPIFile_Close, _MPIFile_Flush );
+}
+	
+void _MPIFile_Delete( void* cfile )
+{
+	MPIFile* self = (MPIFile*)cfile;
+	
+	_JournalFile_Delete( self );
+}
+void _MPIFile_Print( void* cfile, Stream* stream )
+{
+	MPIFile* self = (MPIFile*)cfile;
+	
+	_JournalFile_Print( self, stream );
+}
+
+	
+Bool _MPIFile_Open( void* file, char* fileName )
+{
+	MPIFile* self = (MPIFile*) file;
+
+	/* Remove the file if it is already there */
+	if ( access( fileName, F_OK ) == 0 ) {
+		remove( fileName );
+	}
+
+	MPI_File_open( MPI_COMM_WORLD, fileName, MPI_MODE_CREATE | MPI_MODE_WRONLY | MPI_MODE_EXCL, 
+			MPI_INFO_NULL, &(self->mpiFile) );
+
+	self->fileHandle = &(self->mpiFile);
+	
+	return True;	
+}
+	
+Bool _MPIFile_Append( void* file, char* fileName )
+{
+	MPIFile* self = (MPIFile*) file;
+
+	MPI_File_open( MPI_COMM_WORLD, fileName, MPI_MODE_WRONLY, MPI_INFO_NULL, &(self->mpiFile) );
+
+	self->fileHandle = &(self->mpiFile);
+	
+	return True;	
+}
+
+
+Bool _MPIFile_Close( void* file )
+{
+	MPIFile* self = (MPIFile*) file;
+	
+	MPI_File_close( &(self->mpiFile) );
+	
+	return True;
+}
+
+Bool _MPIFile_Flush( void* file )
+{
+
+	/* No flush */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Encapsulation of MPI IO routines for file writing
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**
+** <b>Description</b>
+**      MPIFile is a wrapper to the MPI IO routines for file writing.
+**
+** $Id: MPIFile.h 2745 2005-03-05 08:12:18Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_IO_MPIFile_h__
+#define __Base_IO_MPIFile_h__
+
+#include <mpi.h>
+
+	/** Textual name for MPIFile class. */
+	extern const Type MPIFile_Type;
+	
+	/** \def __MPIFile See MPIFile. */
+	#define __MPIFile \
+		/* General info */ \
+		__JournalFile \
+		MPI_File mpiFile;
+	struct MPIFile { __MPIFile };
+
+
+	/** Creates a new MPIFile with no opened file. JournalFile_Open() must be called. */
+	JournalFile* MPIFile_New();
+
+	/** Creates a new MPIFile, opening the file given by fileName. Returns NULL if system is unable to open the given file. */
+	JournalFile* MPIFile_New2( char* fileName );
+
+	/** Initialises an instance of MPIFile. Will not open any files. */
+	void MPIFile_Init( MPIFile* self );
+
+
+	/** Constructor interface. */
+	MPIFile* _MPIFile_New(
+		SizeT _sizeOfSelf,
+		Type type,
+		Stg_Class_DeleteFunction* _delete,
+		Stg_Class_PrintFunction* _print,
+		Stg_Class_CopyFunction* _copy );
+		
+	/** Init interface. */
+	void _MPIFile_Init( MPIFile* self );
+	
+	/** Stg_Class_Delete interface. */
+	void _MPIFile_Delete( void* cfile );
+
+	/** Print interface. */
+	void _MPIFile_Print( void* cfile, Stream* stream );
+	
+	
+	/** Implementation for Open function. */
+	Bool _MPIFile_Open( void* file, char* fileName );
+
+	/** Implementation for Append function. */
+	Bool _MPIFile_Append( void* file, char* fileName );
+
+	/** Implementation for Close function. */
+	Bool _MPIFile_Close( void* file );
+
+	/** Implementation for Flush function. */
+	Bool _MPIFile_Flush( void* file );
+	
+
+#endif /* __Base_IO_MPIFile_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MPIStream.c 2807 2005-03-17 00:24:43Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "JournalFile.h"
+#include "MPIFile.h"
+#include "Stream.h"
+#include "MPIStream.h"
+
+#include "Base/IO/mpirecord/mpimessaging.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#include <stdarg.h>   /* Subsequent files need this for variable argument lists. */
+
+#include "Journal.h"
+
+
+const Type MPIStream_Type = "MPIStream";
+
+
+Stream* MPIStream_New( Name name )
+{
+	return (Stream*)_MPIStream_New( sizeof(MPIStream), MPIStream_Type, _MPIStream_Delete, _MPIStream_Print, _Stream_Copy, 
+		name, _MPIStream_Printf, _MPIStream_Write, _MPIStream_Dump, _MPIStream_SetFile );
+}
+
+void MPIStream_Init( MPIStream* self, Name name )
+{
+	
+}
+
+
+MPIStream* _MPIStream_New( 
+	SizeT			_sizeOfSelf, 
+	Type			type, 
+	Stg_Class_DeleteFunction*	_delete, 
+	Stg_Class_PrintFunction* 	_print,
+	Stg_Class_CopyFunction*	_copy, 
+	Name			name,
+	Stream_PrintfFunction*	_printf, 
+	Stream_WriteFunction*	_write, 
+	Stream_DumpFunction*	_dump,
+	Stream_SetFileFunction*	_setFile )
+{
+	MPIStream* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(MPIStream) );
+	self = (MPIStream*)_Stream_New( _sizeOfSelf, type, _delete, _print, _copy, name, 
+		_printf, _write, _dump, _setFile );
+	
+	_MPIStream_Init( self );
+	
+	return self;
+}
+
+void _MPIStream_Init( MPIStream* self )
+{
+	self->defaultFileType = MPIFile_New;
+}
+	
+void _MPIStream_Delete( void* cStream )
+{
+	MPIStream* self = (MPIStream*)cStream;
+	
+	/* Stg_Class_Delete parent */
+	_Stream_Delete( self );
+}
+
+void _MPIStream_Print( void* mpiStream, Stream* stream ) {
+
+	MPIStream* self = (MPIStream*)mpiStream;
+	
+	/* General info */
+	Journal_Printf( stream, "MPIStream (ptr): %p\n", mpiStream );
+	
+	/* Print parent */
+	_Stream_Print( self, stream );
+		
+}
+	
+SizeT _MPIStream_Printf( Stream* stream, char *fmt, va_list args )
+{
+	MPIStream* self = (MPIStream*)stream;
+	MPI_Status status;
+	char* buffer;
+	SizeT numChars;
+	SizeT result;
+	
+	if ( self->_file == NULL )
+	{
+		return 0;
+	}
+
+	numChars = Stg_vasprintf( &buffer, fmt, args );
+
+	result = MPI_File_write( *(MPI_File*)(self->_file->fileHandle), buffer, numChars, MPI_BYTE, &status );
+
+	Memory_Free( buffer );
+	
+	return result;
+}
+	
+SizeT _MPIStream_Write( Stream* stream, void *data, SizeT elem_size, SizeT num_elems )
+{
+	MPIStream* self = (MPIStream*)stream;
+	MPI_Status status;
+	
+	return MPI_File_write( *(MPI_File*)(self->_file->fileHandle), data, num_elems * elem_size, MPI_BYTE, &status );
+}
+	
+Bool _MPIStream_Dump( Stream* stream, void *data )
+{
+	/* No specific dumping mechanism, can create in derived classes */
+	return False;
+}
+
+Bool _MPIStream_SetFile( Stream* stream, JournalFile* file )
+{
+	if ( file->type == MPIFile_Type )
+	{
+		stream->_file = file;
+		return True;
+	}
+	return False;
+}
+
+#define MPIStream_OffsetTag 167
+
+Bool MPIStream_SetOffset( Stream* stream, SizeT sizeToWrite, MPI_Comm communicator ) {
+	MPI_Offset offset    = 0;
+	MPI_Offset endOffset = 0;
+	MPI_Status status;
+	int        rank;
+	int        nproc;
+	
+	if ( stream->_file == NULL ) {
+		return False;
+	}
+
+	if ( stream->_file->type != MPIFile_Type ) {
+		return False;
+	}
+	
+	MPI_Comm_rank( communicator, &rank );
+	MPI_Comm_size( communicator, &nproc );
+
+	/* Receive offset from guy on left to find out what point I want to write in the file */
+	if ( rank != 0 ) {
+		MPI_Recv( &offset, sizeof(MPI_Offset), MPI_BYTE, rank - 1, MPIStream_OffsetTag, communicator, &status );
+	}
+
+	/* Send offset to guy on right */
+	endOffset = offset + sizeToWrite;
+	if ( rank != nproc - 1 ) {
+		MPI_Send( &endOffset, sizeof(MPI_Offset), MPI_BYTE, rank + 1, MPIStream_OffsetTag, communicator );
+	}
+	
+	MPI_File_seek( *(MPI_File*)stream->_file->fileHandle, offset, MPI_SEEK_SET ); 
+	
+	return True;
+}
+
+SizeT MPIStream_WriteAllProcessors( Stream* stream, void *data, SizeT elem_size, SizeT num_elems, MPI_Comm communicator ) {
+	SizeT sizeToWrite = elem_size * num_elems;
+
+	MPIStream_SetOffset( stream, sizeToWrite, communicator );
+
+	return Stream_Write( stream, data, elem_size, num_elems );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Encapsulation of C-style printing.
+**
+** <b>Assumptions</b>
+**	None
+**
+** <b>Comments</b>
+**	None
+**
+** <b>Description</b>
+**	A Wrapper class for C output functions such as fprintf() and fwrite().
+**
+** Comments:
+**
+** $Id: MPIStream.h 2745 2005-03-05 08:12:18Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_IO_MPIStream_h__
+#define __Base_IO_MPIStream_h__
+	
+	/** Textual name for MPIStream class. */
+	extern const Type MPIStream_Type;
+	
+	
+	/** \def __MPIStream See MPIStream. */
+	#define __MPIStream \
+		/* General info */ \
+		__Stream
+	struct MPIStream { __MPIStream };
+
+
+	/** Create a new MPIStream */
+	Stream* MPIStream_New( Name name );
+
+	/** Inits a MPIStream. */
+	void MPIStream_Init( MPIStream* self, Name name );
+
+	/** Constructor interface. */
+	MPIStream* _MPIStream_New( 
+		SizeT			_sizeOfSelf, 
+		Type			type, 
+		Stg_Class_DeleteFunction*	_delete, 
+		Stg_Class_PrintFunction* 	_print,
+		Stg_Class_CopyFunction*	_copy, 
+		Name			name,
+		Stream_PrintfFunction*	_printf, 
+		Stream_WriteFunction*	_write, 
+		Stream_DumpFunction*	_dump,
+		Stream_SetFileFunction*	_setFile );
+
+	/** Init interface. */
+	void _MPIStream_Init( MPIStream *self );
+	
+	/** Stg_Class_Delete interface. */
+	void _MPIStream_Delete( void* cStream );
+	
+	/** Print interface. */
+	void _MPIStream_Print( void* cStream, Stream* stream );
+
+
+	/** Printf() implementation. */
+	SizeT _MPIStream_Printf( Stream* stream, char *fmt, va_list args );
+	
+	/** Write() implementation. */
+	SizeT _MPIStream_Write( Stream* stream, void *data, SizeT elem_size, SizeT num_elems );
+	
+	/** Dump() implementation. Performs no operation for MPIStreams. */
+	Bool _MPIStream_Dump( Stream* stream, void *data );
+	
+	/** SetFile() implementation. */
+	Bool _MPIStream_SetFile( Stream* stream, JournalFile* file );
+	
+	/** Sets the offset in bytes of this an mpi stream so that each rank may print to their own position in file */
+	Bool MPIStream_SetOffset( Stream* stream, SizeT sizeToWrite, MPI_Comm communicator ) ;
+	SizeT MPIStream_WriteAllProcessors( Stream* stream, void *data, SizeT elem_size, SizeT num_elems, MPI_Comm communicator ) ;
+	
+#endif /* __IO_MPIStreamFile_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseIO
+def_inc = StGermain/Base/IO
+
+def_srcs = \
+	Init.c \
+	Dictionary.c \
+	Dictionary_Entry.c \
+	Dictionary_Entry_Value.c \
+	IO_Handler.c \
+	XML_IO_Handler.c \
+	Journal.c \
+	JournalFile.c \
+	CFile.c \
+	MPIFile.c \
+	Stream.c \
+	CStream.c \
+	MPIStream.c \
+	StreamFormatter.c \
+	LineFormatter.c \
+	RankFormatter.c \
+	IndentFormatter.c \
+	PathUtils.c \
+	Finalise.c \
+	shortcuts.c
+
+ifdef USE_MPIRECORD
+	def_srcs += stgmessaging.c
+endif
+
+def_hdrs = \
+	types.h \
+	shortcuts.h \
+	Init.h \
+	Dictionary.h \
+	Dictionary_Entry.h \
+	Dictionary_Entry_Value.h \
+	IO.h \
+	IO_Handler.h \
+	XML_IO_Handler.h \
+	Journal.h \
+	JournalFile.h \
+	CFile.h \
+	MPIFile.h \
+	Stream.h \
+	CStream.h \
+	MPIStream.h \
+	StreamFormatter.h \
+	LineFormatter.h \
+	RankFormatter.h \
+	IndentFormatter.h \
+	PathUtils.h \
+	Finalise.h
+
+def_objlists = 

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,343 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "Base/Foundation/Foundation.h"
+#include <libxml/parserInternals.h>
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include "JournalFile.h"
+#include "Stream.h"
+
+#include "PathUtils.h"
+
+
+static const char*      joiner = "/";
+
+
+void FindFile( char* fullPath, char* filename, char* searchPaths ) {
+	char*   spaths;
+	char*   pos;
+	FILE*   f;
+	
+	assert( filename );
+	
+	fullPath[0] = 0;
+	
+	if( searchPaths && !(filename[0] == '/' || filename[0] == '~') ) {
+		spaths = Memory_Alloc_Array_Unnamed(char,(strlen( searchPaths ) + 1));
+		strcpy( spaths, searchPaths );
+		pos = strtok( spaths, ":" );
+		while( pos ) {
+			PathJoin( fullPath, 2, pos, filename );
+		
+			f = fopen( fullPath, "r" );
+			if( f ) {
+				fclose( f );
+				break;
+			}
+		
+			fullPath[0] = 0;
+			pos = strtok( NULL, ":" );
+		}
+		
+		Memory_Free( spaths );
+	}
+	else {
+		f = fopen( filename, "r" );
+		if( f ) {
+			fclose( f );
+			strcpy( fullPath, filename );
+		}
+	}
+}
+
+Bool FindFileInPathList( char* fullPath, char* filename, char** searchPaths, Index searchPathsSize ) {
+
+	xmlParserInputBufferPtr fileTester;
+	
+	assert( filename );
+
+	if( searchPaths && searchPathsSize > 0 && !(filename[0] == '/' || filename[0] == '~') ) {
+		Index ii;
+
+		for ( ii = 0; ii < searchPathsSize; ++ii ) {
+			sprintf( fullPath, "%s/%s", searchPaths[ii], filename );
+			fileTester = xmlParserInputBufferCreateFilename( fullPath, XML_CHAR_ENCODING_NONE );
+			if ( fileTester ) {
+				xmlFreeParserInputBuffer( fileTester );
+				return True;
+			}
+		}
+	}
+	else {
+		fileTester = xmlParserInputBufferCreateFilename( filename, XML_CHAR_ENCODING_NONE );
+		if ( fileTester ) {
+			xmlFreeParserInputBuffer( fileTester );
+			strcpy( fullPath, filename );
+			return True;
+		}
+	}
+	return False;
+}
+
+void PathJoin( char* path, unsigned count, ... ) {
+	va_list		lst;
+	char*		next;
+	char*		pos;
+	unsigned	i;
+	
+	assert( count );
+
+	pos = path;
+	va_start( lst, count );
+	for( i = 0; i < count - 1; i++ ) {
+		next = va_arg( lst, char* );
+		
+		memcpy( pos, next, sizeof(char) * strlen( next ) );
+		pos += strlen( next );
+		
+		if( strncmp( pos - strlen( joiner ), joiner, strlen( joiner ) ) ) {
+			memcpy( pos, joiner, sizeof(char) * strlen( joiner ) );
+			pos += strlen( joiner );
+		}
+	}
+
+	next = va_arg( lst, char* );
+	strcpy( pos, next );
+	
+	va_end( lst );
+}
+
+
+
+/* Based on Robert Turnbull's ExpandEnvironmentVariables function */
+/* assumes string is malloced and from a non-tokenised source */
+char* ExpandEnvironmentVariables( char* string ) {
+	char* result;			/* copy of input argument */
+	
+	char* variableBegin;		/* ptr to where variable starts */
+	char* variableEnd;		/* ptr to position after end of variable text */
+	char* nameBegin;		/* ptr to where name of variable starts */
+	char* nameEnd;			/* ptr to position of the last character in variable name */
+	char* endChars = NULL;	/* list of characters which indicate an end of variable */
+
+	char* current;			/* current position in string */
+	char* endOfString;		/* pointer to end of string */
+
+	char envName[256];		/* name of environment variable */
+	char* envValue;			/* the value of the environment variable */
+
+	int length;			/* current length of result string */
+	int nameLength;			/* length of the variable name */
+
+	int charsToWrite;		/* number of characters to write to result */
+	int charsWritten; 		/* number of characters written to the result */
+
+	Bool hasBraces;			/* whether the env variable is using a brace in its name */
+
+	length = strlen( string );
+	charsWritten = 0;
+	
+	result = Memory_Alloc_Array( char, length + 1, "EnvTemp" );
+
+	current = string;
+	endOfString = string + length;
+
+	variableBegin = strchr( current, '$' );
+	if ( variableBegin == NULL ) {
+		Memory_Free( result );
+		return string;
+	}
+
+	while ( variableBegin != NULL ) {
+
+		charsToWrite = variableBegin - current;
+		strncpy( result + charsWritten, current, charsToWrite );
+		charsWritten += charsToWrite;
+		
+		hasBraces = True;
+		switch ( *(variableBegin + 1) ) {
+			case '{':
+				nameBegin = variableBegin + 2;
+				endChars = "}";
+				break;
+			case '(':
+				nameBegin = variableBegin + 2;
+				endChars = ")";
+				break;
+			case '\0':
+				nameBegin = variableBegin + 1;
+				break;
+			default:
+				nameBegin = variableBegin + 1;
+				endChars = "/.;, \\"; 
+				hasBraces = False;
+		}
+
+		if ( nameBegin >= endOfString ) {
+			Journal_Printf(
+				Journal_Register( Debug_Type, "PathUtils" ),
+				"Warning - Environment variable begins at the end of string: %s\n",
+				string );
+			Memory_Free( result );
+			return string;
+		}
+
+		variableEnd = strpbrk( nameBegin, endChars );
+
+		if ( variableEnd == NULL ) {
+			if ( hasBraces ) {
+				Journal_Printf(
+					Journal_Register( Debug_Type, "PathUtils" ),
+					"Warning - Mismatched %s for environment variable in value: %s\n",
+					endChars,
+					string );
+				Memory_Free( result );
+				return string;
+			}
+			else {
+				variableEnd = endOfString;
+			}
+		}
+		if ( variableBegin == variableEnd ) {
+			Journal_Printf(
+				Journal_Register( Debug_Type, "PathUtils" ),
+				"Warning - Empty name for environment variable: %s\n",
+				string );
+		}
+
+		if ( hasBraces ) {
+			nameEnd = variableEnd;
+			variableEnd++;
+		}
+		else {
+			nameEnd = variableEnd;
+		}
+		
+		nameLength = nameEnd - nameBegin;
+
+		strncpy( envName, nameBegin, nameLength );
+		*(envName + nameLength) = '\0';
+
+		envValue = getenv( envName );
+
+		if ( envValue == NULL ) {
+			envValue = "";
+		}
+
+		if ( strlen( envValue ) > ( variableEnd - variableBegin ) ) {
+			length += strlen( envValue ) - ( variableEnd - variableBegin );
+			result = Memory_Realloc_Array( result, char, length + 1 );
+		}
+
+
+		charsToWrite = strlen( envValue );
+		strncpy( result + charsWritten, envValue, charsToWrite );
+		charsWritten += charsToWrite;
+
+		current = variableEnd;
+		variableBegin = strchr( current, '$' );
+	}
+
+	charsToWrite = endOfString - current;
+	strncpy( result + charsWritten, current, charsToWrite );
+	charsWritten += charsToWrite;
+
+	*(result + charsWritten) = '\0';
+	
+	/* write the result back to the argument */
+	/*
+	if ( strlen( string ) < strlen( result ) ) {
+		string = Memory_Realloc_Array( string, char, strlen( result ) + 1 );
+	}
+	strcpy( string, result );
+	Memory_Free( result );
+
+
+	return string;
+	*/
+	return result;
+}
+
+char* ParentDirectory( const char* path ) {
+	char* result;
+	int i, length;
+
+	assert( path );
+	
+	length = strlen( path );
+	
+	if ( length > 0 ) {
+		int endIndex = length;
+		
+		if ( path[length - 1] == '/' ) {
+			endIndex--;
+		}
+		
+		for ( i = endIndex - 1; i >= 0; --i ) {
+			if ( path[i] == '/' ) {
+				break;
+			}
+		}
+		if ( i < 0  ) {
+			return NULL;
+		}
+		result = Memory_Alloc_Array_Unnamed( char, i + 1 );
+		strncpy( result, path, i );
+		result[i] = '\0';
+
+		return result;
+	}
+	return NULL;
+}
+
+Bool Stg_CreateDirectory( const char* path ) {
+	assert( path );
+	
+	if ( ! Stg_DirectoryExists( path ) ) {
+		char* parent;
+		int ret;
+
+		parent = ParentDirectory( path );
+		if ( parent != NULL ) {
+			if ( Stg_CreateDirectory( parent ) == False ) {
+				Memory_Free( parent );
+				return False;
+			}
+			Memory_Free( parent );
+		}
+
+		ret = mkdir( path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH );
+
+		return ret == 0;
+	}
+
+	return True;
+}
+
+Bool Stg_FileExists( const char* path ) {
+	struct stat info;
+	assert( path );
+	if ( stat( path, &info ) < 0 ) {
+		return False;
+	}
+	return S_ISREG( info.st_mode );
+}
+
+Bool Stg_DirectoryExists( const char* path ) {
+	struct stat info;
+	assert( path );
+	if ( stat( path, &info ) < 0 ) {
+		return False;
+	}
+	return S_ISDIR( info.st_mode );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLibStGermainDynamic.c 2742 2005-03-05 05:33:43Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_IO_PathUtils_h__
+#define __Base_IO_PathUtils_h__
+
+
+void FindFile( char* fullPath, char* filename, char* searchPaths );
+
+Bool FindFileInPathList( char* fullPath, char* filename, char** searchPaths, Index searchPathsSize );
+
+void PathJoin( char* path, unsigned count, ... );
+
+void PathClean( char* outPath, char* inPath );
+
+char* ExpandEnvironmentVariables( char* string );
+
+char* ParentDirectory( const char* path );
+
+Bool Stg_CreateDirectory( const char* path );
+
+Bool Stg_FileExists( const char* path );
+
+Bool Stg_DirectoryExists( const char* path );
+
+#endif /* __Base_IO_PathUtils_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: RankFormatter.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include <stdarg.h>  
+#include "StreamFormatter.h"
+#include "LineFormatter.h"
+#include "RankFormatter.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <mpi.h>
+
+
+const Type RankFormatter_Type = "RankFormatter";
+const char* PREPEND = ": ";
+
+
+StreamFormatter* RankFormatter_New()
+{
+	return (StreamFormatter*)_RankFormatter_New( sizeof(RankFormatter), RankFormatter_Type,
+		_RankFormatter_Delete, _RankFormatter_Print, _LineFormatter_Copy, _LineFormatter_Format );
+}
+	
+void RankFormatter_Init( RankFormatter* self )
+{
+	self->_sizeOfSelf = sizeof(RankFormatter);
+	self->type = RankFormatter_Type;
+	self->_delete = _RankFormatter_Delete;
+	self->_print = _RankFormatter_Print;
+	self->_copy = _LineFormatter_Copy;
+
+	_LineFormatter_Init( (LineFormatter*)self, _LineFormatter_Format );
+	_RankFormatter_Init( self, _LineFormatter_Format );
+}
+
+RankFormatter* _RankFormatter_New(
+	SizeT 				_sizeOfSelf,
+	Type 				type,
+	Stg_Class_DeleteFunction*		_delete,
+	Stg_Class_PrintFunction*		_print,
+	Stg_Class_CopyFunction*		_copy, 
+	StreamFormatter_FormatFunction*	_format )
+{
+	RankFormatter* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(RankFormatter) );
+	self = (RankFormatter*)_LineFormatter_New( _sizeOfSelf, type, _delete, _print, _copy, _format );
+	
+	_RankFormatter_Init( self, _format );
+
+	return self;
+}
+
+void _RankFormatter_Init(
+	RankFormatter*			self,
+	StreamFormatter_FormatFunction*	_format )
+{
+	int rank, rankTemp;
+	int rankDigits;
+	int size;
+	int prependLength;
+	
+	/* If there is only one processor, do not print rank */
+	MPI_Comm_size( MPI_COMM_WORLD, &size );
+	if ( size == 1 )
+	{
+		return;
+	}
+
+	/* Calculate length of rank string */
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	rankTemp = rank;
+	rankDigits = 0;
+	do
+	{
+		rankDigits++;
+		rankTemp /= 10; /* Base 10 */
+	} while ( rankTemp > 0 );
+	
+	prependLength = rankDigits + strlen( PREPEND );
+
+	self->_tag = Memory_Alloc_Array( char, prependLength + 1, "RankFormatter->_tag" );
+
+	sprintf( self->_tag, "%d%s", rank, PREPEND );
+}
+
+void _RankFormatter_Delete( void* formatter )
+{
+	RankFormatter* self = (RankFormatter*)formatter;
+	
+	#if DEBUG
+		assert( self );
+	#endif
+
+	/* Stg_Class_Delete parent */
+	_LineFormatter_Delete( self );
+}
+void _RankFormatter_Print( void* formatter, Stream* stream )
+{
+	#if DEBUG
+		RankFormatter* self = (RankFormatter*) formatter;
+
+		assert( self );
+		assert (stream);
+	#endif
+	
+	/* General info */
+	printf( "RankFormatter (ptr): %p\n", formatter );
+	
+	_LineFormatter_Print( formatter, stream );
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	Prepends the rank of the process which is currently printing.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	None.
+**
+** <b>Description:</b>
+**	Prepends each line printed with printf() with the rank of the process doing the task.
+**	If computing as a serial job, RankFormatter will prepend nothing. 
+**
+** $Id: RankFormatter.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_IO_RankFormatter_h__
+#define __Base_IO_RankFormatter_h__
+
+
+	/** Textual name for RankFormatter class. */
+	extern const Type RankFormatter_Type;
+
+	/** \def __RankFormatter See RankFormatter */
+	#define __RankFormatter \
+		__LineFormatter
+	struct RankFormatter { __RankFormatter };
+
+
+	/** Creates a new RankFormatter, automatically determining the current rank. */
+	StreamFormatter* RankFormatter_New();
+	
+	/** Init a new RankFormatter, automatically determining the current rank. */
+	void RankFormatter_Init( RankFormatter* self );
+
+
+	/** Constructor interface. */
+	RankFormatter* _RankFormatter_New(
+		SizeT 				_sizeOfSelf,
+		Type 				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		StreamFormatter_FormatFunction*	_format );
+
+	/** Init interface. */
+	void _RankFormatter_Init(
+		RankFormatter*			self,
+		StreamFormatter_FormatFunction*	_format );
+			
+	/** Stg_Class_Delete interface. */
+	void _RankFormatter_Delete( void* formatter );
+
+	/** Print interface. */
+	void _RankFormatter_Print( void* formatter, Stream* stream );
+
+
+#endif /* __Base_IO_RankFormatter_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,692 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Stream.c 3594 2006-05-18 06:34:43Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include "JournalFile.h"
+#include "CFile.h"
+#include "StreamFormatter.h"
+#include "LineFormatter.h"
+#include "IndentFormatter.h"
+#include "Stream.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+const Type Stream_Type = "stream";
+
+static const int STREAM_FORMATTER_SIZE = 1;	/**< Initial size of a formatter array. */
+static const int STREAM_FORMATTER_DELTA = 1;	/**< Number of formatters to resize by when extending the array. */
+
+static const int STREAM_CHILDREN_SIZE = 4;	/**< Initial size of the sub-stream children array. */
+static const int STREAM_CHILDREN_DELTA = 4;	/**< Number of streams to resize by when extending the array. */
+
+
+/** Returns True if the current process is allowed to print. */
+Bool _Stream_IsPrintingRank( Stream* stream );
+
+Stream* _Stream_New(
+	SizeT			_sizeOfSelf,
+	Type			type,
+	Stg_Class_DeleteFunction*	_delete,
+	Stg_Class_PrintFunction*	_print,
+	Stg_Class_CopyFunction*	_copy, 
+	Name			name,
+	Stream_PrintfFunction*	_printf,
+	Stream_WriteFunction*	_write,
+	Stream_DumpFunction*	_dump,
+	Stream_SetFileFunction*	_setFile )
+{
+	Stream* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stream) );
+	self = (Stream*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+                                                                                
+	_Stream_Init( self, name, _printf, _write, _dump, _setFile );
+
+	return self;
+}
+
+void _Stream_Init(
+	Stream*			self,
+	Name			name,
+	Stream_PrintfFunction*	_printf,
+	Stream_WriteFunction*	_write,
+	Stream_DumpFunction*	_dump,
+	Stream_SetFileFunction*	_setFile )
+{
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	
+	self->_printf = _printf;
+	self->_write = _write;
+	self->_dump = _dump;
+	self->_setFile = _setFile;
+	
+	self->_enable = True;
+	self->_level = 1;
+	self->_file = NULL;
+	self->_printingRank = STREAM_ALL_RANKS;
+	self->_autoFlush = False;
+	self->_indent = (IndentFormatter*)IndentFormatter_New();
+	self->_formatter = NULL;
+	self->_formatterCount = 0;
+	self->_formatterSize = 0;
+	self->_currentSource = NULL;
+	self->_currentFunction = NULL;
+	self->_currentLine = 0;
+	
+	self->_parent = NULL;
+	self->_children = Stg_ObjectList_New2( STREAM_CHILDREN_SIZE, STREAM_CHILDREN_DELTA );
+	self->_children->_noJournalingInCopy = True; /* Important... else _Stream_Copy ends up stuck in a recursive copy loop */
+}
+
+
+void _Stream_Delete( void* stream )
+{
+	int i;
+	
+	Stream* self = (Stream*)stream;
+	
+	#if DEBUG
+		assert( self );
+	#endif
+
+	Stg_Class_Delete( self->_indent );
+
+	if ( self->_formatter != NULL )
+	{
+		for ( i = 0; i < self->_formatterCount; ++i )
+		{
+			Stg_Class_Delete( self->_formatter[i] );
+		}
+		Memory_Free( self->_formatter );
+	}
+
+	Stg_ObjectList_DeleteAllObjects( self->_children );
+	Stg_Class_Delete( self->_children );
+
+	/* Stg_Class_Delete parent */
+	_Stg_Object_Delete( self );
+}
+
+
+void _Stream_Print( void* stream, Stream* paramStream )
+{
+	Stream* self = (Stream*) stream;
+
+	#if DEBUG
+		assert( self );
+	#endif
+	
+	/* General info */
+	Journal_Printf( paramStream, "Stream (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Object_Print( self, paramStream );
+	
+	Stream_Indent( paramStream );
+	/* Virtual info */
+	Journal_Printf( paramStream, "_printf (func ptr): %p\n", self->_printf );
+	Journal_Printf( paramStream, "_write (func ptr): %p\n", self->_write );
+	Journal_Printf( paramStream, "_dump (func ptr): %p\n", self->_dump );
+	Journal_Printf( paramStream, "_setFile (func ptr): %p\n", self->_setFile );
+	Journal_Printf( paramStream, "_copy (func ptr): %p\n", self->_copy );
+	
+	/* Stream info */
+	Journal_Printf( paramStream, "_enable: %d\n", self->_enable );
+	Journal_Printf( paramStream, "_level: %d\n", self->_level );
+	Journal_Printf( paramStream, "_file (ptr):  %p\n", self->_file );
+	Journal_Printf( paramStream, "_printingRank: %d\n", self->_printingRank );
+	Journal_Printf( paramStream, "_autoFlush: %d\n", self->_autoFlush );
+	Journal_Printf( paramStream, "_indent: %d\n", self->_indent->_indent );
+	Journal_Printf( paramStream, "_formatters (ptr):  %p\n", self->_formatter );
+	Journal_Printf( paramStream, "_formatter count: %d\n", self->_formatterCount );
+	Journal_Printf( paramStream, "_formatter size: %d\n", self->_formatterSize );
+	/*
+	Journal_Printf( paramStream, "current source file: %s\n", self->_currentSource );
+	Journal_Printf( paramStream, "current function: %s\n", self->_currentFunction );
+	Journal_Printf( paramStream, "current line: %d\n", self->_currentLine );
+	*/
+	Journal_Printf( paramStream, "_parent (ptr): %p\n", self->_parent );
+
+	Stream_Indent( paramStream );
+
+	Print( self->_children, paramStream );
+
+	Stream_UnIndent( paramStream );
+
+	Stream_UnIndent( paramStream );
+}
+
+
+void Stream_PrintConcise( void* stream, Stream* paramStream )
+{
+	Stream* self = (Stream*) stream;
+	Index   child_I = 0;
+
+	#if DEBUG
+		assert( self );
+	#endif
+	
+	/* General info */
+	Journal_Printf( paramStream, "Stream \"%s\":\n", self->name );
+	
+	Stream_Indent( paramStream );
+	
+	/* Stream info */
+	Journal_Printf( paramStream, "Enabled: %s\n", self->_enable ? "True" : "False" );
+	Journal_Printf( paramStream, "Level: %d\n", self->_level );
+
+	if ( self->_children->count > 0 ) {
+		Journal_Printf( paramStream, "Children:\n" );
+		Stream_Indent( paramStream );
+		for ( child_I = 0; child_I < self->_children->count; child_I++ ) {
+			Stream_PrintConcise( self->_children->data[child_I], paramStream );
+		}
+		Stream_UnIndent( paramStream );
+	}
+
+	Stream_UnIndent( paramStream );
+}
+
+
+void* _Stream_Copy( void* stream, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stream*		self = (Stream*)stream;
+	Stream*		newStream;
+	unsigned	i;
+	
+	newStream = _Stg_Object_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newStream->_printf = self->_printf;
+	newStream->_write = self->_write;
+	newStream->_dump = self->_dump;
+	newStream->_setFile = self->_setFile;
+	newStream->defaultFileType = self->defaultFileType;
+	newStream->_copy = self->_copy;
+	newStream->_enable = self->_enable;
+	newStream->_level = self->_level;
+	newStream->_file = self->_file;
+	newStream->_printingRank = self->_printingRank;
+	newStream->_autoFlush = self->_autoFlush;
+	newStream->_indent = (IndentFormatter*)IndentFormatter_New();
+	newStream->_formatter = NULL;
+	newStream->_formatterCount = 0;
+	newStream->_formatterSize = 0;
+	newStream->_currentSource = NULL;
+	newStream->_currentFunction = NULL;
+	newStream->_currentLine = 0;
+	newStream->_parent = self->_parent;
+/*	newStream->_children = Stg_Class_Copy( self->_children, 0 , deep, nameExt, ptrMap );*/
+	newStream->_children = Stg_ObjectList_New2( STREAM_CHILDREN_SIZE, STREAM_CHILDREN_DELTA );
+
+	
+	IndentFormatter_SetIndent( newStream->_indent, self->_indent->_indent );
+	for ( i = 0; i < self->_formatterCount; ++i ) {
+		Stream_AddFormatter( newStream, Stg_Class_Copy( self->_formatter[i], 0, deep, nameExt, ptrMap ) );
+		/**set stream for formatter */
+	}
+	
+	return newStream;
+}
+
+
+SizeT Stream_Printf( Stream *stream, char *fmt, va_list args )
+{
+	int i;
+	SizeT result;
+	char* lastFormat;
+	char* currentFormat;
+
+	if ( stream->_file == NULL ) {
+		return 0;
+	}
+	if ( !_Stream_IsPrintingRank( stream ) )
+	{
+		return 0;
+	}
+
+	JournalFile_ReopenIfClosed( stream->_file );
+
+	currentFormat = StreamFormatter_Format( stream->_indent, fmt );
+	lastFormat = currentFormat;
+
+	for ( i = 0; i < stream->_formatterCount; ++i )
+	{
+		currentFormat = StreamFormatter_Format( stream->_formatter[i], lastFormat );
+		lastFormat = currentFormat;
+	}
+	result = stream->_printf( stream, currentFormat, args );
+
+	if ( stream->_autoFlush )
+	{
+		Stream_Flush( stream );
+	}
+	return result;
+}
+SizeT Stream_Write( Stream *stream, void *data, SizeT elem_size, SizeT num_elems )
+{
+	SizeT result;
+
+	if ( stream->_file == NULL ) {
+		return 0;
+	}
+	if ( !_Stream_IsPrintingRank( stream ) )
+	{
+		return 0;
+	}
+	
+	JournalFile_ReopenIfClosed( stream->_file );
+
+	result =  stream->_write( stream, data, elem_size, num_elems );
+
+	if( stream->_autoFlush )
+	{
+		Stream_Flush( stream );
+	}
+	return result;
+}
+Bool Stream_Dump( Stream *stream, void *data )
+{
+	Bool result;
+	
+	if ( stream->_file == NULL ) {
+		return False;
+	}
+	if ( !_Stream_IsPrintingRank( stream ) )
+	{
+		return False;
+	}
+
+	JournalFile_ReopenIfClosed( stream->_file );
+
+	result = stream->_dump( stream, data );
+
+	if ( stream->_autoFlush )
+	{
+		Stream_Flush( stream );
+	}
+
+	return result;
+}
+
+Bool Stream_RedirectFile( Stream* stream, char* fileName ) {
+	JournalFile* file;
+
+	file = Journal_GetFile( fileName );
+	if ( file == NULL ) {
+		file = stream->defaultFileType();
+		if ( !JournalFile_Open( file, fileName ) ) {
+			Stg_Class_Delete( file );
+			return False;
+		}
+		Journal_RegisterFile( file );
+	}
+
+	return Stream_SetFile( stream, file );
+}
+
+
+Bool Stream_RedirectFileBranch( Stream* stream, char* fileName ) {
+	JournalFile* file;
+
+	file = Journal_GetFile( fileName );
+	if ( file == NULL ) {
+		file = stream->defaultFileType();
+		JournalFile_Open( file, fileName );
+		Journal_RegisterFile( file );
+	}
+
+	return Stream_SetFileBranch( stream, file );
+}
+
+Bool Stream_AppendFile( Stream* stream, char* fileName ) {
+	JournalFile* file;
+
+	file = Journal_GetFile( fileName );
+	if ( file == NULL ) {
+		file = stream->defaultFileType();
+		if ( !JournalFile_Append( file, fileName ) ) {
+			Stg_Class_Delete( file );
+			return False;
+		}
+		Journal_RegisterFile( file );
+	}
+
+	return Stream_SetFile( stream, file );
+}
+
+Bool Stream_SetFile( Stream* stream, JournalFile* file )
+{
+	if ( file == NULL )
+	{
+		return False;
+	}
+	
+	return stream->_setFile( stream, file );
+}
+Bool Stream_SetFileBranch( Stream* stream, JournalFile* file )
+{
+	Bool result = False;
+	int i;
+	
+	if ( file == NULL )
+	{
+		return False;
+	}
+	
+	result = stream->_setFile( stream, file );
+	for ( i = 0; result && i < stream->_children->count; ++i )
+	{
+		result = Stream_SetFileBranch( (Stream*)stream->_children->data[i], file );
+		if ( !result )
+		{
+			return False;
+		}
+	}
+	return result;
+}
+
+Bool Stream_IsEnable( void* stream )
+{
+	Stream* self = (Stream*) stream;
+	if (stream == NULL) return False;
+	
+	if ( self->_parent == NULL )
+	{
+		return self->_enable;
+	}
+	
+	return self->_enable && Stream_IsEnable( self->_parent );
+}
+
+void Stream_Enable( void* stream, Bool enable )
+{
+	Stream* self = (Stream*) stream;
+	self->_enable = enable;
+	
+	/* set path of enable is only set when true */	
+	if ( enable && self->_parent != NULL )
+	{
+		Stream_Enable( self->_parent, True );
+	}
+}
+void Stream_EnableBranch( void* stream, Bool enable )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	self->_enable = enable;
+	
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_EnableBranch( (Stream*)self->_children->data[i], enable );
+	}
+}
+void Stream_EnableSelfOnly( void* stream, Bool enable )
+{
+	Stream* self = (Stream*) stream;
+	self->_enable = enable;
+}
+
+void Stream_SetPrintingRank( void* stream, int rank )
+{
+	Stream* self = (Stream*) stream;
+	self->_printingRank = rank;
+}
+
+int Stream_GetPrintingRank( void* stream )
+{
+	Stream* self = (Stream*) stream;
+	return self->_printingRank;
+}
+
+void Stream_SetPrintingRankBranch( void* stream, int rank )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	self->_printingRank = rank;
+	
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_SetPrintingRankBranch( self->_children->data[i], rank );
+	}
+}
+
+void Stream_SetAutoFlush( void* stream, Bool autoFlush )
+{
+	Stream* self = (Stream*) stream;
+	self->_autoFlush = autoFlush;
+}
+
+void Stream_SetAutoFlushBranch( void* stream, Bool autoFlush )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	self->_autoFlush = autoFlush;
+	
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_SetAutoFlushBranch( self->_children->data[i], autoFlush );
+	}
+}
+
+Bool Stream_IsPrintableLevel( void* stream, JournalLevel level )
+{
+	Stream* self = (Stream*) stream;
+	return (self->_level >= level);
+}
+	
+void Stream_SetLevel( void* stream, JournalLevel level )
+{
+	Stream* self = (Stream*) stream;
+	self->_level = level;	
+}
+void Stream_SetLevelBranch( void* stream, JournalLevel level )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	self->_level = level;	
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_SetLevelBranch( (Stream*)self->_children->data[i], level );
+	}
+
+}
+
+void Stream_SetIndent( void* stream, Index indent )
+{
+	Stream* self = (Stream*) stream;
+	IndentFormatter_SetIndent( self->_indent, indent );
+}
+
+void Stream_Indent( void* stream )
+{
+	Stream* self = (Stream*) stream;
+	IndentFormatter_Increment( self->_indent );
+}
+
+void Stream_UnIndent( void* stream )
+{
+	Stream* self = (Stream*) stream;
+	IndentFormatter_Decrement( self->_indent );
+}
+
+void Stream_ZeroIndent( void* stream )
+{
+	Stream* self = (Stream*) stream;
+	IndentFormatter_Zero( self->_indent );
+}
+
+
+void Stream_SetIndentBranch( void* stream, Index indent )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	IndentFormatter_SetIndent( self->_indent, indent );
+
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_SetIndentBranch( self->_children->data[i], indent );
+	}
+}
+void Stream_IndentBranch( void* stream )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	IndentFormatter_Increment( self->_indent );
+
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_IndentBranch( self->_children->data[i] );
+	}
+}
+void Stream_UnIndentBranch( void* stream )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	IndentFormatter_Decrement( self->_indent );
+
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_UnIndentBranch( self->_children->data[i] );
+	}
+}
+void Stream_ZeroIndentBranch( void* stream )
+{
+	int i;
+	Stream* self = (Stream*) stream;
+	
+	IndentFormatter_Zero( self->_indent );
+
+	for ( i = 0; i < self->_children->count; ++i )
+	{
+		Stream_ZeroIndentBranch( self->_children->data[i] );
+	}
+}
+
+void Stream_AddFormatter( void* stream, StreamFormatter* formatter )
+{
+	Stream* self = (Stream*) stream;
+	
+	if ( self->_formatterCount >= self->_formatterSize )
+	{
+		if ( self->_formatter == NULL )
+		{
+			self->_formatterSize = STREAM_FORMATTER_SIZE;
+			self->_formatter = Memory_Alloc_Array( StreamFormatter*, self->_formatterSize, "Stream->_formatter" );
+		}
+		else
+		{
+			self->_formatterSize += STREAM_FORMATTER_DELTA;
+			self->_formatter = Memory_Realloc_Array( self->_formatter, StreamFormatter*, self->_formatterSize );
+		}
+	}
+	self->_formatter[self->_formatterCount] = formatter;
+	self->_formatterCount++;
+	
+	formatter->_stream = self;
+}
+
+void Stream_SetCurrentInfo( void* stream, char* currentSource, char* currentFunction, int line )
+{
+	Stream* self = (Stream*)stream;
+
+	self->_currentSource = currentSource;
+	self->_currentFunction = currentFunction;
+	self->_currentLine = line;
+}
+
+
+Stream* Stream_RegisterChild( void* stream, Name name )
+{
+	Stream* self = (Stream*) stream;
+	Stream* child;
+	
+	child = (Stream*)Stg_ObjectList_Get( self->_children, name );
+	
+	if ( child == NULL )
+	{
+		child = Stg_Class_Copy( self, 0, True, 0, 0 );
+		Stg_Object_SetName( child, name );
+		child->_parent = self;
+		Stg_ObjectList_Append( self->_children, child );
+	}
+	
+	return child;
+}
+
+Bool Stream_Flush( void* stream )
+{
+	Stream* self = (Stream*)stream;
+	return JournalFile_Flush( self->_file );
+}
+
+Bool Stream_CloseFile( void* stream ) {
+	Stream* self = (Stream*)stream;
+
+	return JournalFile_Close( self->_file );
+}
+
+void Stream_CloseAndFreeFile( void* stream ) {
+	Stream* self = (Stream*)stream;
+
+	Stream_CloseFile( self );
+	Journal_DeregisterFile( self->_file );
+	Stg_Class_Delete( self->_file );
+}
+
+
+Bool _Stream_IsPrintingRank( Stream* stream )
+{
+	int rank;
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	if ( stream->_printingRank > STREAM_ALL_RANKS && rank != stream->_printingRank )
+	{
+		return False;
+	}
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+** <b>Role:</b>
+**	Abstract Stream for printing.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	In order for a stream to print, it and all of its parents must be enabled.
+**
+** <b>Description:</b>
+**	Stream has been created to allow an abstract level of printing, writing and dumping.
+**	The actual implementation of these functions may vary from traditional C printf() to HDF5 outputs or other alternatives.
+**
+** $Id: Stream.h 3475 2006-03-08 02:00:41Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_IO_Stream_h__
+#define __Base_IO_Stream_h__
+
+#include <stdarg.h>
+
+	/** Textual name for Stream class. */
+	extern const Type Stream_Type;
+
+	typedef SizeT (Stream_PrintfFunction) (Stream* object, char* fmt, va_list args);
+	typedef SizeT (Stream_WriteFunction) (Stream* object, void* data, SizeT elem_size, SizeT num_elems);
+	typedef Bool (Stream_DumpFunction) (Stream* object, void* data);
+	typedef Bool (Stream_SetFileFunction) ( Stream* object, JournalFile* file );
+
+	/** Indicates all ranks should print. */
+	#define STREAM_ALL_RANKS (-1)
+
+
+	/** \def __Stream See Stream */
+	#define __Stream \
+		__Stg_Object						\
+									\
+		/* Virtual info */					\
+		Stream_PrintfFunction*		_printf; 		\
+		Stream_WriteFunction*		_write; 		\
+		Stream_DumpFunction*		_dump; 			\
+		Stream_SetFileFunction*		_setFile; 		\
+		JournalFile_Constructor*	defaultFileType;	\
+									\
+		/* Stream info */					\
+		Bool				_enable;		\
+		JournalLevel			_level; 		\
+		JournalFile*			_file; 			\
+		int				_printingRank; 		\
+		Bool				_autoFlush; 		\
+		IndentFormatter*		_indent; 		\
+		StreamFormatter**		_formatter; 		\
+		Index				_formatterCount; 	\
+		Index				_formatterSize; 	\
+		char*				_currentSource; 	\
+		char*				_currentFunction; 	\
+		int				_currentLine; 		\
+									\
+		Stream*				_parent; 		\
+		Stg_ObjectList*		_children; 
+	struct Stream { __Stream };
+
+	/** Constructor interface. */
+	Stream* _Stream_New(
+		SizeT			_sizeOfSelf,
+		Type			type,
+		Stg_Class_DeleteFunction*	_delete,
+		Stg_Class_PrintFunction*	_print,
+		Stg_Class_CopyFunction*	_copy, 
+		Name			name,
+		Stream_PrintfFunction*	_printf,
+		Stream_WriteFunction*	_write,
+		Stream_DumpFunction*	_dump,
+		Stream_SetFileFunction*	_setFile );
+		
+	/** Init interface. */
+	void _Stream_Init(
+		Stream*			self,
+		Name			name,
+		Stream_PrintfFunction*	_printf,
+		Stream_WriteFunction*	_write,
+		Stream_DumpFunction*	_dump,
+		Stream_SetFileFunction*	_setFile );
+	
+	/** Stg_Class_Delete interface. */
+	void _Stream_Delete( void* stream );
+
+	/** Print interaface. */
+	void _Stream_Print( void* stream, Stream* paramStream );
+	
+	/** Print concise info function */
+	void Stream_PrintConcise( void* stream, Stream* paramStream );
+
+	/** Copy interface. */	
+	void* _Stream_Copy( void* stream, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	/** Performs a printf() on the given stream. */
+	SizeT Stream_Printf( Stream* stream, char* fmt, va_list args );
+
+	/** Performs a write() on the given stream. */
+	SizeT Stream_Write( Stream* stream, void* data, SizeT elem_size, SizeT num_elems );
+
+	/** Performs a dump opertion on the given stream. */
+	Bool Stream_Dump( Stream* stream, void* data );
+
+	/** Opens a registers a file for this stream if not already opened and assigns it for output
+	    Defaults CFile for now. TODO for next io commit */
+	Bool Stream_RedirectFile( Stream* stream, char* fileName );
+
+	/** Opens a registers a file for this stream if not already opened and assigns it for output for whole branch */
+	Bool Stream_RedirectFileBranch( Stream* stream, char* fileName );
+
+	/** Opens and registers a file for this stream if not already opened, goes to end of file and assigns it for output
+	    Defaults CFile for now. TODO for next io commit */
+	Bool Stream_AppendFile( Stream* stream, char* fileName );
+	
+	/** Opens a registers a file for this stream if not already opened and assigns it for output for whole branch */
+	Bool Stream_RedirectFileBranch( Stream* stream, char* fileName );
+
+	/** Sets the file which the stream is directed to, returning True if successful.
+	 ** This function may fail if an unusable file type is given to the stream. */
+	Bool Stream_SetFile( Stream* stream, JournalFile* file );
+
+	/** Sets the file which the stream and its sub-streams is directed to, returning True if all was successful.
+	 ** This funciton may fail if an unusable file type is given to the stream. */
+	Bool Stream_SetFileBranch( Stream* stream, JournalFile* file );
+
+	/** Returns True if this stream is valid to produce output. */
+	Bool Stream_IsEnable( void* stream );
+
+	/** Enables/disables a stream for printing. If enabling, this function performs a 'hard' enable, setting
+	 ** all of its parents to enable as well, ensuring that this stream will print. */
+	void Stream_Enable( void* stream, Bool enable );
+
+	/** Enables/disables a stream and its sub-streams for printing. */
+	void Stream_EnableBranch( void* stream, Bool enable );
+
+	/** Enables/disables a stream for printing. Will not affect parents or children streams. */
+	void Stream_EnableSelfOnly( void* stream, Bool enable );
+
+
+	/** Returns True if the argument level is less than or equal the the stream's level, meaning printing is possible
+	 ** with Journal_PrintfL() */
+	Bool Stream_IsPrintableLevel( void* stream, JournalLevel level );
+
+	/** Sets the printing level of a stream. */
+	void Stream_SetLevel( void* stream, JournalLevel level );
+
+	/** Sets the printing level of a stream and its sub-streams. */
+	void Stream_SetLevelBranch( void* stream, JournalLevel level );
+
+
+	/** Sets the printing rank for a stream. Only a process with the same rank value will perform printing, meaning
+	 ** only one rank will print from an output statement.
+	 **
+	 ** If rank is STREAM_ALL_RANKS, all ranks will print. This is the default behaviour.
+	 **/
+	void Stream_SetPrintingRank( void* stream, int rank );
+
+	/** Gets the printing rank for a stream. */
+	int Stream_GetPrintingRank( void* stream );
+
+	/** Sets the printing rank for a stream and sub-streams. */
+	void Stream_SetPrintingRankBranch( void* stream, int rank );
+
+
+	/** Sets whether a stream should flush after an output statement. */
+	void Stream_SetAutoFlush( void* stream, Bool autoFlush );
+
+	/** Sets whether a stream and all of its sub-streams should flush after an output statement. */
+	void Stream_SetAutoFlushBranch( void* stream, Bool autoFlush );
+
+
+	/** Sets the number of indentations per line to begin printing for a stream. */
+	void Stream_SetIndent( void* stream, Index indent );
+
+	/** Increases the level of indentation by one for a stream. */
+	void Stream_Indent( void* stream );
+
+	/** Decreases the level of indentation by one for a stream. Will not go below zero. */
+	void Stream_UnIndent( void* stream );
+
+	/** Sets the level of indentation to zero for a stream. */
+	void Stream_ZeroIndent( void* stream );
+
+	/** Sets the number of indentations per line to begin printing for a stream and sub streams. */
+	void Stream_SetIndentBranch( void* stream, Index indent );
+	
+	/** Increases the level of indentation by one for a stream and its sub streams. */
+	void Stream_IndentBranch( void* stream );
+	
+	/** Decreases the level of indentation by one for a stream and its sub streams. Will not go below zero. */
+	void Stream_UnIndentBranch( void* stream );
+	
+	/** Sets the level of indentation to zero for a stream and its sub streams. */
+	void Stream_ZeroIndentBranch( void* stream );
+
+
+	/** Adds a formatter to the stream for custom formatting. */
+	void Stream_AddFormatter( void* stream, StreamFormatter* formatter );
+	
+	
+	/** Sets miscellaneous information to the stream.
+	 **
+	 ** @param currentSource The source file which output is currently being done.
+	 ** @param currentFunction The function which output is currently being done.
+	 ** @param line The current line which output is currently being done.
+	 **/
+	void Stream_SetCurrentInfo( void* stream, char* currentSource, char* currentFunction, int line );
+	
+	/** Retrives a sub stream of the given name. If stream does not exist, a new sub stream is created and returned.
+	 ** Dotted-decimal notation can be used to retrive nested sub-streams. */
+	Stream* Stream_RegisterChild( void* stream, Name name );
+
+	/** Flushes a stream of its outputs. */
+	Bool Stream_Flush( void* stream );
+
+	/** Request to the stream that the file its using to be closed to save resources. */
+	Bool Stream_CloseFile( void* stream );
+
+	/* Closes, deregisters and deletes the JournalFile associated with this stream */
+	void Stream_CloseAndFreeFile( void* stream ) ;
+
+#endif /* __Base_IO_Stream_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: StreamFormatter.c 3774 2006-08-31 07:39:32Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Journal.h"
+#include "StreamFormatter.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type StreamFormatter_Type = "StreamFormatter";
+
+StreamFormatter* _StreamFormatter_New(
+	SizeT 				_sizeOfSelf,
+	Type 				type,
+	Stg_Class_DeleteFunction*		_delete,
+	Stg_Class_PrintFunction*		_print,
+	Stg_Class_CopyFunction*		_copy, 
+	StreamFormatter_FormatFunction*	_format )
+{
+	StreamFormatter* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(StreamFormatter) );
+	self = (StreamFormatter*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+                                                                                
+	_StreamFormatter_Init( self, _format );
+
+	return self;
+}
+void _StreamFormatter_Init(
+	StreamFormatter*		self,
+	StreamFormatter_FormatFunction*	_format )
+{
+	self->_format = _format;
+	
+	self->_stream = NULL;
+}
+
+void _StreamFormatter_Delete( void* formatter )
+{
+	StreamFormatter* self = (StreamFormatter*)formatter;
+	
+	#if DEBUG
+		assert( self );
+	#endif
+
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+void _StreamFormatter_Print( void* formatter, Stream* stream )
+{
+	StreamFormatter* self = (StreamFormatter*) formatter;
+
+	#if DEBUG
+		assert( self );
+		assert( stream );
+	#endif
+	
+	/* General info */
+	printf( "StreamFormatter (ptr): %p\n", formatter );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	printf( "\t_format (func ptr): %p\n", (void*)self->_format );
+	printf( "\t_copy (func ptr): %p\n", (void*)self->_copy );
+	printf( "\t_stream (ptr): %p\n", (void*)self->_stream );
+}
+
+void* _StreamFormatter_Copy( void* streamFormatter, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	StreamFormatter*	self = (StreamFormatter*)streamFormatter;
+	StreamFormatter*	newStreamFormatter;
+	
+	newStreamFormatter = _Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newStreamFormatter->_format = self->_format;
+	newStreamFormatter->_stream = NULL;
+	
+	return newStreamFormatter;
+}
+
+
+char* StreamFormatter_Format( void* formatter, char* fmt )
+{
+	StreamFormatter* self = (StreamFormatter*)formatter;
+	return self->_format( self, fmt );
+}
+
+
+StreamFormatter_Buffer* stgStreamFormatter_Buffer;
+
+StreamFormatter_Buffer* StreamFormatter_Buffer_New() {
+	StreamFormatter_Buffer* result = Memory_Alloc( StreamFormatter_Buffer, "StreamFormatter_Buffer" );
+	result->buffer1 = NULL;
+	result->buffer2 = NULL;
+	result->length1 = 0;
+	result->length2 = 0;
+	result->current = &result->buffer1;
+	result->lengthPtr = &result->length1;
+
+	return result;
+}
+void StreamFormatter_Buffer_Delete( StreamFormatter_Buffer* buffer ) {
+	if ( buffer->buffer1 != NULL ) {
+		Memory_Free( buffer->buffer1 );
+	}
+	if ( buffer->buffer2 != NULL ) {
+		Memory_Free( buffer->buffer2 );
+	}
+
+	Memory_Free( buffer );
+}
+char* StreamFormatter_Buffer_AllocNext( Index size ) {
+
+	/* Buffer swap */
+	if ( stgStreamFormatter_Buffer->current == &stgStreamFormatter_Buffer->buffer1 ) {
+		stgStreamFormatter_Buffer->current = &stgStreamFormatter_Buffer->buffer2;
+		stgStreamFormatter_Buffer->lengthPtr = &stgStreamFormatter_Buffer->length2;
+	}
+	else {
+		stgStreamFormatter_Buffer->current = &stgStreamFormatter_Buffer->buffer1;
+		stgStreamFormatter_Buffer->lengthPtr = &stgStreamFormatter_Buffer->length1;
+	}
+
+	/* Realloc/alloc as needed */
+	if ( size > *stgStreamFormatter_Buffer->lengthPtr ) {
+		*stgStreamFormatter_Buffer->lengthPtr = size;
+		*stgStreamFormatter_Buffer->current = (char*)Memory_Realloc( *stgStreamFormatter_Buffer->current, size );
+	}
+
+	return *stgStreamFormatter_Buffer->current;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 which formats inputs from Printf() calls.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None.
+**
+** <b>Description:</b>
+**	A facility which allows custom outputs to be added seamlessly for Printf() calls in Journal.
+**	StreamFormatters are given the Printf() format string to add/remove/modify/rearrange as desired.
+**
+** $Id: StreamFormatter.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**/
+
+#ifndef __Base_IO_StreamFormatter_h__
+#define __Base_IO_StreamFormatter_h__
+
+
+	/** Textual name for StreamFormatter class. */
+	extern const Type StreamFormatter_Type;
+
+	typedef char* (StreamFormatter_FormatFunction) ( void* formatter, char* fmt );
+
+	/** \def __StreamFormatter See StreamFormatter */
+	#define __StreamFormatter \
+		__Stg_Class						\
+								\
+		/* Virtual functions */				\
+		StreamFormatter_FormatFunction*	_format;	\
+								\
+		/* Members */					\
+		Stream*				_stream;
+	struct StreamFormatter { __StreamFormatter };
+
+
+	/** Constructor interface. */
+	StreamFormatter* _StreamFormatter_New(
+		SizeT 				_sizeOfSelf,
+		Type 				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy, 
+		StreamFormatter_FormatFunction*	_format );
+	
+	/** Init interface. */
+	void _StreamFormatter_Init(
+		StreamFormatter*		self,
+		StreamFormatter_FormatFunction*	_format );
+			
+	/** Stg_Class_Delete interface. */
+	void _StreamFormatter_Delete( void* formatter );
+
+	/** Print interface. */
+	void _StreamFormatter_Print( void* formatter, Stream* stream );
+	
+	/** Copy interface. */	
+	void* _StreamFormatter_Copy( void* streamFormatter, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+
+	/** Formats a Printf() output string. */
+	char* StreamFormatter_Format( void* formatter, char* fmt );
+
+
+	extern StreamFormatter_Buffer* stgStreamFormatter_Buffer;
+
+	/* A buffer swap singleton for improve formatting efficiency. */
+	#define __StreamFormatter_Buffer \
+		char* buffer1; \
+		char* buffer2; \
+		Index length1; \
+		Index length2; \
+		char** current; \
+		Index* lengthPtr; 
+	struct StreamFormatter_Buffer { __StreamFormatter_Buffer };
+
+	StreamFormatter_Buffer* StreamFormatter_Buffer_New();
+	void StreamFormatter_Buffer_Delete( StreamFormatter_Buffer* buffer );
+	char* StreamFormatter_Buffer_AllocNext( Index size );
+
+#endif /* __Base_IO_StreamFormatter_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2072 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Dictionary.h"
+#include "Dictionary_Entry.h"
+#include "Dictionary_Entry_Value.h"
+#include "IO_Handler.h"
+#include "Journal.h"
+#include "PathUtils.h"
+#include <libxml/tree.h>
+#include "XML_IO_Handler.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+
+/* textual class name */
+const Type XML_IO_Handler_Type = "XML_IO_Handler";
+
+/* keyword strings for nodes and lists */
+static const xmlChar* INCLUDE_TAG = (const xmlChar*) "include";
+static const xmlChar* NAME_ATTR = (const xmlChar*) "name";
+static const xmlChar* SOURCEFILE_ATTR = (const xmlChar*) "sourceFile";
+static const xmlChar* MERGETYPE_ATTR = (const xmlChar*) "mergeType";
+static const xmlChar* CHILDRENMERGETYPE_ATTR = (const xmlChar*) "childrenMergeType";
+static const xmlChar* TYPE_ATTR = (const xmlChar*) "type";
+static const xmlChar* LIST_TAG = (const xmlChar*) "list";
+static const xmlChar* STRUCT_TAG = (const xmlChar*) "struct";
+static const xmlChar* PARAM_TAG = (const xmlChar*) "param";
+static const xmlChar* ASCII_DATA_TAG = (const xmlChar*) "asciidata";
+static const xmlChar* COLUMN_DEFINITION_TAG = (const xmlChar*) "columnDefinition";
+static const xmlChar* APPEND_TAG = (const xmlChar*) "append";
+static const xmlChar* MERGE_TAG = (const xmlChar*) "merge";
+static const xmlChar* REPLACE_TAG = (const xmlChar*) "replace";
+static const xmlChar* SEARCH_PATH_TAG = (const xmlChar*) "searchPath";
+
+/* Namespace and root node to validate against - please update on new releases */
+static const xmlChar* ROOT_NODE_NAME = (xmlChar*) "StGermainData";
+static const xmlChar* XML_VERSION = (xmlChar*) "1.0";
+
+/** column handling for ascii/binary data */
+#define MAX_COLUMNS 100
+static const unsigned int MAX_COLUMN_NUM_LENGTH = 3;
+
+/** struct to store column info in */
+typedef struct {
+	char* name;
+	Dictionary_Entry_Value_Type dictValueType;
+} ColumnInfo;	
+
+static const char* ASCII_DELIMITERS = " \n\t";
+
+static const unsigned int ASCII_LIST_STRING_BUFFER_SIZE = 1024;
+
+
+/* Reading Function prototypes */
+static xmlNodePtr _XML_IO_Handler_OpenCheckFile( XML_IO_Handler*, const char* );
+static xmlNodePtr _XML_IO_Handler_OpenCheckBuffer( XML_IO_Handler*, const char* );
+static void _XML_IO_Handler_OpenFile( XML_IO_Handler*, const char* );
+static void _XML_IO_Handler_OpenBuffer( XML_IO_Handler*, const char* );
+static xmlNodePtr _XML_IO_Handler_Check( XML_IO_Handler* );
+static void _XML_IO_Handler_ParseNodes( XML_IO_Handler*, xmlNodePtr, Dictionary_Entry_Value*, 
+					Dictionary_MergeType, Dictionary_Entry_Source source );
+static void _XML_IO_Handler_ParseList( XML_IO_Handler*, xmlNodePtr, Dictionary_Entry_Value*, 
+					Dictionary_MergeType, Dictionary_Entry_Source );
+static void _XML_IO_Handler_ParseAsciiData( XML_IO_Handler*, xmlNodePtr, Dictionary_Entry_Value* );
+static void _XML_IO_Handler_ParseColumnDefinitions( XML_IO_Handler*, xmlNodePtr, ColumnInfo [MAX_COLUMNS], int* const );
+static void _XML_IO_Handler_ParseAsciiValue( char* asciiValue, ColumnInfo* columnInfo, Dictionary_Entry_Value* toDictStruct );
+static char* _XML_IO_Handler_GetNextAsciiToken( XML_IO_Handler*, xmlNodePtr );
+static void _XML_IO_Handler_ParseStruct( XML_IO_Handler*, xmlNodePtr, Dictionary_Entry_Value*, 
+						Dictionary_MergeType, Dictionary_Entry_Source );
+static void _XML_IO_Handler_ParseParameter( XML_IO_Handler*, xmlNodePtr, Dictionary_Entry_Value*, 
+						Dictionary_MergeType, Dictionary_Entry_Source source );
+static Dictionary_Entry_Value_Type _XML_IO_Handler_GetDictValueType( XML_IO_Handler* self, char* type );
+static xmlChar* _XML_IO_Handler_StripLeadingTrailingWhiteSpace( XML_IO_Handler* self, const xmlChar* const );
+static Bool _XML_IO_Handler_IsOnlyWhiteSpace( char* );
+/* Writing Function prototypes */
+static void _XML_IO_Handler_WriteDictionary( XML_IO_Handler*, Dictionary*, xmlNodePtr);
+static void _XML_IO_Handler_WriteNode( XML_IO_Handler*, char*, Dictionary_Entry_Value*, char*, xmlNodePtr);
+static void _XML_IO_Handler_WriteList( XML_IO_Handler*, char*, Dictionary_Entry_Value*, char*, xmlNodePtr);
+static void _XML_IO_Handler_WriteListElementsXML( XML_IO_Handler*, Dictionary_Entry_Value*, xmlNodePtr);
+static Bool _XML_IO_Handler_CheckListCanBePrintedRaw( Dictionary_Entry_Value* );
+static void _XML_IO_Handler_WriteListElementsRawASCII( XML_IO_Handler*, Dictionary_Entry_Value*, xmlNodePtr);
+static unsigned int _XML_IO_Handler_GetWrittenElementSize( XML_IO_Handler*, Dictionary_Entry_Value* );
+static void _XML_IO_Handler_WriteMemberAscii( XML_IO_Handler*, Dictionary_Entry_Value*, char* );
+static void _XML_IO_Handler_WriteListElementsRawBinary( XML_IO_Handler*, Dictionary_Entry_Value*, xmlNodePtr);
+static void _XML_IO_Handler_WriteStruct( XML_IO_Handler*, char*, Dictionary_Entry_Value*, char*, xmlNodePtr);
+static void _XML_IO_Handler_WriteParameter( XML_IO_Handler*, char*, Dictionary_Entry_Value*, char*, xmlNodePtr);
+
+
+XML_IO_Handler* XML_IO_Handler_New( void ) {
+	return _XML_IO_Handler_New( sizeof(XML_IO_Handler), XML_IO_Handler_Type, _XML_IO_Handler_Delete, _XML_IO_Handler_Print, 
+		NULL, _XML_IO_Handler_ReadAllFromFile, _XML_IO_Handler_ReadAllFromFileForceSource, _XML_IO_Handler_ReadAllFromBuffer, _XML_IO_Handler_WriteAllToFile, _XML_IO_Handler_WriteEntryToFile, 
+		_XML_IO_Handler_SetListEncoding, _XML_IO_Handler_SetWritingPrecision, _XML_IO_Handler_SetWriteExplicitTypes );
+}
+
+
+void XML_IO_Handler_Init( XML_IO_Handler* self ) {
+	/* General info */
+	self->type = XML_IO_Handler_Type;
+	self->_sizeOfSelf = sizeof(XML_IO_Handler);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _XML_IO_Handler_Delete;
+	self->_print = _XML_IO_Handler_Print;
+	self->_writeEntryToFile = _XML_IO_Handler_WriteEntryToFile;
+	self->_setListEncoding = _XML_IO_Handler_SetListEncoding;
+	self->_setWritingPrecision = _XML_IO_Handler_SetWritingPrecision;
+	self->_setWriteExplicitTypes = _XML_IO_Handler_SetWriteExplicitTypes;
+	_Stg_Class_Init( (Stg_Class*)self );
+	_IO_Handler_Init( (IO_Handler*)self );
+	
+	/* XML_IO_Handler info */
+	_XML_IO_Handler_Init( self );
+}
+
+XML_IO_Handler* _XML_IO_Handler_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		IO_Handler_ReadAllFromFileFunction*		_readAllFromFile,
+		IO_Handler_ReadAllFromFileForceSourceFunction*		_readAllFromFileForceSource,
+		IO_Handler_ReadAllFromBufferFunction*		_readAllFromBuffer,
+		IO_Handler_WriteAllToFileFunction*		_writeAllToFile,
+		XML_IO_Handler_WriteEntryToFileFunction*	_writeEntryToFile, 
+		XML_IO_Handler_SetListEncodingFunction*		_setListEncoding,
+		XML_IO_Handler_SetWritingPrecisionFunction*	_setWritingPrecision,
+		XML_IO_Handler_SetWriteExplicitTypesFunction*	_setWriteExplicitTypes )
+{
+	XML_IO_Handler* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(XML_IO_Handler) );
+	self = (XML_IO_Handler*)_IO_Handler_New( 
+		_sizeOfSelf, 
+		type,
+		_delete,
+		_print,
+		_copy, 
+		_readAllFromFile,
+		_readAllFromFileForceSource,
+		_readAllFromBuffer,
+		_writeAllToFile );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->_writeEntryToFile = _writeEntryToFile;
+	self->_setListEncoding = _setListEncoding;
+	self->_setWritingPrecision = _setWritingPrecision;
+	self->_setWriteExplicitTypes = _setWriteExplicitTypes;
+	
+	/* WallBoundaryConditionLayout info */
+	_XML_IO_Handler_Init( self );
+	
+	return self;
+}
+
+static void LookupTypePrint( void* ptr, struct Stream* stream ) {
+	switch( *(Dictionary_Entry_Value_Type*)ptr ) {
+		case Dictionary_Entry_Value_Type_String:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_String\n" );
+			break;
+		case Dictionary_Entry_Value_Type_Double:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_Double\n" );
+			break;
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_UnsignedInt\n" );
+			break;
+		case Dictionary_Entry_Value_Type_Int:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_Int\n" );
+			break;
+		case Dictionary_Entry_Value_Type_Bool:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_Bool\n" );
+			break;
+		case Dictionary_Entry_Value_Type_Struct:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_Struct\n" );
+			break;
+		case Dictionary_Entry_Value_Type_List:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_List\n" );
+			break;
+		default:
+			Journal_Printf( stream, "Dictionary_Entry_Value_Type_???\n" );
+			break;
+	}
+}
+
+static void* LookupTypeCopy( void* ptr, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Dictionary_Entry_Value_Type* newLookupType;
+	
+	Journal_Firewall( deep, Journal_Register( Error_Type, XML_IO_Handler_Type ), "Shallow copy not yet implemented\n" );
+	
+	newLookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*newLookupType = *(Dictionary_Entry_Value_Type*)ptr;
+	
+	return newLookupType;
+}
+
+void _XML_IO_Handler_Init( XML_IO_Handler* self ) {
+	/* General and Virtual info should already be set */
+
+	Dictionary_Entry_Value_Type* lookupType;
+
+	/* XML_IO_Handler info */
+	self->nameSpacesList = NULL;
+	_XML_IO_Handler_AddNameSpace( self, "http://www.vpac.org/StGermain/XML_IO_Handler/", "Jun2003" );
+	self->resource = NULL;
+	self->currDoc = NULL;
+	self->currNameSpace = NULL;
+	self->tokeniserCalls = 0;
+	self->listEncoding = PerList;
+	
+	self->typeKeywords = Stg_ObjectList_New();
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_String;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "string", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_Double;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "double", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_UnsignedInt;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "uint", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_UnsignedInt;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "unsigned int", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_Int;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "int", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_Bool;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "bool", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_Struct;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "struct", 0, LookupTypePrint, LookupTypeCopy );
+	lookupType = Memory_Alloc( Dictionary_Entry_Value_Type, "Lookup-type" );
+	*lookupType = Dictionary_Entry_Value_Type_List;
+	Stg_ObjectList_PointerAppend( self->typeKeywords, lookupType, "list", 0, LookupTypePrint, LookupTypeCopy );
+	
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_String] = "string";
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_Double] = "double";
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_UnsignedInt] = "uint";
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_Int] = "int";
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_Bool] = "bool";
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_Struct] = "struct";
+	self->TYPE_KEYWORDS[Dictionary_Entry_Value_Type_List] = "list";
+	self->WRITING_FIELD_EXTRAS[Dictionary_Entry_Value_Type_String] = 1;
+	self->WRITING_FIELD_EXTRAS[Dictionary_Entry_Value_Type_Double] = 7;
+	self->WRITING_FIELD_EXTRAS[Dictionary_Entry_Value_Type_UnsignedInt] = 6; 
+	self->WRITING_FIELD_EXTRAS[Dictionary_Entry_Value_Type_Int] = 6; 
+	self->WRITING_FIELD_EXTRAS[Dictionary_Entry_Value_Type_Bool] = 1;
+	self->_setWritingPrecision( self, Dictionary_Entry_Value_Type_String, 30 );
+	self->_setWritingPrecision( self, Dictionary_Entry_Value_Type_Double, 5 );
+	self->_setWritingPrecision( self, Dictionary_Entry_Value_Type_UnsignedInt, 5 );
+	self->_setWritingPrecision( self, Dictionary_Entry_Value_Type_Int, 5 );
+	self->_setWritingPrecision( self, Dictionary_Entry_Value_Type_Bool, 5 );
+	self->writeExplicitTypes = False;
+	
+	/* set so that whitespaces in between tags are not parsed, and indentation is generated in the output */
+	xmlKeepBlanksDefault( False );
+	
+	/* search path info */
+	self->searchPathsSize = 0;
+	self->searchPaths = NULL;
+}
+
+
+/** delete the memory used by this level in the class hierarchy. */
+void _XML_IO_Handler_Delete( void* xml_io_handler ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	NameSpaceInfo* currNameSpaceInfo;
+
+	int ii;
+
+	assert( self );
+	
+	Stg_ObjectList_DeleteAllObjects( self->typeKeywords );
+	Stg_Class_Delete( self->typeKeywords );
+
+	/* delete this level's memory */
+	currNameSpaceInfo = self->nameSpacesList;
+	while ( currNameSpaceInfo ) {
+		NameSpaceInfo* tempNameSpaceInfo = currNameSpaceInfo;
+		currNameSpaceInfo = currNameSpaceInfo->next;	
+		
+		Memory_Free( tempNameSpaceInfo->location );
+		Memory_Free( tempNameSpaceInfo->version );
+		Memory_Free( tempNameSpaceInfo );
+	}
+	
+	for ( ii = 0; ii < self->searchPathsSize; ++ii ) {
+		Memory_Free( self->searchPaths[ii] );
+	}
+	if ( self->searchPaths ) {
+		Memory_Free( self->searchPaths );
+	}
+
+	/* Stg_Class_Delete Parent Stg_Class */
+	_IO_Handler_Delete( self );
+}
+
+
+/** print implementation */
+void _XML_IO_Handler_Print( void* xml_io_handler, Stream* stream ) {
+	XML_IO_Handler* self = (XML_IO_Handler*)xml_io_handler;
+	
+	/* General info */
+	Journal_Printf( stream, "XML_IO_Handler (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_IO_Handler_Print( self, stream );
+	
+	/* Virtual info */
+	Journal_Printf( stream, "\t_writeEntryToFile (func ptr): %p\n", self->_writeEntryToFile );
+	Journal_Printf( stream, "\t_setListEncoding (func ptr): %p\n", self-> _setListEncoding);
+	Journal_Printf( stream, "\t_setWritingPrecision (func ptr): %p\n", self->_setWritingPrecision );
+	Journal_Printf( stream, "\t_setWriteExplicitTypes (func ptr): %p\n", self->_setWriteExplicitTypes );
+	
+	/* XML_IO_Handler */
+	Journal_Printf( stream, "\tcurDoc (ptr)= %p, ", self->currDoc );
+	if( self->currNameSpace ) {
+		Journal_Printf( stream, "currNameSpace: %s\n", self->currNameSpace->href );
+	}
+	else {
+		Journal_Printf( stream, "currNameSpace: (null)\n" );
+	}	
+}
+
+
+/** sets the type of list encoding you'd like output to be written in, see ::ListEncoding enum. */
+void XML_IO_Handler_SetListEncoding( void* xml_io_handler, ListEncoding listEncoding ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	assert ( self );
+	self->_setListEncoding( self, listEncoding );
+}
+
+void _XML_IO_Handler_SetListEncoding( void* xml_io_handler, ListEncoding listEncoding ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	self->listEncoding = listEncoding;
+}
+
+
+/** sets the precision to which output numbers will be printed. Field width's will be correspondingly adjusted
+ * automatically. */
+void XML_IO_Handler_SetWritingPrecision( void* xml_io_handler, int dictionaryEntryType, int value ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	assert ( self );
+	self->_setWritingPrecision( xml_io_handler, dictionaryEntryType, value );
+}
+
+void _XML_IO_Handler_SetWritingPrecision( void* xml_io_handler, int dictionaryEntryType, int value ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	assert ( self );
+	self->writingPrecision[dictionaryEntryType] = value; 
+	self->writingFieldWidth[dictionaryEntryType] = value + self->WRITING_FIELD_EXTRAS[dictionaryEntryType];
+}
+
+
+/** Determines whether types will be written explicitly in the output (default: no). If set to yes, the type of each
+ * variable will be written as an attribute. */
+void XML_IO_Handler_SetWriteExplicitTypes( void* xml_io_handler, Bool writeExplicitTypes ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	assert ( self );
+	self->_setWriteExplicitTypes( self, writeExplicitTypes );
+}
+
+void _XML_IO_Handler_SetWriteExplicitTypes( void* xml_io_handler, Bool writeExplicitTypes ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	self->writeExplicitTypes = writeExplicitTypes;
+}
+
+
+/** adds a namespace to the list of those that will be checked against when reading a file */
+void _XML_IO_Handler_AddNameSpace( void* xml_io_handler, char* location, char* version )
+{
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	NameSpaceInfo* newNameSpaceInfo = Memory_Alloc( NameSpaceInfo, "XML_IO_Handler->nameSpaceList" );
+	
+	assert ( self );
+	newNameSpaceInfo->location = StG_Strdup(location);
+	newNameSpaceInfo->version = StG_Strdup(version);
+	newNameSpaceInfo->next = self->nameSpacesList; 
+	self->nameSpacesList = newNameSpaceInfo;
+}
+
+
+/** add a path to the search paths */
+void _XML_IO_Handler_AddSearchPath( void* xml_io_handler, char* path ) {
+	XML_IO_Handler*		self = (XML_IO_Handler*)xml_io_handler;
+
+	if ( !path ) {
+		return;
+	}
+
+	self->searchPathsSize++;
+	
+	if( self->searchPathsSize == 1 ) {
+		self->searchPaths = Memory_Alloc_Array( char*, self->searchPathsSize, "XML_IO_Handler->searchPathsSize" );
+	}
+	else {
+		self->searchPaths = Memory_Realloc_Array( self->searchPaths, char*, self->searchPathsSize );
+	}
+
+	self->searchPaths[ self->searchPathsSize - 1 ] = StG_Strdup( path );
+}
+
+
+#include <mpi.h>
+
+/** Read all parameters from a file implementation. See IO_Handler_ReadAllFromFile(). It will first check if the file
+ * exists, and contains valid XML. */
+Bool _XML_IO_Handler_ReadAllFromFile( void* xml_io_handler, const char* filename, Dictionary* dictionary ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	xmlNodePtr cur = NULL;
+int rank;	
+	Journal_DPrintf( Journal_Register( Debug_Type, XML_IO_Handler_Type ), "XML_IO_Handler called to read file %s.\n", filename );
+	
+	assert( self && filename && dictionary );
+MPI_Comm_rank( MPI_COMM_WORLD, &rank );	
+	/* set the current dictionary to the one being read */
+	self->currDictionary = dictionary;
+
+	/* Order of search*/
+	/* 1. Current directory */
+	/* 2. XML, searched paths */
+	/* 3. Environment Variable */
+	/* 4. Default STG_MODULE_PATH */
+
+	/* 1. Current directory */
+	{
+		// $PWD does not work for all ranks, in all mpi implementations
+		// "./" however does so far.
+		//    char* pwd = getenv( "PWD" );
+		char* pwd = "./";
+		if ( pwd != NULL ) {
+			_XML_IO_Handler_AddSearchPath( self, pwd );
+		}
+	}
+
+	/* 2. XML, searched paths */
+	if( self->currPath ) /* setup initial search path (currPath) */
+		_XML_IO_Handler_AddSearchPath( self, self->currPath );
+	else
+		_XML_IO_Handler_AddSearchPath( self, "./" );
+
+	/* 3. Environment Variable */
+	{
+		char* envValue;
+
+		envValue = getenv( "STG_MODULE_PATH" );
+		if ( envValue != NULL ) {
+			char* envCopy; 
+			char* token;
+
+			envCopy = StG_Strdup( envValue );
+			token = strtok( envCopy, ":" );
+			while ( token != NULL ) {
+				_XML_IO_Handler_AddSearchPath( self, token );
+				token = strtok( NULL, ":" );
+			}
+
+			Memory_Free( envCopy );
+		}
+	}
+
+	/* 4. Default STG_MODULE_PATH */
+	#ifdef STG_MODULE_PATH
+		_XML_IO_Handler_AddSearchPath( self, STG_MODULE_PATH );
+	#endif
+
+	/* open the file and check syntax */
+	if ( !(cur = _XML_IO_Handler_OpenCheckFile( self, filename )) ) {
+		return False;
+	}	
+	
+	/* call parse nodes, starting on the first child */
+	_XML_IO_Handler_ParseNodes( self, cur, NULL, Dictionary_MergeType_Replace, NULL );
+	
+	/* free memory */
+	xmlFreeDoc( self->currDoc );
+	xmlCleanupParser();
+	
+	return True;
+}
+
+/** Read all parameters from a file implementation. See IO_Handler_ReadAllFromFile(). It will first check if the file
+ * exists, and contains valid XML. 
+ * FORCES the source file to be added to each Dictionary_Entry_Source (even if XML didn't have a source entry)*/
+Bool _XML_IO_Handler_ReadAllFromFileForceSource( void* xml_io_handler, const char* filename, Dictionary* dictionary ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	xmlNodePtr cur = NULL;
+	
+	Journal_DPrintf( Journal_Register( Debug_Type, XML_IO_Handler_Type ), "XML_IO_Handler called to read file %s.\n", filename );
+	
+	assert( self && filename && dictionary );
+	
+	/* set the current dictionary to the one being read */
+	self->currDictionary = dictionary;
+	
+	/* setup initial search path (currPath) */
+	if( self->currPath )
+		_XML_IO_Handler_AddSearchPath( self, self->currPath );
+	else
+		_XML_IO_Handler_AddSearchPath( self, "./" );
+	
+	/* open the file and check syntax */
+	if ( !(cur = _XML_IO_Handler_OpenCheckFile( self, filename )) ) {
+		xmlCleanupParser();
+		return False;
+	}	
+	
+	/* call parse nodes, starting on the first child */
+	_XML_IO_Handler_ParseNodes( self, cur, NULL, Dictionary_MergeType_Replace, (char*) cur->doc->URL );
+	
+	/* free memory */
+	xmlFreeDoc( self->currDoc );
+	xmlCleanupParser();
+	
+	return True;
+}
+
+Bool _XML_IO_Handler_ReadAllFromBuffer( void* xml_io_handler, const char* buffer, Dictionary* dictionary ) {
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	xmlNodePtr cur = NULL;
+
+	assert( self && buffer && dictionary );
+	
+	/* set the current dictionary to the one being read */
+	self->currDictionary = dictionary;
+	
+	/* open the buffer and check syntax */
+	if ( !(cur = _XML_IO_Handler_OpenCheckBuffer( self, buffer )) ) {
+		xmlCleanupParser();
+		return False;
+	}	
+	
+	/* call parse nodes, starting on the first child */
+	_XML_IO_Handler_ParseNodes( self, cur, NULL, Dictionary_MergeType_Replace, NULL );
+	
+	/* free memory */
+	xmlFreeDoc( self->currDoc );
+	xmlCleanupParser();
+	
+	return True;
+}
+
+/** Opens a file for reading and checks it contains valid XML code.
+ * \return a pointer to the root node if the file is valid, NULL otherwise. */
+static xmlNodePtr _XML_IO_Handler_OpenCheckFile( XML_IO_Handler* self, const char* filename )
+{
+	xmlChar absolute[1024];
+
+	if ( FindFileInPathList(
+		(char*)absolute,
+		(char*)filename,
+		self->searchPaths,
+		self->searchPathsSize ) )
+	{
+		_XML_IO_Handler_OpenFile( self, (char*)absolute );
+	}
+
+	Journal_Firewall( self->currDoc != NULL,
+		Journal_Register( Error_Type, XML_IO_Handler_Type ),
+		"Error: File %s doesn't exist, not readable, or not valid.\n",
+		filename );
+
+	return _XML_IO_Handler_Check( self );
+	 
+}
+
+static xmlNodePtr _XML_IO_Handler_OpenCheckBuffer( XML_IO_Handler* self, const char* buffer ) {
+	_XML_IO_Handler_OpenBuffer( self, buffer );
+	if ( self->currDoc == NULL ) {
+		return NULL;
+	}
+
+	return _XML_IO_Handler_Check( self );
+}
+static void _XML_IO_Handler_OpenFile( XML_IO_Handler* self, const char* filename ) {
+	/* open an XML file and build an XML tree from it. */
+	/* TODO: validate against simple dtd? */
+	self->currDoc = xmlParseFile( filename );
+	if ( self->currDoc == NULL ) {
+		xmlCleanupParser();
+	}
+	if ( self->resource ) {
+		Memory_Free( self->resource );
+	}
+	self->resource = StG_Strdup( (char*)filename );
+}
+
+static void _XML_IO_Handler_OpenBuffer( XML_IO_Handler* self, const char* buffer ) {
+	self->currDoc = xmlParseDoc( BAD_CAST buffer );
+	if ( self->resource ) {
+		Memory_Free( self->resource );
+	}
+	self->resource = StG_Strdup( "buffer" );
+}
+static xmlNodePtr _XML_IO_Handler_Check( XML_IO_Handler* self ) {
+	xmlNodePtr cur = NULL;
+	
+	cur = xmlDocGetRootElement( self->currDoc );
+	if (cur == NULL) {
+		Journal_Printf(
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Error: empty document. Not parsing.\n" );
+		xmlFreeDoc( self->currDoc );
+		return NULL;
+	}
+	
+	/* check the namespace */
+	(void) _XML_IO_Handler_CheckNameSpace( self, cur ); 
+	
+	/* check root element */
+	if (xmlStrcmp(cur->name, (const xmlChar *) ROOT_NODE_NAME)) {
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"resource %s of wrong type, root node =<%s>, should be <%s>.\nNot parsing.\n",
+			self->resource,
+			(const char*) cur->name, 
+			ROOT_NODE_NAME );
+		xmlFreeDoc( self->currDoc );
+		return NULL;
+	}
+	
+	/* get first child */
+	cur = cur->xmlChildrenNode;
+	while ( cur && xmlIsBlankNode ( cur ) ) {
+		cur = cur -> next;
+	}
+	if ( cur == NULL ) {
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Error: no children nodes in resource (path)%s. Not parsing.\n",
+			self->resource );
+	}
+	
+	return cur;
+}
+
+
+/** given the root node of a document, checks the name space is among the list of allowed ones. If not, or if 
+ * version is wrong, prints an appropriate warning.
+ * \return True if namespace found among allowed list, false otherwise. */
+Bool _XML_IO_Handler_CheckNameSpace( XML_IO_Handler* self, xmlNodePtr curNode )
+{
+	Bool retVal = True;
+	NameSpaceInfo* currNsInfo = self->nameSpacesList;
+	char* correctNameSpace;
+	int correctLength = ( strlen(currNsInfo->location) + strlen(currNsInfo->version) ) + 1; 
+	
+	if ( !(correctNameSpace = Memory_Alloc_Array_Unnamed( char, correctLength )) ) {
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Error: couldn't allocate memory for namespace.\n" );
+	}
+	strcpy( correctNameSpace, currNsInfo->location );
+	strcat( correctNameSpace, currNsInfo->version );
+	
+	if ( (self->currNameSpace = xmlSearchNsByHref( self->currDoc , curNode, (const xmlChar *) correctNameSpace )) )
+	{
+		/* the correct namespace has been found. */
+		retVal = True;
+	}
+	else {
+		xmlNsPtr* nsArray = xmlGetNsList( self->currDoc, curNode );
+		int i;
+		
+		for (i=0; nsArray[i] != NULL; i++ ) {
+			char* lastSlash;
+			int locationLength;
+			
+			self->currNameSpace = nsArray[i];
+			
+			if ( NULL == (lastSlash = strrchr( (const char*) nsArray[i]->href, '/' )) ) {
+				Journal_Printf( 
+					Journal_Register( Info_Type, XML_IO_Handler_Type ),
+					"Warning: resource %s has namespace \"%s\" not of expected URI form.\n",
+					self->resource, 
+					nsArray[i]->href );
+				Memory_Free( correctNameSpace );
+				return False;
+			} 
+			locationLength = (char*) lastSlash - (char*) nsArray[i]->href;
+			
+			if ( 0 == xmlStrncmp( nsArray[i]->href, (const xmlChar*) currNsInfo->location, locationLength ) ) {
+				Journal_Printf(
+					Journal_Register( Info_Type, XML_IO_Handler_Type ),
+					"Warning: resource %s of the correct type (\"%s\") but wrong version (\"%s\") as "
+					"compared to correct one of \"%s\".\n", 
+					self->resource,
+					currNsInfo->location, 
+					lastSlash+1,
+					currNsInfo->version );			
+				retVal = False;
+			}
+			else {
+				currNsInfo = currNsInfo->next;
+				
+				/* search the IO_Handler's parent for matches */
+				while ( currNsInfo )
+				{
+					self->currNameSpace = nsArray[i];
+					if ( 0 == xmlStrncmp( nsArray[i]->href, (const xmlChar*) currNsInfo->location, locationLength ) ) {
+						Journal_Printf(
+							Journal_Register( Info_Type, XML_IO_Handler_Type ),
+							"Warning: resource %s of the type of a parent namespace (\"%s\") as "
+							"compared to correct one of %s. "
+							"Some input features may not work.\n", 
+							self->resource,
+							currNsInfo->location, 
+							correctNameSpace );
+						retVal = False;
+					}
+				}	
+				
+				if ( True == retVal ) {
+					Journal_Printf(
+						Journal_Register( Info_Type, XML_IO_Handler_Type ),
+						"Error: resource %s of the wrong type, unknown namespace wasn't expected "
+						"value of %s.\n", 
+						self->resource, 
+						correctNameSpace );
+					retVal = False;	
+				}		
+			}
+		}
+	}	
+	
+	Memory_Free( correctNameSpace );
+	return retVal;
+}			
+
+
+/** given a document node and the parent of that node, parses all the information on that node and any of its children
+ * into the Dictionary. */
+static void _XML_IO_Handler_ParseNodes( XML_IO_Handler* self, xmlNodePtr cur, Dictionary_Entry_Value* parent, Dictionary_MergeType mergeType, Dictionary_Entry_Source source )
+{
+	/* Process each node at this depth. Allow any order, and warn on unknown nodes */
+	while (cur != NULL) {
+		/* if parameter */
+		if ( (0 == xmlStrcmp( cur->name, (const xmlChar *) PARAM_TAG ) ) && ( cur->ns == self->currNameSpace ) ) {
+			_XML_IO_Handler_ParseParameter( self, cur, parent, mergeType, source );
+		}
+		else if	( (0 == xmlStrcmp( cur->name, (const xmlChar *) LIST_TAG ) ) && ( cur->ns == self->currNameSpace ) ) {
+			_XML_IO_Handler_ParseList( self, cur , parent, mergeType, source );
+		}
+		else if	( (0 == xmlStrcmp( cur->name, (const xmlChar *) STRUCT_TAG ) ) &&
+			( cur->ns == self->currNameSpace ) ) {
+			_XML_IO_Handler_ParseStruct( self, cur, parent, mergeType, source );
+		}
+		else if ( (0 == xmlStrcmp( cur->name, (const xmlChar *) SEARCH_PATH_TAG ) ) &&
+			( cur->ns == self->currNameSpace ) )
+		{
+			xmlChar*	tmp;
+			
+			xmlChar* path = xmlNodeListGetString( self->currDoc, cur->xmlChildrenNode, 1 );
+			
+			tmp = Memory_Alloc_Array( xmlChar, 1024, "TmpPath" );
+			
+			/* Handle absolute paths */
+			if( strlen( (char*)path ) ) {
+				if( !(path[0] == '/' || path[0] == '~' || path[0] == '$' ) ) {
+					PathJoin( (char*)tmp, 2, self->currPath, path );
+				}
+				else {
+					strcpy( (char*)tmp, (char*)path );
+				}
+			}
+			else {
+				tmp[0] = 0;
+			}
+			
+			tmp = (xmlChar*)ExpandEnvironmentVariables( (char*)tmp );
+				
+			_XML_IO_Handler_AddSearchPath( self, (char*)tmp );
+
+			Memory_Free( tmp );
+		}
+		else if	( (0 == xmlStrcmp( cur->name, (const xmlChar *) INCLUDE_TAG ) ) &&
+			( cur->ns == self->currNameSpace ) )
+		{
+			xmlChar* filename = xmlNodeListGetString( self->currDoc, cur->xmlChildrenNode, 1 );
+
+			if ( filename ) {
+				xmlChar*	spaceStrippedFileName = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, filename );
+
+				Journal_DPrintf( 
+					Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+					"Trying to parse file %s due to include command.\n", 
+					(char*)spaceStrippedFileName );
+				
+				if ( 0 == xmlStrcmp( spaceStrippedFileName, (const xmlChar*) self->resource ) ) { 
+					Journal_Printf(
+						Journal_Register( Info_Type, XML_IO_Handler_Type ),
+						"Warning- while parsing file %s: Ignoring request to parse same file "
+						"(to avoid infinite loop.\n", 
+						self->resource );
+				}
+				else {
+					xmlChar absolute[1024];
+					Index i;
+					XML_IO_Handler* newHandler = XML_IO_Handler_New();
+					XML_IO_Handler_SetListEncoding( newHandler, self->listEncoding );
+					XML_IO_Handler_SetWriteExplicitTypes( newHandler, self->writeExplicitTypes );
+				
+					for ( i = 0; i < self->searchPathsSize; ++i ) {
+						_XML_IO_Handler_AddSearchPath( newHandler, self->searchPaths[i] );
+					}
+						
+					if ( ! FindFileInPathList(
+						(char*)absolute, 
+						(char*)spaceStrippedFileName, 
+						self->searchPaths, 
+						self->searchPathsSize ) ) {
+					
+						/* Let IO_Handler_ReadAllFromFile() display the errors for opening the file */
+						strcpy( (char*)absolute, (char *)spaceStrippedFileName );
+					}
+					
+					/* TODO: this will need to change once we allow other file type includes */
+					for (i=0; i < Dictionary_Entry_Value_Num_Types; i++ ) {
+						XML_IO_Handler_SetWritingPrecision( newHandler, i, self->writingPrecision[i] );
+					}
+					
+					if( 
+						strlen( (char*)absolute ) == 0 
+						|| (source != NULL && 
+						 	False == IO_Handler_ReadAllFromFileForceSource( newHandler, 
+												        (char*)absolute, 
+													self->currDictionary ) )
+						|| (source == NULL &&
+						 	False == IO_Handler_ReadAllFromFile( newHandler,
+											     (char*)absolute , 
+											     self->currDictionary ) ) )
+					{
+						Journal_Printf(
+							Journal_Register( Info_Type, XML_IO_Handler_Type ),
+							"Warning: Failed to parse file %s from include command.\n", 
+							spaceStrippedFileName );
+					}
+					
+					Stg_Class_Delete( newHandler );
+				}
+				xmlFree( filename );
+				Memory_Free( spaceStrippedFileName );
+			}
+		}
+		/*TODO should we use this or validation? */
+		#if 0
+		else if  {
+			fJournal_Printf( stream, stdout, "Warning- while parsing file %s: unknown tag \"%s\" found, ignoring.\n",
+				self->resource, cur->name );
+		}
+		#endif
+		
+		cur = cur->next;
+	}
+}
+
+
+/** parse list: given a node containing a list, parses the list into the ::Dictionary. (In future might want flags to
+ * say whether each element constrained to be same type?) */
+static void _XML_IO_Handler_ParseList( XML_IO_Handler* self, xmlNodePtr cur, Dictionary_Entry_Value* parent, 
+					Dictionary_MergeType defaultMergeType, Dictionary_Entry_Source source )
+{	
+	xmlChar* name = xmlGetProp( cur, NAME_ATTR );
+	xmlChar* sourceFile = xmlGetProp( cur, SOURCEFILE_ATTR );
+	xmlChar* mergeTypeStr = xmlGetProp( cur, MERGETYPE_ATTR );
+	xmlChar* childrenMergeTypeStr = xmlGetProp( cur, CHILDRENMERGETYPE_ATTR );
+	xmlChar* spaceStrippedName = NULL;
+	xmlChar* spaceStrippedSourceFile = NULL;
+	xmlChar* spaceStrippedMergeType = NULL;
+	xmlChar* spaceStrippedChildrenMergeType = NULL;
+	Dictionary_Entry_Value* newList = NULL;
+	Dictionary_MergeType mergeType = defaultMergeType;
+	Dictionary_MergeType childrenMergeType = Dictionary_MergeType_Append;
+	
+	if ( name ) {
+		spaceStrippedName = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, name );
+	}
+	if ( sourceFile ) {
+		spaceStrippedSourceFile = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, sourceFile );
+	}
+	else if (source) {
+		spaceStrippedSourceFile = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, (xmlChar*) source );
+	}
+	if( mergeTypeStr ) {
+		spaceStrippedMergeType = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, mergeTypeStr );
+		if( !xmlStrcmp( spaceStrippedMergeType, APPEND_TAG ) ) {
+			mergeType = Dictionary_MergeType_Append;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, MERGE_TAG ) ) {
+			mergeType = Dictionary_MergeType_Merge;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, REPLACE_TAG ) ) {
+			mergeType = Dictionary_MergeType_Replace;
+		}
+		else {
+			Journal_DPrintf(
+				Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+				"_XML_IO_Handler_ParseList called on tag %s, with name=\"%s\", and "
+				"mergeType \"%s\" unknown reverting to \"%s\".\n", 
+				(char *)cur->name, 
+				spaceStrippedName,
+				spaceStrippedMergeType,
+				defaultMergeType == Dictionary_MergeType_Append ? APPEND_TAG : 
+					defaultMergeType == Dictionary_MergeType_Merge ? MERGE_TAG :
+					defaultMergeType == Dictionary_MergeType_Replace ? APPEND_TAG :
+					APPEND_TAG );
+			mergeType = defaultMergeType;
+		}
+	}
+	if( childrenMergeTypeStr ) {
+		spaceStrippedChildrenMergeType = _XML_IO_Handler_StripLeadingTrailingWhiteSpace(
+			self,
+			childrenMergeTypeStr );
+							
+		if( !xmlStrcmp( spaceStrippedMergeType, APPEND_TAG ) ) {
+			childrenMergeType = Dictionary_MergeType_Append;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, MERGE_TAG ) ) {
+			childrenMergeType = Dictionary_MergeType_Merge;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, REPLACE_TAG ) ) {
+			childrenMergeType = Dictionary_MergeType_Replace;
+		}
+		else {
+			Journal_DPrintf(
+				Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+				 "_XML_IO_Handler_ParseList called on tag %s, with name=\"%s\", and "
+				 "mergeType \"%s\" unknown reverting to \"%s\".\n", 
+				(char *)cur->name, 
+				spaceStrippedName,
+				spaceStrippedMergeType,
+				APPEND_TAG );
+			childrenMergeType = Dictionary_MergeType_Append;
+		}
+	}
+
+	Journal_DPrintf(
+		Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_ParseList called on tag %s, with name=\"%s\", and mergeType=\"%s\"\n", 
+		(char *) cur->name, 
+		spaceStrippedName, 
+		spaceStrippedMergeType );
+	
+	/* set/add the list */
+	newList = IO_Handler_DictSetAddValueWithSource(
+		self,
+		(char*)spaceStrippedName, 
+		NULL, 
+		Dictionary_Entry_Value_Type_List, 
+		parent, 
+		mergeType,
+		(char*)spaceStrippedSourceFile );
+
+	if ( (NULL != newList) && cur->xmlChildrenNode ) {
+		/* check to see if values presented as columns of binary and ascii data */
+		if	( (0 == xmlStrcmp( cur->xmlChildrenNode->name, (const xmlChar *) ASCII_DATA_TAG ) ) &&
+				( cur->ns == self->currNameSpace ) )
+		{
+			Dictionary_Entry_Value_SetEncoding( newList, RawASCII );
+			_XML_IO_Handler_ParseAsciiData( self, cur->xmlChildrenNode, newList ); 
+		}	
+		else {
+			/* TODO: working out whether to make sure all elements conform to type of first */
+			_XML_IO_Handler_ParseNodes( self, cur->xmlChildrenNode, newList, childrenMergeType, source );
+		}
+		
+		/* if global encoding flag set, change encoding */
+		switch (self->listEncoding) {
+			case PerList:
+				break; /* will be set correctly already */
+			case AllXML:
+				Dictionary_Entry_Value_SetEncoding( newList, Default );
+				break;
+			case AllRawASCII:
+				Dictionary_Entry_Value_SetEncoding( newList, RawASCII );
+				break;
+			case AllRawBinary:
+				Dictionary_Entry_Value_SetEncoding( newList, RawBinary );
+				break;
+		}
+	}
+	
+	xmlFree( name );
+	if ( spaceStrippedName ) {
+		Memory_Free( spaceStrippedName );
+	}
+	xmlFree( sourceFile );
+	if ( spaceStrippedSourceFile ) {
+		Memory_Free( spaceStrippedSourceFile );
+	}
+}			
+
+
+/** parses an ascii data list. If column definitions provided, parses the data in as the defined types. Else, parses
+ * in entries as strings into a struct with members called "1" to "x", where x is the number of ascii data pieces on the
+ * first line.
+ * TODO: generalise using a function pointer to tokeniser to handle raw binary data */
+static void _XML_IO_Handler_ParseAsciiData( XML_IO_Handler* self, xmlNodePtr cur, Dictionary_Entry_Value* parentList )
+{
+	ColumnInfo columnInfo[MAX_COLUMNS];
+	int numColumns = 0;
+	xmlNodePtr currChild;
+	char** asciiData = NULL;
+	int asciiCount;
+	int asciiSize;
+	char* currAsciiToken;
+	int i = 0; 
+	int countI;
+	
+	currChild = cur->xmlChildrenNode;
+	_XML_IO_Handler_ParseColumnDefinitions( self, currChild, columnInfo, &numColumns );
+	
+	if ( 0 == numColumns ) {
+		
+		/* if asciidata, decide the columns based on the first row. */
+		if ( 0 == xmlStrcmp( cur->name, (const xmlChar *) ASCII_DATA_TAG ) ) { 
+			xmlChar* dataString = xmlNodeListGetString( self->currDoc, currChild, 1 );
+			char* firstLine = strtok( (char*) dataString, "\n" );	
+			char* currValue = strtok( firstLine, ASCII_DELIMITERS );
+			
+			while( currValue ) {
+				columnInfo[numColumns].name = Memory_Alloc_Array( char, MAX_COLUMN_NUM_LENGTH,
+					"columnInfo[numColumns].name" );
+				sprintf( columnInfo[numColumns].name, "%d", numColumns );
+				columnInfo[numColumns].dictValueType = Dictionary_Entry_Value_Type_String;
+				
+				currValue = strtok( NULL, ASCII_DELIMITERS );
+				numColumns++;
+			}
+		}
+		else {
+			Journal_Printf( 
+				Journal_Register( Info_Type, XML_IO_Handler_Type ),
+				"Error - while parsing resource %s: type of binary data must be specified "
+				"through dictionary or <%s> tag. Ignoring data.\n", 
+				self->resource,
+				COLUMN_DEFINITION_TAG );
+			return;
+		}
+	
+	}
+	
+	/* reset the tokeniser if necessary */
+	self->tokeniserCalls = 0;
+	asciiCount = 0;
+	asciiSize = 0;
+
+	/* parse each token into asciiData */ 
+	currAsciiToken = _XML_IO_Handler_GetNextAsciiToken( self, currChild );
+	while ( currAsciiToken ) {
+		if ( asciiSize == 0 ) {
+			asciiSize += numColumns;
+			asciiData = Memory_Alloc_Array( char*, asciiSize, "asciiData"  );
+		}
+		else if ( asciiCount == asciiSize ) {
+			asciiSize += numColumns;
+			asciiData = Memory_Realloc_Array( asciiData, char*, asciiSize ); 
+		}
+		asciiData[asciiCount] = currAsciiToken;
+		asciiCount++;
+		currAsciiToken = _XML_IO_Handler_GetNextAsciiToken( self, currChild );
+	}
+	
+	countI = 0;
+	
+	/* parse all the ascii values into the parent list */
+	while ( countI < asciiCount ) {
+		Bool rowOk = True;
+		Dictionary_Entry_Value* currStruct = Dictionary_Entry_Value_NewStruct(); 
+
+		for (i=0; i < numColumns; i++) {
+			currAsciiToken = asciiData[countI];
+		
+			if ( currAsciiToken ) {
+				_XML_IO_Handler_ParseAsciiValue( currAsciiToken, &columnInfo[i], currStruct );
+			}
+			else {
+				Journal_Printf(
+					Journal_Register( Info_Type, XML_IO_Handler_Type ),
+					"Warning - while parsing resource %s: last row of Ascii data partially full. "
+					"Discarding row.\n", 
+					self->resource );
+				Memory_Free( asciiData );
+				Memory_Free( currStruct );
+				rowOk = False;
+				break;
+			}
+			countI++;	
+		}
+		/* add element to list in dict */
+		if ( True == rowOk ) {
+			Dictionary_Entry_Value_AddElement( parentList, currStruct );
+		}
+	}
+	
+	Memory_Free( asciiData );
+	
+	/* Memory_Free the columnInfo array */
+	for (i=0; i < numColumns; i++ ) {
+		Memory_Free( columnInfo[i].name );
+	}
+}
+
+
+/** recursive function to parse all the column definitions, and ignore whitespace between them */
+static void _XML_IO_Handler_ParseColumnDefinitions( XML_IO_Handler* self, xmlNodePtr cur, 
+	ColumnInfo columnInfo[MAX_COLUMNS], int* const numColumnsPtr )
+{
+	char* stringPtr;
+	/* read any column definitions */
+	while ( (XML_ELEMENT_NODE == cur->type) &&
+		(0 == xmlStrcmp( cur->name, (const xmlChar *) COLUMN_DEFINITION_TAG ) ) &&
+		( cur->ns == self->currNameSpace ) )
+	{
+		xmlChar* type = xmlGetProp( cur, TYPE_ATTR );
+		
+		stringPtr = (char*) xmlGetProp( cur, NAME_ATTR );
+		columnInfo[(*numColumnsPtr)].name = StG_Strdup( stringPtr );
+		xmlFree( stringPtr );
+		columnInfo[(*numColumnsPtr)++].dictValueType = _XML_IO_Handler_GetDictValueType( self, (char*) type );
+		cur = cur->next;
+	}
+	
+	/* read any whitespace nodes */
+	while ( _XML_IO_Handler_IsOnlyWhiteSpace( (char*) xmlNodeListGetString( self->currDoc, cur, 1 ) ) ) {
+		cur = cur->next;
+	}
+	
+	/* if more columns, make a recursive call */
+	if ( (XML_ELEMENT_NODE == cur->type) &&
+		(0 == xmlStrcmp( cur->name, (const xmlChar *) COLUMN_DEFINITION_TAG ) ) &&
+		( cur->ns == self->currNameSpace ) )
+	{
+		_XML_IO_Handler_ParseColumnDefinitions( self, cur, columnInfo, numColumnsPtr );
+	}
+}
+
+
+/** parse a single ascii value, into the given ::Dictionary struct, converting to type defined in the given ::ColumnInfo.*/
+static void _XML_IO_Handler_ParseAsciiValue( char* asciiValue, ColumnInfo* columnInfo, Dictionary_Entry_Value* toDictStruct ) {
+	Dictionary_Entry_Value* newValue = Dictionary_Entry_Value_FromStringTo( asciiValue, columnInfo->dictValueType );
+	
+	Dictionary_Entry_Value_AddMember( toDictStruct, columnInfo->name, newValue );
+}
+
+
+/** get the next ascii token from the list. */
+static char* _XML_IO_Handler_GetNextAsciiToken( XML_IO_Handler* self, xmlNodePtr cur ) {
+	char* retToken;
+	
+	if (0 == self->tokeniserCalls) {
+		xmlChar* dataString = xmlNodeListGetString( self->currDoc, cur, 1 );
+		retToken = strtok( (char*) dataString, ASCII_DELIMITERS );
+	}
+	else {
+		retToken = strtok( NULL, ASCII_DELIMITERS );
+	}
+	
+	self->tokeniserCalls++;
+	return retToken;
+}
+
+
+/** parses a node containing struct info. */
+static void _XML_IO_Handler_ParseStruct( 
+		XML_IO_Handler*					self, 
+		xmlNodePtr					cur, 
+		Dictionary_Entry_Value*				parent, 
+		Dictionary_MergeType				defaultMergeType,
+		Dictionary_Entry_Source				source )
+{
+	xmlChar* name = xmlGetProp( cur, NAME_ATTR );
+	xmlChar* sourceFile = xmlGetProp( cur, SOURCEFILE_ATTR );
+	xmlChar* mergeTypeStr = xmlGetProp( cur, MERGETYPE_ATTR );
+	xmlChar* childrenMergeTypeStr = xmlGetProp( cur, CHILDRENMERGETYPE_ATTR );
+	xmlChar* spaceStrippedName = NULL;
+	xmlChar* spaceStrippedSourceFile = NULL;
+	xmlChar* spaceStrippedMergeType = NULL;
+	xmlChar* spaceStrippedChildrenMergeType = NULL;
+	Dictionary_Entry_Value* newStruct = NULL;
+	Dictionary_MergeType mergeType = defaultMergeType;
+	Dictionary_MergeType childrenMergeType = Dictionary_MergeType_Append;
+	
+	if ( name ) {
+		spaceStrippedName = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, name );
+	}
+	if ( sourceFile ) {
+		spaceStrippedSourceFile = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, sourceFile );
+	}
+	else if (source) {
+		spaceStrippedSourceFile = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, (xmlChar*) source );
+	}
+	if( mergeTypeStr ) {
+		spaceStrippedMergeType = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, mergeTypeStr );
+		if( !xmlStrcmp( spaceStrippedMergeType, APPEND_TAG ) ) {
+			mergeType = Dictionary_MergeType_Append;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, MERGE_TAG ) ) {
+			mergeType = Dictionary_MergeType_Merge;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, REPLACE_TAG ) ) {
+			mergeType = Dictionary_MergeType_Replace;
+		}
+		else {
+			Journal_DPrintf( 
+				Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+				"_XML_IO_Handler_ParseList called on tag %s, with name=\"%s\", and mergeType \"%s\" unknown "
+				"reverting to \"%s\".\n", 
+				(char *)cur->name, 
+				spaceStrippedName,
+				defaultMergeType == Dictionary_MergeType_Append ? APPEND_TAG : 
+					defaultMergeType == Dictionary_MergeType_Merge ? MERGE_TAG :
+					defaultMergeType == Dictionary_MergeType_Replace ? APPEND_TAG :
+					APPEND_TAG );
+			mergeType = defaultMergeType;
+		}
+	}
+	if( childrenMergeTypeStr ) {
+		spaceStrippedChildrenMergeType = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, childrenMergeTypeStr );
+		if( !xmlStrcmp( spaceStrippedMergeType, APPEND_TAG ) ) {
+			childrenMergeType = Dictionary_MergeType_Append;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, MERGE_TAG ) ) {
+			childrenMergeType = Dictionary_MergeType_Merge;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, REPLACE_TAG ) ) {
+			childrenMergeType = Dictionary_MergeType_Replace;
+		}
+		else {
+			Journal_DPrintf( 
+				Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+				"_XML_IO_Handler_ParseList called on tag %s, with name=\"%s\", and mergeType \"%s\" unknown "
+				"reverting to \"%s\".\n", 
+				(char *)cur->name, 
+				spaceStrippedName,
+				spaceStrippedMergeType,
+				APPEND_TAG );
+			childrenMergeType = Dictionary_MergeType_Append;
+		}
+	}
+
+	Journal_DPrintf( 
+		Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_ParseStruct called on tag %s, with name=\"%s\"\n",
+		(char *) cur->name, 
+		spaceStrippedName );
+	
+	/* set/add the struct */
+	newStruct = IO_Handler_DictSetAddValueWithSource( 
+		self, 
+		(char*)spaceStrippedName, 
+		NULL, 
+		Dictionary_Entry_Value_Type_Struct, 
+		parent, 
+		mergeType,
+		(char*)spaceStrippedSourceFile );
+
+	if ( NULL != newStruct ) {
+		_XML_IO_Handler_ParseNodes( self, cur->xmlChildrenNode, newStruct, childrenMergeType, source );
+	}
+	
+	xmlFree( name );
+	if ( spaceStrippedName ) {
+		Memory_Free( spaceStrippedName );
+	}
+	xmlFree( sourceFile );
+	if ( spaceStrippedSourceFile ) {
+		Memory_Free( spaceStrippedSourceFile );
+	}
+}
+
+
+/** parses a single parameter node. */
+static void _XML_IO_Handler_ParseParameter( 
+	XML_IO_Handler*						self,
+	xmlNodePtr						cur,
+	Dictionary_Entry_Value*					parent,
+	Dictionary_MergeType					defaultMergeType,
+	Dictionary_Entry_Source					source )
+{
+	xmlChar* value = xmlNodeListGetString( self->currDoc, cur->xmlChildrenNode, 1 );
+	xmlChar* name = xmlGetProp( cur, NAME_ATTR );
+	xmlChar* sourceFile = xmlGetProp( cur, SOURCEFILE_ATTR );
+	xmlChar* type = xmlGetProp( cur, TYPE_ATTR );
+	xmlChar* mergeTypeStr = xmlGetProp( cur, MERGETYPE_ATTR );
+	Dictionary_Entry_Value_Type dictValueType = _XML_IO_Handler_GetDictValueType( self, (char*) type );
+	xmlChar* spaceStrippedName = NULL;
+	xmlChar* spaceStrippedSourceFile = NULL;
+	xmlChar* spaceStrippedMergeType = NULL;
+	xmlChar* spaceStrippedType = NULL;
+	xmlChar* strippedVal = NULL;
+	Dictionary_MergeType mergeType = defaultMergeType;
+	
+	if ( name ) {
+		spaceStrippedName = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, name );
+	}
+
+	if ( sourceFile ) {
+		spaceStrippedSourceFile = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, sourceFile );
+	}
+	else if (source) {
+		spaceStrippedSourceFile = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, (xmlChar*) source );
+	}
+
+	if( mergeTypeStr ) {
+		spaceStrippedMergeType = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, mergeTypeStr );
+		if( !xmlStrcmp( spaceStrippedMergeType, APPEND_TAG ) ) {
+			mergeType = Dictionary_MergeType_Append;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, MERGE_TAG ) ) {
+			mergeType = Dictionary_MergeType_Merge;
+		}
+		else if( !xmlStrcmp( spaceStrippedMergeType, REPLACE_TAG ) ) {
+			mergeType = Dictionary_MergeType_Replace;
+		}
+		else {
+			Journal_Printf( 
+				Journal_Register( Info_Type, XML_IO_Handler_Type ),
+				"_XML_IO_Handler_ParseList called on tag %s, with name=\"%s\", and mergeType \"%s\" unknown "
+				"reverting to \"%s\".\n", 
+				(char *)cur->name, 
+				spaceStrippedName,
+				defaultMergeType == Dictionary_MergeType_Append ? APPEND_TAG : 
+					/* WHERE THIS COME FROM?defaultMergeType == Dictionary_MergeType_Prepend ? PREPEND_TAG : */
+					defaultMergeType == Dictionary_MergeType_Replace ? APPEND_TAG :
+					APPEND_TAG );
+			mergeType = defaultMergeType;
+		}
+	}
+
+	if ( NULL == value ) {
+		strippedVal = Memory_Alloc_Array( xmlChar, 1, "strippedVal" );
+		sprintf( (char*)strippedVal, "%s", "" );
+	}
+	else {
+		strippedVal = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, value );
+	}
+	
+	if( type ) {
+		spaceStrippedType = _XML_IO_Handler_StripLeadingTrailingWhiteSpace( self, type );
+	}
+
+	Journal_DPrintf( 
+		Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_ParseParameter called on tag %s, with name=\"%s\", value=\"%s\"\n", 
+		(char *) cur->name, 
+		spaceStrippedName, 
+		strippedVal );
+	
+	
+	/*
+	** Check the type and perform actions
+	*/
+	
+	if( spaceStrippedType ) {
+		/* TODO: move "path" to a constant */
+		if( strcmp( (char*)spaceStrippedType, "path" ) == 0 ) {
+			/* prefix the current path to 'val' */
+			unsigned	size;
+			xmlChar*	newVal;
+			unsigned	pos = 0;
+			
+			size = strlen( (char*)strippedVal ) + 1;
+			if( self->currPath ) {
+				size += strlen( self->currPath );
+				if(
+					self->currPath[0] != '/' && 
+					self->currPath[0] != '~' && 
+					self->currPath[0] != '.' &&
+					strstr( self->currPath, "file:" ) == NULL &&
+					strstr( self->currPath, "http:" ) == NULL &&
+					strstr( self->currPath, "ftp:" ) == NULL )
+				{
+					
+					size += 2;
+				}
+			}
+			
+			newVal = Memory_Alloc_Array( xmlChar, size, "XML_IO_Handler_ParseParameter->newVal" );
+			if( self->currPath ) {
+				if(
+					self->currPath[0] != '/' && 
+					self->currPath[0] != '~' && 
+					self->currPath[0] != '.' &&
+					strstr( self->currPath, "file:" ) == NULL &&
+					strstr( self->currPath, "http:" ) == NULL &&
+					strstr( self->currPath, "ftp:" ) == NULL )
+				{
+					newVal[0] = '.';
+					newVal[1] = '/';
+					pos += 2;
+				}
+				
+				strcpy( (char*)&newVal[pos], (char*)self->currPath );
+				pos += strlen( self->currPath );
+			}
+			
+			strcpy( (char*)&newVal[pos], (char*)strippedVal );
+			Memory_Free( strippedVal );
+			strippedVal = newVal;
+		}
+	}
+	
+	IO_Handler_DictSetAddValueWithSource( 
+				self, 
+				(char*)spaceStrippedName, 
+				(char*)strippedVal, 
+				dictValueType, 
+				parent, 
+				mergeType, 
+				(char*)spaceStrippedSourceFile );
+	
+	xmlFree( name );
+	if ( spaceStrippedName ) {
+		Memory_Free( spaceStrippedName );
+	}
+	xmlFree( value );
+	Memory_Free( strippedVal );
+	xmlFree( sourceFile );
+	if ( spaceStrippedSourceFile ) {
+		Memory_Free( spaceStrippedSourceFile );
+	}
+	
+	if( type ) {
+		xmlFree( type );
+	}
+	if( spaceStrippedType ) {
+		Memory_Free( spaceStrippedType );
+	}
+}
+
+
+/** utility function to get the dictionary type, given a type definition attribute from the xml file.
+ * TODO: use a hash table? */
+Dictionary_Entry_Value_Type _XML_IO_Handler_GetDictValueType( XML_IO_Handler* self, char* type )
+{
+	if (NULL == type)
+	{
+		return Dictionary_Entry_Value_Type_String;
+	}
+	else {
+		Dictionary_Entry_Value_Type* result;
+		
+		/* convert to lower case. put in string library one day if we make one or use one */
+		char* lowercaseType = StG_Strdup( type );
+		char* ptr = lowercaseType;
+		for ( ; *ptr != '\0'; ++ptr ) {
+			*ptr = tolower( *ptr );
+		}
+	
+		result = Stg_ObjectList_Get( self->typeKeywords, lowercaseType );
+		Memory_Free( lowercaseType );
+		
+		if ( result == NULL ) {
+			/* if unknown type, return string */
+			return Dictionary_Entry_Value_Type_String;
+		}
+		return *result;
+	}
+}
+
+
+/** utility function to strip leading and trailing whitespace */
+static xmlChar* _XML_IO_Handler_StripLeadingTrailingWhiteSpace( XML_IO_Handler* self, const xmlChar* const value ) {
+	
+	assert( value );
+	
+	if ( '\0' == (*value) ) {
+		return (xmlChar*)StG_Strdup( (char*)value );
+	}
+	else {
+		const char* startCharPtr = (const char*)value;
+		const char* endCharPtr = (const char*)value + strlen( (char*)value );
+		xmlChar* newString = NULL;
+		size_t newLength = 0;
+		
+		while ( isspace( (char) *startCharPtr ) && (startCharPtr < endCharPtr) ) {
+			startCharPtr++;
+		}
+		
+		if ( startCharPtr == endCharPtr ) {
+			xmlChar* ret = Memory_Alloc_Array( xmlChar, 1, "ret" );
+			*ret = '\0'; /* empty string */
+			return ret;
+		}
+		
+		while ( isspace( (char) *(endCharPtr-1) ) && (endCharPtr > startCharPtr) ) {
+			endCharPtr--;
+		}
+		
+		newLength = endCharPtr - startCharPtr;
+		assert( newLength > 0 );
+		
+		if ( !(newString = Memory_Alloc_Array_Unnamed( xmlChar, newLength + 1 ) ) ) {
+			Journal_Printf( 
+				Journal_Register( Info_Type, XML_IO_Handler_Type ), 
+				"Error - while parsing file %s: out of memory. exiting.\n", 
+				self->resource );
+			exit( EXIT_FAILURE );
+		}
+		
+		snprintf( (char*)newString, newLength+1, "%s", startCharPtr );
+		
+		return newString;
+	}
+}
+
+
+/** utility function to check if a string is purely whitespace */
+Bool _XML_IO_Handler_IsOnlyWhiteSpace( char* string ) {
+	/* a reasonable maximum so the function doesn't run for ever */
+	const int MAX_WHITESPACE = 100;
+	int charIndex = 0;
+	if ( !string ) return False;
+	
+	for (; (string[charIndex] != '\0') && charIndex < MAX_WHITESPACE; charIndex++ ) {
+		if ( !isspace( string[charIndex] ) ) return False;
+	}
+	
+	return True;
+}
+
+
+/** Write all the entries in a ::Dictionary to an XML file. The functions XML_IO_Handler_SetListEncoding(),
+ * XML_IO_Handler_SetWriteExplicitTypes(), and XML_IO_Handler_SetWritingPrecision() can be used to customise the output.
+ * see also IO_Handler_WriteAllToFile().
+ * \return True on successful write, false otherwise.
+ */
+Bool _XML_IO_Handler_WriteAllToFile( void* xml_io_handler, const char* filename, Dictionary* dictionary ) {
+	
+	/* create/overwrite new document */
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	xmlNodePtr rootNode;
+	int fileSize = -1;
+	char* correctNameSpace;
+	NameSpaceInfo* currNsInfo = self->nameSpacesList;
+	int correctLength = ( strlen(currNsInfo->location) + strlen(currNsInfo->version) ) + 1; 
+	Stream* stream = Journal_Register( Info_Type, XML_IO_Handler_Type );
+	
+	Journal_Printf(
+		Journal_Register( Info_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_WriteAllToFile called to write to file %s.\n", 
+		filename );
+#if DEBUG
+	assert( self );
+	assert( filename );
+	assert( dictionary );
+#endif
+	
+	/* if overwrite/new */
+	self->currDoc = xmlNewDoc( XML_VERSION );
+	assert( self->currDoc );
+	/* create root element */
+	rootNode = xmlNewNode( NULL, ROOT_NODE_NAME);
+	assert( rootNode );
+	
+	if ( !(correctNameSpace = Memory_Alloc_Array( char, correctLength, "courrectNameSpace" )) ) {
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Error: couldn't allocate memory for namespace.\n" );
+		return False;
+	}
+	strcpy( correctNameSpace, currNsInfo->location );
+	strcat( correctNameSpace, currNsInfo->version );
+	self->currNameSpace = xmlNewNs( rootNode, (xmlChar*) correctNameSpace, NULL );
+	assert( self->currNameSpace );
+	xmlSetNs( rootNode, self->currNameSpace );
+	
+	xmlDocSetRootElement( self->currDoc, rootNode );
+	/* TODO else parse in filename as currDoc, if update set */
+	
+	_XML_IO_Handler_WriteDictionary( self, dictionary, rootNode );
+	
+	/* write result to file */
+	if ( 0 < (fileSize = xmlSaveFormatFile( filename, self->currDoc, 1 )) ) {
+		Journal_Printf( stream, "Writing dictionary contents to file %s successfully concluded.\n", filename );
+	} else
+	{
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			 "Warning: failed to write dictionary contents to file %s.\n", 
+			 filename );
+	}
+	
+	/* Memory_Free memory */
+	xmlFreeDoc( self->currDoc );
+	//xmlCleanupParser();
+	/* TODO if updating, xmlCleanupParser(); */
+	self->currDoc = NULL;
+	self->currNameSpace = NULL;
+	Memory_Free( correctNameSpace );
+	
+	return ( fileSize > 0 ) ? True : False;
+}
+
+
+/** write a single dictionary entry to a file. The dictionary entry needs to be supplied as a name and value.
+ * \return True on success, False otherwise. */
+Bool XML_IO_Handler_WriteEntryToFile( void* xml_io_handler, const char* filename,
+	Dictionary_Entry_Key name, Dictionary_Entry_Value* value, Dictionary_Entry_Source source )
+{
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	
+	assert( self );
+	return self->_writeEntryToFile( xml_io_handler, filename, name, value, source );
+}
+
+
+
+Bool _XML_IO_Handler_WriteEntryToFile( void* xml_io_handler, const char* filename,
+	Dictionary_Entry_Key name, Dictionary_Entry_Value* value, Dictionary_Entry_Source source )
+{
+	Stream* stream = Journal_Register (Info_Type, "myStream");
+	/* create/overwrite new document */
+	XML_IO_Handler* self = (XML_IO_Handler*) xml_io_handler;
+	xmlNodePtr rootNode;
+	int fileSize = -1;
+	char* correctNameSpace;
+	NameSpaceInfo* currNsInfo = self->nameSpacesList;
+	int correctLength = ( strlen(currNsInfo->location) + strlen(currNsInfo->version) ) + 1;
+	
+#if DEBUG
+	assert( self );
+	assert( filename );
+	assert( name );
+	assert( value );
+	//Do not assert source -> it may well be NULL.
+#endif
+	Journal_Printf(stream, "_XML_IO_Handler_WriteEntryToFile called to write dictionary entry %s to file %s.\n", name, filename ); 
+	/* if overwrite/new */
+	self->currDoc = xmlNewDoc( XML_VERSION );
+	assert( self->currDoc );
+	/* create root element */
+	rootNode = xmlNewNode( NULL, ROOT_NODE_NAME);
+	assert( rootNode );
+	
+	if ( !(correctNameSpace = Memory_Alloc_Array( char, correctLength, "correctNameSpace" )) ) {
+		Journal_Printf(
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Error: couldn't allocate memory for namespace.\n" );
+		return False;
+	}
+	strcpy( correctNameSpace, currNsInfo->location );
+	strcat( correctNameSpace, currNsInfo->version );
+	self->currNameSpace = xmlNewNs( rootNode, (xmlChar*) correctNameSpace, NULL );
+	assert( self->currNameSpace );
+	xmlSetNs( rootNode, self->currNameSpace );
+	
+	xmlDocSetRootElement( self->currDoc, rootNode );
+	/* TODO else parse in filename as currDoc, if update set */
+	
+	_XML_IO_Handler_WriteNode( self, name, value, source, rootNode );
+	
+	/* write result to file */
+	if ( 0 < (fileSize = xmlSaveFormatFile( filename, self->currDoc, 1 )) ) {
+		Journal_Printf( stream, "Writing dictionary entry %s to file %s successfully concluded.\n", name, filename );
+	} else
+	{
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Warning: failed to write dictionary entry %s to file %s.\n", 
+			name, 
+			filename );
+	}
+	
+	xmlFreeDoc( self->currDoc );
+	//xmlCleanupParser();
+	/* TODO if updating, xmlCleanupParser(); */
+	self->currDoc = NULL;
+	self->currNameSpace = NULL;
+	Memory_Free( correctNameSpace );
+	
+	return ( fileSize > 0 ) ? True : False;
+}
+
+
+/** Write the contents of a dictionary to a file. Note this can be used for writing #Dictionary_Entry_Value_AsStruct
+ * values. */
+static void _XML_IO_Handler_WriteDictionary( XML_IO_Handler* self, Dictionary* dict, xmlNodePtr parent ) {
+	Dictionary_Index index = 0;
+
+	Journal_DPrintf( 
+		Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_WriteDictionary called.\n" );
+		
+	for (index=0; index < dict->count; index++) {
+		Dictionary_Entry* currEntryPtr = dict->entryPtr[index];
+	
+		_XML_IO_Handler_WriteNode( self, currEntryPtr->key, currEntryPtr->value, currEntryPtr->source, parent );
+	}
+}
+
+
+/** write a single node to file, and its children. */
+static void _XML_IO_Handler_WriteNode( XML_IO_Handler* self, char* name, Dictionary_Entry_Value* value, 
+					char* source, xmlNodePtr parent)
+
+{
+	switch ( value->type ) {
+		case Dictionary_Entry_Value_Type_Struct:
+			_XML_IO_Handler_WriteStruct( self, name, value, source, parent );
+			break;
+		case Dictionary_Entry_Value_Type_List:
+			_XML_IO_Handler_WriteList( self, name, value, source, parent );
+			break;
+		default:
+			_XML_IO_Handler_WriteParameter( self, name, value, source, parent );
+	}
+}
+
+
+/** write a list and its children to a file. Depending on the encoding set by either XML_IO_Handler_SetListEncoding(),
+ * or stored on the list dictionary entry value itself, will  write out as XML, ascii or binary.*/
+static void _XML_IO_Handler_WriteList( XML_IO_Handler* self, char* name, Dictionary_Entry_Value* list,
+					char* source, xmlNodePtr parent)
+{
+	xmlNodePtr newNode;
+
+	Journal_DPrintf( Journal_Register( Debug_Type, XML_IO_Handler_Type ), "_XML_IO_Handler_WriteList called.\n" );
+
+	/* create and add list child node */
+	newNode = xmlNewTextChild( parent, self->currNameSpace, LIST_TAG, NULL );
+	if ( NULL != name ) {
+		xmlNewProp( newNode, (xmlChar*) NAME_ATTR, (xmlChar*) name );
+	}	
+	if ( NULL != source ) {
+		xmlNewProp( newNode, (xmlChar*) SOURCEFILE_ATTR, (xmlChar*) source );
+	}	
+	
+	/* write list elements*/
+	switch (self->listEncoding) {
+		case PerList:
+			switch (Dictionary_Entry_Value_GetEncoding( list )) {
+				case Default:
+					_XML_IO_Handler_WriteListElementsXML( self, list, newNode );
+					break;
+				
+				case RawASCII:
+					_XML_IO_Handler_WriteListElementsRawASCII( self, list, newNode );
+					break;
+				
+				case RawBinary:
+					_XML_IO_Handler_WriteListElementsRawBinary( self, list, newNode );
+					break;
+				
+				default:
+					Journal_Printf( 
+						Journal_Register( Info_Type, XML_IO_Handler_Type ),
+						"Warning - while writing file %s: list %s in dictionary specifies "
+						"unknown encoding format. Writing as XML.\n", 
+						self->resource, 
+						name );
+					_XML_IO_Handler_WriteListElementsXML( self, list, newNode );
+			}
+			break;
+		
+		case AllXML:
+			_XML_IO_Handler_WriteListElementsXML( self, list, newNode );
+			break;
+		
+		case AllRawASCII:
+			if ( True == _XML_IO_Handler_CheckListCanBePrintedRaw( list ) ) {
+				_XML_IO_Handler_WriteListElementsRawASCII( self, list, newNode );
+			}
+			else {
+				_XML_IO_Handler_WriteListElementsXML( self, list, newNode );
+			}
+			break;
+		
+		case AllRawBinary:
+			if ( True == _XML_IO_Handler_CheckListCanBePrintedRaw( list ) ) {
+				_XML_IO_Handler_WriteListElementsRawBinary( self, list, newNode );
+			}	
+			else {
+				_XML_IO_Handler_WriteListElementsXML( self, list, newNode );
+			}
+			break;
+		
+		default:
+			assert(0);
+	}
+}
+
+
+/** write the list elements to a file as XML. */
+static void _XML_IO_Handler_WriteListElementsXML( XML_IO_Handler* self, Dictionary_Entry_Value* list,
+	xmlNodePtr listNode )
+{
+	Dictionary_Entry_Value* currChildValue = Dictionary_Entry_Value_GetFirstElement( list );
+	
+	while ( NULL != currChildValue ) {
+		_XML_IO_Handler_WriteNode( self, NULL, currChildValue, NULL, listNode );
+		currChildValue = currChildValue->next; 
+	}
+}
+
+
+/** Checks if a lsit can be printed in raw (ascii or binary) format. Raw data lists should only contain structs,
+ * where each member is a 'simple' type (i.e. not a struct or list) */
+static Bool _XML_IO_Handler_CheckListCanBePrintedRaw( Dictionary_Entry_Value* list ) {
+	Dictionary_Entry_Value* firstElement = Dictionary_Entry_Value_GetFirstElement( list );
+	
+	if ( Dictionary_Entry_Value_Type_Struct != firstElement->type ) {
+		return False;
+	}
+	else {
+		Dictionary_Index i;
+		for (i=0; i < firstElement->as.typeStruct->count; i++)
+		{
+			int type = firstElement->as.typeStruct->entryPtr[i]->value->type;
+			if ( (Dictionary_Entry_Value_Type_Struct == type) || (Dictionary_Entry_Value_Type_List == type) )
+			{
+				return False;
+			}
+		}
+		
+		return True;
+	}
+}
+
+
+/** write the elements of a list from a dictionary value to raw ASCII. */
+static void _XML_IO_Handler_WriteListElementsRawASCII( XML_IO_Handler* self, Dictionary_Entry_Value* list, xmlNodePtr listNode ) {
+	Dictionary_Entry_Value* currMemberValue;
+	Dictionary_Entry_Value* currChildStruct;
+	xmlBufferPtr bufferPtr;
+	char* charBuffer = Memory_Alloc_Array_Unnamed( char, ASCII_LIST_STRING_BUFFER_SIZE );
+	unsigned int writtenElementSize;
+	xmlNodePtr rawDataNode;
+	Index i;
+	
+	/* check contents suitable for raw printing, error if not. */
+	if ( False == _XML_IO_Handler_CheckListCanBePrintedRaw( list ) )
+	{
+		Journal_Printf(
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Warning- while writing file %s: _XML_IO_Handler_WriteListElementsRaw called on "
+			"list %s not suited for Raw writing. Printing as plain XML instead.\n", 
+			self->resource,
+			xmlGetProp( listNode, NAME_ATTR ) );
+		_XML_IO_Handler_WriteListElementsXML( self, list, listNode );
+		return;
+	}
+	
+	/* create and add raw data child node from buffer */
+	rawDataNode = xmlNewTextChild( listNode, self->currNameSpace, ASCII_DATA_TAG, NULL );
+	
+	currChildStruct = Dictionary_Entry_Value_GetFirstElement( list );	
+	
+	/* allocate the memory buffer */
+	writtenElementSize = _XML_IO_Handler_GetWrittenElementSize( self, currChildStruct );
+	if ( NULL == (bufferPtr = xmlBufferCreateSize( writtenElementSize ) ) )
+	{
+		Journal_Printf( 
+			Journal_Register( Info_Type, XML_IO_Handler_Type ),
+			"Error- while writing file %s: out of memory allocating raw data buffer. "
+			"Returning.\n", 
+			self->resource );
+		return;
+	}
+	
+	xmlNodeAddContentLen( rawDataNode, (xmlChar*) "\n", 1 ); 
+	
+	/* write the column definition tags */
+	for (i=0; i < Dictionary_Entry_Value_GetCount( currChildStruct ); i++) {
+		xmlNodePtr currColumnDefNode;
+		char* typeString = self->TYPE_KEYWORDS[ (int) currChildStruct->as.typeStruct->entryPtr[i]->value->type ];
+		
+		xmlNodeAddContentLen( rawDataNode, (xmlChar*) "\n", 1 ); 
+		currColumnDefNode = xmlNewTextChild( rawDataNode, self->currNameSpace, COLUMN_DEFINITION_TAG, NULL );
+		xmlNewProp( currColumnDefNode, NAME_ATTR, (xmlChar*) currChildStruct->as.typeStruct->entryPtr[i]->key );
+		xmlNewProp( currColumnDefNode, TYPE_ATTR, (xmlChar*) typeString );
+	}
+	
+	/* will cause trouble if func generalised for binary */
+	xmlBufferWriteChar( bufferPtr, "\n\n" );
+	
+	/* write element contents to buffer, then node */
+	while ( NULL != currChildStruct ) {
+		/* print the elements into the buffer */
+		for (i=0; i < currChildStruct->as.typeStruct->count; i++) {
+			if ( (currMemberValue = currChildStruct->as.typeStruct->entryPtr[i]->value) )
+			{
+				_XML_IO_Handler_WriteMemberAscii( self, currMemberValue, charBuffer );
+				xmlBufferWriteChar( bufferPtr, charBuffer );
+			}
+		}
+		
+		/* will cause trouble if func generalised for binary */
+		xmlBufferWriteChar( bufferPtr, "\n" );
+		
+		xmlNodeAddContentLen( rawDataNode, xmlBufferContent( bufferPtr ), xmlBufferLength( bufferPtr ) ); 
+		xmlBufferEmpty( bufferPtr );
+		currChildStruct = currChildStruct->next; 
+	}
+	
+	/* will cause trouble if func generalised for binary */
+	xmlNodeAddContentLen( rawDataNode, (xmlChar*) "\n", 1 ); 
+	xmlBufferFree( bufferPtr );
+	Memory_Free( charBuffer );
+}
+
+
+/** calculates how big a text buffer needs to be created to hold the data from a dictionary list entry as raw ascii. */
+static unsigned int _XML_IO_Handler_GetWrittenElementSize( XML_IO_Handler* self, Dictionary_Entry_Value* listElement ) {
+	unsigned int i;	
+	int totalChars = 0; 
+	
+	for ( i=0; i < Dictionary_Entry_Value_GetCount( listElement ); i++ )
+	{
+		totalChars += self->writingFieldWidth[ (int) listElement->as.typeStruct->entryPtr[i]->value->type ];
+	}
+	
+	totalChars++;	/* for the newline character */	
+	
+	return totalChars;
+}
+
+
+/** writes a signle member data element. NOTE: would have been nice just to use Dictionary_Entry_Value_Print(), but
+ * then wouldn't have been able to use custom formatting. */
+static void _XML_IO_Handler_WriteMemberAscii( XML_IO_Handler* self, Dictionary_Entry_Value* member, char* buffer ) {
+	unsigned int fw = self->writingFieldWidth[ (int) member->type ];
+	unsigned int precision = self->writingPrecision[ (int) member->type ];
+	char*        string = NULL;
+	Stream*      errorStr = NULL;
+	
+	switch (member->type) {
+		case Dictionary_Entry_Value_Type_String:
+			string = Dictionary_Entry_Value_AsString( member );
+			errorStr = Journal_Register( Error_Type, self->type );
+			Journal_Firewall( ( strlen(string) + 1 < ASCII_LIST_STRING_BUFFER_SIZE ), errorStr,
+				"Error- in %s: asked to write out a string of length %d, but this "
+				"is greater than the max string buffer length of %d. Exiting.\n",
+				__func__, strlen(string), ASCII_LIST_STRING_BUFFER_SIZE );
+			sprintf(buffer, "%*s ", fw, Dictionary_Entry_Value_AsString( member ) );
+			break;
+		
+		case Dictionary_Entry_Value_Type_Double:
+			sprintf(buffer, "%*.*g", fw, precision, Dictionary_Entry_Value_AsDouble( member ) );	
+			break;
+		
+		case Dictionary_Entry_Value_Type_UnsignedInt:
+			sprintf(buffer, "%*.*g", fw, precision, Dictionary_Entry_Value_AsDouble( member ) );	
+			break;
+		
+		case Dictionary_Entry_Value_Type_Int:
+			sprintf(buffer, "%*.*g", fw, precision, Dictionary_Entry_Value_AsDouble( member ) );	
+			break;
+		
+		case Dictionary_Entry_Value_Type_Bool:
+			sprintf(buffer, "%*.*s", fw, precision, Dictionary_Entry_Value_AsString( member ) );	
+			break;
+		
+		default:
+			Journal_Printf( 
+				Journal_Register( Info_Type, XML_IO_Handler_Type ),
+				"Warning- while writing to file %s: unknown type of Dictionary_Entry_Value. "
+				"Outputting as a string.\n", 
+				self->resource );
+			errorStr = Journal_Register( Error_Type, self->type );
+			Journal_Firewall( ( strlen(string) + 1 < ASCII_LIST_STRING_BUFFER_SIZE ), errorStr,
+				"Error- in %s: asked to write out a string of length %d, but this "
+				"is greater than the max string buffer length of %d. Exiting.\n",
+				__func__, strlen(string), ASCII_LIST_STRING_BUFFER_SIZE );
+			sprintf(buffer, "%*.*s ", self->writingFieldWidth[Dictionary_Entry_Value_Type_String],
+				self->writingPrecision[Dictionary_Entry_Value_Type_String],
+				Dictionary_Entry_Value_AsString( member ) );
+			break;
+	}
+}
+
+
+/** TODO: write the lsit elements as raw binary. */
+static void _XML_IO_Handler_WriteListElementsRawBinary( XML_IO_Handler* self, Dictionary_Entry_Value* list, xmlNodePtr listNode ) {
+	Journal_Printf( 
+		Journal_Register( Info_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_WriteListElementsRawBinary stub called." );
+}
+
+
+/** writes a struct dictionary entry to the file */
+static void _XML_IO_Handler_WriteStruct( XML_IO_Handler* self, char* name, Dictionary_Entry_Value* value, 
+						char* source, xmlNodePtr parent)
+{	
+	xmlNodePtr newNode;
+
+	Journal_DPrintf( 
+		Journal_Register( Debug_Type, XML_IO_Handler_Type ),
+		"_XML_IO_Handler_WriteStruct called.\n" );
+
+	/* create and add struct child node*/
+	newNode = xmlNewTextChild( parent, self->currNameSpace, STRUCT_TAG, NULL );
+	if ( NULL != name ) {
+		xmlNewProp( newNode, (xmlChar*) NAME_ATTR, (xmlChar*) name );
+	}
+	if ( NULL != source ) {
+		xmlNewProp( newNode, (xmlChar*) SOURCEFILE_ATTR, (xmlChar*) source );
+	}
+	
+	_XML_IO_Handler_WriteDictionary( self, value->as.typeStruct, newNode ); 
+}
+
+
+/** writes a single dictionary parameter to file. */
+static void _XML_IO_Handler_WriteParameter( XML_IO_Handler* self, char* name, Dictionary_Entry_Value* value,
+						char* source, xmlNodePtr parent)
+{
+	xmlNodePtr newNode;
+
+	Journal_DPrintfL( 
+		Journal_Register( Info_Type, XML_IO_Handler_Type ), 2,
+		"_XML_IO_Handler_WriteParameter called.\n");
+
+	/* add new child to parent, with correct value*/
+	newNode = xmlNewTextChild( parent, self->currNameSpace, PARAM_TAG, (xmlChar*) Dictionary_Entry_Value_AsString( value ) );
+	if ( NULL != name ) {
+		xmlNewProp( newNode, (xmlChar*) NAME_ATTR, (xmlChar*) name );
+	}
+	if ( NULL != source ) {
+		xmlNewProp( newNode, (xmlChar*) SOURCEFILE_ATTR, (xmlChar*) source );
+	}
+	
+	if ( True == self->writeExplicitTypes )
+	{
+		xmlNewProp( newNode, TYPE_ATTR, (xmlChar*) self->TYPE_KEYWORDS[(int) value->type] );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+*/
+/** \file
+**  Role:
+**	Allows input/output from XML files. \see IO_Handler.h
+**
+** Assumptions:
+**	Maximum string length in raw data output is limited to 100 characters. I
+**	could make this dynamic, however I can't foresee a need for it.
+**
+** Comments:
+**	TODO: include files of different types (eg nastran etc)
+**	TODO: validation (more a dictionary feature actually)
+**
+** $Id: XML_IO_Handler.h 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_IO_XML_IO_Handler_h__
+#define __Base_IO_XML_IO_Handler_h__
+	
+	#include <libxml/tree.h>
+	
+	/** enum to determine type of list format */
+	typedef enum { PerList, AllRawASCII, AllRawBinary, AllXML } ListEncoding;
+	
+	/** textual class name */
+	extern const Type XML_IO_Handler_Type;
+	
+	/* additional class function ptr typedefs */
+	typedef Bool (XML_IO_Handler_WriteEntryToFileFunction) ( void* xml_io_handler, const char* filename,
+		Dictionary_Entry_Key name, Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	typedef void (XML_IO_Handler_SetListEncodingFunction) ( void* xml_io_handler, ListEncoding listEncoding );
+	typedef void (XML_IO_Handler_SetWritingPrecisionFunction) ( void* xml_io_handler, int dictionaryEntryType,
+		int value );
+	typedef void (XML_IO_Handler_SetWriteExplicitTypesFunction) ( void* xml_io_handler, Bool writeExplicitTypes);
+	
+	/** Data struct to store namespaces */
+	typedef struct NameSpaceInfo {
+		char* location;
+		char* version;
+		struct NameSpaceInfo* next;
+	} NameSpaceInfo;	
+	
+	/** \def __XML_IO_Handler See XML_IO_Handler */
+	#define __XML_IO_Handler  \
+		/* General info */ \
+		__IO_Handler \
+		\
+		/* Virtual info */ \
+		XML_IO_Handler_WriteEntryToFileFunction*	_writeEntryToFile; \
+		XML_IO_Handler_SetListEncodingFunction*		_setListEncoding; \
+		XML_IO_Handler_SetWritingPrecisionFunction*	_setWritingPrecision; \
+		XML_IO_Handler_SetWriteExplicitTypesFunction*	_setWriteExplicitTypes; \
+		\
+		/* XML_IO_Handler */ \
+		NameSpaceInfo*					nameSpacesList;	/**< Allows chain of namespaces. */\
+		xmlDocPtr					currDoc; \
+		xmlNsPtr					currNameSpace; \
+		int						tokeniserCalls; \
+		ListEncoding					listEncoding; \
+		Stg_ObjectList*					typeKeywords; /**< Maps strings to dictionary types. */\
+		char*						TYPE_KEYWORDS[Dictionary_Entry_Value_Num_Types + 1]; \
+		unsigned int					writingPrecision[Dictionary_Entry_Value_Num_Types + 1]; \
+		unsigned int					writingFieldWidth[Dictionary_Entry_Value_Num_Types + 1]; \
+		unsigned int					WRITING_FIELD_EXTRAS[Dictionary_Entry_Value_Num_Types + 1]; \
+		Bool						writeExplicitTypes; \
+		\
+		unsigned					searchPathsSize; \
+		char**						searchPaths;
+	struct _XML_IO_Handler { __XML_IO_Handler };
+	
+	
+	/** Create a new XML_IO_Handler and initialise */
+	XML_IO_Handler* XML_IO_Handler_New( void );
+	
+	/** Creation implementation */
+	XML_IO_Handler* _XML_IO_Handler_New( 
+		SizeT						_sizeOfSelf,
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		IO_Handler_ReadAllFromFileFunction*		_readAllFromFile,
+		IO_Handler_ReadAllFromFileForceSourceFunction*		_readAllFromFileForceSource,
+		IO_Handler_ReadAllFromBufferFunction*		_readAllFromBuffer,
+		IO_Handler_WriteAllToFileFunction*		_writeAllToFile,
+		XML_IO_Handler_WriteEntryToFileFunction*	_writeEntryToFile,
+		XML_IO_Handler_SetListEncodingFunction*		_setListEncoding,
+		XML_IO_Handler_SetWritingPrecisionFunction*	_setWritingPrecision,
+		XML_IO_Handler_SetWriteExplicitTypesFunction*	_setWriteExplicitTypes );
+	
+	/** Initialise a XML_IO_Handler construct */
+	void XML_IO_Handler_Init( XML_IO_Handler* self );
+	
+	/** Initialisation implementation */
+	void _XML_IO_Handler_Init( XML_IO_Handler* self );
+	
+	/** Stg_Class_Delete instantiation */
+	extern void _XML_IO_Handler_Delete( void* xml_io_handler ); 
+	
+	/** Print instantiation */
+	extern void _XML_IO_Handler_Print( void* xml_io_handler, Stream* stream );
+	
+	/** set the list encoding that controls whether lists are stored as xml,
+	 ** ascii or binary */
+	extern void XML_IO_Handler_SetListEncoding( void* xml_io_handler, ListEncoding listEncoding );
+	extern void _XML_IO_Handler_SetListEncoding( void* xml_io_handler, ListEncoding listEncoding );
+	
+	extern void XML_IO_Handler_SetWriteExplicitTypes( void* xml_io_handler, Bool writeExplicitTypes );
+	extern void _XML_IO_Handler_SetWriteExplicitTypes( void* xml_io_handler, Bool writeExplicitTypes );
+	
+	/** set the precision with which each dictionary type is output */
+	extern void XML_IO_Handler_SetWritingPrecision( void* xml_io_handler, int dictionaryEntryType, int value );
+	extern void _XML_IO_Handler_SetWritingPrecision( void* xml_io_handler, int dictionaryEntryType, int value );
+	
+	void _XML_IO_Handler_AddNameSpace( void* io_handler, char* location, char* version );
+	
+	extern Bool _XML_IO_Handler_CheckNameSpace( XML_IO_Handler* self, xmlNodePtr curNode );
+	
+	/** Read a dictionary entry of a given name from file */
+	extern Bool _XML_IO_Handler_ReadAllFromFile( void* xml_io_handler, const char* filename, Dictionary* dictionary );
+	
+	/** Read a dictionary entry of a given name from file and force the source file info to be added to the
+	 *  Dictionary_Entry */
+	extern Bool _XML_IO_Handler_ReadAllFromFileForceSource(void* xml_io_handler, const char* filename, Dictionary* dictionary);
+
+	/** Read a dictionary entry of a given name from buffer */
+	extern Bool _XML_IO_Handler_ReadAllFromBuffer( void* xml_io_handler, const char* buffer, Dictionary* dictionary );
+	
+	/** Write a given dictionary entry to file */
+	/** Write a given dictionary entry to file */
+	/* TODO: option to choose between overwrite / update ? */
+	extern Bool _XML_IO_Handler_WriteAllToFile(void* xml_io_handler, const char* filename, Dictionary* dictionary );
+	
+	/* TODO: option to choose between overwrite / update ? */
+	extern Bool XML_IO_Handler_WriteEntryToFile( void* xml_io_handler, const char* filename, Dictionary_Entry_Key name, 
+		Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	
+	extern Bool _XML_IO_Handler_WriteEntryToFile( void* xml_io_handler, const char* filename, Dictionary_Entry_Key name,
+		Dictionary_Entry_Value* value, Dictionary_Entry_Source source );
+	
+#endif /* __Base_IO_XML_IO_Handler_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3850 2006-10-12 07:26:48Z 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
+
+include Makefile.def
+
+subdirs = mpirecord
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML
+
+PROJ_CFLAGS += -DSTG_MODULE_PATH=\"${STG_MODULE_PATH}\"
+
+include ${PROJ_ROOT}/Makefile.vmake
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3048 2005-06-22 07:43:27Z 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
+
+ifdef USE_MPIRECORD
+	subdirs = profile
+else
+	subdirs = none
+endif
+
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3048 2005-06-22 07:43:27Z 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
+
+includes = StGermain/Base/IO/mpirecord
+
+HDRS = mpimessaging.h 
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/mpimessaging.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/mpimessaging.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/mpimessaging.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,36 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: petsccompat.h 3403 2006-01-13 08:33:58Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __MPIMESSAGING_H__
+#define __MPIMESSAGING_H__
+
+/* does nothing */
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3048 2005-06-22 07:43:27Z 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
+
+includes = StGermain/Base/IO/mpirecord
+
+HDRS = mpimessaging.h stgmessaging.h
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/mpimessaging.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/mpimessaging.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/mpimessaging.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: petsccompat.h 3403 2006-01-13 08:33:58Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __MPIMESSAGING_H__
+#define __MPIMESSAGING_H__
+
+#include "mpi.h"
+#include "stgmessaging.h"
+
+#define MPI_Send( buf, count, datatype, dest, tag, comm ) \
+	Stg_MPI_Send( __FILE__, __LINE__, buf, count, datatype, dest, tag, comm )
+
+#define MPI_Ssend( buf, count, datatype, dest, tag, comm ) \
+	Stg_MPI_Ssend( __FILE__, __LINE__, buf, count, datatype, dest, tag, comm )
+
+#define MPI_Isend( buf, count, datatype, dest, tag, comm, request ) \
+	Stg_MPI_Isend( __FILE__, __LINE__, buf, count, datatype, dest, tag, comm, request )
+
+#define MPI_Recv( buf, count, datatype, source, tag, comm, status ) \
+	Stg_MPI_Recv( __FILE__, __LINE__, buf, count, datatype, source, tag, comm, status )
+
+#define MPI_Irecv( buf, count, datatype, source, tag, comm, request ) \
+	Stg_MPI_Irecv( __FILE__, __LINE__, buf, count, datatype, source, tag, comm, request )
+
+#define MPI_Reduce( sendbuf, recvbuf, count, datatype, op, root, comm ) \
+	Stg_MPI_Reduce( __FILE__, __LINE__, sendbuf, recvbuf, count, datatype, op, root, comm )
+
+#define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm ) \
+	Stg_MPI_Allreduce( __FILE__, __LINE__, sendbuf, recvbuf, count, datatype, op, comm )
+
+#define MPI_Gather( sendbuf, sendcnt, sendtype, recvbuf, recvcount, recvtype, root, comm ) \
+	Stg_MPI_Gather( __FILE__, __LINE__, sendbuf, sendcnt, sendtype, recvbuf, recvcount, recvtype, root, comm )
+
+#define MPI_Allgather( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm ) \
+	Stg_MPI_Allgather( __FILE__, __LINE__, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm )
+       
+#define MPI_Wait( request, status ) \
+	Stg_MPI_Wait( __FILE__, __LINE__, request, status )
+
+#define MPI_Test( request, flag, status ) \
+	Stg_MPI_Test( __FILE__, __LINE__, request, flag, status )
+
+
+
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/stgmessaging.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/stgmessaging.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/stgmessaging.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: petsccompat.h 3403 2006-01-13 08:33:58Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __STGMESSAGING_H__
+#define __STGMESSAGING_H__
+
+
+int Stg_MPI_Send( char* file, int line, void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm );
+int Stg_MPI_Ssend( char* file, int line, void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm );
+int Stg_MPI_Isend( char* file, int line, void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request );
+int Stg_MPI_Recv( char* file, int line, void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status );
+int Stg_MPI_Irecv( char* file, int line, void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request );
+int Stg_MPI_Reduce ( char* file, int line, void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm );
+int Stg_MPI_Allreduce ( char* file, int line, void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm );
+int Stg_MPI_Gather ( char* file, int line, void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm );
+int Stg_MPI_Allgather ( char* file, int line, void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm );
+
+int Stg_MPI_Wait ( char* file, int line, MPI_Request *request, MPI_Status *status );
+int Stg_MPI_Test ( char* file, int line, MPI_Request *request, int *flag, MPI_Status *status );
+
+       
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: shortcuts.c 3669 2006-07-07 02:52:03Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Dictionary.h"
+#include "Dictionary_Entry_Value.h"
+#include "Dictionary_Entry.h"
+#include "JournalFile.h"
+#include "Stream.h"
+#include "Journal.h"
+
+
+int Dictionary_GetUnsignedInt_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const unsigned int defaultVal ) {
+	return	Dictionary_Entry_Value_AsUnsignedInt( 
+		Dictionary_GetDefault( dictionary, key, 
+		Dictionary_Entry_Value_FromUnsignedInt( defaultVal ) ) );
+}
+
+int Dictionary_GetInt_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const int defaultVal ) {
+	return	Dictionary_Entry_Value_AsInt( 
+		Dictionary_GetDefault( dictionary, key, 
+		Dictionary_Entry_Value_FromInt( defaultVal ) ) );
+}
+double Dictionary_GetDouble_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const double defaultVal ) {
+	return	Dictionary_Entry_Value_AsDouble( 
+		Dictionary_GetDefault( dictionary, key, 
+		Dictionary_Entry_Value_FromDouble( defaultVal ) ) );
+}
+
+float Dictionary_GetFloat_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const float defaultVal ) {
+	return	(float) Dictionary_Entry_Value_AsDouble( 
+		Dictionary_GetDefault( dictionary, key, 
+		Dictionary_Entry_Value_FromDouble( (double)defaultVal ) ) );
+}
+
+
+Bool Dictionary_GetBool_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const Bool defaultVal ) {
+	return	Dictionary_Entry_Value_AsBool( 
+		Dictionary_GetDefault( dictionary, key, 
+		Dictionary_Entry_Value_FromBool( defaultVal ) ) );
+}
+
+char* Dictionary_GetString_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	return	Dictionary_Entry_Value_AsString( 
+		Dictionary_GetDefault( dictionary, key, 
+		Dictionary_Entry_Value_FromString( defaultVal ) ) );
+}
+
+char* Dictionary_GetString_WithPrintfDefault( Dictionary* dictionary, Dictionary_Entry_Key key, char* format, ... ) {
+	char*     returnString;
+	char*     defaultVal;
+	va_list   ap;
+	
+	va_start( ap, format );
+
+	/* Create Default String from format arguments */
+	Stg_vasprintf( &defaultVal, format, ap );
+
+	/* Read Dictionary */
+	returnString = Dictionary_GetString_WithDefault( dictionary, key, defaultVal );
+
+	/* Clean up */
+	Memory_Free( defaultVal );
+	va_end( ap );
+
+	return returnString;
+}
+Bool Stream_RedirectFile_WithPrependedPath( Stream* stream, char* prependedPath, char* filename ) {
+	Bool result;
+
+	/* Check to make sure output path is emtpy */ 
+	if ( Stg_StringIsEmpty( prependedPath ) )
+		result = Stream_RedirectFile( stream, filename );
+	else {
+		char* prependedFilename;
+
+		Stg_asprintf( &prependedFilename, "%s/%s", prependedPath, filename );
+		result = Stream_RedirectFile( stream, prependedFilename );
+		Memory_Free( prependedFilename );
+	}
+
+	return result;
+}
+Bool Stream_AppendFile_WithPrependedPath( Stream* stream, char* prependedPath, char* filename ) {
+	Bool result;
+
+	/* Check to make sure output path is emtpy */ 
+	if ( Stg_StringIsEmpty( prependedPath ) )
+		result = Stream_AppendFile( stream, filename );
+	else {
+		char* prependedFilename;
+
+		Stg_asprintf( &prependedFilename, "%s/%s", prependedPath, filename );
+		result = Stream_AppendFile( stream, prependedFilename );
+		Memory_Free( prependedFilename );
+	}
+
+	return result;
+}
+void Journal_PrintString_WithLength( Stream* stream, char* string, int length ) {
+	size_t      stringLength = strlen( string ) ;
+	char*       breakInMiddle = "...";
+	size_t      lengthOfBreak = strlen( breakInMiddle );
+
+	if ( length <= 0 )
+		return;
+	/* If length given is exeedingly short - then print initial */
+	else if ( lengthOfBreak >= length ) {
+		Journal_Printf( stream, "%c", string[0] );
+		Journal_Write( stream, breakInMiddle, sizeof( char ), length - 1 );
+	}
+	/* Shorten String if nessesary */
+	else if ( stringLength > length ) {
+		int charsBeforeBreak = (int) ((float)length * 0.5) - 1;
+		int charsAfterBreak  = length - charsBeforeBreak - lengthOfBreak;
+
+		/* Print first half of string */
+		Journal_Write( stream, string, sizeof( char ), charsBeforeBreak );
+
+		/* Print '...' In middle */
+		Journal_Printf( stream, breakInMiddle );
+
+		/* Print end of string */
+		Journal_Write( stream, &string[ stringLength - charsAfterBreak ], sizeof( char ), charsAfterBreak );
+		return;
+	}
+	else {
+		Index       char_I;
+
+		/* If string is shorter than allowed length - then add empty space */
+		for ( char_I = 0 ; char_I < length - stringLength ; char_I++ )
+			Journal_Printf( stream, " " );
+		
+		/* Print the complete string */
+		Journal_Printf( stream, string );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**	Shortcuts to functions in the IO module
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** $Id: shortcuts.h 3669 2006-07-07 02:52:03Z PatrickSunter $
+**
+**/
+
+#ifndef __Base_IO_shortcuts_h__
+#define __Base_IO_shortcuts_h__
+
+	#define Printf			Journal_Printf
+	#define Write			Journal_Write
+	#define Dump			Journal_Dump
+
+	/* Macros to get things out of the dictionary more easily */
+	#define Dictionary_GetUnsignedInt( dictionary, key ) \
+		( Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Get( dictionary, key ) ) )
+	
+	#define Dictionary_GetInt( dictionary, key ) \
+		( Dictionary_Entry_Value_AsInt( Dictionary_Get( dictionary, key ) ) )
+	
+	#define Dictionary_GetDouble( dictionary, key ) \
+		( Dictionary_Entry_Value_AsDouble( Dictionary_Get( dictionary, key ) ) )
+
+	#define Dictionary_GetFloat( dictionary, key ) \
+		( Dictionary_Entry_Value_AsFloat( Dictionary_Get( dictionary, key ) ) )
+
+	#define Dictionary_GetUnsignedLong( dictionary, key ) \
+		( Dictionary_Entry_Value_AsUnsignedLong( Dictionary_Get( dictionary, key ) ) )
+
+	#define Dictionary_GetString( dictionary, key ) \
+		( Dictionary_Entry_Value_AsString( Dictionary_Get( dictionary, key ) ) )
+
+	#define Dictionary_GetBool( dictionary, key ) \
+		( Dictionary_Entry_Value_AsBool( Dictionary_Get( dictionary, key ) ) )
+
+	#define Dictionary_GetDictionary( dictionary, key ) \
+		( Dictionary_Entry_Value_AsDictionary( Dictionary_Get( dictionary, key ) ) )
+
+	/* shortcuts to easily get a value from the dictionary, using a default
+	if not found, and converting it to the correct type */
+
+	int	Dictionary_GetUnsignedInt_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const unsigned int defaultVal );
+	
+	int	Dictionary_GetInt_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const int defaultVal );
+
+	double	Dictionary_GetDouble_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const double defaultVal );
+	
+	float	Dictionary_GetFloat_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const float defaultVal );
+	
+	Bool	Dictionary_GetBool_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const Bool defaultVal );
+
+	char*	Dictionary_GetString_WithDefault( Dictionary* dictionary, Dictionary_Entry_Key key, const char* const defaultVal );
+
+	/** Wrapper to Dictionary_GetString_WithDefault which creates a string using sprintf */
+	char* Dictionary_GetString_WithPrintfDefault( Dictionary* dictionary, Dictionary_Entry_Key key, char* format, ... ) ;
+
+
+	/** Redirects file and puts 'prependedPath' in front of the filename 
+	 * e.g. Stream_RedirectFile_WithPrependedPath( stream, "./output", "file.dat" ) redirects to './output/file.dat' */
+	Bool Stream_RedirectFile_WithPrependedPath( Stream* stream, char* prependedPath, char* filename ) ;
+	Bool Stream_AppendFile_WithPrependedPath( Stream* stream, char* prependedPath, char* filename ) ;
+
+	/** Prints a string with a certain maximum length - it truncates it in the middle with an ellipsis if it is too long */
+	void Journal_PrintString_WithLength( Stream* stream, char* string, int length ) ;
+		
+	/* shortcuts for printing names and values */
+	#define Journal_PrintValue( stream, value ) 	\
+		Journal_Printf( stream, #value " = %.5g\n", (double) (value) )
+
+	#define Journal_PrintDouble        Journal_PrintValue
+	#define Journal_PrintFloat         Journal_PrintValue
+	#define Journal_PrintUnsignedInt   Journal_PrintValue
+	#define Journal_PrintInt           Journal_PrintValue
+
+	#define Journal_PrintChar( stream, value ) 	\
+		Journal_Printf( stream, #value " = %c\n", (char) value )
+	#define Journal_PrintBool( stream, value ) 	\
+		Journal_Printf( stream, #value " = %s\n", (value) ? "True" : "False" )
+	#define Journal_PrintPointer( stream, value ) 	\
+		Journal_Printf( stream, #value " = (ptr)%p\n", value )
+	#define Journal_PrintString( stream, value ) 	\
+		Journal_Printf( stream, #value " = %s\n", value )
+	#define Journal_PrintArray( stream, array, count ) \
+		do {	\
+			Index journalPrintArray_array_I;                          \
+			Journal_Printf( stream, #array " = { " ); \
+			for ( journalPrintArray_array_I = 0 ; journalPrintArray_array_I < count - 1 ; journalPrintArray_array_I++ ) \
+				Journal_Printf( stream, "%.5g, ", (double)array[ journalPrintArray_array_I ] ); \
+			Journal_Printf( stream, "%.5g }\n", (double)array[ journalPrintArray_array_I ] ); \
+		} while(0)
+
+#endif /* __Base_IO_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/stgmessaging.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/stgmessaging.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/stgmessaging.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: petsccompat.h 3403 2006-01-13 08:33:58Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "mpi.h"
+
+#include "Base/Foundation/Foundation.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Dictionary.h"
+#include "Dictionary_Entry.h"
+#include "Dictionary_Entry_Value.h"
+#include "Journal.h"
+#include "JournalFile.h"
+#include "CFile.h"
+#include "Stream.h"
+#include "CStream.h"
+#include "MPIStream.h"
+#include "StreamFormatter.h"
+
+
+int Stg_Messaging_GetRank( MPI_Comm comm ) {
+	int rank;
+	MPI_Comm_rank( comm, &rank );
+	return rank;
+}
+
+int Stg_MPI_Send( char* file, int line, void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Send: tag = %d, count = %d, datatype = %d, dest = %d\n", file, line, Stg_Messaging_GetRank( comm ), tag, count, datatype, dest );
+	return MPI_Send( buf, count, datatype, dest, tag, comm );
+}
+
+int Stg_MPI_Ssend( char* file, int line, void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Ssend: tag = %d, count = %d, datatype = %d, dest = %d\n", file, line, Stg_Messaging_GetRank( comm ), tag, count, datatype, dest );
+	return MPI_Ssend( buf, count, datatype, dest, tag, comm );
+}
+int Stg_MPI_Isend( char* file, int line, void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Isend: tag = %d, count = %d, datatype = %d, dest = %d\n", file, line, Stg_Messaging_GetRank( comm ), tag, count, datatype, dest );
+	return MPI_Isend( buf, count, datatype, dest, tag, comm, request );
+}
+int Stg_MPI_Recv( char* file, int line, void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Recv: tag = %d, count = %d, datatype = %d, source = %d\n", file, line, Stg_Messaging_GetRank( comm ), tag, count, datatype, source );
+	return MPI_Recv( buf, count, datatype, source, tag, comm, status );
+}
+int Stg_MPI_Irecv( char* file, int line, void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Irecv: tag = %d, count = %d, datatype = %d, source = %d\n", file, line, Stg_Messaging_GetRank( comm ), tag, count, datatype, source );
+	return MPI_Irecv( buf, count, datatype, source, tag, comm, request );
+}
+int Stg_MPI_Reduce ( char* file, int line, void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Reduce: count = %d, datatype = %d\n", file, line, Stg_Messaging_GetRank( comm ), count, datatype );
+	return MPI_Reduce( sendbuf, recvbuf, count, datatype, op, root, comm );
+}
+int Stg_MPI_Allreduce ( char* file, int line, void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Allreduce: count = %d, datatype = %d\n", file, line, Stg_Messaging_GetRank( comm ), count, datatype );
+	return MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm );
+}
+int Stg_MPI_Gather ( char* file, int line, void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Gather: count = %d, datatype = %d\n", file, line, Stg_Messaging_GetRank( comm ), sendcnt, sendtype );
+	return MPI_Gather( sendbuf, sendcnt, sendtype, recvbuf, recvcount, recvtype, root, comm );
+}
+int Stg_MPI_Allgather ( char* file, int line, void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Allgather: count = %d, datatype = %d\n", file, line, Stg_Messaging_GetRank( comm ), sendcount, sendtype );
+	return MPI_Allgather( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm );
+
+}
+
+int Stg_MPI_Wait ( char* file, int line, MPI_Request *request, MPI_Status *status ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	int result =  MPI_Wait( request, status );
+	Journal_Printf( stream, "%s %d, rank %d MPI_Wait:",
+		file, line, Stg_Messaging_GetRank( MPI_COMM_WORLD ) );
+	if ( MPI_STATUS_IGNORE != (status) ) {
+		Journal_Printf( stream, " tag = %d, source = %d", status->MPI_TAG, status->MPI_SOURCE );
+	}
+	Journal_Printf( stream, "\n" );
+	return result;
+}
+
+
+int Stg_MPI_Test ( char* file, int line, MPI_Request *request, int *flag, MPI_Status *status ) {
+	Stream* stream = Journal_Register( Info_Type, "mpi" );
+	int result = MPI_Test( request, flag, status );
+	if ( *flag ) {
+		Journal_Printf( stream, "%s %d, rank %d MPI_Test: result = %d",
+			file, line, Stg_Messaging_GetRank( MPI_COMM_WORLD ), result );
+		if ( MPI_STATUS_IGNORE != (status) ) {
+			Journal_Printf( stream, ", tag = %d, source = %d", status->MPI_TAG, status->MPI_SOURCE );
+		}
+		Journal_Printf( stream, "\n" );
+	}
+
+	return result;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,88 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**/
+
+#ifndef __Base_IO_types_h__
+#define __Base_IO_types_h__
+	
+	/* Dicitonary internal types */
+	typedef char*				Dictionary_Entry_Key;
+	typedef char*				Dictionary_Entry_Source;
+	typedef enum {
+		Dictionary_Entry_Value_Type_String,
+		Dictionary_Entry_Value_Type_Double,
+		Dictionary_Entry_Value_Type_UnsignedInt,
+		Dictionary_Entry_Value_Type_Bool,
+		Dictionary_Entry_Value_Type_VoidPtr, /* proposed... not in use yet */
+		Dictionary_Entry_Value_Type_Struct,
+		Dictionary_Entry_Value_Type_List,
+		Dictionary_Entry_Value_Type_Int,
+		Dictionary_Entry_Value_Type_UnsignedLong,
+		Dictionary_Entry_Value_Num_Types
+	} Dictionary_Entry_Value_Type;
+
+	/* Base types/classes */
+	typedef struct _Dictionary_Entry_Value_Validator	Dictionary_Entry_Value_Validator;
+	typedef struct _Dictionary_Entry_Value_List		Dictionary_Entry_Value_List;
+	typedef struct _Dictionary_Entry_Value			Dictionary_Entry_Value;
+	typedef struct _Dictionary_Entry			Dictionary_Entry;
+	typedef struct _Dictionary				Dictionary;
+	
+	typedef struct _IO_Handler	IO_Handler;
+	typedef struct _XML_IO_Handler	XML_IO_Handler;
+
+	typedef unsigned int	JournalLevel;
+
+	/* Journal class*/
+	typedef struct JournalFile		JournalFile;
+	typedef struct CFile			CFile;
+	typedef struct MPIFile			MPIFile;
+	typedef struct JournalTypedStream	JournalTypedStream;
+	typedef struct Journal			Journal;	
+	typedef struct Stream			Stream;
+	typedef struct CStream			CStream;
+	typedef struct MPIStream		MPIStream;
+	
+	typedef struct StreamFormatter		StreamFormatter;
+	typedef struct StreamFormatter_Buffer	StreamFormatter_Buffer;
+	typedef struct LineFormatter		LineFormatter;
+	typedef struct RankFormatter		RankFormatter;
+	typedef struct IndentFormatter		IndentFormatter;
+
+#endif /* __Base_IO_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testLibStGermainDynamic.c 2742 2005-03-05 05:33:43Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "BTreeWrappers.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+BTree* BTree_New( 
+	BTree_compareFunction*		compareFunction,
+	BTree_dataCopyFunction*		dataCopyFunction,
+	BTree_dataDeleteFunction*	dataDeleteFunction,
+	BTree_dataPrintFunction*	dataPrintFunction,
+	BTreeProperty				property)
+{
+	return NULL;
+}
+
+int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT sizeOfData)
+{
+	return 1;
+}
+	
+void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction )
+{
+	
+}
+	
+BTreeNode *BTree_FindNode( BTree *tree, void *data )
+{
+	return NULL;	
+}
+	
+void BTree_DeleteNode( BTree *tree, BTreeNode *z )
+{
+	
+}
+		
+void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args )
+{
+	
+}
+	
+void* BTree_GetData( BTreeNode *node )
+{
+	return NULL;	
+}
+
+void BTree_Delete( void* tree ) {
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,92 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053 Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* SPECIAL NOTE.
+ *
+ * This is a dummy header file, listing a subset of function prototypes in the BTree container class.
+ * The file has been constructed to allow the Memory Module to use the Container, which resides in the Container directory.
+ * Container is invisible to the Foundation directory.
+ *
+ * On compilation these types and functions are processed as undefined symbols, and will not be linked until
+ * the Base directory is compiled into archive (.a) and dynamic libraries (.so).
+ *
+ * For this reason, BTreeDummy.h must NOT be included in Foundation.h or Makefile.def as this will export it to become a part of
+ * the StGermain framework.
+ */
+
+#ifndef __Base_Foundation_BTreeWrappers_h__
+#define __Base_Foundation_BTreeWrappers_h__
+
+	typedef enum BTreeProperty_t{
+		BTREE_ALLOW_DUPLICATES,
+		BTREE_NO_DUPLICATES
+	}
+	BTreeProperty;
+
+	typedef struct Stream Stream;
+	typedef int (BTree_compareFunction)		(void*, void*);
+	typedef void (BTree_dataCopyFunction)		(void**, void*, SizeT);
+	typedef void (BTree_dataDeleteFunction)		(void*);
+	typedef void (BTree_dataPrintFunction)		(void*, Stream*);
+	typedef void (BTree_parseFunction)		(void*, void*);
+	
+	/* Hack linear search implementation for the wrapper to allow tests to run */
+	typedef struct {
+		void* data;
+	} BTreeNode;
+	typedef struct {
+		int			numItems;
+		int			currentItem;
+		BTreeNode**		items;
+		BTree_compareFunction*	compareFunction;
+	} BTree;
+
+	extern const Type BTree_Type;
+
+	BTree* BTree_New( 
+		BTree_compareFunction*		compareFunction,
+		BTree_dataCopyFunction*		dataCopyFunction,
+		BTree_dataDeleteFunction*	dataDeleteFunction,
+		BTree_dataPrintFunction*	dataPrintFunction,
+		BTreeProperty				property);
+
+	int BTree_InsertNode ( BTree *tree, void *newNodeData, SizeT );
+		
+	void BTree_SetCompareFunction ( BTree *tree, BTree_compareFunction *compareFunction );
+	
+	BTreeNode *BTree_FindNode( BTree *tree, void *data );
+	
+	void BTree_DeleteNode( BTree *tree, BTreeNode *z );
+		
+	void BTree_ParseTree( BTree *tree, BTree_parseFunction *parseFunction, void *args );
+	
+	void* BTree_GetData( BTreeNode *node );
+
+	void BTree_Delete( void* tree );
+	
+#endif

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_TEST_OBJS = ${addprefix ${BLD_TMPDIR}/test-${def_tst}/, ${addsuffix .o, ${basename ${def_test_support_srcs}}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+.SECONDARY: ${PROJ_TEST_OBJS}
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${BLD_TMPDIR}/test-${def_tst}/%.o: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${BLD_TMPDIR}/test-${def_tst}; then ${MKDIR} ${BLD_TMPDIR}/test-${def_tst}; fi
+	${CC} -c -o $@  $<  $(CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) -I$(PROJ_INCDIR)
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES} ${PROJ_TEST_OBJS}
+	echo PTO=${PROJ_TEST_OBJS}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< ${PROJ_TEST_OBJS} $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseIO
+
+def_test_support_srcs = \
+	BTreeWrappers.c \
+	PtrMapWrappers.c \
+
+def_srcs = \
+	testDictionary.c \
+	testDictionary-merge.c \
+	testDictionary-commandLine.c \
+	testDictionary-shortcuts.c \
+	testIO_Handler-file_sanity.c \
+	testIO_Handler-normal.c \
+	testIO_Handler-raw_data.c \
+	testIO_Handler-duplicate.c \
+	testIO_Handler-commandLine.c \
+	testJournal.c \
+	testJournal1.c \
+	testJournal-Dictionary.c \
+	testJournal-Firewall.c \
+	testRankFormatter.c \
+	testPathUtils.c \
+	testJournalShortcuts.c \
+	testMPIStream.c
+
+def_checks = \
+	testDictionary.0of1.sh \
+	testDictionary-merge.0of1.sh \
+	testDictionary-commandLine.0of1.sh \
+	testDictionary-shortcuts.0of1.sh \
+	testIO_Handler-normal.0of1.sh \
+	testIO_Handler-raw_data.0of1.sh \
+	testIO_Handler-duplicate.0of1.sh \
+	testIO_Handler-commandLine.0of1.sh \
+	testJournal.0of1.sh \
+	testJournal-Dictionary.0of1.sh \
+	testJournal-Firewall.0of1.sh \
+	testRankFormatter.0of2.sh \
+	testJournalShortcuts.0of1.sh \
+	testMPIStream.0of2.sh
+	# Not running since fails in dict reading now cause firewall exits
+	# testIO_Handler-file_sanity.0of1.sh
+
+
+ifeq (true,$(shell if echo $$CFLAGS | grep USE_MEMORY_STATS > /dev/null; then echo true; fi ))
+	def_checks += \
+	testJournal1.0of1.sh
+endif	
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/PtrMapWrappers.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/PtrMapWrappers.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/PtrMapWrappers.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLibStGermainDynamic.c 2742 2005-03-05 05:33:43Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+
+
+struct PtrMap* PtrMap_New( unsigned delta ) {
+	return NULL;
+}
+
+void PtrMap_Append( void* ptrMap, void* key, void* ptr ) {
+}
+
+
+void* PtrMap_Find( void* ptrMap, void* key ) {
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/duplicate.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/duplicate.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/duplicate.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,57 @@
+<?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="FirstStruct">
+		<param name="one" type="string"> param one </param>
+		<param name="two" type="double"> 2.5 </param>
+		<list name="list_one">
+			<param> some text </param>
+			<param> some more text </param>
+		</list>
+		<struct name="struct_one">
+			<param name="inside_one"> True </param>
+			<param name="inside_two"> False </param>
+		</struct>
+	</struct>
+	
+	<struct name="FirstStruct">
+		<param name="three" type="string"> param three </param>
+		<param name="four" type="double"> 5.0 </param>
+	</struct>
+	
+	<struct name="FirstStruct" mergeType="merge">
+		<param name="three" type="string"> param three </param>
+		<param name="four" type="double"> 5.0 </param>
+	</struct>
+	
+	<struct name="FirstStruct" mergeType="merge" childrenMergeType="append">
+		<param name="one" type="string"> new param </param>
+		<param name="two" type="double"> 1.0 </param>
+	</struct>
+	
+	<struct name="FirstStruct" mergeType="merge" childrenMergeType="merge">
+		<list name="list_one">
+			<param> some text two </param>
+			<param> some more text two </param>
+		</list>
+		<struct name="struct_one" childrenMergeType="merge">
+			<param name="inside_one" mergeType="append"> ??? </param>
+			<param name="inside_two"> !!! </param>
+			<param name="inside_three"> ### </param>
+		</struct>
+	</struct>
+	
+	<list name="root_list">
+		<param> new param </param>
+		<param> 1.0 </param>
+	</list>
+	
+	<list name="root_list" mergeType="merge">
+		<param> new param two </param>
+		<param> 2.0 </param>
+	</list>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/empty.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/empty.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/empty.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- A StGermain input file -->
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/invalid.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/invalid.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/invalid.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- A StGermain input file -->
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/IO_Handler/Jun2003">
+
+</param>	
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/journal.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/journal.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/journal.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+<?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">
+
+<!--
+	<param name="journal">off</param>
+-->
+
+	<param name="journal.info.test2">off</param>
+	<param name="journal.debug.test1">on</param>
+	<param name="journal.dump.test1">on</param>
+
+	<param name="journal.info.test1.new1">on</param>
+	<param name="journal.info.test1.new2">off</param>
+	
+	<param name="journal-level.info.test1.new1">3</param>
+	
+	<param name="journal-file.newtype">data/testJournal-out1.txt</param>
+	<param name="journal-file.newtype.other">data/testJournal-out2.txt</param>
+
+	<param name="journal-rank.info.propertiestest1">0</param>
+	<param name="journal-rank.info.propertiestest2">-22</param>
+	<param name="journal-autoflush.info.propertiestest1">yes</param>
+	
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/mpi-stream.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/mpi-stream.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/mpi-stream.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+<?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">
+
+	<param name="journal-file.MPIStream.one">test-mpi1.txt</param>
+	<param name="journal-mpi-offset.MPIStream.one"> 100 </param>
+	<param name="journal-file.MPIStream.two">test-mpi2.txt</param>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/normal.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/normal.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/normal.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,66 @@
+<?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">
+
+<!--
+	Proposed format: Use tags that represent structure, but not type. Also,
+	tagnames for key objects such as meshes and entrypoints have their name
+	specially set (need a good way of extending this)
+-->
+	<param name="test">a test string</param>
+	<param name="testbool" type="Bool">1</param>
+	<param name="height">7</param>
+
+	<struct name=" geom  ">
+		<param name="x" type="int">-55</param>
+		<param name="y">80</param>
+	</struct>
+	
+	<struct name="emptystruct  ">
+	</struct>
+
+	<struct name="geom">
+		<param name="  x" type="int">79</param>
+		<param name="y">90</param>
+		<struct name="z">
+			<param name="z1">45</param>
+			<param name="z2">47</param>
+		</struct>
+		<param name="a" type="uint"> 93 </param>
+		<param name="b" type="unsigned int"> 78 </param>
+	</struct>
+	
+	<list name="  faults">
+		<param>SanAndreas</param>
+		<param>Delta</param>
+	</list>
+	
+	<list name="emptylist">
+	</list>
+
+	<param name="emptyparam"></param>
+	<param name="1space"> </param>
+	<param name="allspaces">  	  </param>
+	<param name="leadingspace">		the main bit</param>
+	<param name="trailingspace">the main bit  	
+	</param>
+	<param name="leadingtrailingspace">		the main bit 		</param>
+
+	<include> empty.xml</include>
+	
+	<searchPath>./subdir/another/</searchPath>
+	<include>empty2.xml</include>
+	
+	<param type="path" name="someBCs"> someBCs.in </param>
+
+<!-- Do we want to have some special tagnames for key features? -->
+<!--
+<entrypoint name="postsolve">
+	<LibraryName></LibraryName>
+	<Function></Function>
+</entrypoint>	
+-->
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/rawdata.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/rawdata.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/rawdata.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+<?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="bcs">
+		<asciidata>
+
+1 3 6
+2 9 14
+
+		</asciidata>
+	</list>
+
+	<!-- with types -->
+	<list name="boundary_conditions2">
+		<asciidata>
+			<columnDefinition name="side" type="string"/>
+			<columnDefinition name="xval" type="int"/>
+			<columnDefinition name="yval" type="int"/>
+			<columnDefinition name="zval" type="int"/>
+			<columnDefinition name="active" type="bool"/>
+top 4 5 8 True
+bottom 3 5 9 False
+left 9 3 4 1
+
+		</asciidata>
+	</list>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/empty2.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/empty2.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/empty2.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- A StGermain input file -->
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<param type="path" name="someVCs"> someVCs.in </param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_namespace.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_namespace.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_namespace.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!-- A StGermain input file -->
+
+<StGermainData xmlns="http://www.wrong.org/StGermain/IO_Handler/Jun2003">
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_root_node.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_root_node.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_root_node.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!-- A StGermain input file -->
+<Wrong xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+</Wrong>

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+TEST_SUPPORT_SRCS = ${def_test_support_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.dictionaryOutput.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.dictionaryOutput.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.dictionaryOutput.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,30 @@
+Stg_Class (ptr): 0x8056c60
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0xb7f64d57
+	_print (func ptr): 0xb7f64dc4
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 10
+	delta: 5
+	count: 7
+	entryPtr[0-7]: {
+		output-dir: ""
+		Ra: "1.0e4.0"
+		foo: 
+			bar: "5"
+			bot: "7"
+		vpac: 
+			csd: 
+				steve: "cool"
+		sports: "hockey", "tennis"
+		sles: 
+			name: "pressure"
+			solver: "mg", 
+			name: "temperature"
+			solver: "direct"
+		some: 
+			crazy: 
+				shit: "here"
+			}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testDictionary-commandLine -param=hey --option --output-dir= --Ra=1.0e4.0 --foo.bar=5 --vpac.csd.steve=cool --foo.bot=7 --sports[]=hockey --sports[]=chess --sports[1]=tennis --sles[].name=pressure --sles[].name=temperature --sles[0].solver=mg --sles[1].solver=direct --some.crazy[].shit=here" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the IO handler
+**
+** $Id: testDictionary-commandLine.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] ) {
+	Dictionary* dictionary;
+	Stream* stream;
+	
+	MPI_Init( &argc, &argv );
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	stream = Journal_Register (Info_Type, "myStream");
+	Stream_RedirectFile( stream, "dictionaryOutput.dat" );
+
+	dictionary = Dictionary_New();
+
+	Dictionary_ReadAllParamFromCommandLine( dictionary, argc, argv );
+	Print( dictionary, stream );
+	
+	Stg_Class_Delete( dictionary );
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,60 @@
+Stg_Class (ptr): 0x8068380
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804adcb
+	_print (func ptr): 0x804ae38
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 10
+	delta: 5
+	count: 2
+	entryPtr[0-2]: {
+		one: 
+			inside: 
+				name: "bill"
+				value: 1
+			list_one: "bottom", "top"
+		one: 
+			inside: 
+				new_name: "frank"
+				value: 2
+			list_one: "left", "right"
+			}
+Stg_Class (ptr): 0x8068380
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804adcb
+	_print (func ptr): 0x804ae38
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 10
+	delta: 5
+	count: 1
+	entryPtr[0-1]: {
+		one: 
+			inside: 
+				name: "bill"
+				value: 2
+				new_name: "frank"
+			list_one: "bottom", "top", "left", "right"
+			}
+Stg_Class (ptr): 0x8068380
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804adcb
+	_print (func ptr): 0x804ae38
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 10
+	delta: 5
+	count: 1
+	entryPtr[0-1]: {
+		one: 
+			inside: 
+				new_name: "frank"
+				value: 2
+			list_one: "left", "right"
+			}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testDictionary-merge " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the dictionary functionality
+**
+** $Id: testDictionary-merge.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+int main( int argc, char* argv[] ) {
+	
+	Stream*				stream = NULL;
+	Dictionary*			dictionary;
+	Dictionary_Entry_Value*		tmpVal0;
+	Dictionary_Entry_Value*		tmpVal1; 
+	
+	MPI_Init( &argc, &argv );
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	stream = Journal_Register (Info_Type, "myStream");
+
+	dictionary = Dictionary_New();
+
+	tmpVal0 = Dictionary_Entry_Value_NewStruct();
+	tmpVal1 = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( tmpVal1, "name", Dictionary_Entry_Value_FromString( "bill" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal1, "value", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "inside", tmpVal1 );
+	tmpVal1 = Dictionary_Entry_Value_NewList();
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "bottom" ) );
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "top" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "list_one", tmpVal1 );
+	Dictionary_Add( dictionary, "one", tmpVal0 );
+	
+	tmpVal0 = Dictionary_Entry_Value_NewStruct();
+	tmpVal1 = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( tmpVal1, "new_name", Dictionary_Entry_Value_FromString( "frank" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal1, "value", Dictionary_Entry_Value_FromDouble( 2.0f ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "inside", tmpVal1 );
+	tmpVal1 = Dictionary_Entry_Value_NewList();
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "left" ) );
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "right" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "list_one", tmpVal1 );
+	Dictionary_AddMerge( dictionary, "one", tmpVal0, Dictionary_MergeType_Append );
+	
+	Print( dictionary, stream );
+	Stg_Class_Delete( dictionary );
+	
+	dictionary = Dictionary_New();
+	
+	tmpVal0 = Dictionary_Entry_Value_NewStruct();
+	tmpVal1 = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( tmpVal1, "name", Dictionary_Entry_Value_FromString( "bill" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal1, "value", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "inside", tmpVal1 );
+	tmpVal1 = Dictionary_Entry_Value_NewList();
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "bottom" ) );
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "top" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "list_one", tmpVal1 );
+	Dictionary_Add( dictionary, "one", tmpVal0 );
+	
+	tmpVal0 = Dictionary_Entry_Value_NewStruct();
+	tmpVal1 = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( tmpVal1, "new_name", Dictionary_Entry_Value_FromString( "frank" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal1, "value", Dictionary_Entry_Value_FromDouble( 2.0f ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "inside", tmpVal1 );
+	tmpVal1 = Dictionary_Entry_Value_NewList();
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "left" ) );
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "right" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "list_one", tmpVal1 );
+	Dictionary_AddMerge( dictionary, "one", tmpVal0, Dictionary_MergeType_Merge );
+	
+	Print( dictionary, stream );
+	Stg_Class_Delete( dictionary );
+	
+	dictionary = Dictionary_New();
+	
+	tmpVal0 = Dictionary_Entry_Value_NewStruct();
+	tmpVal1 = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( tmpVal1, "name", Dictionary_Entry_Value_FromString( "bill" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal1, "value", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "inside", tmpVal1 );
+	tmpVal1 = Dictionary_Entry_Value_NewList();
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "bottom" ) );
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "top" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "list_one", tmpVal1 );
+	Dictionary_Add( dictionary, "one", tmpVal0 );
+	
+	tmpVal0 = Dictionary_Entry_Value_NewStruct();
+	tmpVal1 = Dictionary_Entry_Value_NewStruct();
+	Dictionary_Entry_Value_AddMember( tmpVal1, "new_name", Dictionary_Entry_Value_FromString( "frank" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal1, "value", Dictionary_Entry_Value_FromDouble( 2.0f ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "inside", tmpVal1 );
+	tmpVal1 = Dictionary_Entry_Value_NewList();
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "left" ) );
+	Dictionary_Entry_Value_AddElement( tmpVal1, Dictionary_Entry_Value_FromString( "right" ) );
+	Dictionary_Entry_Value_AddMember( tmpVal0, "list_one", tmpVal1 );
+	Dictionary_AddMerge( dictionary, "one", tmpVal0, Dictionary_MergeType_Replace );
+	
+	Print( dictionary, stream );
+	Stg_Class_Delete( dictionary );
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,59 @@
+Stg_Class (ptr): 0x8068300
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804ad07
+	_print (func ptr): 0x804ad74
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 10
+	delta: 5
+	count: 6
+	entryPtr[0-6]: {
+		test_double: 45.567
+		test_float: 5.5
+		test_uint: 5
+		test_int: -5
+		test_bool: 1
+		test_string: "String"
+			}
+Dictionary_GetDouble_WithDefault( dictionary, "test_double", 2.8 ) = 45.567
+Dictionary_GetDouble_WithDefault( dictionary, "test_doubleDefault", 2.8 ) = 2.8
+Dictionary_GetDouble_WithDefault( dictionary, "test_float", 2.2 ) = 5.5
+Dictionary_GetDouble_WithDefault( dictionary, "test_floatDefault", 2.2 ) = 2.2
+Dictionary_GetUnsignedInt_WithDefault( dictionary, "test_uint", 8 ) = 5
+Dictionary_GetUnsignedInt_WithDefault( dictionary, "test_uintDefault", 8 ) = 8
+Dictionary_GetInt_WithDefault( dictionary, "test_int", -8 ) = -5
+Dictionary_GetInt_WithDefault( dictionary, "test_intDefault", -8 ) = -8
+Dictionary_GetBool_WithDefault( dictionary, "test_bool", False ) = True
+Dictionary_GetBool_WithDefault( dictionary, "test_boolDefault", False ) = False
+Dictionary_GetString_WithDefault( dictionary, "test_string", "StringDefault" ) = String
+Dictionary_GetString_WithDefault( dictionary, "test_stringDefault", "StringDefault" ) = StringDefault
+Dictionary_GetString_WithPrintfDefault( dictionary, "test_stringDefault", "StringDefault%d", 2 ) = StringDefault
+Dictionary_GetString_WithPrintfDefault( dictionary, "test_stringDefault2", "StringDefault%d", 2 ) = StringDefault2
+Stg_Class (ptr): 0x8068300
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804ad07
+	_print (func ptr): 0x804ad74
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 15
+	delta: 5
+	count: 13
+	entryPtr[0-13]: {
+		test_double: 45.567
+		test_float: 5.5
+		test_uint: 5
+		test_int: -5
+		test_bool: 1
+		test_string: "String"
+		test_doubleDefault: 2.8
+		test_floatDefault: 2.2
+		test_uintDefault: 8
+		test_intDefault: -8
+		test_boolDefault: false
+		test_stringDefault: "StringDefault"
+		test_stringDefault2: "StringDefault2"
+			}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+OUTPUT_DIR=./output
+export OUTPUT_DIR
+
+runAndHandleSystemTest "testDictionary-shortcuts " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the dictionary functionality
+**
+** $Id: testDictionary-shortcuts.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Dictionary*			dictionary = Dictionary_New();
+		Stream*             outputStream = Journal_Register( Info_Type, "OutputStream" );
+
+		Stream_RedirectFile( outputStream, "output/output.dat" );
+
+		Dictionary_Add( dictionary, "test_double",
+			Dictionary_Entry_Value_FromDouble( 45.567 ) );
+		Dictionary_Add( dictionary, "test_float",
+			Dictionary_Entry_Value_FromDouble( 5.5 ) );
+		Dictionary_Add( dictionary, "test_uint",
+			Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+		Dictionary_Add( dictionary, "test_int",
+			Dictionary_Entry_Value_FromInt( -5 ) );
+		Dictionary_Add( dictionary, "test_bool",
+			Dictionary_Entry_Value_FromUnsignedInt( True ) );
+		Dictionary_Add( dictionary, "test_string",
+			Dictionary_Entry_Value_FromString( "String" ) );
+		
+		Stg_Class_Print( dictionary, outputStream );
+
+		Journal_PrintValue( outputStream, Dictionary_GetDouble_WithDefault( dictionary, "test_double", 2.8 ));
+		Journal_PrintValue( outputStream, Dictionary_GetDouble_WithDefault( dictionary, "test_doubleDefault", 2.8 ));
+		
+		Journal_PrintValue( outputStream, Dictionary_GetDouble_WithDefault( dictionary, "test_float", 2.2 ));
+		Journal_PrintValue( outputStream, Dictionary_GetDouble_WithDefault( dictionary, "test_floatDefault", 2.2 ));
+		
+		Journal_PrintValue( outputStream, Dictionary_GetUnsignedInt_WithDefault( dictionary, "test_uint", 8 ));
+		Journal_PrintValue( outputStream, Dictionary_GetUnsignedInt_WithDefault( dictionary, "test_uintDefault", 8 ));
+		
+		Journal_PrintValue( outputStream, Dictionary_GetInt_WithDefault( dictionary, "test_int", -8 ));
+		Journal_PrintValue( outputStream, Dictionary_GetInt_WithDefault( dictionary, "test_intDefault", -8 ));
+		
+		Journal_PrintBool( outputStream, Dictionary_GetBool_WithDefault( dictionary, "test_bool", False ));
+		Journal_PrintBool( outputStream, Dictionary_GetBool_WithDefault( dictionary, "test_boolDefault", False ));
+		
+		Journal_PrintString( outputStream, Dictionary_GetString_WithDefault( dictionary, "test_string", "StringDefault" ));
+		Journal_PrintString( outputStream, Dictionary_GetString_WithDefault( dictionary, "test_stringDefault", "StringDefault" ));
+		
+		Journal_Printf( outputStream, "Dictionary_GetString_WithPrintfDefault( dictionary, \"test_stringDefault\", \"StringDefault%%d\", 2 ) = %s\n", Dictionary_GetString_WithPrintfDefault( dictionary, "test_stringDefault", "StringDefault%d", 2 ));
+		Journal_Printf( outputStream, "Dictionary_GetString_WithPrintfDefault( dictionary, \"test_stringDefault2\", \"StringDefault%%d\", 2 ) = %s\n", Dictionary_GetString_WithPrintfDefault( dictionary, "test_stringDefault2", "StringDefault%d", 2 ));
+
+		Stg_Class_Print( dictionary, outputStream );
+		Stg_Class_Delete( dictionary );
+	}
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+Dictionary:
+	size: 10
+	delta: 5
+	count: 8
+	entryPtr[0-8]: {
+		test_cstring: "hello"
+		test_double: 45.567
+		test_uint: 5
+		test_int: -5
+		test_unsignedlong: 52342423
+		test_bool: 1
+		test_struct: 	
+	height: 37
+	anisotropic: true
+	person: "Patrick"
+	geom: 
+		startx: 45
+		starty: 60
+		startz: 70
+		test_list: 37, 65, 32, 42, 92
+	}
+getting out dictionary from a struct:
+yvalue = 60
+changing first 2 list elements:
+list now contains:
+34.3, 38.9, 32, 42, 92
+turning the starty value into a list using add element:
+test_struct now contains:
+	height: 37
+	anisotropic: true
+	person: "Patrick"
+	geom: 
+		startx: 45
+		starty: 60, -45
+		startz: 70

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testDictionary " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the dictionary functionality
+**
+** $Id: testDictionary.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	stream = Journal_Register( InfoStream_Type, Dictionary_Type );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Dictionary*			dictionary = Dictionary_New();
+		Dictionary_Entry_Value*		testStruct; 
+		Dictionary_Entry_Value*		testStruct2; 
+		Dictionary_Entry_Value*		testList; 
+		Dictionary_Entry_Value*		yValue;
+		Dictionary_Entry_Value*		currValue;
+		Dictionary_Index		index;
+		
+		Dictionary_Add( dictionary, "test_cstring",
+			Dictionary_Entry_Value_FromString( "hello" ) );
+		Dictionary_Add( dictionary, "test_double",
+			Dictionary_Entry_Value_FromDouble( 45.567 ) );
+		Dictionary_Add( dictionary, "test_uint",
+			Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+		Dictionary_Add( dictionary, "test_int",
+			Dictionary_Entry_Value_FromInt( -5 ) );
+		Dictionary_Add( dictionary, "test_unsignedlong",
+			Dictionary_Entry_Value_FromUnsignedLong( 52342423 ) );
+		Dictionary_Add( dictionary, "test_bool",
+			Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+
+		/* Adding members to a struct */
+		testStruct = Dictionary_Entry_Value_NewStruct();
+		Dictionary_Entry_Value_AddMember( testStruct, "height",
+			Dictionary_Entry_Value_FromDouble( 37 ) );
+		Dictionary_Entry_Value_AddMember( testStruct, "anisotropic",
+			Dictionary_Entry_Value_FromBool( True ) );
+		Dictionary_Entry_Value_AddMember( testStruct, "person",
+			Dictionary_Entry_Value_FromString( "Patrick" ) );
+		Dictionary_Add( dictionary, "test_struct", testStruct );
+		/* note the Dictionary_Add could be done before setting up the struct elements,
+		 * but this would be less efficient.
+		 */
+
+		/* adding a list */
+		testList = Dictionary_Entry_Value_NewList();
+		Dictionary_Add( dictionary, "test_list", testList );
+		Dictionary_Entry_Value_AddElement( testList, Dictionary_Entry_Value_FromDouble(37) );
+		Dictionary_Entry_Value_AddElement( testList, Dictionary_Entry_Value_FromDouble(65) );
+		Dictionary_Entry_Value_AddElement( testList, Dictionary_Entry_Value_FromDouble(32) );
+		Dictionary_Entry_Value_AddElement( testList, Dictionary_Entry_Value_FromDouble(42) );
+		Dictionary_Entry_Value_AddElement( testList, Dictionary_Entry_Value_FromDouble(92) );
+
+
+		/* Adding a struct within a struct */
+		testStruct2 = Dictionary_Entry_Value_NewStruct();
+		Dictionary_Entry_Value_AddMember( testStruct, "geom",
+			testStruct2 );
+
+		Dictionary_Entry_Value_AddMember( testStruct2, "startx",
+			Dictionary_Entry_Value_FromUnsignedInt( 45 ) );
+		Dictionary_Entry_Value_AddMember( testStruct2, "starty",
+			Dictionary_Entry_Value_FromUnsignedInt( 60 ) );
+		Dictionary_Entry_Value_AddMember( testStruct2, "startz",
+			Dictionary_Entry_Value_FromUnsignedInt( 70 ) );
+
+		/* print dict contents to check */
+
+		printf( "Dictionary:\n" );
+		printf( "\tsize: %u\n", dictionary->size );
+		printf( "\tdelta: %u\n", dictionary->delta );
+		printf( "\tcount: %u\n", dictionary->count );
+		printf( "\tentryPtr[0-%u]: {\n", dictionary->count );
+		for( index = 0; index < dictionary->count; index++ ) {
+			
+			printf( "\t\t" );
+			Dictionary_Entry_Print( dictionary->entryPtr[index], stream ); 
+			printf( "\n" );
+		}
+		printf( "\t}\n" );
+
+		printf( "getting out dictionary from a struct:\nyvalue = ");
+		yValue = Dictionary_Entry_Value_GetMember(
+			Dictionary_Entry_Value_GetMember(testStruct, "geom"), "starty");
+		Dictionary_Entry_Value_Print( yValue, stream );
+		printf("\n");
+
+		printf("changing first 2 list elements:\n");
+		/* getting dictionary out of a list */
+		currValue = Dictionary_Entry_Value_GetFirstElement( testList );
+		/* do something to this value */
+		Dictionary_Entry_Value_SetFromDouble( currValue, 34.3 );
+		currValue = currValue->next;
+		/* do something to this value */
+		Dictionary_Entry_Value_SetFromDouble( currValue, 38.9 );
+		printf("list now contains:\n");
+		Dictionary_Entry_Value_Print( testList, stream );
+		printf("\n");
+
+		printf("turning the starty value into a list using add element:\n");
+		Dictionary_Entry_Value_AddElement( yValue, Dictionary_Entry_Value_FromDouble(-45) );
+
+		printf("test_struct now contains:");
+		Dictionary_Entry_Value_Print( testStruct, stream );
+		printf("\n");
+
+		Stg_Class_Delete( dictionary );
+	}
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+Stg_Class (ptr): 0x806f938
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804b537
+	_print (func ptr): 0x804b5a4
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 15
+	delta: 5
+	count: 13
+	entryPtr[0-13]: {
+		FirstStruct: 
+			three: "param three"
+			four: 5
+			three: "param three"
+			four: 5
+			one: "new param"
+			two: 1
+			list_one: "some text two", "some more text two"
+			struct_one: 
+				inside_one: "???"
+				inside_two: "!!!"
+				inside_three: "###"
+		root_list: "new param", "1.0", "new param two", "2.0"
+		journal.info.test2: "off"
+		journal.debug.test1: "on"
+		journal.dump.test1: "on"
+		journal.info.test1.new1: "on"
+		journal.info.test1.new2: "off"
+		journal-level.info.test1.new1: "3"
+		journal-file.newtype: "data/testJournal-out1.txt"
+		journal-file.newtype.other: "data/testJournal-out2.txt"
+		journal-rank.info.propertiestest1: "0"
+		journal-rank.info.propertiestest2: "-22"
+		journal-autoflush.info.propertiestest1: "yes"
+			}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIO_Handler-commandLine data/duplicate.xml data/journal.xml fake command.line Args" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the IO handler
+**
+** $Id: testIO_Handler-commandLine.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] ) {
+	XML_IO_Handler* io_handler;
+	Dictionary* dictionary;
+	Stream* stream;
+	
+	MPI_Init( &argc, &argv );
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	stream = Journal_Register (Info_Type, "myStream");
+
+	io_handler = XML_IO_Handler_New();
+	dictionary = Dictionary_New();
+
+	IO_Handler_ReadAllFilesFromCommandLine( io_handler, argc, argv, dictionary );
+	Stg_Class_Print( dictionary, stream );
+	
+	Stg_Class_Delete( io_handler );
+	Stg_Class_Delete( dictionary );
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+Stg_Class (ptr): 0x806f938
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: dictionary
+	_delete (func ptr): 0x804b533
+	_print (func ptr): 0x804b5a0
+	_copy (func ptr): (nil)
+Dictionary:
+	size: 10
+	delta: 5
+	count: 2
+	entryPtr[0-2]: {
+		FirstStruct: 
+			three: "param three"
+			four: 5
+			three: "param three"
+			four: 5
+			one: "new param"
+			two: 1
+			list_one: "some text two", "some more text two"
+			struct_one: 
+				inside_one: "???"
+				inside_two: "!!!"
+				inside_three: "###"
+		root_list: "new param", "1.0", "new param two", "2.0"
+			}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIO_Handler-duplicate " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the IO handler
+**
+** $Id: testIO_Handler-duplicate.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+int main( int argc, char* argv[] ) {
+	XML_IO_Handler* io_handler;
+	Dictionary* dictionary;
+	Stream* stream;
+	
+	MPI_Init( &argc, &argv );
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	stream = Journal_Register (Info_Type, "myStream");
+
+	io_handler = XML_IO_Handler_New();
+	dictionary = Dictionary_New();
+
+	IO_Handler_ReadAllFromFile( io_handler, "data/duplicate.xml", dictionary );
+	Print( dictionary, stream );
+	
+	Stg_Class_Delete( io_handler );
+	Stg_Class_Delete( dictionary );
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+test for nonexistent files:
+Error: File i_dont_exist doesn't exist, not readable, or not valid.
+
+test of existing, but invalid file:
+Error: File data/invalid.xml doesn't exist, not readable, or not valid.
+
+test of valid, but wrong namespace file:
+Error: resource data/wrong_namespace.xml of the wrong type, unknown namespace wasn't expected value of http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003.
+Error: no children nodes in resource data/wrong_namespace.xml. Not parsing.
+
+test of valid, but wrong root node file:
+resource data/wrong_root_node.xml of wrong type, root node =<Wrong>, should be <StGermainData>.
+Not parsing.
+
+test of valid, but empty apart from root node:
+Error: no children nodes in resource data/empty.xml. Not parsing.

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIO_Handler-file_sanity " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the IO handler
+**
+** $Id: testIO_Handler-file_sanity.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		XML_IO_Handler* io_Handler = XML_IO_Handler_New();
+		Dictionary* dictionary = Dictionary_New();
+		
+		/* use the base class functions */
+		printf( "test for nonexistent files:\n");
+		IO_Handler_ReadAllFromFile( io_Handler, "i_dont_exist", dictionary );
+
+		printf( "\ntest of existing, but invalid file:\n");
+		IO_Handler_ReadAllFromFile( io_Handler, "data/invalid.xml", dictionary ); 
+
+		printf( "\ntest of valid, but wrong namespace file:\n");
+		IO_Handler_ReadAllFromFile( io_Handler, "data/wrong_namespace.xml", dictionary ); 
+
+		printf( "\ntest of valid, but wrong root node file:\n");
+		IO_Handler_ReadAllFromFile( io_Handler, "data/wrong_root_node.xml", dictionary ); 
+
+		printf( "\ntest of valid, but empty apart from root node:\n");
+		IO_Handler_ReadAllFromFile( io_Handler, "data/empty.xml", dictionary ); 
+
+		Stg_Class_Delete( io_Handler );
+		Stg_Class_Delete( dictionary );
+	}
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+
+test of reading normal xml file:
+Error: no children nodes in resource (path)/home/alan/Codes/QuickFix/StGermain/Base/IO/tests/data//empty.xml. Not parsing.
+Warning: Failed to parse file empty.xml from include command.
+
+dictionary now contains:
+Dictionary:
+	size: 15
+	delta: 5
+	count: 15
+	entryPtr[0-15]: {
+		test: "a test string"
+		testbool: true
+		height: "7"
+		geom: 	
+	x: 79
+	y: "90"
+	z: 
+		z1: "45"
+		z2: "47"
+	a: 93
+	b: 78
+		emptystruct: 
+		faults: "SanAndreas", "Delta"
+		emptylist: 
+		emptyparam: ""
+		1space: ""
+		allspaces: ""
+		leadingspace: "the main bit"
+		trailingspace: "the main bit"
+		leadingtrailingspace: "the main bit"
+		someVCs: "./data/./subdir/another//someVCs.in"
+		someBCs: "./data/someBCs.in"
+	}
+
+test of writing normal xml file:
+_XML_IO_Handler_WriteAllToFile called to write to file data/newnormal.xml.
+Writing dictionary contents to file data/newnormal.xml successfully concluded.
+_XML_IO_Handler_WriteAllToFile called to write to file data/newnormalexplicittypes.xml.
+Writing dictionary contents to file data/newnormalexplicittypes.xml successfully concluded.
+
+test of writing single entry:
+_XML_IO_Handler_WriteEntryToFile called to write dictionary entry geom to file data/newgeom.xml.
+Writing dictionary entry geom to file data/newgeom.xml successfully concluded.

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIO_Handler-normal " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the IO handler
+**
+** $Id: testIO_Handler-normal.c 3743 2006-08-03 03:14:38Z KentHumphries $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		XML_IO_Handler*		io_handler = XML_IO_Handler_New();
+		Dictionary*		dictionary = Dictionary_New();
+		Dictionary_Index	index;
+		Stream*			stream = Journal_Register( InfoStream_Type, XML_IO_Handler_Type );
+		
+		/* use the base class functions */
+		printf( "\ntest of reading normal xml file:\n");
+		IO_Handler_ReadAllFromFile( io_handler, "data/normal.xml", dictionary ); 
+
+		printf( "\ndictionary now contains:\n" );
+		printf( "Dictionary:\n" );
+		printf( "\tsize: %u\n", dictionary->size );
+		printf( "\tdelta: %u\n", dictionary->delta );
+		printf( "\tcount: %u\n", dictionary->count );
+		printf( "\tentryPtr[0-%u]: {\n", dictionary->count );
+		for( index = 0; index < dictionary->count; index++ ) {
+			printf( "\t\t" );
+			Dictionary_Entry_Print( dictionary->entryPtr[index], stream ); 
+			printf( "\n" );
+		}
+		printf( "\t}\n" );
+
+		printf( "\ntest of writing normal xml file:\n");
+		IO_Handler_WriteAllToFile( io_handler, "data/newnormal.xml", dictionary );
+		XML_IO_Handler_SetWriteExplicitTypes( io_handler, True );
+		IO_Handler_WriteAllToFile( io_handler, "data/newnormalexplicittypes.xml", dictionary );
+
+		printf( "\ntest of writing single entry:\n");
+		XML_IO_Handler_WriteEntryToFile( io_handler, "data/newgeom.xml", "geom", Dictionary_Get( dictionary, "geom" ), Dictionary_GetSource( dictionary, "geom" ) );
+
+		Stg_Class_Delete( io_handler );
+		Stg_Class_Delete( dictionary );
+	}
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+
+test of raw data file:
+
+dictionary now contains:
+Dictionary:
+	size: 10
+	delta: 5
+	count: 2
+	entryPtr[0-2]: {
+		bcs: 	
+	0: "1"
+	1: "3"
+	2: "6", 
+	0: "2"
+	1: "9"
+	2: "14"
+		boundary_conditions2: 
+	side: "top"
+	xval: 4
+	yval: 5
+	zval: 8
+	active: true, 
+	side: "bottom"
+	xval: 3
+	yval: 5
+	zval: 9
+	active: false, 
+	side: "left"
+	xval: 9
+	yval: 3
+	zval: 4
+	active: true
+	}
+_XML_IO_Handler_WriteAllToFile called to write to file data/newrawdata.xml.
+Writing dictionary contents to file data/newrawdata.xml successfully concluded.

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIO_Handler-raw_data " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the IO handler
+**
+** $Id: testIO_Handler-raw_data.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		XML_IO_Handler*		io_handler = XML_IO_Handler_New();
+		Dictionary*		dictionary = Dictionary_New();
+		Dictionary_Index 	index;
+		Stream*			stream = Journal_Register( InfoStream_Type, XML_IO_Handler_Type );
+		
+		/* use the base class functions */
+		printf( "\ntest of raw data file:\n" );
+		IO_Handler_ReadAllFromFile( io_handler, "data/rawdata.xml", dictionary ); 
+
+		printf( "\ndictionary now contains:\n" );
+		printf( "Dictionary:\n" );
+		printf( "\tsize: %u\n", dictionary->size );
+		printf( "\tdelta: %u\n", dictionary->delta );
+		printf( "\tcount: %u\n", dictionary->count );
+		printf( "\tentryPtr[0-%u]: {\n", dictionary->count );
+		for( index = 0; index < dictionary->count; index++ ) {
+			printf( "\t\t" );
+			Dictionary_Entry_Print( dictionary->entryPtr[index], stream ); 
+			printf( "\n" );
+		}
+		printf( "\t}\n" );
+
+
+		/* Dictionary_Entry_Value_SetEncoding( Dictionary_Get( dictionary, "boundary_conditions2" ), RawASCII ); */
+
+		IO_Handler_WriteAllToFile( io_handler, "data/newrawdata.xml", dictionary );
+		Stg_Class_Delete( io_handler );
+		Stg_Class_Delete( dictionary );
+	}
+
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,111 @@
+infoTest1
+debugTest1
+dumpTest1
+newTest1
+CStream (ptr): 0x805f260
+Stream (ptr): 0x805f260
+Stg_Object (ptr): 0x805f260
+	Stg_Class (ptr): 0x805f260
+		sizeOfSelf: 108
+		_deleteSelf: Yes
+		type: CStream
+		_delete (func ptr): 0xb7f8f199
+		_print (func ptr): 0xb7f8f1c2
+		_copy (func ptr): 0xb7f8e290
+	name: propertiestest1
+	nameAllocationType: NON_GLOBAL
+	_printf (func ptr): 0xb7f8f20e
+	_write (func ptr): 0xb7f8f269
+	_dump (func ptr): 0xb7f8f2ad
+	_setFile (func ptr): 0xb7f8f2b7
+	_copy (func ptr): 0xb7f8e290
+	_enable: 1
+	_level: 1
+	_file (ptr):  0x805c4f8
+	_printingRank: 0
+	_autoFlush: 1
+	_indent: 0
+	_formatters (ptr):  (nil)
+	_formatter count: 0
+	_formatter size: 0
+	_parent (ptr): 0x805c598
+		Stg_ObjectList (ptr):0x805f2d8
+			Stg_Class (ptr): 0x805f2d8
+				sizeOfSelf: 96
+				_deleteSelf: Yes
+				type: Stg_ObjectList
+				_delete (func ptr): 0xb7f2039e
+				_print (func ptr): 0xb7f203d5
+				_copy (func ptr): 0xb7f20677
+			_append(func ptr): 0xb7f212db
+			_prepend(func ptr): 0xb7f213a1
+			_replaceAll(func ptr): 0xb7f21465
+			_replace(func ptr): 0xb7f2151e
+			_insertBefore(func ptr): 0xb7f216bb
+			_insertAfter(func ptr): 0xb7f21876
+			_remove(func ptr): 0xb7f21a33
+			_getIndex(func ptr): 0xb7f21ad9
+			_get(func ptr): 0xb7f21b87
+			_allocMoreMemory(func ptr): 0xb7f21d5a
+			_insertAtIndex(func ptr): 0xb7f21de0
+			_removeByIndex(func ptr): 0xb7f21e5e
+			_deleteAllObjects(func ptr): 0xb7f21cdb
+			_size: 4
+			_delta: 4
+			_noJournalingInCopy: 0
+			count: 0
+			data[0-0]:
+CStream (ptr): 0x805f348
+Stream (ptr): 0x805f348
+Stg_Object (ptr): 0x805f348
+	Stg_Class (ptr): 0x805f348
+		sizeOfSelf: 108
+		_deleteSelf: Yes
+		type: CStream
+		_delete (func ptr): 0xb7f8f199
+		_print (func ptr): 0xb7f8f1c2
+		_copy (func ptr): 0xb7f8e290
+	name: propertiestest2
+	nameAllocationType: NON_GLOBAL
+	_printf (func ptr): 0xb7f8f20e
+	_write (func ptr): 0xb7f8f269
+	_dump (func ptr): 0xb7f8f2ad
+	_setFile (func ptr): 0xb7f8f2b7
+	_copy (func ptr): 0xb7f8e290
+	_enable: 1
+	_level: 1
+	_file (ptr):  0x805c4f8
+	_printingRank: -22
+	_autoFlush: 1
+	_indent: 0
+	_formatters (ptr):  (nil)
+	_formatter count: 0
+	_formatter size: 0
+	_parent (ptr): 0x805c598
+		Stg_ObjectList (ptr):0x805f3c0
+			Stg_Class (ptr): 0x805f3c0
+				sizeOfSelf: 96
+				_deleteSelf: Yes
+				type: Stg_ObjectList
+				_delete (func ptr): 0xb7f2039e
+				_print (func ptr): 0xb7f203d5
+				_copy (func ptr): 0xb7f20677
+			_append(func ptr): 0xb7f212db
+			_prepend(func ptr): 0xb7f213a1
+			_replaceAll(func ptr): 0xb7f21465
+			_replace(func ptr): 0xb7f2151e
+			_insertBefore(func ptr): 0xb7f216bb
+			_insertAfter(func ptr): 0xb7f21876
+			_remove(func ptr): 0xb7f21a33
+			_getIndex(func ptr): 0xb7f21ad9
+			_get(func ptr): 0xb7f21b87
+			_allocMoreMemory(func ptr): 0xb7f21d5a
+			_insertAtIndex(func ptr): 0xb7f21de0
+			_removeByIndex(func ptr): 0xb7f21e5e
+			_deleteAllObjects(func ptr): 0xb7f21cdb
+			_size: 4
+			_delta: 4
+			_noJournalingInCopy: 0
+			count: 0
+			data[0-0]:
+StGermain IO Report - File Flush called 109 times.

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testJournal-Dictionary " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the journal functionality
+**
+** $Id: testJournal-Dictionary.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Stream* infoTest1;
+		Stream* infoTest2;
+		Stream* debugTest1;
+		Stream* debugTest2;
+		Stream* dumpTest1;
+		Stream* dumpTest2;
+		Stream* newTest1;
+		Stream* newTest2;
+		
+		Stream* fileTest1;
+		Stream* fileTest2;
+		
+		Stream* propTest1;
+		Stream* propTest2;
+		
+		Dictionary* dictionary = Dictionary_New();
+		XML_IO_Handler* io_handler = XML_IO_Handler_New();
+
+		infoTest1 = Journal_Register( Info_Type, "test1" );
+		infoTest2 = Journal_Register( Info_Type, "test2" );
+		debugTest1 = Journal_Register( Debug_Type, "test1" );
+		debugTest2 = Journal_Register( Debug_Type, "test2" );
+		dumpTest1 = Journal_Register( Dump_Type, "test1" );
+		dumpTest2 = Journal_Register( Dump_Type, "test2" );
+		
+		IO_Handler_ReadAllFromFile( io_handler, "data/journal.xml", dictionary ); 
+
+		Journal_ReadFromDictionary( dictionary );
+
+		newTest1 = Journal_Register( Info_Type, "test1.new1" );
+		newTest2 = Journal_Register( Info_Type, "test1.new2" );
+		
+		Journal_Printf( infoTest1, "infoTest1\n" );
+		Journal_Printf( infoTest2, "infoTest2\n" );
+		Journal_Printf( debugTest1, "debugTest1\n" );
+		Journal_Printf( debugTest2, "debugTest2\n" );
+		Journal_Printf( dumpTest1, "dumpTest1\n" );
+		Journal_Printf( dumpTest2, "dumpTest2\n" );		
+		Journal_PrintfL( newTest1, 3, "newTest1\n" );
+		Journal_PrintfL( newTest1, 4, "newTest1\n" );
+		Journal_Printf( newTest2, "newTest2\n" );		
+		
+		fileTest1 = Journal_Register( "newtype", "hello" );
+		fileTest2 = Journal_Register( "newtype", "other" );
+		
+		Journal_Printf( fileTest1, "yay!" );
+		Journal_Printf( fileTest2, "double yay!" );
+
+		propTest1 = Journal_Register( Info_Type, "propertiestest1" );
+		propTest2 = Journal_Register( Info_Type, "propertiestest2" );
+
+		Print( propTest1, infoTest1 );
+		Print( propTest2, infoTest1 );
+		
+		Stg_Class_Delete( io_handler );
+		Stg_Class_Delete( dictionary );
+	}
+
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+TEST: Firewall 1
+TEST: Firewall 0

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testJournal-Firewall " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,90 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 the journal functionality
+**
+** $Id: testJournal-Firewall.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Stream* myInfo;
+
+		myInfo = Journal_Register( Info_Type, "MyInfo" );
+		
+		printf( "TEST: Firewall 1\n" );
+		Journal_Firewall( 1, myInfo, "Firewall\n" );
+		
+		printf( "TEST: Firewall 0\n" );
+/* Disable a fail for now as this causes make check to pickup an error even though its intentional. */
+#ifdef STARS_ALIGN
+		Journal_Firewall( 1 == 0, myInfo, "Firewall\n" );
+#endif
+	}
+
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,99 @@
+Blah Blah Blah
+Integer:99
+Float:88.110001
+Char:s
+String:myString
+Double:0.880000
+testing journal.
+1 	
+	2 3 
+4
+
+
+
+
+G'day
+Hello
+0 no indent
+	1 with 1 indent
+		2 with 2 indent
+	2 with 1 indent
+1 with no indent
+2 with no indent
+Journal_Register2 works
+
+Summary of Journal and Stream Status:
+Journal Enabled: True
+Explanation of the following stream status printout:
+The streams are organised hierarchically, as trees, according to the
+purpose of the stream - the key stream types "info", "debug" and "error"
+are at the top, with all other streams as their children.
+We also display the status of each stream: the "Enabled" parameter, which can
+be individually set from input files/command line, determines whether output sent
+to a given stream will print or not. The "Level" parameter determines the level
+of detail that it will output - 1 is the default, 4 means very verbose.
+For full details on Journalling, go to https://csd.vpac.org/twiki/bin/view/Stgermain/Journal
+
+Typed Streams:
+Stream "info":
+	Enabled: True
+	Level: 1
+	Children:
+		Stream "TimeMonitor":
+			Enabled: False
+			Level: 1
+		Stream "MemMonitor":
+			Enabled: False
+			Level: 1
+		Stream "LiveDebug":
+			Enabled: True
+			Level: 1
+		Stream "myComponent":
+			Enabled: True
+			Level: 1
+			Children:
+				Stream "child1":
+					Enabled: True
+					Level: 1
+					Children:
+						Stream "child2":
+							Enabled: True
+							Level: 1
+		Stream "File test":
+			Enabled: True
+			Level: 1
+		Stream "Component":
+			Enabled: True
+			Level: 1
+			Children:
+				Stream "Instance":
+					Enabled: True
+					Level: 1
+		Stream "Journal":
+			Enabled: True
+			Level: 1
+Stream "debug":
+	Enabled: True
+	Level: 1
+	Children:
+		Stream "Context":
+			Enabled: False
+			Level: 1
+		Stream "myDebug":
+			Enabled: True
+			Level: 1
+Stream "dump":
+	Enabled: False
+	Level: 1
+Stream "error":
+	Enabled: True
+	Level: 1
+	Children:
+		Stream "myError":
+			Enabled: True
+			Level: 1
+Stream "MPIStream":
+	Enabled: True
+	Level: 1
+
+StGermain IO Report - File Flush called 85 times.

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testJournal " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the journal functionality
+**
+** $Id: testJournal.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+		/* At the moment, only the BaseIO_Init do some real work(Initialise the
+		singleton of the 3 stream type). The rest of the Init are not doing 
+		anything yet. But, it might in the future and hence it is better 
+		to code it in all the test files */
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Stream* myStream;
+		Stream* errStream;
+		Stream* debugStream;
+
+		Stream* childStream1;
+		Stream* childStream2;
+
+		Stream* fileStream;
+
+		Stream* register2Stream;
+		Stream* register2Test;
+		
+		int integer=99;
+		float floatValue = 88.11f;
+		
+		/* Create a CStream & ErrorStream */
+		myStream = Journal_Register( InfoStream_Type, "myComponent");
+		errStream = Journal_Register( ErrorStream_Type, "myError" );
+		debugStream = Journal_Register( DebugStream_Type, "myDebug" );
+
+		/* use the stream */
+
+		Journal_Printf( myStream, "Blah Blah Blah\n" );
+		Journal_Printf( myStream, "Integer:%d\n", integer );
+		Journal_Printf( myStream, "Float:%f\n", floatValue );
+		Journal_Printf( myStream, "Char:%c\n", 's' );
+		Journal_Printf( myStream, "String:%s\n", "myString" );
+		Journal_Printf( myStream, "Double:%lf\n", 0.88 );
+		/* Don't print to error until check system handles error checks */
+		/*Journal_Printf( errStream, "Error Error Error\n" );*/
+		Journal_Printf( debugStream, "Debugging the test program\n");
+		printf("testing journal.\n" );
+		
+		Journal_Enable_TypedStream( Debug_Type, True );
+		Stream_Enable( debugStream, True );
+		
+		Journal_Printf( debugStream, "1 " );
+		Stream_Indent( debugStream );
+		Journal_Printf( debugStream, "\n2 " );
+		Journal_Printf( debugStream, "3 \n" );
+		Stream_UnIndent( debugStream );
+		Journal_Printf( debugStream, "4" );		
+		Journal_Printf( debugStream, "\n\n\n\n\n" );
+		Journal_Printf( debugStream, "G'day\n" );
+	
+		Journal_PrintfL( myStream, 1, "Hello\n" );
+		Journal_PrintfL( myStream, 2, "Hello\n" );
+
+		childStream1 = Stream_RegisterChild( myStream, "child1" );
+		childStream2 = Stream_RegisterChild( childStream1, "child2" );
+
+		Journal_Printf( myStream, "0 no indent\n" );
+		Stream_IndentBranch( myStream );
+		Journal_Printf( childStream1, "1 with 1 indent\n" );
+		Stream_IndentBranch( myStream );
+		Journal_Printf( childStream2, "2 with 2 indent\n" );
+		Stream_UnIndentBranch( myStream );
+		Journal_Printf( childStream2, "2 with 1 indent\n" );
+		Stream_UnIndentBranch( myStream );
+		Journal_Printf( childStream1, "1 with no indent\n" );
+		Journal_Printf( childStream2, "2 with no indent\n" );
+
+		fileStream = Journal_Register( Info_Type, "File test" );
+		Stream_RedirectFile( fileStream, "data/testRedirect.txt" );
+		Journal_Printf( fileStream, "Hello world\n" );
+
+		register2Stream = Journal_Register2( Info_Type, "Component", "Instance" );
+		register2Test   = Journal_Register(  Info_Type, "Component.Instance"    );
+
+		/* using printf to test - because we are testing the journal for sanity here */
+		if ( register2Stream == register2Test ) {
+			printf( "Journal_Register2 works\n" );
+		}
+		else {
+			printf( "Journal_Register2 failed\n" );
+		}
+		
+		Journal_PrintConcise();
+	}
+
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,79 @@
+TEST: "HELLO" should appear
+HELLO
+TEST: "WORLD" should NOT appear
+TEST: "HELLO" should NOT appear
+TEST: "WORLD" should NOT appear
+Turning off myInfo
+TEST: "HELLO" should NOT appear
+Turning on Dump
+TEST: "HELLO" should appear
+HELLO
+Turning off Journal
+TEST: "HELLO" should NOT appear
+TEST: DPrintf
+DPrintf
+Memory Statistics
+	Times Allocated Times Free Current bytes Peak bytes Total bytes 
+	             65          0          3692       3692        3692
+		Type                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		CFile                              2          0            88         88          88
+		CStream                           13          0          1352       1352        1352
+		IndentFormatter                   13          0           624        624         624
+		Journal                            1          0            20         20          20
+		NamedObjectList                   15          0          1140       1140        1140
+		NamedObjectPtr                    15          0           336        336         336
+		RankFormatter                      3          0           120        120         120
+		StreamFormatter*                   3          0            12         12          12
+	
+	CFile
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		              2          0            88         88          88
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			(null)                             2          0            88         88          88
+	
+	CStream
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		             13          0          1352       1352        1352
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			(null)                            13          0          1352       1352        1352
+	
+	IndentFormatter
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		             13          0           624        624         624
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			(null)                            13          0           624        624         624
+	
+	Journal
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		              1          0            20         20          20
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			Singleton                          1          0            20         20          20
+	
+	NamedObjectList
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		             15          0          1140       1140        1140
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			(null)                            15          0          1140       1140        1140
+	
+	NamedObjectPtr
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		             15          0           336        336         336
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			NamedObjectList->data              15          0           336        336         336
+	
+	RankFormatter
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		              3          0           120        120         120
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			(null)                             3          0           120        120         120
+	
+	StreamFormatter*
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		              3          0            12         12          12
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 
+			Stream->_formatter                 3          0            12         12          12
+	
+	char
+		Times Allocated Times Free Current bytes Peak bytes Total bytes 
+		              0          0             0          0           0
+			Name                 Times Allocated Times Free Current bytes Peak bytes Total bytes 

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testJournal1 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the journal functionality
+**
+** $Id: testJournal1.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Stream* myInfo;
+		Stream* myDebug;		
+		Stream* myDump;
+		Stream* myError;
+		
+		Stream* allNew;
+
+		myInfo = Journal_Register( Info_Type, "MyInfo" );
+		myDebug = Journal_Register( Debug_Type, "MyDebug" );
+		myDump = Journal_Register( Dump_Type, "MyDump" );
+		myError = Journal_Register( Error_Type, "MyError" );
+		
+		allNew = Journal_Register( "My own stream", "allNew" );
+		
+		printf( "TEST: \"HELLO\" should appear\n" );
+		Journal_Printf( myInfo, "%s\n", "HELLO" );
+		printf( "TEST: \"WORLD\" should NOT appear\n" );
+		Journal_Printf( myDebug, "%s\n", "HELLO" );
+		printf( "TEST: \"HELLO\" should NOT appear\n" );
+		Journal_Printf( myDump, "%s\n", "HELLO" );
+		printf( "TEST: \"WORLD\" should NOT appear\n" );
+		Journal_Printf( myError, "%s\n", "HELLO" );
+
+		printf( "Turning off myInfo\n" );
+		Journal_Enable_NamedStream( Info_Type, "MyInfo" , False );
+		
+		printf( "TEST: \"HELLO\" should NOT appear\n" );
+		Journal_Printf( myInfo, "%s\n", "HELLO" );
+
+		printf( "Turning on Dump\n"  );
+		Journal_Enable_TypedStream( Dump_Type, True );
+		Journal_Enable_NamedStream( Dump_Type, "MyDump", True );
+		
+		printf( "TEST: \"HELLO\" should appear\n" );
+		Journal_Printf( myDump, "%s\n", "HELLO" );
+		
+		printf( "Turning off Journal\n" );
+		stJournal->enable = False;
+
+		printf( "TEST: \"HELLO\" should NOT appear\n" );		
+		Journal_Printf( myDump, "%s\n", "HELLO" );
+		
+		stJournal->enable = True;
+		
+		Journal_Enable_NamedStream( Info_Type, "MyInfo", True );
+		
+		printf( "TEST: DPrintf\n" );
+		Journal_DPrintf( myInfo, "DPrintf\n" );	
+	}
+
+	Memory_Print();
+	
+	BaseIO_Finalise();
+
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,34 @@
+
+
+h
+h.
+h..
+h...
+h...o
+he...o
+he...Do
+hel...Do
+hel...uDo
+hell...uDo
+hell...ouDo
+hello...ouDo
+hello...YouDo
+helloW...YouDo
+helloW...oYouDo
+helloWo...oYouDo
+helloWo...DoYouDo
+helloWor...DoYouDo
+helloWor...wDoYouDo
+helloWorldHowDoYouDo
+ helloWorldHowDoYouDo
+  helloWorldHowDoYouDo
+   helloWorldHowDoYouDo
+    helloWorldHowDoYouDo
+string = helloWorldHowDoYouDo
+doubleValue = 3.142e+23
+floatValue = 2.1734
+intValue = 3
+uintValue = 3980
+charValue = V
+doubleArray = { 10.23, 393.1, -89, 1231 }
+uintArray = { 10, 2021, 231, 2, 3, 4, 55 }

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+OUTPUT_DIR=./output
+export OUTPUT_DIR
+
+runAndHandleSystemTest "testJournalShortcuts " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the journal functionality
+**
+** $Id: testJournalShortcuts.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Stream*      myStream    = Journal_Register( Info_Type, "TestStream" );
+		char*        string        = "helloWorldHowDoYouDo";
+		double       doubleValue   = 3142e20;
+		double       floatValue    = 2.173425;
+		int          intValue      = 3;
+		unsigned int uintValue     = 3980;
+		int          char_I;
+		char         charValue     = 'V';
+		double       doubleArray[] = { 10.23, 393.1, -89, 1231 };        
+		Index        uintArray[]   = { 10, 2021, 231, 2, 3, 4, 55 };
+
+		Stream_RedirectFile_WithPrependedPath( myStream, "output", "output.dat" );
+
+		for ( char_I = -1 ; char_I < 25 ; char_I++ ) {
+			Journal_PrintString_WithLength( myStream, string, char_I );
+			Journal_Printf( myStream, "\n" );
+		}
+
+		/* Testing String Printing Shortcuts */
+		Journal_PrintString( myStream, string );
+		Journal_PrintValue( myStream, doubleValue );
+		Journal_PrintValue( myStream, floatValue );
+		Journal_PrintValue( myStream, intValue );
+		Journal_PrintValue( myStream, uintValue );
+		Journal_PrintChar(  myStream, charValue );
+		Journal_PrintArray( myStream, doubleArray, 4 );
+		Journal_PrintArray( myStream, uintArray, 7 );
+
+	}
+
+	
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMPIStream 2 0" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi1.txt.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi1.txt.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi1.txt.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+abcdefghijklmnopqrstuvwxyz
\ No newline at end of file

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi2.txt.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi2.txt.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi2.txt.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+Hello 10world 0.123

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the journal functionality
+**
+** $Id: testJournal-Dictionary.c 2745 2005-03-05 08:12:18Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+int main( int argc, char* argv[] ) {
+	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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+
+	{
+		char data[13];
+		int i;
+	
+		Dictionary* dictionary = Dictionary_New();
+		XML_IO_Handler* io_handler = XML_IO_Handler_New();
+
+		Stream* stream1;
+		Stream* stream2;
+		
+		IO_Handler_ReadAllFromFile( io_handler, "data/mpi-stream.xml", dictionary ); 
+
+		Journal_ReadFromDictionary( dictionary );
+
+		stream1 = Journal_Register( MPIStream_Type, "one" );
+		/* Write half the alphabet to each process */
+		for ( i = 0; i < 13; ++i ) {
+			data[i] = 'a' + i + 13 * rank;
+		}
+		
+		/* Print the alphabet */
+		MPIStream_WriteAllProcessors( stream1, data, sizeof(char), 13, MPI_COMM_WORLD );
+		
+		stream2 = Journal_Register( MPIStream_Type, "two" );
+		switch ( rank ) {
+			case 0:
+				MPIStream_SetOffset( stream2, 8, MPI_COMM_WORLD );
+				Journal_Printf( stream2, "Hello %d", 10 );
+				break;
+			case 1:
+				MPIStream_SetOffset( stream2, 12, MPI_COMM_WORLD );
+				Journal_Printf( stream2, "world %.3f\n", 0.123f );
+				break;
+		}
+		
+		Stg_Class_Delete( io_handler );
+		Stg_Class_Delete( dictionary );
+	}
+
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testPathUtils.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testPathUtils.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testPathUtils.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,69 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLibStGermainDynamic.c 2742 2005-03-05 05:33:43Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+
+int main( int argc, char* argv[] ) {
+	char		searchPaths[1024];
+	char		fullPath[256];
+	unsigned	len;
+	
+	PathJoin( searchPaths, 1, "." );
+	len = strlen( searchPaths );
+	searchPaths[len] = ':';
+	
+	PathJoin( &searchPaths[len + 1], 2,  ".", "data" );
+	len = strlen( searchPaths );
+	searchPaths[len] = ':';
+	
+	PathJoin( &searchPaths[len + 1], 6, "..", "..", "..", "does", "not", "exist" );
+	
+	printf( "searchPaths: %s\n", searchPaths );
+	
+	/* try and open some files using the search path */
+	FindFile( fullPath, "testPathUtils.c", searchPaths );
+	printf( "%s\n", fullPath );
+	
+	FindFile( fullPath, "normal.xml", searchPaths );
+	printf( "%s\n", fullPath );
+	
+	FindFile( fullPath, "nofile.man", searchPaths );
+	printf( "%s\n", fullPath );
+	
+	FindFile( fullPath, "/Users/luke/Projects/StGermain/env_vars", searchPaths );
+	printf( "%s\n", fullPath );
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+0: Hello world
+0: 
+0: 
+0: 
+0: abc
+0: def
+0: ghijkl
+0: 
+0: 
+0: StGermain IO Report - File Flush called 4 times.

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testRankFormatter " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests the journal functionality
+**
+** $Id: testRankFormatter.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.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 );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch )
+	{
+		Stream* myDebug;		
+
+		Journal_Enable_TypedStream( Debug_Type, True );
+		
+		myDebug = Journal_Register( Debug_Type, "MyDebug" );
+
+		Journal_Printf( myDebug, "Hello world\n" );
+		Journal_Printf( myDebug, "\n\n\n" );
+		Journal_Printf( myDebug, "abc\ndef\nghi" );
+		Journal_Printf( myDebug, "jkl\n\n\n" );
+	}
+
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = src tests

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3048 2005-06-22 07:43:27Z 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
+
+include Makefile.def
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = ListPlugins
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**	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:
+**	Reads an XML file (potentially with includes) and then outputs as a single file
+**
+** $Id: main.c 190 2005-06-20 04:56:57Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+
+#include "Base/Base.h"
+
+void SingleRegister( void* c ) {}
+
+int main( int argc, char* argv[] ) 
+{
+	Dictionary*			dictionary;
+	XML_IO_Handler*			ioHandler;
+	Stream*				stream;
+	Stream*				error;
+	Dictionary_Entry_Value*		pluginList;
+
+	Index plugin_I, count;
+
+
+	MPI_Init( &argc, &argv );
+	if( !Base_Init( &argc, &argv ) ) {
+		fprintf( stderr, "Error initialising StGermain, exiting.\n" );
+		exit( EXIT_FAILURE );
+	}
+	stream = Journal_Register( Info_Type, __FILE__ );
+	error = Journal_Register( Info_Type, __FILE__ );
+	
+	dictionary = Dictionary_New();
+
+	/* Read input */
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	Stream_Enable( stream, True );
+	Stream_Enable( error, True );
+
+	pluginList = Dictionary_Get( dictionary, "plugins" );
+	count = Dictionary_Entry_Value_GetCount( pluginList );
+	for ( plugin_I = 0; plugin_I < count; ++plugin_I ) {
+		Journal_Printf( stream, "%s\n", Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( pluginList, plugin_I ) ) );
+	}
+
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( ioHandler );
+
+	Base_Finalise();
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,30 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+# 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
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBase ${RPATH_FLAGS}
+
+packages = MPI XML MATH DL 
+
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst =
+
+def_srcs =
+
+
+def_checks = \
+	testListPlugins.0of1.sh
+
+def_libs = 
+

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/pluginstest.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/pluginstest.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/pluginstest.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<list name="plugins">
+		<param>LocalPlugin</param>
+		<param>LocalPlugin1</param>
+		<param>LocalPlugin2</param>
+	</list>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3048 2005-06-22 07:43:27Z 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
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,4 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+LocalPlugin
+LocalPlugin1
+LocalPlugin2

Added: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "ListPlugins data/pluginstest.xml" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libBase
+
+RECURSE_DIRS = ${def_sub}
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+	@if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = Foundation IO Container Automation Extensibility Context src tests FlattenXML Python

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermainBase `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS)
+LCCFLAGS =
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = Context
+def_pyb_package = StGermain/Base/Bindings
+
+def_srcs = \
+	misc.c \
+	bindings.c \
+	init.c
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,304 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3867 2006-10-16 12:38:24Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+
+#include <mpi.h>
+#include "StGermain/Base/Base.h"
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef Context_Python_Methods[] = {
+	{ Context_Python_copyright__name__,	Context_Python_copyright,	METH_VARARGS, Context_Python_copyright__doc__		},
+	{ Context_Python_Print__name__,		Context_Python_Print,		METH_VARARGS, Context_Python_Print__doc__		},
+	{ Context_Python_Delete__name__,	Context_Python_Delete,		METH_VARARGS, Context_Python_Delete__doc__		},
+	{ Context_Python_Construct__name__,	Context_Python_Construct,	METH_VARARGS, Context_Python_Construct__doc__		},
+	{ Context_Python_Build__name__,		Context_Python_Build,		METH_VARARGS, Context_Python_Build__doc__		},
+	{ Context_Python_Initialise__name__,	Context_Python_Initialise,	METH_VARARGS, Context_Python_Initialise__doc__		},
+	{ Context_Python_Execute__name__,	Context_Python_Execute,		METH_VARARGS, Context_Python_Execute__doc__		},
+	{ Context_Python_Destroy__name__,	Context_Python_Destroy,		METH_VARARGS, Context_Python_Destroy__doc__		},
+	{ Context_Python_Dt__name__,		Context_Python_Dt,		METH_VARARGS, Context_Python_Dt__doc__			},
+	{ Context_Python_Step__name__,		Context_Python_Step,		METH_VARARGS, Context_Python_Step__doc__		},
+	{ Context_Python_GetDictionary__name__,	Context_Python_GetDictionary,	METH_VARARGS, Context_Python_GetDictionary__doc__	},
+	{ Context_Python_SetTime__name__,	Context_Python_SetTime,		METH_VARARGS, Context_Python_SetTime__doc__		},
+	{ Context_Python_SetTimeStep__name__,	Context_Python_SetTimeStep,	METH_VARARGS, Context_Python_SetTimeStep__doc__		},
+	{ 0, 0, 0, 0 }
+};
+
+
+/* "Print" member */
+char Context_Python_Print__doc__[] = "Print the Context";
+char Context_Python_Print__name__[] = "Print";
+PyObject* Context_Python_Print( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	Stream* stream = Journal_Register (Info_Type, "myString");
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	Print( context, stream );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Delete" member */
+char Context_Python_Delete__doc__[] = "Delete/destroy the Context";
+char Context_Python_Delete__name__[] = "Delete";
+PyObject* Context_Python_Delete( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	Stg_Class_Delete( context );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Construct" member */
+char Context_Python_Construct__doc__[] = "Construct the Context...";
+char Context_Python_Construct__name__[] = "Construct";
+PyObject* Context_Python_Construct( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+
+	Stg_Component_Construct( context, 0 /* dummy */, &context, True );
+
+	/* Return */
+	Py_INCREF( Py_None );
+	return PyCObject_FromVoidPtr( context, 0 );
+	}
+
+/* "Build" member */
+char Context_Python_Build__doc__[] = "Build the Context... allocates memory (builds arrays)";
+char Context_Python_Build__name__[] = "Build";
+PyObject* Context_Python_Build( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	Stg_Component_Build( context, 0 /* dummy */, False );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Initialise" member */
+char Context_Python_Initialise__doc__[] = "Initialise the Context ... initialises memory (fills arrays with initial values)";
+char Context_Python_Initialise__name__[] = "Initialise";
+PyObject* Context_Python_Initialise( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	Stg_Component_Initialise( context, 0 /* dummy */, False );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Execute" member */
+char Context_Python_Execute__doc__[] = "Execute the Context";
+char Context_Python_Execute__name__[] = "Execute";
+PyObject* Context_Python_Execute( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	Stg_Component_Execute( context, 0 /* dummy */, False );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Destroy" member */
+char Context_Python_Destroy__doc__[] = "Destroy the Context";
+char Context_Python_Destroy__name__[] = "Destroy";
+PyObject* Context_Python_Destroy( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	Stg_Component_Destroy( context, 0 /* dummy */, False );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Dt" member */
+char Context_Python_Dt__doc__[] = "Obtain the desired dt of the Context";
+char Context_Python_Dt__name__[] = "Dt";
+PyObject* Context_Python_Dt( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function and return value*/
+	return PyFloat_FromDouble( AbstractContext_Dt( context ) );
+}
+
+/* "Step" member */
+char Context_Python_Step__doc__[] = "Step the Context";
+char Context_Python_Step__name__[] = "Step";
+PyObject* Context_Python_Step( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	double		dt;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "Od:", &pyContext, &dt ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	context->currentTime += dt;
+	AbstractContext_Step( context, dt );
+	context->timeStep++;	
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "GetDictionary" member */
+char Context_Python_GetDictionary__doc__[] = "Get Dictionary of the Context";
+char Context_Python_GetDictionary__name__[] = "GetDictionary";
+PyObject* Context_Python_GetDictionary( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyContext ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function and return value*/
+	return PyCObject_FromVoidPtr( context->dictionary, 0 );
+}
+
+
+/* "SetTimeStep" member */
+char Context_Python_SetTimeStep__doc__[] = "Set the Context timeStep";
+char Context_Python_SetTimeStep__name__[] = "SetTimeStep";
+PyObject* Context_Python_SetTimeStep( PyObject* self, PyObject* args ) {
+	unsigned int	timeStep;
+	PyObject*	pyContext;
+	Context*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "Oi:", &pyContext, &timeStep ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	context->timeStep = timeStep;
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}	
+
+	
+/* "SetTime" member */
+char Context_Python_SetTime__doc__[] = "Set the Context time";
+char Context_Python_SetTime__name__[] = "SetTime";
+PyObject* Context_Python_SetTime( PyObject* self, PyObject* args ) {
+	PyObject*	pyContext;
+	Context*	context;
+	double		currentTime;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "Od:", &pyContext, &currentTime ) ) {
+		return NULL;
+	}
+	context = (Context*)( PyCObject_AsVoidPtr( pyContext ) );
+	
+	/* Run function */
+	context->currentTime = currentTime;
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}	

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3864 2006-10-16 09:21:03Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Context_Python_bindings_h__
+#define __Context_Python_bindings_h__
+	
+	extern struct PyMethodDef Context_Python_Methods[];
+	
+	extern char Context_Python_Print__name__[];
+	extern char Context_Python_Print__doc__[];
+	PyObject* Context_Python_Print( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Delete__name__[];
+	extern char Context_Python_Delete__doc__[];
+	PyObject* Context_Python_Delete( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Construct__name__[];
+	extern char Context_Python_Construct__doc__[];
+	PyObject* Context_Python_Construct( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Build__name__[];
+	extern char Context_Python_Build__doc__[];
+	PyObject* Context_Python_Build( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Initialise__name__[];
+	extern char Context_Python_Initialise__doc__[];
+	PyObject* Context_Python_Initialise( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Execute__name__[];
+	extern char Context_Python_Execute__doc__[];
+	PyObject* Context_Python_Execute( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Destroy__name__[];
+	extern char Context_Python_Destroy__doc__[];
+	PyObject* Context_Python_Destroy( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Dt__name__[];
+	extern char Context_Python_Dt__doc__[];
+	PyObject* Context_Python_Dt( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_Step__name__[];
+	extern char Context_Python_Step__doc__[];
+	PyObject* Context_Python_Step( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_GetDictionary__name__[];
+	extern char Context_Python_GetDictionary__doc__[];
+	PyObject* Context_Python_GetDictionary( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_SetTime__name__[];
+	extern char Context_Python_SetTime__doc__[];
+	PyObject* Context_Python_SetTime( PyObject* self, PyObject* args );
+	
+	extern char Context_Python_SetTimeStep__name__[];
+	extern char Context_Python_SetTimeStep__doc__[];
+	PyObject* Context_Python_SetTimeStep( PyObject* self, PyObject* args );
+	
+#endif /* __Context_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 Context_Python__doc__[] = "";
+
+void initContext() {
+	Py_InitModule4( "Context", Context_Python_Methods, Context_Python__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "can't initialize module Context" );
+	}
+	return;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = -lStGermainBase 
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 Context_Python_copyright__doc__[] = "";
+char Context_Python_copyright__name__[] = "copyright";
+
+PyObject* Context_Python_copyright( PyObject* self, PyObject* args ) {
+    return Py_BuildValue( "s", "StGermain.Base.Bindings.Context Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Context_Python_misc_h__
+#define __Context_Python_misc_h__
+
+	/* "copyright" member */
+	extern char Context_Python_copyright__name__[];
+	extern char Context_Python_copyright__doc__[];
+	PyObject* Context_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __Context_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermainBase `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS)
+LCCFLAGS =
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = Dictionary
+def_pyb_package = StGermain/Base/Bindings
+
+def_srcs = \
+	misc.c \
+	bindings.c \
+	init.c
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: bindings.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+
+#include <mpi.h>
+#include "StGermain/Base/Base.h"
+#include <limits.h>
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef Dictionary_Python_Methods[] = {
+	{ Dictionary_Python_copyright__name__,		Dictionary_Python_copyright,		METH_VARARGS, Dictionary_Python_copyright__doc__	},
+	{ Dictionary_Python_New__name__,		Dictionary_Python_New,			METH_VARARGS, Dictionary_Python_New__doc__		},
+	{ Dictionary_Python_Print__name__,		Dictionary_Python_Print,		METH_VARARGS, Dictionary_Python_Print__doc__		},
+	{ Dictionary_Python_Delete__name__,		Dictionary_Python_Delete,		METH_VARARGS, Dictionary_Python_Delete__doc__		},
+	{ Dictionary_Python_AddString__name__,		Dictionary_Python_AddString,		METH_VARARGS, Dictionary_Python_AddString__doc__	},
+	{ Dictionary_Python_AddStruct__name__,		Dictionary_Python_AddStruct,		METH_VARARGS, Dictionary_Python_AddStruct__doc__	},
+	{ Dictionary_Python_LoadFromFile__name__,	Dictionary_Python_LoadFromFile,		METH_VARARGS, Dictionary_Python_LoadFromFile__doc__	},
+	{ 0, 0, 0, 0 }
+};
+
+
+/* "New" member */
+char Dictionary_Python_New__doc__[] = "Create a new Dictionary";
+char Dictionary_Python_New__name__[] = "New";
+PyObject* Dictionary_Python_New( PyObject* self, PyObject* args ) {
+	return PyCObject_FromVoidPtr( Dictionary_New(), 0 );
+}
+
+/* "Print" member */
+char Dictionary_Python_Print__doc__[] = "Print the Dictionary";
+char Dictionary_Python_Print__name__[] = "Print";
+PyObject* Dictionary_Python_Print( PyObject* self, PyObject* args) {
+	PyObject*	pyDictionary;
+	Dictionary*	dictionary;
+	Stream*		stream = Journal_Register (Info_Type, "myStream");
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyDictionary ) ) {
+		return NULL;
+	}
+	dictionary = (Dictionary*)( PyCObject_AsVoidPtr( pyDictionary ) );
+	
+	/* Run function */
+	Print( dictionary, stream );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Stg_Class_Delete" member */
+char Dictionary_Python_Delete__doc__[] = "Stg_Class_Delete/destroy the Dictionary";
+char Dictionary_Python_Delete__name__[] = "Stg_Class_Delete";
+PyObject* Dictionary_Python_Delete( PyObject* self, PyObject* args ) {
+	PyObject*	pyDictionary;
+	Dictionary*	dictionary;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyDictionary ) ) {
+		return NULL;
+	}
+	dictionary = (Dictionary*)( PyCObject_AsVoidPtr( pyDictionary ) );
+	
+	/* Run function */
+	Stg_Class_Delete( dictionary );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "AddString" member */
+char Dictionary_Python_AddString__doc__[] = "Add an item (scalar) to the Dictionary";
+char Dictionary_Python_AddString__name__[] = "AddString";
+PyObject* Dictionary_Python_AddString( PyObject* self, PyObject* args ) {
+	PyObject*	pyDictionary;
+	Dictionary*	dictionary;
+	char*		name;
+	char*		value;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "Oss:", &pyDictionary, &name, &value ) ) {
+		return NULL;
+	}
+	dictionary = (Dictionary*)( PyCObject_AsVoidPtr( pyDictionary ) );
+	
+	/* Run function */
+	Dictionary_Add( dictionary, name, Dictionary_Entry_Value_FromString( value ) );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "AddStruct" member */
+char Dictionary_Python_AddStruct__doc__[] = "Add a struct (Dictionary) to the Dictionary";
+char Dictionary_Python_AddStruct__name__[] = "AddStruct";
+PyObject* Dictionary_Python_AddStruct( PyObject* self, PyObject* args ) {
+	PyObject*	pyDictionary;
+	Dictionary*	dictionary;
+	char*		name;
+	PyObject*	pyValue;
+	Dictionary*	value;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "OsO:", &pyDictionary, &name, &pyValue ) ) {
+		return NULL;
+	}
+	dictionary = (Dictionary*)( PyCObject_AsVoidPtr( pyDictionary ) );
+	value = (Dictionary*)( PyCObject_AsVoidPtr( pyValue ) );
+	
+	/* Run function */
+	Dictionary_Add( dictionary, name, Dictionary_Entry_Value_FromStruct( value ) );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "AddToList" member */
+char Dictionary_Python_AddStringToList__doc__[] = "Add an item (scalar) to a list of the Dictionary";
+char Dictionary_Python_AddStringToList__name__[] = "AddStringToList";
+PyObject* Dictionary_Python_AddStringToList( PyObject* self, PyObject* args ) {
+	PyObject*		pyDictionary;
+	Dictionary*		dictionary;
+	char*			name;
+	char*			value;
+	Dictionary_Entry_Value*	list;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "Oss:", &pyDictionary, &name, &value ) ) {
+		return NULL;
+	}
+	dictionary = (Dictionary*)( PyCObject_AsVoidPtr( pyDictionary ) );
+	
+	/* Run function */
+	list = Dictionary_Get( dictionary, name );
+	Dictionary_Entry_Value_AddElement( list, Dictionary_Entry_Value_FromString( value ) );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "LoadFromFile" member */
+char Dictionary_Python_LoadFromFile__doc__[] = "Load the contents of a file into the Dictionary";
+char Dictionary_Python_LoadFromFile__name__[] = "LoadFromFile";
+PyObject* Dictionary_Python_LoadFromFile( PyObject* self, PyObject* args ) {
+	PyObject*	pyDictionary;
+	Dictionary*	dictionary;
+	XML_IO_Handler*	ioHandler;
+	char*		filename;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "Os:", &pyDictionary, &filename ) ) {
+		return NULL;
+	}
+	dictionary = (Dictionary*)( PyCObject_AsVoidPtr( pyDictionary ) );
+	
+	/* Run function */
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromFile( ioHandler, filename, dictionary );
+	Stg_Class_Delete( ioHandler );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Build the binding table(s).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: bindings.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Dictionary_Python_bindings_h__
+#define __Dictionary_Python_bindings_h__
+	
+	extern struct PyMethodDef Dictionary_Python_Methods[];
+	
+	extern char Dictionary_Python_New__name__[];
+	extern char Dictionary_Python_New__doc__[];
+	PyObject* Dictionary_Python_New( PyObject* self, PyObject* args );
+	
+	extern char Dictionary_Python_Print__name__[];
+	extern char Dictionary_Python_Print__doc__[];
+	PyObject* Dictionary_Python_Print( PyObject* self, PyObject* args );
+	
+	extern char Dictionary_Python_Delete__name__[];
+	extern char Dictionary_Python_Delete__doc__[];
+	PyObject* Dictionary_Python_Delete( PyObject* self, PyObject* args );
+	
+	extern char Dictionary_Python_AddString__name__[];
+	extern char Dictionary_Python_AddString__doc__[];
+	PyObject* Dictionary_Python_AddString( PyObject* self, PyObject* args );
+	
+	extern char Dictionary_Python_AddStruct__name__[];
+	extern char Dictionary_Python_AddStruct__doc__[];
+	PyObject* Dictionary_Python_AddStruct( PyObject* self, PyObject* args );
+	
+	extern char Dictionary_Python_AddStringToList__name__[];
+	extern char Dictionary_Python_AddStringToList__doc__[];
+	PyObject* Dictionary_Python_AddStringToList( PyObject* self, PyObject* args );
+	
+	extern char Dictionary_Python_LoadFromFile__name__[];
+	extern char Dictionary_Python_LoadFromFile__doc__[];
+	PyObject* Dictionary_Python_LoadFromFile( PyObject* self, PyObject* args );
+	
+#endif /* __Dictionary_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 Dictionary_Python__doc__[] = "Dictionary is an information repository designed to take information from various sources and of \
+various types but provide a common interface to the information with implicit type conversions. ";
+
+void initDictionary() {
+	Py_InitModule4( "Dictionary", Dictionary_Python_Methods, Dictionary_Python__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "Can't initialize module Dictionary" );
+	}
+	return;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = -lStGermainBase
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 Dictionary_Python_copyright__doc__[] = "";
+char Dictionary_Python_copyright__name__[] = "copyright";
+
+PyObject* Dictionary_Python_copyright( PyObject* self, PyObject* args ) {
+	return Py_BuildValue( "s", "StGermain.Base.Bindings.Dictionary Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Dictionary_Python_misc_h__
+#define __Dictionary_Python_misc_h__
+	
+	/* "copyright" member */
+	extern char Dictionary_Python_copyright__name__[];
+	extern char Dictionary_Python_copyright__doc__[];
+	PyObject* Dictionary_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __Dictionary_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Base/Bindings
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = Dictionary Context
+
+def_pyc_package = StGermain/Base/Bindings
+def_pyc = __init__.py

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.Base.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 $"

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Base
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Base/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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/Base
+def_pyc = __init__.py

Added: long/3D/SNAC/trunk/StGermain/Base/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.Base 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 $"

Added: long/3D/SNAC/trunk/StGermain/Base/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Base/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/src/Base.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Base.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Base.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 libBase.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Base.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_h__
+#define __Base_h__
+	
+	#include "Foundation/Foundation.h"
+	#include "IO/IO.h"
+	#include "Container/Container.h"
+	#include "Automation/Automation.h"
+	#include "Extensibility/Extensibility.h"
+	#include "Context/Context.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Base_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool Base_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	BaseContext_Finalise();
+	BaseExtensibility_Finalise();
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 all initialisation at the base level
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Finalise_h__
+#define __Base_Finalise_h__
+	
+	Bool Base_Finalise( void );
+	
+#endif /* __Base_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 <stdarg.h>
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Base/Extensibility/Extensibility.h"
+#include "Base/Context/Context.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool Base_Init( int* argc, char** argv[] ) {
+	int tmp;
+	
+	BaseFoundation_Init( argc, argv );
+	BaseIO_Init( argc, argv );
+
+	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 Framework revision %s. Copyright (C) 2003-2005 VPAC.\n", VERSION );
+	Stream_Flush( Journal_Register( InfoStream_Type, "Context" ) );
+	Stream_SetPrintingRank( Journal_Register( InfoStream_Type, "Context" ), tmp );
+	
+	BaseContainer_Init( argc, argv );
+	BaseAutomation_Init( argc, argv );
+	BaseExtensibility_Init( argc, argv );
+	BaseContext_Init( argc, argv );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 all initialisation at the base level
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Init_h__
+#define __Base_Init_h__
+	
+	Bool Base_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm  $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)  `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(LIBS)
+
+export:: export-headers export-libraries
+#export:: export-headers
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBase
+def_inc = StGermain/Base
+
+def_srcs = \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	Init.h \
+	Finalise.h \
+	Base.h
+
+def_libs =
+def_objlists = StGermainBaseContext StGermainBaseExtensibility StGermainBaseAutomation StGermainBaseContainer StGermainBaseIO StGermainBaseFoundation
+

Added: long/3D/SNAC/trunk/StGermain/Base/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $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
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic= yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain ${MPI_INCLUDES}
+
+packages = MPI XML MATH DL
+#packages = XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3492 2006-03-17 04:16:46Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBase
+
+def_srcs = \
+	testLibBase.c
+
+def_checks = \
+	testLibBase.0of1.sh
+

Added: long/3D/SNAC/trunk/StGermain/Base/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3492 2006-03-17 04:16:46Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+# 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 = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -lStGermainBase
+
+ifeq (Darwin-mpich,${SYSTEM}-${MPI_IMPLEMENTATION})
+	PROJ_CFLAGS += -flat_namespace
+endif
+
+
+packages = MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibBase " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibBase.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.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( !Base_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 );
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+Bool LinearAlgebra_Init( int* argc, char** argv[] ) {
+	return True;
+}
+
+Bool LinearAlgebra_Finalise( void ) {
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/COPYING
===================================================================
--- long/3D/SNAC/trunk/StGermain/COPYING	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/COPYING	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,510 @@
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must
+be allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at least
+    three years, to give the same user the materials specified in
+    Subsection 6a, above, for a charge no more than the cost of
+    performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+  Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libDiscretisationGeometry
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_BlockGeometry_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_BlockGeometry_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">BlockGeometry</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,205 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 3733 2006-08-01 07:36:27Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_ComplexMath_h__
+#define __Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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;
+	}		
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_ComplexVectorMath_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_ComplexVectorMath_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1062 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.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 );
+	
+	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 );
+	}
+	
+	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;
+
+	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;
+	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->elements;
+	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->elements);
+									edgeToTriangle[index][COUNT(e)] = triCount;
+								
+									index = (int)(((QuadEdge*)((void*)eOnext)) - (QuadEdge*)delaunay->qp->elements);
+									edgeToTriangle[index][COUNT(eOnext)] = triCount;
+								
+									index = (int)(((QuadEdge*)((void*)eLnext)) - (QuadEdge*)delaunay->qp->elements);
+									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->elements);
+								edgeToTriangle[index][COUNT(e)] = triCount;
+								
+								index = (int)(((QuadEdge*)((void*)eOnext)) - (QuadEdge*)delaunay->qp->elements);
+								edgeToTriangle[index][COUNT(eOnext)] = triCount;
+								
+								index = (int)(((QuadEdge*)((void*)eLnext)) - (QuadEdge*)delaunay->qp->elements);
+								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->elements[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 );
+		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->elements;
+	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->elements;
+	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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_Delaunay_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_Delaunay_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Delaunay</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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_Dimension_h__
+#define __Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_Edge_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_Edge_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool DiscretisationGeometry_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_Finalise_h__
+#define __Discretisation_Geometry_Finalise_h__
+	
+	Bool DiscretisationGeometry_Finalise( void );
+	
+#endif /* __Discretisation_Geometry_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,497 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 "Base/Base.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 "petscksp.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" );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_FullTensorMath_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_FullTensorMath_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Geometry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Geometry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Geometry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,77 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3728 2006-07-31 03:14:51Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_h__
+#define __Discretisation_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 "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Discretisation_Geometry_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_GeometryClass_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_GeometryClass_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Geometry</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>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_IJK26Topology_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_IJK26Topology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">IJK26Topology</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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++;
+			}
+		}
+	}	
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_IJK6Topology_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_IJK6Topology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">IJK6Topology</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_IJKTopology_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_IJKTopology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,76 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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 DiscretisationGeometry_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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_Init_h__
+#define __Discretisation_Geometry_Init_h__
+	
+	Bool DiscretisationGeometry_Init( int* argc, char** argv[] );
+	
+#endif /* __Discretisation_Geometry_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_IrregGeometry_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_IrregGeometry_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">IrregGeometry</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_IrregTopology_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_IrregTopology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">IrregTopology</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+#include "Line.h"
+
+#include <stdlib.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_Line_h__
+#define __Discretisation_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; \
+		Vector_Norm( line, line ); \
+		(line)[3] = Vector_Dot( line, a )
+	
+	#define Stg_Line_PointIsInside( line, point ) \
+		((Vector_Dot( line, point) >= line[3]) ? True : False)
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Discretisation_Geometry_Line_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+# if PROJ_DLL is not NULL, include DLL target.
+# all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+all: $(PROJ_LIB) createObjList appendSubLibs export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3728 2006-07-31 03:14:51Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainDiscretisationGeometry
+def_inc = StGermain/Discretisation/Geometry
+
+def_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 \
+	FullTensorMath.c \
+	TensorMultMath.c
+
+
+def_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	
+
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1313 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.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
+void _ParallelDelaunay_Init( ParallelDelaunay* self )
+{
+	assert( self );
+
+	self->numHaloSites[0] = 0;
+	self->numHaloSites[1] = 0;
+}
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** 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 );
+	_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 );
+		
+		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{
+				MPI_Send( self->sites[i].coord, sizeof( CoordF ), MPI_BYTE, self->processor[i], DATA_TAG, *self->comm );
+			}			
+		}
+
+		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 );
+
+		for( i=0; i<self->numLocalSites; i++ ){
+			MPI_Recv( &(self->localPoints[i]), sizeof(CoordF), 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) );
+	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 ){
+		BTreeIterator *iter = NULL;
+		Site *result = NULL;
+		
+		ParallelDelaunayMerge( self, self->comm, self->leftProc );
+		
+		self->haloSites[0] = 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->elements[i*sizeof(QuadEdge)])) ) continue;
+	
+			if( self->mapGlobalToLocal[((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[0])->id] == numSites )
+				BTree_InsertNode( self->haloSites[0], ((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[0]), sizeof( Site* ) );
+			
+			if( self->mapGlobalToLocal[((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[2])->id] == numSites )
+				BTree_InsertNode( self->haloSites[0], ((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[2]), sizeof( Site* ) );
+		}
+
+		self->localPoints = Memory_Realloc_Array
+			( self->localPoints, CoordF, sizeof(CoordF) * (self->numTotalLocalSites + self->haloSites[0]->nodeCount) );
+		
+		self->mappingTable[0] = Memory_Alloc_Array_Unnamed( int, self->haloSites[0]->nodeCount );
+		memset( self->mappingTable[0], 0, sizeof( int ) * self->haloSites[0]->nodeCount );
+		
+		count=0;
+		i = self->numTotalLocalSites;
+		iter = BTreeIterator_New( self->haloSites[0] );
+		for( result=(Site*)BTreeIterator_First(iter);
+				result;
+				result=(Site*)BTreeIterator_Next(iter)){
+			
+			self->mappingTable[0][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 );
+		Delaunay_SortSites(self->localTriangulation->sites, self->localTriangulation->numSites);
+    	Delaunay_Recurse(self->localTriangulation, 0, self->localTriangulation->numSites,
+				&self->localTriangulation->leftMost, &self->localTriangulation->rightMost);
+
+		self->numHaloSites[0] = self->haloSites[0]->nodeCount;
+		self->numTotalLocalSites += self->haloSites[0]->nodeCount;
+		
+		Stg_Class_Delete( self->haloSites[0] );
+		Stg_Class_Delete( iter );
+	}
+		
+	if( self->rightProc != self->numProcs ){
+		BTreeIterator *iter = NULL;
+		Site *result = NULL;
+		
+		ParallelDelaunayMerge( self, self->comm, self->rightProc );
+
+		self->haloSites[1] = 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->elements[i*sizeof(QuadEdge)])) ) continue;
+	
+			if( self->mapGlobalToLocal[((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[0])->id] == numSites )
+				BTree_InsertNode( self->haloSites[1], ((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[0]), sizeof( Site* ) );
+			
+			if( self->mapGlobalToLocal[((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[2])->id] == numSites )
+				BTree_InsertNode( self->haloSites[1], ((Site*)((QuadEdge*)&(self->localTriangulation->qp->elements[i*sizeof(QuadEdge)]))->data[2]), sizeof( Site* ) );
+		}
+
+		self->localPoints = Memory_Realloc_Array
+			( self->localPoints, CoordF, sizeof(CoordF) * (self->numTotalLocalSites + self->haloSites[1]->nodeCount) );
+		
+		self->mappingTable[1] = Memory_Alloc_Array_Unnamed( int, self->haloSites[1]->nodeCount );
+		memset( self->mappingTable[1], 0, sizeof( int ) * self->haloSites[1]->nodeCount );
+		
+		count=0;
+		i = self->numTotalLocalSites;
+		iter = BTreeIterator_New( self->haloSites[1] );
+		for( result=(Site*)BTreeIterator_First(iter);
+				result;
+				result=(Site*)BTreeIterator_Next(iter)){
+			
+			self->mappingTable[1][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 );
+		Delaunay_SortSites(self->localTriangulation->sites, self->localTriangulation->numSites);
+    	Delaunay_Recurse(self->localTriangulation, 0, self->localTriangulation->numSites,
+				&self->localTriangulation->leftMost, &self->localTriangulation->rightMost);
+
+		self->numHaloSites[1] = self->haloSites[1]->nodeCount;
+		self->numTotalLocalSites += self->haloSites[1]->nodeCount;
+
+		Stg_Class_Delete( self->haloSites[1] );
+		Stg_Class_Delete( iter );
+	}
+	
+	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_Initialise( void* pd, void* data )
+{
+	
+}
+
+void _ParallelDelaunay_Execute( void* pd, void* data )
+{
+	
+}
+
+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_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->elements;
+	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;
+	int translationArray[MAX_NEIGHBOURS] = { 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;
+		for( i=0; i<pd->numInputSites; i++ ){
+			if( pd->attributes->CalculateVoronoiSurfaceArea ){
+				if( pd->processor[i] == MASTER_PROC ){
+					memcpy( &(pd->voronoiArea[pd->initialOrder[i]]), &(pd->localTriangulation->voronoiArea[count++]), sizeof( float ) );
+				}
+				else{
+					MPI_Recv( &(pd->voronoiArea[pd->initialOrder[i]]), 1, MPI_FLOAT, pd->processor[i], VORONOI_AREA_TAG, (*pd->comm), &st );
+				}
+			}
+			
+			if( pd->attributes->FindNeighbours ){
+				if( pd->processor[i] == MASTER_PROC ){
+					memcpy( &(pd->numNeighbours[pd->initialOrder[i]]), &(pd->localTriangulation->numNeighbours[count1++]), sizeof( int ) );
+				}
+				else{
+					MPI_Recv( &(pd->numNeighbours[pd->initialOrder[i]]), 1, MPI_INT, pd->processor[i], NUM_NEIGHBOUR_TAG, (*pd->comm), &st );
+				}
+				numNeighboursSum += pd->numNeighbours[pd->initialOrder[i]];
+			}
+		}
+
+		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];
+			}
+		}
+		
+		count = 0;
+		for(j=0; j<pd->numInputSites; 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 ){
+					MPI_Recv( (pd->voronoiSides[pd->initialOrder[j]]), pd->numNeighbours[pd->initialOrder[j]], MPI_FLOAT, pd->processor[j], VORONOI_SIDES_TAG, *(pd->comm), &st );
+				}
+				if( pd->attributes->FindNeighbours ){
+					MPI_Recv( (pd->neighbours[pd->initialOrder[j]]), pd->numNeighbours[pd->initialOrder[j]], MPI_INT, pd->processor[j], NEIGHBOURS_TAG, *(pd->comm), &st );
+					for( i=0; i<pd->numNeighbours[pd->initialOrder[j]]; i++ ){
+						pd->neighbours[pd->initialOrder[j]][i] = pd->initialOrder[pd->neighbours[pd->initialOrder[j]][i]];
+					}
+				}
+			}
+		}
+	}
+	else{
+		for( i=0; i<pd->numLocalSites; i++ ){
+			if( pd->attributes->CalculateVoronoiSurfaceArea ){
+				MPI_Send( &(pd->localTriangulation->voronoiArea[i]), 1, MPI_FLOAT, MASTER_PROC, VORONOI_AREA_TAG, (*pd->comm) );
+			}
+			
+			if( pd->attributes->FindNeighbours ){
+				MPI_Send( &(pd->localTriangulation->numNeighbours[i]), 1, MPI_INT, MASTER_PROC, NUM_NEIGHBOUR_TAG, (*pd->comm) );
+			}
+		}
+		
+		for( i=0; i<pd->numLocalSites; i++ ){
+			if( pd->attributes->CalculateVoronoiSides ){
+				MPI_Send( (pd->localTriangulation->voronoiSides[i]), pd->localTriangulation->numNeighbours[i], MPI_FLOAT, MASTER_PROC, VORONOI_SIDES_TAG, *(pd->comm));
+			}
+			if( pd->attributes->FindNeighbours ){
+				memset( translationArray, 0, sizeof( translationArray ) );
+				
+				for( j=0; j<pd->localTriangulation->numNeighbours[i]; j++ ){
+					translationArray[j] = ParallelDelaunay_TranslateLocalToGlobal( pd, pd->localTriangulation->neighbours[i][j] );
+				}
+				
+				MPI_Send( translationArray, pd->localTriangulation->numNeighbours[i], 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=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 );
+			}
+		
+			for( i=1; i<pd->numProcs; i++ ){
+				for( count=0; count < triCountArray[i]; count++ ){
+					MPI_Recv( pd->triangleIndices[j], 3, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );					
+					j++;
+				}
+			}
+
+			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 );
+			for( j=0; j<triCount; j++ ){
+				MPI_Send( triIndices[j], 3, 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 ORG_TAG 101
+#define DEST_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;
+	assert(edge);
+
+	memcpy( sp.xyz, ((Site*)ORG(edge))->coord, sizeof( CoordF ) );
+	sp.id = ((Site*)ORG(edge))->id;
+	MPI_Isend( &sp, sizeof(SitePacket), MPI_BYTE, rank, ORG_TAG, *comm, &(req[0]) );
+	
+	memcpy( sp.xyz, ((Site*)DEST(edge))->coord, sizeof( CoordF ) );
+	sp.id = ((Site*)DEST(edge))->id;
+	MPI_Isend( &sp, sizeof(SitePacket), MPI_BYTE, rank, DEST_TAG, *comm, &(req[1]) );
+}
+
+QuadEdgeRef ParallelDelaunayRecvEdge( Delaunay *d, int rank, MPI_Comm *comm )
+{
+	QuadEdgeRef edge = 0;
+	CoordF *c;
+	Site *s;
+	MPI_Status st;
+	SitePacket sp[2];
+	
+	assert( d );
+	
+	edge = MakeQuadEdge( d->qp );
+	
+	assert(edge);
+
+	s = Memory_Alloc_Array_Unnamed( Site, 2 );
+	memset( s, 0, sizeof( Site ) * 2 );
+	
+	c = Memory_Alloc_Array_Unnamed( CoordF, 2 );
+	memset( c, 0, sizeof( CoordF ) * 2 );
+	
+	MPI_Recv( &(sp[0]), sizeof(SitePacket), MPI_BYTE, rank, ORG_TAG, *comm, &st );
+	MPI_Recv( &(sp[1]), sizeof(SitePacket), MPI_BYTE, rank, DEST_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[2];
+	MPI_Status s[2];
+	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[0]) );
+			ldi = ParallelDelaunayRecvEdge( d, rank, comm );
+			MPI_Waitall( 2, 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[0]) );
+			rdi = ParallelDelaunayRecvEdge( d, rank, comm );
+			MPI_Waitall( 2, 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[0]) );
+		MPI_Recv( &(globalBreak), 1, MPI_INT, rank, BREAK_TAG, *comm, &(s[0]) );
+		MPI_Waitall( 1, r, s );
+		globalBreak |= localBreak;
+		
+		if( globalBreak == 0 ){
+			break;
+		}
+	}
+
+	for( result=(QuadEdgeRef)((void*)LinkedListIterator_First(iter));
+			result != 0;
+			result=(QuadEdgeRef)((void*)LinkedListIterator_Next(iter)) ){
+		Site *s;
+
+		s = (Site*)ORG(result);
+
+		Memory_Free( s->coord );
+		Memory_Free( s );
+		
+		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[2];
+	MPI_Status s[2];
+	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[0]) );
+		lcand = ParallelDelaunayRecvEdge( d, rank, comm );
+		
+		MPI_Waitall( 2, 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[0]) );
+			MPI_Recv( &(globalBreak), 1, MPI_INT, rank, BREAK_TAG, *comm, &(s[0]) );
+			MPI_Waitall( 1, r, s );
+			globalBreak &= localBreak;
+
+			if( globalBreak ){
+				break;
+			}
+
+			ParallelDelaunaySendEdge( rcand, rank, comm, &(r[0]) );
+			lcand = ParallelDelaunayRecvEdge( d, rank, comm );
+			MPI_Waitall( 2, 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[0]) );
+		rcand = ParallelDelaunayRecvEdge( d, rank, comm );
+
+		MPI_Waitall( 2, 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[0]) );
+			MPI_Recv( &(globalBreak), 1, MPI_INT, rank, BREAK_TAG, *comm, &(s[0]) );
+			MPI_Waitall( 1, r, s );
+			globalBreak &= localBreak;
+
+			if( globalBreak ){
+				break;
+			}
+			
+			ParallelDelaunaySendEdge( lcand, rank, comm, &(r[0]) );
+			rcand = ParallelDelaunayRecvEdge( d, rank, comm );
+			MPI_Waitall( 2, 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 );
+			}
+		}
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	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 __Discretisation_Geometry_ParallelDelaunay_h__
+#define __Discretisation_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; \
+		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
+	*/
+	void ParallelDelaunay_BuildTriangleIndices( ParallelDelaunay *pd );
+	void ParallelDelaunaySendEdge( QuadEdgeRef edge, int rank, MPI_Comm *comm, MPI_Request *req );
+	QuadEdgeRef ParallelDelaunayRecvEdge( Delaunay *d, 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 /* __Discretisation_Geometry_ParallelDelaunay_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ParallelDelaunay</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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_Plane_h__
+#define __Discretisation_Geometry_Plane_h__
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	/* calculate a plane equation from two non-parallel vectors and a point */
+	#define Plane_CalcFromVec( dest, axisA, axisB, pointOnPlane )		\
+		Vector_Cross( dest, axisA, axisB );				\
+		Vector_Norm( dest, dest );					\
+		dest[3] = Vector_Dot( dest, pointOnPlane )
+		
+	
+	/* return the plane's normal in dest */
+	#define Plane_Normal( dest, plane )		\
+		Vector_Set( dest, plane )
+		
+	
+	/* calculate the shortest distance from plane to point */
+	#define Plane_DistanceToPoint( plane, point )		\
+		(Vector_Dot( 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 )				\
+		(Vector_Dot( plane, point ) == plane[3] ? True : False)
+		
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	void Plane_LineIntersect( Plane plane, Line3 line, Coord point );
+
+	
+#endif /* __Discretisation_Geometry_Plane_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: QuadEdge.c 3462 2006-02-19 06:53:24Z Raquibul Hassan$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.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 )
+{
+	QuadEdgeRef e = 0;
+
+	e = (QuadEdgeRef) MemoryPool_NewObject( QuadEdge, qp );
+	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;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,196 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 __Discretisation_Geometry_QuadEdge_h__
+#define __Discretisation_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 &= ~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, ay, bx, by, cx, cy; \
+		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 /* __Discretisation_Geometry_QuadEdge_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: RMatrix.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+#include "RMatrix.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] / Vector_Mag( zAxis ) ) );
+	
+	RMatrix_VectorMult( nxa, dest, xAxis );
+	RMatrix_ApplyRotationZ( dest, asin( nxa[1] / Vector_Mag( 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];
+	
+	Vector_Set( dest, tmp );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_TMatrix_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_TMatrix_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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];
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_RefinedRegionsGeometry_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_RefinedRegionsGeometry_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,59 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,333 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3882 2006-10-26 04:41:18Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "GeometryClass.h"
+#include "ShellGeometry.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_ShellGeometry_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_ShellGeometry_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ShellGeometry</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1037 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 3819 2006-09-28 06:03:10Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "units.h"
+#include "types.h"
+#include "TensorMath.h"
+#include "VectorMath.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 );
+	}
+}
+
+
+
+
+/** 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 );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**	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 3819 2006-09-28 06:03:10Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_TensorMath_h__
+#define __Discretisation_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 ) ;
+
+/* 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 /* __Discretisation_Geometry_TensorMath_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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" );
+	}
+		
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_TensorMultMath_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_TensorMultMath_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_Topology_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_Topology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Topology</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>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.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);
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_TrigMath_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_TrigMath_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,474 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 3735 2006-08-01 08:05:14Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "VectorMath.h"
+
+#include <math.h>
+#include <assert.h>
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+/*
+** Base operations.
+*/
+
+/** (Assumes 3D) Define a cross product of 2 vectors */
+void Vector_Cross( Coord dst, Coord a, Coord b ) {
+	Coord	tmp;
+	
+	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];
+	
+	Vector_Set( dst, tmp );
+}
+
+/** (Assumes 3D) Divide a vector by a real */
+void Vector_Div( Coord dest, Coord a, double s )
+{
+	double	inv = 1.0 / s;
+	
+	dest[0] = a[0] * inv;
+	dest[1] = a[1] * inv;
+	dest[2] = a[2] * inv;
+}
+
+/** Calculate the normal of the vector. (ie length = 1 )*/
+void Vector_Norm( Coord dest, Coord a )
+{
+	double	invMag = 1.0 / sqrt( a[0] * a[0] + a[1] * a[1] + a[2] * a[2] );
+	
+	dest[0] = a[0] * invMag;
+	dest[1] = a[1] * invMag;
+	dest[2] = a[2] * invMag;
+}
+
+/** Swap coordinates according to i,j, k index */
+void Vector_Swizzle( Coord dst, Coord 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] );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,161 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 3735 2006-08-01 08:05:14Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_VectorMath_h__
+#define __Discretisation_Geometry_VectorMath_h__
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	/*
+	** Base operations.
+	*/
+	
+	/** copy src onto dest */
+	#define Vector_Set( dest, src )		\
+		(dest)[0] = (src)[0];		\
+		(dest)[1] = (src)[1];		\
+		(dest)[2] = (src)[2]
+	
+	
+	/** set dest's components to src */
+	#define Vector_SetScalar( dest, x, y, z )		\
+		(dest)[0] = x;					\
+		(dest)[1] = y;					\
+		(dest)[2] = z
+		
+	
+	/** dest = a + b */
+	#define Vector_Add( dest, a, b )		\
+		(dest)[0] = (a)[0] + (b)[0];		\
+		(dest)[1] = (a)[1] + (b)[1];		\
+		(dest)[2] = (a)[2] + (b)[2]
+		
+	
+	/** dest = a - b */
+	#define Vector_Sub( dest, a, b )		\
+		(dest)[0] = (a)[0] - (b)[0];		\
+		(dest)[1] = (a)[1] - (b)[1];		\
+		(dest)[2] = (a)[2] - (b)[2]
+		
+	
+	/** returns the dot product of a and b */
+	#define Vector_Dot( a, b )						\
+		((a)[0] * (b)[0] + (a)[1] * (b)[1] + (a)[2] * (b)[2])
+		
+	
+	/** dest = a * s */
+	#define Vector_Mult( dest, a, s )		\
+		(dest)[0] = (a)[0] * (s);		\
+		(dest)[1] = (a)[1] * (s);		\
+		(dest)[2] = (a)[2] * (s)
+		
+	
+	/** returns the magnitude of a */
+	#define Vector_Mag( a )								\
+		sqrt( (a)[0] * (a)[0] + (a)[1] * (a)[1] + (a)[2] * (a)[2] )
+		
+		
+	/*
+	** Combinations of base operations.
+	*/
+	
+	/** vector projection of a onto b, store result in dest */
+	#define Vector_Proj( dest, a, b )					\
+		Vector_Norm( (dest), (b) );					\
+		Vector_Mult( (dest), (dest), Vector_Dot( a, b ) )
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	/*
+	** Base operations.
+	*/
+	
+	/* Vector cross-product. */
+	void Vector_Cross( Coord dst, Coord a, Coord b );
+	
+	/* dest = a / s */
+	void Vector_Div( Coord dest, Coord a, double s );
+	
+	/* normalise a, store in dest */
+	void Vector_Norm( Coord dest, Coord 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 /* __Discretisation_Geometry_VectorMath_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/isinf.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/isinf.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/isinf.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_isinf_h__
+#define __Discretisation_Geometry_isinf_h__
+	
+	#include <math.h>
+	
+	#ifndef isinf
+		#define isinf( value )	( finite( value ) ? 0 : isnan( value ) ? 0 : 1 )
+	#endif
+	
+#endif /* __Discretisation_Geometry_isinf_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3677 2006-07-14 01:31:29Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+# 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 = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_CFLAGS += ${F77_SYMBOL_TRANSLATION}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBase ${RPATH_LFLAGS}
+
+packages = PETSC MPI XML
+
+ifdef SYSTEM_SIZEOF_LONG
+	PROJ_CFLAGS += -DSYSTEM_SIZEOF_LONG=${SYSTEM_SIZEOF_LONG}
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/stg_lapack.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/stg_lapack.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/stg_lapack.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+**	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 __Discretisation_Geometry_stg_lapack_h__
+#define __Discretisation_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
+#endif	
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3668 2006-07-04 09:53:10Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_types_h__
+#define __Discretisation_Geometry_types_h__
+
+
+	typedef Index		NeighbourIndex;
+
+
+	typedef double		Plane[4];
+	typedef Index		Plane_Index;
+	typedef Plane*		Plane_List;
+
+
+	typedef Index		Triangle[3];
+	typedef Index		Triangle_Index;
+	typedef Triangle*	Triangle_List;
+	
+	
+	typedef Plane		TriangleBoundary[3];
+
+
+	typedef Index		Edge[2];
+	typedef Index		Edge_Index;
+	typedef Edge*		Edge_List;
+	
+	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 /* __Discretisation_Geometry_types_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/units.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/units.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/units.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Geometry_units_h__
+#define __Discretisation_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 /* __Discretisation_Geometry_units_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 3728 2006-07-31 03:14:51Z 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 \
+	testFullTensorMath.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 \
+	testFullTensorMath.0of1.sh \
+	testTensorMultMath.0of1.sh \

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/points.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/points.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/points.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3677 2006-07-14 01:31:29Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationGeometry -lStGermainBase ${RPATH_LFLAGS}
+
+packages = PETSC MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 }
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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");
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,532 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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");
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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..

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,255 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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, area = 0, a = 0;
+			float side, voronoiArea = 0;
+			#define epsilon 0.001
+			int pass = 1;
+			
+			for( i=10; i<210; i++ ){
+				
+				p = Polygon;
+			
+				theta = 2*PI/((float)(i-1));
+				
+				sites = Memory_Alloc_Array(CoordF, i, "TestDelauney_CoordF_regPolygon" );
+				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 );
+				
+				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;
+				}
+			
+				Stg_Class_Delete( d );
+
+				Memory_Free( sites );
+			}
+
+			printf( "Regular polygon triangulation test %s\n", pass?"passed..":"failed..!" );
+		}
+		Stg_Class_Delete( dictionary );
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	DiscretisationGeometry_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 );
+			}
+		}
+	}	
+	
+	DiscretisationGeometry_Finalise();
+	Base_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] );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 }

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+StGermain Framework revision 3651. Copyright (C) 2003-2005 VPAC.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,922 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	stream = Journal_Register( InfoStream_Type, "FullTensorMath" );
+
+	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 );
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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   |
+				-------------------------
+	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+		
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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, }
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	DiscretisationGeometry_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 );
+		
+	DiscretisationGeometry_Finalise();
+	Base_Finalise();
+	MPI_Finalize();
+	
+	return 0;
+}	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 }
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+
+	Base_Init( &argc, &argv );
+	DiscretisationGeometry_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 );
+	
+	DiscretisationGeometry_Finalise();
+	Base_Finalise();
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+True
+True
+True
+False
+True
+True
+True
+True

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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" );
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,274 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+
+		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] );
+			
+				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] );
+
+					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 );
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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" );
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRMatrix.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRMatrix.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRMatrix.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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] );
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_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" );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 }
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 }
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 }

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3751 2006-08-07 04:56:57Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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 );
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,828 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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);
+
+
+
+	}
+	
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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");
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1145 @@
+StGermain Framework. 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 }
+
+****************************
+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}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,307 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, 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 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_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] );
+		Vector_SetScalar( d, 2.0, 0.5, 1.5 );
+		printf( "d = { %g, %g, %g }\n", d[0], d[1], d[2] );
+
+		Vector_Set( c, d );
+		printf( "c = d = { %g, %g, %g }\n", c[0], c[1], c[2] );
+
+		Vector_Add( b, c, d );
+		printf( "b = c + d = {%g, %g, %g}\n", b[0], b[1], b[2] );
+
+		Vector_Sub( a, d, b );
+		printf( "a = d - b = {%g, %g, %g}\n", a[0], a[1], a[2] );
+
+		Vector_Cross( d, a, e );
+		printf( "d = a x e = {%g, %g, %g}\n", d[0], d[1], d[2] );
+
+		printf( "a . c = %g\n", Vector_Dot( a, c ) );
+
+		Vector_Mult( b, b, 2.0 );
+		printf( "b = 2b = { %g, %g, %g }\n", b[0], b[1], b[2] );
+
+		Vector_Norm( 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;
+
+					Vector_Proj( c, a, b );
+
+					printf( "{ %g, %g, %g }\n", c[0], c[1], c[2] );
+				}
+			}
+		}
+
+	}
+	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");
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainDiscretisation
+
+RECURSE_DIRS = ${def_sub}
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+	@if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = Geometry Shape Mesh Utils Swarm src tests Python

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainDiscretisationMesh
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests Python

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Discretisation/Mesh
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = 
+
+def_pyc_package = StGermain/Discretisation/Mesh
+def_pyc = __init__.py Mesh.py

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Mesh.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Mesh.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Mesh.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 $"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: BodyNL.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "BodyNL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type BodyNL_Type = "BodyNL";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+BodyNL* BodyNL_DefaultNew( Name name )
+{
+	return (BodyNL*) _BodyNL_New( 
+		sizeof(BodyNL), 
+		BodyNL_Type, 
+		_BodyNL_Delete, 
+		_BodyNL_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)BodyNL_DefaultNew,
+		_BodyNL_Construct,
+		_BodyNL_Build,
+		_BodyNL_Initialise,
+		_BodyNL_Execute,
+		_BodyNL_Destroy,
+		name,
+		False,
+		_BodyNL_NodeCoordAt,
+		_BodyNL_BuildNodeCoords,
+		_BodyNL_ElementNodeCount,
+		_BodyNL_BuildElementNodes,
+		_BodyNL_NodeElementCount,
+		_BodyNL_BuildNodeElements,
+		_BodyNL_CalcNodeCountInDimFromElementCount,
+		NULL,
+		NULL,
+		NULL );
+}
+
+BodyNL* BodyNL_New(
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology )
+{
+	return _BodyNL_New( 
+		sizeof(BodyNL), 
+		BodyNL_Type, 
+		_BodyNL_Delete, 
+		_BodyNL_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)BodyNL_DefaultNew,
+		_BodyNL_Construct,
+		_BodyNL_Build,
+		_BodyNL_Initialise,
+		_BodyNL_Execute,
+		_BodyNL_Destroy,
+		name,
+		True,
+		_BodyNL_NodeCoordAt,
+		_BodyNL_BuildNodeCoords,
+		_BodyNL_ElementNodeCount,
+		_BodyNL_BuildElementNodes,
+		_BodyNL_NodeElementCount,
+		_BodyNL_BuildNodeElements,
+		_BodyNL_CalcNodeCountInDimFromElementCount,
+		dictionary,
+		elementLayout,
+		topology );
+}
+
+
+void BodyNL_Init(
+		BodyNL*						self,
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology )
+{
+	/* General info */
+	self->type = BodyNL_Type;
+	self->_sizeOfSelf = sizeof(BodyNL);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _BodyNL_Delete;
+	self->_print = _BodyNL_Print;
+	self->_copy = NULL;
+	self->nodeCoordAt = _BodyNL_NodeCoordAt;
+	self->buildNodeCoords = _BodyNL_BuildNodeCoords;
+	self->elementNodeCount = _BodyNL_ElementNodeCount;
+	self->buildElementNodes = _BodyNL_BuildElementNodes;
+	self->nodeElementCount = _BodyNL_NodeElementCount;
+	self->buildNodeElements = _BodyNL_BuildNodeElements;
+	self->calcNodeCountInDimFromElementCount = _BodyNL_CalcNodeCountInDimFromElementCount;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_NodeLayout_Init( (NodeLayout*)self, elementLayout, topology );
+	
+	/* BodyNL info */
+	_BodyNL_Init( self );
+}
+
+
+BodyNL* _BodyNL_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,
+		NodeLayout_NodeCoordAtFunction*			nodeCoordAt,
+		NodeLayout_BuildNodeCoordsFunction*		buildNodeCoords,
+		NodeLayout_ElementNodeCountFunction*		elementNodeCount,
+		NodeLayout_BuildElementNodesFunction*		buildElementNodes,
+		NodeLayout_NodeElementCountFunction*		nodeElementCount,
+		NodeLayout_BuildNodeElementsFunction*		buildNodeElements,
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction*  calcNodeCountInDimFromElementCount,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology )
+{
+	BodyNL* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(BodyNL) );
+	self = (BodyNL*)_NodeLayout_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		nodeCoordAt,
+		buildNodeCoords,
+		elementNodeCount,
+		buildElementNodes,
+		nodeElementCount,
+		buildNodeElements,
+		calcNodeCountInDimFromElementCount,
+		dictionary,
+		elementLayout,
+		topology );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* BodyNL info */
+	if( initFlag ){
+		_BodyNL_Init( self );
+	}
+	
+	return self;
+}
+
+void _BodyNL_Init(
+		BodyNL*					self )
+{
+	/* General and Virtual info should already be set */
+	
+	/* BodyNL info */
+	self->isConstructed = True;
+	self->nodeCount = self->elementLayout->elementCount;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _BodyNL_Delete( void* bodyNL ) {
+	BodyNL* self = (BodyNL*)bodyNL;
+	
+	/* Stg_Class_Delete parent */
+	_NodeLayout_Delete( self );
+}
+
+
+void _BodyNL_Print( void* bodyNL, Stream* stream ) {
+	BodyNL* self = (BodyNL*)bodyNL;
+	
+	/* Set the Journal for printing informations */
+	Stream* bodyNLStream;
+	bodyNLStream = Journal_Register( InfoStream_Type, "BodyNLStream" );
+
+	/* Print parent */
+	_NodeLayout_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "BodyNL (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* BodyNL info */
+}
+
+void _BodyNL_Construct( void* bodyNL, Stg_ComponentFactory *cf, void* data ){
+	BodyNL *self = (BodyNL*)bodyNL;
+	ElementLayout *elementLayout = NULL;
+	Topology *topology = NULL;
+
+	self->dictionary = cf->rootDict;
+	
+	elementLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  ElementLayout_Type, ElementLayout,  True, data ) ;	
+	topology =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  Topology_Type, Topology,  True, data ) ;
+	
+	_NodeLayout_Init( (NodeLayout*)self, elementLayout, topology );
+	_BodyNL_Init( self );
+}
+	
+void _BodyNL_Build( void* bodyNL, void* data ){
+	
+}
+	
+void _BodyNL_Initialise( void* bodyNL, void* data ){
+	
+}
+	
+void _BodyNL_Execute( void* bodyNL, void* data ){
+	
+}
+
+void _BodyNL_Destroy( void* bodyNL, void* data ){
+	
+}
+
+void _BodyNL_NodeCoordAt( void* bodyNL, Node_Index index, Coord coord ) {
+	BodyNL*		self = (BodyNL*)bodyNL;
+	ElementLayout*  eLayout = self->elementLayout;
+	Geometry*       geometry = eLayout->geometry;
+	Index*		indices = Memory_Alloc_Array( Index, eLayout->elementCornerCount, "BodyNL" );
+	Index		i;
+	
+	eLayout->buildCornerIndices( eLayout, index, indices );
+	coord[0] = 0.0;
+	coord[1] = 0.0;
+	coord[2] = 0.0;
+	
+	for( i = 0; i < eLayout->elementCornerCount; i++ ) {
+		Coord corner;
+		
+		geometry->pointAt( geometry, indices[i], corner );
+		coord[0] += corner[0];
+		coord[1] += corner[1];
+		coord[2] += corner[2];
+	}
+	
+	coord[0] /= (double)eLayout->elementCornerCount;
+	coord[1] /= (double)eLayout->elementCornerCount;
+	coord[2] /= (double)eLayout->elementCornerCount;
+}
+
+
+void _BodyNL_BuildNodeCoords( void* bodyNL, Coord_List coords ) {
+	BodyNL*		self = (BodyNL*)bodyNL;
+	Index		n_I;
+	
+	for( n_I = 0; n_I < self->nodeCount; n_I++ )
+		_BodyNL_NodeCoordAt( self, n_I, coords[n_I] );
+}
+
+
+Node_Index _BodyNL_ElementNodeCount( void* bodyNL, Element_GlobalIndex index ) {
+	return 1;
+}
+
+
+void _BodyNL_BuildElementNodes( void* bodyNL, Element_GlobalIndex globalIndex, Element_Nodes nodes ) {
+	nodes[0] = globalIndex;
+}
+
+
+Element_GlobalIndex _BodyNL_NodeElementCount( void* bodyNL, Node_GlobalIndex globalIndex ) {
+	return 1;
+}
+
+
+void _BodyNL_BuildNodeElements( void* bodyNL, Node_GlobalIndex globalIndex, Node_Elements elements ) {
+	elements[0] = globalIndex;
+}
+
+Node_GlobalIndex _BodyNL_CalcNodeCountInDimFromElementCount( void* nodeLayout, Element_GlobalIndex elementCountInDim )
+{
+	/* A body node layout has exactly as many nodes as elements in each dim */
+	return elementCountInDim;
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: BodyNL.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_BodyNL_h__
+#define __Discretisaton_Mesh_BodyNL_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type BodyNL_Type;
+
+	/* BodyNL information */
+	#define __BodyNL \
+		/* General info */ \
+		__NodeLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* BodyNL info ... */
+	struct _BodyNL { __BodyNL };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a BodyNL with all additional parameters */
+	BodyNL* BodyNL_DefaultNew( Name name );
+	
+	BodyNL* BodyNL_New(
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+	
+	/* Initialise a BodyNL */
+	void BodyNL_Init(
+		BodyNL*						self,
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+	
+	/* Creation implementation */
+	BodyNL* _BodyNL_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,
+		NodeLayout_NodeCoordAtFunction*			nodeCoordAt,
+		NodeLayout_BuildNodeCoordsFunction*		buildNodeCoords,
+		NodeLayout_ElementNodeCountFunction*		elementNodeCount,
+		NodeLayout_BuildElementNodesFunction*		buildElementNodes,
+		NodeLayout_NodeElementCountFunction*		nodeElementCount,
+		NodeLayout_BuildNodeElementsFunction*		buildNodeElements,
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction*  calcNodeCountInDimFromElementCount,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+	
+	/* Initialisation implementation functions */
+	void _BodyNL_Init(
+		BodyNL*						self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete bodyNL implementation */
+	void _BodyNL_Delete( void* bodyNL );
+	
+	/* Print bodyNL implementation */
+	void _BodyNL_Print( void* bodyNL, Stream* stream );
+	
+	void _BodyNL_Construct( void* bodyNL, Stg_ComponentFactory *cf, void* data );
+	
+	void _BodyNL_Build( void* bodyNL, void* data );
+	
+	void _BodyNL_Initialise( void* bodyNL, void* data );
+	
+	void _BodyNL_Execute( void* bodyNL, void* data );
+
+	void _BodyNL_Destroy( void* bodyNL, void* data );
+	
+	void _BodyNL_NodeCoordAt( void* bodyNL, Node_Index index, Coord coord );
+	
+	void _BodyNL_BuildNodeCoords( void* bodyNL, Coord_List coords );
+	
+	Node_GlobalIndex _BodyNL_ElementNodeCount( void* bodyNL, Element_GlobalIndex globalIndex );
+	
+	void _BodyNL_BuildElementNodes( void* bodyNL, Element_GlobalIndex globalIndex, Element_Nodes nodes );
+	
+	Element_GlobalIndex _BodyNL_NodeElementCount( void* bodyNL, Node_GlobalIndex globalIndex );
+	
+	void _BodyNL_BuildNodeElements( void* bodyNL, Node_GlobalIndex globalIndex, Node_Elements elements );
+	
+	Node_GlobalIndex _BodyNL_CalcNodeCountInDimFromElementCount( void* nodeLayout, Element_GlobalIndex elementCountInDim );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_BodyNL_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">BodyNL</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">NodeLayout</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">ElementLayout</param>
+		<param name="Type">ElementLayout</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 -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Topology</param>
+		<param name="Type">Topology</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 254 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1398 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Grid.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "MeshTopology.h"
+#include "MeshClass.h"
+#include "MeshGenerator.h"
+#include "CartesianGenerator.h"
+
+#include "MeshDecomp.h"
+#include "HexaMD.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, 
+					_CartesianGenerator_Copy, 
+					(void* (*)(Name))_CartesianGenerator_New, 
+					_CartesianGenerator_Construct, 
+					_CartesianGenerator_Build, 
+					_CartesianGenerator_Initialise, 
+					_CartesianGenerator_Execute, 
+					_CartesianGenerator_Destroy, 
+					name, 
+					NON_GLOBAL, 
+					CartesianGenerator_Generate );
+}
+
+CartesianGenerator* _CartesianGenerator_New( CARTESIANGENERATOR_DEFARGS ) {
+	CartesianGenerator* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(CartesianGenerator) );
+	self = (CartesianGenerator*)_MeshGenerator_New( MESHGENERATOR_PASSARGS );
+
+	/* Virtual info */
+
+	/* CartesianGenerator info */
+	_CartesianGenerator_Init( self );
+
+	return self;
+}
+
+void _CartesianGenerator_Init( CartesianGenerator* self ) {
+	self->shadowDepth = 1;
+	self->maxDecompDims = 0;
+	self->minDecomp = NULL;
+	self->maxDecomp = NULL;
+	self->crdMin = NULL;
+	self->crdMax = NULL;
+
+	self->topoGrid = NULL;
+	self->procGrid = NULL;
+	self->origin = NULL;
+	self->range = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CartesianGenerator_Delete( void* generator ) {
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+
+	CartesianGenerator_Destruct( self );
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _CartesianGenerator_Print( void* generator, Stream* stream ) {
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+	
+	/* Set the Journal for printing informations */
+	Stream* generatorStream;
+	generatorStream = Journal_Register( InfoStream_Type, "CartesianGeneratorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "CartesianGenerator (ptr): (%p)\n", self );
+	_MeshGenerator_Print( self, stream );
+}
+
+void* _CartesianGenerator_Copy( void* generator, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+	CartesianGenerator*	newCartesianGenerator;
+	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;
+	}
+	
+	newCartesianGenerator = (CartesianGenerator*)_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*)newCartesianGenerator;
+#endif
+
+	return NULL;
+}
+
+void _CartesianGenerator_Construct( void* generator, Stg_ComponentFactory* cf, void* data ) {
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+	Dictionary*		dict;
+	Dictionary_Entry_Value*	sizeList;
+	Dictionary_Entry_Value*	minList;
+	Dictionary_Entry_Value*	maxList;
+	unsigned		nDims;
+	double*			crdMin;
+	double*			crdMax;
+	unsigned*		size;
+	unsigned		rank;
+	unsigned		d_i;
+
+	HexaMD*			decomp;
+
+	assert( self );
+	assert( cf );
+
+	/* Call parent construct. */
+	_MeshGenerator_Construct( self, cf, data );
+
+	/* Check if we're using the antiquated version. */
+	decomp = Stg_ComponentFactory_ConstructByKey( cf, self->name, "decomp", HexaMD, False, data );
+	if( decomp ) {
+		/* Read the number of dimensions. */
+		dict = cf->rootDict;
+		nDims = Dictionary_GetDouble( dict, "dim" );
+
+		/* Allocate for values. */
+		crdMin = Memory_Alloc_Array_Unnamed( double, nDims );
+		crdMax = Memory_Alloc_Array_Unnamed( double, nDims );
+		size = Memory_Alloc_Array_Unnamed( unsigned, nDims );
+
+		/* Read size and coords. */
+		size[0] = Dictionary_GetUnsignedInt( dict, "elementResI" );
+		crdMin[0] = Dictionary_GetDouble( dict, "minX" );
+		crdMax[0] = Dictionary_GetDouble( dict, "maxX" );
+		if( nDims >= 2 ) {
+			size[1] = Dictionary_GetUnsignedInt( dict, "elementResJ" );
+			crdMin[1] = Dictionary_GetDouble( dict, "minY" );
+			crdMax[1] = Dictionary_GetDouble( dict, "maxY" );
+
+			if( nDims >= 3 ) {
+				size[2] = Dictionary_GetUnsignedInt( dict, "elementResK" );
+				crdMin[2] = Dictionary_GetDouble( dict, "minZ" );
+				crdMax[2] = Dictionary_GetDouble( dict, "maxZ" );
+			}
+		}
+
+		/* Read shadow depth. */
+		self->shadowDepth = Dictionary_GetUnsignedInt( dict, "shadowDepth" );
+
+		/* Setup. */
+		CartesianGenerator_SetTopologyParams( self, nDims, size, 0, NULL, NULL );
+		CartesianGenerator_SetGeometryParams( self, crdMin, crdMax );
+
+		/* Free stuff. */
+		FreeArray( size );
+		FreeArray( crdMin );
+		FreeArray( crdMax );
+
+		/* Make sure we're the same decomp as old mesh. */
+		Grid_SetSizes( self->procGrid, decomp->partition3DCounts );
+		MPI_Comm_rank( self->comm, (int*)&rank );
+		for( d_i = 0; d_i < nDims; d_i++ ) {
+			self->origin[d_i] = decomp->_elementOffsets[rank][d_i];
+			self->range[d_i] = decomp->elementLocal3DCounts[rank][d_i];
+		}
+	}
+	else {
+		/* 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 );
+		nDims = Dictionary_Entry_Value_GetCount( sizeList );
+		assert( nDims );
+		size = Memory_Alloc_Array_Unnamed( unsigned, nDims );
+		for( d_i = 0; d_i < nDims; d_i++ )
+			size[d_i] = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value_GetElement( sizeList, d_i ) );
+
+		/* Initial setup. */
+		CartesianGenerator_SetTopologyParams( self, nDims, size, 0, NULL, NULL );
+
+		/* Read geometry. */
+		minList = Dictionary_Get( dict, "coordMin" );
+		maxList = Dictionary_Get( dict, "coordMax" );
+		if( minList && maxList ) {
+			assert( Dictionary_Entry_Value_GetCount( sizeList ) == nDims );
+			assert( Dictionary_Entry_Value_GetCount( sizeList ) == nDims );
+			crdMin = Memory_Alloc_Array_Unnamed( double, nDims );
+			crdMax = Memory_Alloc_Array_Unnamed( double, nDims );
+			for( d_i = 0; d_i < nDims; d_i++ ) {
+				crdMin[d_i] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetElement( minList, d_i ) );
+				crdMax[d_i] = Dictionary_Entry_Value_AsDouble( Dictionary_Entry_Value_GetElement( maxList, d_i ) );
+			}
+
+			/* Initial setup. */
+			CartesianGenerator_SetGeometryParams( self, crdMin, crdMax );
+
+			/* Free coordinate arrays. */
+			FreeArray( crdMin );
+			FreeArray( crdMax );
+		}
+
+		/* Free stuff. */
+		FreeArray( size );
+	}
+}
+
+void _CartesianGenerator_Build( void* generator, void* data ) {
+	_MeshGenerator_Build( generator, data );
+}
+
+void _CartesianGenerator_Initialise( void* generator, void* data ) {
+}
+
+void _CartesianGenerator_Execute( void* generator, void* data ) {
+}
+
+void _CartesianGenerator_Destroy( void* generator, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void CartesianGenerator_SetTopologyParams( void* generator, unsigned nDims, unsigned* sizes, 
+					   unsigned maxDecompDims, unsigned* minDecomp, unsigned* maxDecomp )
+{
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !nDims || sizes );
+	assert( nDims <= 3 );
+
+	/* Kill everything we have, topologically. */
+	KillObject( self->topoGrid );
+	KillObject( self->procGrid );
+	KillArray( self->origin );
+	KillArray( self->range );
+
+	/* Set the parameters. */
+	self->topoGrid = Grid_New();
+	Grid_SetNDims( self->topoGrid, nDims );
+	Grid_SetSizes( self->topoGrid, sizes );
+
+	/* Allocate and set restrictions. */
+	self->minDecomp = Memory_Alloc_Array( unsigned, nDims, "CartesianGenerator::minDecomp" );
+	self->maxDecomp = Memory_Alloc_Array( unsigned, nDims, "CartesianGenerator::maxDecomp" );
+
+	if( minDecomp )
+		memcpy( self->minDecomp, minDecomp, nDims * sizeof(unsigned) );
+	else
+		memset( self->minDecomp, 0, nDims * sizeof(unsigned) );
+
+	if( maxDecomp )
+		memcpy( self->maxDecomp, maxDecomp, nDims * sizeof(unsigned) );
+	else
+		memset( self->maxDecomp, 0, nDims * sizeof(unsigned) );
+
+	self->maxDecompDims = maxDecompDims;
+
+	/* As soon as we know the topology, we can decompose. */
+	CartesianGenerator_BuildDecomp( self );
+}
+
+void CartesianGenerator_SetGeometryParams( void* generator, double* min, double* max ) {
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !self->topoGrid->nDims || (min && max) );
+
+	/* Kill everything we have, geometrically. */
+	KillArray( self->crdMin );
+	KillArray( self->crdMax );
+
+	/* Set the parameters. */
+	if( self->topoGrid->nDims ) {
+		self->crdMin = Memory_Alloc_Array( double, self->topoGrid->nDims, "CartesianGenerator::min" );
+		self->crdMax = Memory_Alloc_Array( double, self->topoGrid->nDims, "CartesianGenerator::max" );
+		memcpy( self->crdMin, min, self->topoGrid->nDims * sizeof(double) );
+		memcpy( self->crdMax, max, self->topoGrid->nDims * sizeof(double) );
+	}
+}
+
+void CartesianGenerator_Generate( void* generator, void* _mesh ) {
+	CartesianGenerator*	self = (CartesianGenerator*)generator;
+	Mesh*			mesh = (Mesh*)_mesh;
+	unsigned*		gSize;
+	unsigned*		lSize;
+	unsigned*		offs;
+	double*			min;
+	double*			max;
+	unsigned		d_i;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !self->topoGrid || mesh );
+
+	/* If we havn't been given anything, don't do anything. */
+	if( self->topoGrid ) {
+		/* Fill topological values. */
+		MeshTopology_SetNDims( mesh->topo, self->topoGrid->nDims );
+		CartesianGenerator_GenTopo( self, mesh->topo );
+
+		/* Fill geometric values. */
+		CartesianGenerator_GenGeom( self, mesh );
+	}
+	else {
+		MeshTopology_SetNDims( mesh->topo, 0 );
+	}
+
+	/* Add an extension to the mesh and fill with cartesian information. */
+	ExtensionManager_AddArray( mesh->info, "cartesianGlobalSize", sizeof(unsigned), self->topoGrid->nDims );
+	ExtensionManager_AddArray( mesh->info, "cartesianLocalSize", sizeof(unsigned), self->topoGrid->nDims );
+	ExtensionManager_AddArray( mesh->info, "cartesianLocalOffset", sizeof(unsigned), self->topoGrid->nDims );
+	ExtensionManager_AddArray( mesh->info, "cartesianMinCoord", sizeof(double), self->topoGrid->nDims );
+	ExtensionManager_AddArray( mesh->info, "cartesianMaxCoord", sizeof(double), self->topoGrid->nDims );
+	gSize = (unsigned*)ExtensionManager_Get( mesh->info, mesh, 
+						 ExtensionManager_GetHandle( mesh->info, "cartesianGlobalSize" ) );
+	lSize = (unsigned*)ExtensionManager_Get( mesh->info, mesh, 
+						 ExtensionManager_GetHandle( mesh->info, "cartesianLocalSize" ) );
+	offs = (unsigned*)ExtensionManager_Get( mesh->info, mesh, 
+						ExtensionManager_GetHandle( mesh->info, "cartesianLocalOffset" ) );
+	min = (double*)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "cartesianMinCoord" ) );
+	max = (double*)ExtensionManager_Get( mesh->info, mesh, 
+					     ExtensionManager_GetHandle( mesh->info, "cartesianMaxCoord" ) );
+	for( d_i = 0; d_i < self->topoGrid->nDims; d_i++ ) {
+		gSize[d_i] = self->topoGrid->sizes[d_i];
+		lSize[d_i] = self->range[d_i];
+		offs[d_i] = self->origin[d_i];
+		min[d_i] = self->crdMin[d_i];
+		max[d_i] = self->crdMax[d_i];
+	}
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void CartesianGenerator_BuildDecomp( CartesianGenerator* self ) {
+	unsigned	nProcs, rank;
+	unsigned	nPos = 0;
+	unsigned**	posNSubDomains = NULL;
+	unsigned*	tmpSubDomains;
+	double		bestRatio;
+	unsigned	bestPos;
+	unsigned	p_i, d_i;
+
+	/* Sanity check. */
+	assert( self );
+
+	/* Collect information regarding parallel configuration. */
+	MPI_Comm_size( self->comm, (int*)&nProcs );
+	MPI_Comm_rank( self->comm, (int*)&rank );
+
+	/* Allocate for possible sub-domains. */
+	tmpSubDomains = Memory_Alloc_Array( unsigned, self->topoGrid->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->topoGrid->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->topoGrid->nDims; d_i++ ) {
+			double		nI = (double)self->topoGrid->sizes[d_i] / (double)posNSubDomains[p_i][d_i];
+			unsigned	d_j;
+
+			for( d_j = d_i + 1; d_j < self->topoGrid->nDims; d_j++ ) {
+				double	nJ = (double)self->topoGrid->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->topoGrid->nDims, "CartesianGenerator::origin" );
+	self->range = Memory_Alloc_Array( unsigned, self->topoGrid->nDims, "CartesianGenerator::range" );
+
+	/* Build a sub-domain grid. */
+	self->procGrid = Grid_New();
+	Grid_SetNDims( self->procGrid, self->topoGrid->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->topoGrid->nDims; d_i++ ) {
+		unsigned	base = self->topoGrid->sizes[d_i] / self->procGrid->sizes[d_i];
+		unsigned	mod = self->topoGrid->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;
+	}
+}
+
+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->comm, (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->topoGrid->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->topoGrid->nDims );
+			}
+			else {
+				/* Reallocate the arrays. */
+				(*nPos)++;
+				if( *nPos != 2 ) {
+					*posNSubDomains = Memory_Realloc_2DArray( *posNSubDomains, unsigned, 
+										  *nPos, self->topoGrid->nDims );
+				}
+			}
+
+			/* Store status. */
+			memcpy( (*posNSubDomains)[(*nPos) - 1], nSubDomains, self->topoGrid->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->topoGrid->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, MeshTopology* topo ) {
+	Grid***		grids;
+	unsigned	d_i;
+
+	assert( self );
+	assert( topo );
+
+	MeshTopology_SetNDims( topo, self->topoGrid->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->topoGrid;
+
+	grids[0][0] = Grid_New();
+	Grid_SetNDims( grids[0][0], topo->nDims );
+	for( d_i = 0; d_i < topo->nDims; d_i++ )
+		self->topoGrid->sizes[d_i]++;
+	Grid_SetSizes( grids[0][0], self->topoGrid->sizes );
+	for( d_i = 0; d_i < topo->nDims; d_i++ )
+		self->topoGrid->sizes[d_i]--;
+
+	grids[1][0] = Grid_New();
+	Grid_SetNDims( grids[1][0], topo->nDims );
+	grids[0][0]->sizes[0]--;
+	Grid_SetSizes( grids[1][0], grids[0][0]->sizes );
+	grids[0][0]->sizes[0]++;
+
+	if( topo->nDims >= 2 ) {
+		grids[1][1] = Grid_New();
+		Grid_SetNDims( grids[1][1], topo->nDims );
+		grids[0][0]->sizes[1]--;
+		Grid_SetSizes( grids[1][1], grids[0][0]->sizes );
+		grids[0][0]->sizes[1]++;
+
+		if( topo->nDims >= 3 ) {
+			grids[1][2] = Grid_New();
+			Grid_SetNDims( grids[1][2], topo->nDims );
+			grids[0][0]->sizes[2]--;
+			Grid_SetSizes( grids[1][2], grids[0][0]->sizes );
+			grids[0][0]->sizes[2]++;
+
+			grids[2][0] = Grid_New();
+			Grid_SetNDims( grids[2][0], topo->nDims );
+			grids[0][0]->sizes[0]--;
+			grids[0][0]->sizes[1]--;
+			Grid_SetSizes( grids[2][0], grids[0][0]->sizes );
+			grids[0][0]->sizes[0]++;
+			grids[0][0]->sizes[1]++;
+
+			grids[2][1] = Grid_New();
+			Grid_SetNDims( grids[2][1], topo->nDims );
+			grids[0][0]->sizes[0]--;
+			grids[0][0]->sizes[2]--;
+			Grid_SetSizes( grids[2][1], grids[0][0]->sizes );
+			grids[0][0]->sizes[0]++;
+			grids[0][0]->sizes[2]++;
+
+			grids[2][2] = Grid_New();
+			Grid_SetNDims( grids[2][2], topo->nDims );
+			grids[0][0]->sizes[1]--;
+			grids[0][0]->sizes[2]--;
+			Grid_SetSizes( grids[2][2], grids[0][0]->sizes );
+			grids[0][0]->sizes[1]++;
+			grids[0][0]->sizes[2]++;
+		}
+	}
+
+	/* Generate topological elements. */
+	CartesianGenerator_GenElements( self, topo, grids );
+	CartesianGenerator_GenVertices( self, topo, grids );
+	if( topo->nDims >= 2 ) {
+		CartesianGenerator_GenEdges( self, topo, grids );
+		if( topo->nDims >= 3 )
+			CartesianGenerator_GenFaces( self, topo, grids );
+	}
+
+	/* Generate topological incidence. */
+	CartesianGenerator_GenEdgeVertexInc( self, topo, grids );
+	if( topo->nDims >= 2 ) {
+		CartesianGenerator_GenFaceEdgeInc( self, topo, grids );
+		if( topo->nDims >= 3 )
+			CartesianGenerator_GenVolumeFaceInc( self, topo, grids );
+	}
+
+	/* Set the shadow depth and correct incidence. */
+	if( self->shadowDepth && topo->domains[MT_VERTEX]->commTopo->nProcs > 1 ) {
+		/* Build enough incidence to set shadow depth. */
+		CartesianGenerator_GenElementVertexInc( self, topo, grids );
+		if( topo->nDims >= 3 )
+			MeshTopology_Cascade( topo, MT_VOLUME, MT_EDGE );
+		MeshTopology_Invert( topo, MT_VERTEX, topo->nDims );
+		MeshTopology_Invert( topo, MT_VERTEX, MT_EDGE );
+		MeshTopology_Neighbourhood( topo, MT_VERTEX );
+		MeshTopology_Neighbourhood( topo, topo->nDims );
+
+		MeshTopology_SetShadowDepth( topo, self->shadowDepth );
+
+		/* Kill up relations and neighbours. */
+		for( d_i = 0; d_i < topo->nDims; d_i++ ) {
+			unsigned	d_j;
+
+			for( d_j = d_i; d_j < topo->nTDims; d_j++ ) {
+				KillArray( topo->nIncEls[d_i][d_j] );
+				KillArray( topo->incEls[d_i][d_j] );
+			}
+		}
+		KillArray( topo->nIncEls[topo->nDims][topo->nDims] );
+		KillArray( topo->incEls[topo->nDims][topo->nDims] );
+
+		/* Kill cascaded relations. */
+		for( d_i = 2; d_i < topo->nTDims; d_i++ ) {
+			unsigned	d_j;
+
+			for( d_j = 0; d_j < d_i - 1; d_j++ ) {
+				KillArray( topo->nIncEls[d_i][d_j] );
+				KillArray( topo->incEls[d_i][d_j] );
+			}
+		}
+	}
+
+	/* Complete all relations. */
+	/*MeshTopology_Complete( topo );*/
+
+	/* Free allocated grids. */
+	grids[topo->nDims][0] = NULL;
+	for( d_i = 0; 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_GenElements( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	Grid*		grid;
+	unsigned	nEls;
+	unsigned*	els;
+	unsigned*	dimInds;
+	unsigned	d_i, e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+
+	grid = Grid_New();
+	Grid_SetNDims( grid, self->topoGrid->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->topoGrid->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->topoGrid, dimInds );
+	}
+
+	MeshTopology_SetElements( topo, self->topoGrid->nDims, nEls, els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+}
+
+void CartesianGenerator_GenVertices( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	Grid*		globalGrid;
+	Grid*		grid;
+	unsigned	nEls;
+	unsigned*	els;
+	unsigned*	dimInds;
+	unsigned	d_i, e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+
+	globalGrid = Grid_New();
+	Grid_SetNDims( globalGrid, self->topoGrid->nDims );
+	for( d_i = 0; d_i < globalGrid->nDims; d_i++ )
+		self->topoGrid->sizes[d_i]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	for( d_i = 0; d_i < globalGrid->nDims; d_i++ )
+		self->topoGrid->sizes[d_i]--;
+
+	grid = Grid_New();
+	Grid_SetNDims( grid, self->topoGrid->nDims );
+	for( d_i = 0; d_i < grid->nDims; d_i++ )
+		self->range[d_i]++;
+	Grid_SetSizes( grid, self->range );
+	for( d_i = 0; d_i < grid->nDims; d_i++ )
+		self->range[d_i]--;
+
+	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->topoGrid->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( globalGrid, dimInds );
+	}
+
+	MeshTopology_SetElements( topo, MT_VERTEX, nEls, els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+}
+
+void CartesianGenerator_GenEdges( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	assert( self );
+	assert( topo );
+	assert( self->topoGrid->nDims >= 2 );
+	assert( self->topoGrid->nDims <= 3 );
+
+	if( self->topoGrid->nDims == 2 )
+		CartesianGenerator_GenEdges2D( self, topo, grids );
+	else
+		CartesianGenerator_GenEdges3D( self, topo, grids );
+}
+
+void CartesianGenerator_GenEdges2D( CartesianGenerator* self, MeshTopology* 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->topoGrid->nDims == 2 );
+
+	globalGrid = Grid_New();
+	Grid_SetNDims( globalGrid, self->topoGrid->nDims );
+	self->topoGrid->sizes[1]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->sizes[1]--;
+
+	grid = Grid_New();
+	Grid_SetNDims( grid, self->topoGrid->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->topoGrid->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->topoGrid->sizes[0]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->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 );
+	}
+
+	MeshTopology_SetElements( topo, MT_EDGE, nEls[0] + nEls[1], els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+}
+
+void CartesianGenerator_GenEdges3D( CartesianGenerator* self, MeshTopology* 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->topoGrid->nDims == 3 );
+
+	globalGrid = Grid_New();
+	Grid_SetNDims( globalGrid, self->topoGrid->nDims );
+	self->topoGrid->sizes[1]++;
+	self->topoGrid->sizes[2]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->sizes[1]--;
+	self->topoGrid->sizes[2]--;
+
+	grid = Grid_New();
+	Grid_SetNDims( grid, self->topoGrid->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->topoGrid->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->topoGrid->sizes[0]++;
+	self->topoGrid->sizes[2]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->sizes[0]--;
+	self->topoGrid->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->topoGrid->sizes[0]++;
+	self->topoGrid->sizes[1]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->sizes[0]--;
+	self->topoGrid->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 );
+	}
+
+	MeshTopology_SetElements( topo, MT_EDGE, nEls[0] + nEls[1] + nEls[2], els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+}
+
+void CartesianGenerator_GenFaces( CartesianGenerator* self, MeshTopology* 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->topoGrid->nDims == 3 );
+
+	globalGrid = Grid_New();
+	Grid_SetNDims( globalGrid, self->topoGrid->nDims );
+	self->topoGrid->sizes[2]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->sizes[2]--;
+
+	grid = Grid_New();
+	Grid_SetNDims( grid, self->topoGrid->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->topoGrid->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->topoGrid->sizes[1]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->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->topoGrid->sizes[0]++;
+	Grid_SetSizes( globalGrid, self->topoGrid->sizes );
+	self->topoGrid->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 );
+	}
+
+	MeshTopology_SetElements( topo, MT_FACE, nEls[0] + nEls[1] + nEls[2], els );
+
+	FreeArray( dimInds );
+	FreeArray( els );
+	FreeObject( grid );
+	FreeObject( globalGrid );
+}
+
+void CartesianGenerator_GenElementVertexInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	unsigned*	nIncEls;
+	unsigned**	incEls;
+	unsigned*	dimInds;
+	unsigned	vertsPerEl;
+	unsigned	e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+
+	vertsPerEl = (topo->nDims == 1) ? 2 : (topo->nDims == 2) ? 4 : 8;
+
+	nIncEls = Memory_Alloc_Array_Unnamed( unsigned, topo->nDomainEls[topo->nDims] );
+	incEls = Memory_Alloc_2DArray_Unnamed( unsigned, topo->nDomainEls[topo->nDims], vertsPerEl );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->nDomainEls[topo->nDims]; e_i++ ) {
+		unsigned	gInd = Decomp_Sync_DomainToGlobal( topo->domains[topo->nDims], e_i );
+
+		nIncEls[e_i] = vertsPerEl;
+		Grid_Lift( grids[topo->nDims][0], gInd, dimInds );
+
+		incEls[e_i][0] = Grid_Project( grids[0][0], dimInds );
+
+		dimInds[0]++;
+		incEls[e_i][1] = Grid_Project( grids[0][0], dimInds );
+		dimInds[0]--;
+
+		if( topo->nDims >= 2 ) {
+			dimInds[1]++;
+			incEls[e_i][2] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[e_i][3] = Grid_Project( grids[0][0], dimInds );
+			dimInds[0]--;
+			dimInds[1]--;
+
+			if( topo->nDims >= 3 ) {
+				dimInds[2]++;
+				incEls[e_i][4] = Grid_Project( grids[0][0], dimInds );
+
+				dimInds[0]++;
+				incEls[e_i][5] = Grid_Project( grids[0][0], dimInds );
+				dimInds[0]--;
+
+				dimInds[1]++;
+				incEls[e_i][6] = Grid_Project( grids[0][0], dimInds );
+
+				dimInds[0]++;
+				incEls[e_i][7] = Grid_Project( grids[0][0], dimInds );
+				dimInds[0]--;
+				dimInds[1]--;
+				dimInds[2]--;
+			}
+		}
+	}
+
+	CartesianGenerator_MapToDomain( self, topo->domains[MT_VERTEX], topo->nDomainEls[topo->nDims], nIncEls, incEls );
+	MeshTopology_SetIncidence( topo, topo->nDims, MT_VERTEX, nIncEls, incEls );
+	FreeArray( nIncEls );
+	FreeArray( incEls );
+	FreeArray( dimInds );
+}
+
+void CartesianGenerator_GenVolumeFaceInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	unsigned*	nIncEls;
+	unsigned**	incEls;
+	unsigned*	dimInds;
+	unsigned	e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+	assert( topo->nDims >= 3 );
+
+	nIncEls = Memory_Alloc_Array_Unnamed( unsigned, topo->nDomainEls[topo->nDims] );
+	incEls = Memory_Alloc_2DArray_Unnamed( unsigned, topo->nDomainEls[topo->nDims], 6 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->nDomainEls[MT_VOLUME]; e_i++ ) {
+		unsigned	gInd = Decomp_Sync_DomainToGlobal( topo->domains[MT_VOLUME], e_i );
+
+		nIncEls[e_i] = 6;
+		Grid_Lift( grids[topo->nDims][0], gInd, dimInds );
+
+		incEls[e_i][0] = Grid_Project( grids[2][0], dimInds );
+
+		dimInds[2]++;
+		incEls[e_i][1] = Grid_Project( grids[2][0], dimInds );
+		dimInds[2]--;
+
+		incEls[e_i][2] = Grid_Project( grids[2][1], dimInds ) + grids[2][0]->nPoints;
+
+		dimInds[1]++;
+		incEls[e_i][3] = Grid_Project( grids[2][1], dimInds ) + grids[2][0]->nPoints;
+		dimInds[1]--;
+
+		incEls[e_i][4] = Grid_Project( grids[2][2], dimInds ) + grids[2][0]->nPoints + grids[2][1]->nPoints;
+
+		dimInds[0]++;
+		incEls[e_i][5] = Grid_Project( grids[2][2], dimInds ) + grids[2][0]->nPoints + grids[2][1]->nPoints;
+		dimInds[0]--;
+	}
+
+	CartesianGenerator_MapToDomain( self, topo->domains[MT_FACE], topo->nDomainEls[MT_VOLUME], nIncEls, incEls );
+	MeshTopology_SetIncidence( topo, MT_VOLUME, MT_FACE, nIncEls, incEls );
+	FreeArray( nIncEls );
+	FreeArray( incEls );
+	FreeArray( dimInds );
+}
+
+void CartesianGenerator_GenFaceEdgeInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	unsigned*	nIncEls;
+	unsigned**	incEls;
+	unsigned*	dimInds;
+	unsigned	e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+	assert( topo->nDims >= 2 );
+
+	nIncEls = Memory_Alloc_Array_Unnamed( unsigned, topo->nDomainEls[MT_FACE] );
+	incEls = Memory_Alloc_2DArray_Unnamed( unsigned, topo->nDomainEls[MT_FACE], 4 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->nDomainEls[MT_FACE]; e_i++ ) {
+		unsigned	gInd = Decomp_Sync_DomainToGlobal( topo->domains[MT_FACE], e_i );
+
+		nIncEls[e_i] = 4;
+
+		if( gInd < grids[2][0]->nPoints ) {
+			Grid_Lift( grids[2][0], gInd, dimInds );
+
+			incEls[e_i][0] = Grid_Project( grids[1][0], dimInds );
+
+			dimInds[1]++;
+			incEls[e_i][1] = Grid_Project( grids[1][0], dimInds );
+			dimInds[1]--;
+
+			incEls[e_i][2] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+
+			dimInds[0]++;
+			incEls[e_i][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[e_i][0] = Grid_Project( grids[1][0], dimInds );
+
+			dimInds[2]++;
+			incEls[e_i][1] = Grid_Project( grids[1][0], dimInds );
+			dimInds[2]--;
+
+			incEls[e_i][2] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+
+			dimInds[0]++;
+			incEls[e_i][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[e_i][0] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+
+			dimInds[2]++;
+			incEls[e_i][1] = Grid_Project( grids[1][1], dimInds ) + grids[1][0]->nPoints;
+			dimInds[2]--;
+
+			incEls[e_i][2] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+
+			dimInds[1]++;
+			incEls[e_i][3] = Grid_Project( grids[1][2], dimInds ) + grids[1][0]->nPoints + grids[1][1]->nPoints;
+			dimInds[1]--;
+		}
+	}
+
+	CartesianGenerator_MapToDomain( self, topo->domains[MT_EDGE], topo->nDomainEls[MT_FACE], nIncEls, incEls );
+	MeshTopology_SetIncidence( topo, MT_FACE, MT_EDGE, nIncEls, incEls );
+	FreeArray( nIncEls );
+	FreeArray( incEls );
+	FreeArray( dimInds );
+}
+
+void CartesianGenerator_GenEdgeVertexInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids ) {
+	unsigned*	nIncEls;
+	unsigned**	incEls;
+	unsigned*	dimInds;
+	unsigned	e_i;
+
+	assert( self );
+	assert( topo );
+	assert( grids );
+
+	nIncEls = Memory_Alloc_Array_Unnamed( unsigned, topo->nDomainEls[MT_EDGE] );
+	incEls = Memory_Alloc_2DArray_Unnamed( unsigned, topo->nDomainEls[MT_EDGE], 2 );
+	dimInds = Memory_Alloc_Array_Unnamed( unsigned, topo->nDims );
+	for( e_i = 0; e_i < topo->nDomainEls[MT_EDGE]; e_i++ ) {
+		unsigned	gInd = Decomp_Sync_DomainToGlobal( topo->domains[MT_EDGE], e_i );
+
+		nIncEls[e_i] = 2;
+
+		if( gInd < grids[1][0]->nPoints ) {
+			Grid_Lift( grids[1][0], gInd, dimInds );
+
+			incEls[e_i][0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[0]++;
+			incEls[e_i][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[e_i][0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[1]++;
+			incEls[e_i][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[e_i][0] = Grid_Project( grids[0][0], dimInds );
+
+			dimInds[2]++;
+			incEls[e_i][1] = Grid_Project( grids[0][0], dimInds );
+			dimInds[2]--;
+		}
+	}
+
+	CartesianGenerator_MapToDomain( self, topo->domains[MT_VERTEX], topo->nDomainEls[MT_EDGE], nIncEls, incEls );
+	MeshTopology_SetIncidence( topo, MT_EDGE, MT_VERTEX, nIncEls, incEls );
+	FreeArray( nIncEls );
+	FreeArray( incEls );
+	FreeArray( dimInds );
+}
+
+void CartesianGenerator_MapToDomain( CartesianGenerator* self, Decomp_Sync* sync, 
+				     unsigned size, unsigned* nIncEls, unsigned** incEls )
+{
+	unsigned	e_i;
+
+	assert( self );
+	assert( sync );
+	assert( nIncEls );
+	assert( incEls );
+
+	for( e_i = 0; e_i < size; e_i++ ) {
+		unsigned	inc_i;
+
+		for( inc_i = 0; inc_i < nIncEls[e_i]; inc_i++ )
+			incEls[e_i][inc_i] = Decomp_Sync_GlobalToDomain( sync, incEls[e_i][inc_i] );
+	}
+}
+
+void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh ) {
+	Grid*		grid;
+	unsigned*	inds;
+	double*		steps;
+	unsigned	n_i, d_i;
+
+	assert( self );
+	assert( mesh );
+
+	/* Build grid and space for indices. */
+	grid = Grid_New();
+	Grid_SetNDims( grid, mesh->topo->nDims );
+	for( d_i = 0; d_i < mesh->topo->nDims; d_i++ )
+		self->topoGrid->sizes[d_i]++;
+	Grid_SetSizes( grid, self->topoGrid->sizes );
+	for( d_i = 0; d_i < mesh->topo->nDims; d_i++ )
+		self->topoGrid->sizes[d_i]--;
+	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. */
+	mesh->nodeCoord = Memory_Alloc_Array( Coord, MeshTopology_GetDomainSize( mesh->topo, MT_VERTEX ), 
+					      "Mesh::nodeCoord" );
+
+	/* Loop over domain nodes. */
+	for( n_i = 0; n_i < MeshTopology_GetDomainSize( mesh->topo, MT_VERTEX ); n_i++ ) {
+		unsigned	gNode;
+
+		gNode = MeshTopology_DomainToGlobal( mesh->topo, MT_VERTEX, n_i );
+		Grid_Lift( grid, gNode, inds );
+
+		/* Calculate coordinate. */
+		for( d_i = 0; d_i < mesh->topo->nDims; d_i++ ) {
+			mesh->nodeCoord[n_i][d_i] = self->crdMin[d_i] + 
+				((double)inds[d_i] / (double)self->topoGrid->sizes[d_i]) * steps[d_i];
+		}
+	}
+
+	/* Free resources. */
+	FreeArray( inds );
+	FreeArray( steps );
+	FreeObject( grid );
+}
+
+void CartesianGenerator_Destruct( CartesianGenerator* self ) {
+	assert( self );
+
+	FreeObject( self->topoGrid );
+	FreeArray( self->crdMin );
+	FreeArray( self->crdMax );
+	FreeObject( self->procGrid );
+	FreeArray( self->origin );
+	FreeArray( self->range );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: CartesianGenerator.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_CartesianGenerator_h__
+#define __Discretisaton_Mesh_CartesianGenerator_h__
+
+	/** Textual name of this class */
+	extern const Type CartesianGenerator_Type;
+
+	/** Virtual function types */
+
+	/** CartesianGenerator class contents */
+	#define __CartesianGenerator		\
+		/* General info */		\
+		__MeshGenerator			\
+						\
+		/* Virtual info */		\
+						\
+		/* CartesianGenerator info */	\
+		unsigned	maxDecompDims;	\
+		unsigned*	minDecomp;	\
+		unsigned*	maxDecomp;	\
+		unsigned	shadowDepth;	\
+		double*		crdMin;		\
+		double*		crdMax;		\
+						\
+		Grid*		topoGrid;	\
+		Grid*		procGrid;	\
+		unsigned*	origin;		\
+		unsigned*	range;
+
+	struct CartesianGenerator { __CartesianGenerator };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define CARTESIANGENERATOR_DEFARGS	\
+		MESHGENERATOR_DEFARGS
+
+	#define CARTESIANGENERATOR_PASSARGS	\
+		MESHGENERATOR_PASSARGS
+
+	CartesianGenerator* CartesianGenerator_New( Name name );
+	CartesianGenerator* _CartesianGenerator_New( CARTESIANGENERATOR_DEFARGS );
+	void _CartesianGenerator_Init( CartesianGenerator* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _CartesianGenerator_Delete( void* generator );
+	void _CartesianGenerator_Print( void* generator, Stream* stream );
+
+	#define CartesianGenerator_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CartesianGenerator_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _CartesianGenerator_Copy( void* generator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _CartesianGenerator_Construct( void* generator, Stg_ComponentFactory* cf, void* data );
+	void _CartesianGenerator_Build( void* generator, void* data );
+	void _CartesianGenerator_Initialise( void* generator, void* data );
+	void _CartesianGenerator_Execute( void* generator, void* data );
+	void _CartesianGenerator_Destroy( void* generator, void* data );
+
+	void CartesianGenerator_Generate( void* generator, void* _mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void CartesianGenerator_SetTopologyParams( void* generator, unsigned nDims, unsigned* sizes, 
+						   unsigned maxDecompDims, unsigned* minDecomp, unsigned* maxDecomp );
+	void CartesianGenerator_SetGeometryParams( void* generator, double* min, double* max );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** 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, MeshTopology* topo );
+	void CartesianGenerator_GenElements( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenVertices( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenEdges( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenEdges2D( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenEdges3D( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenFaces( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenElementVertexInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenVolumeFaceInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenFaceEdgeInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_GenEdgeVertexInc( CartesianGenerator* self, MeshTopology* topo, Grid*** grids );
+	void CartesianGenerator_MapToDomain( CartesianGenerator* self, Decomp_Sync* sync, 
+					     unsigned size, unsigned* nIncEls, unsigned** incEls );
+	void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh );
+	void CartesianGenerator_Destruct( CartesianGenerator* self );
+
+#endif /* __Discretisaton_Mesh_CartesianGenerator_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">CartesianGenerator</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+
+
+/* Textual name of this class */
+const Type CommTopology_Type = "CommTopology";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+CommTopology* CommTopology_New( Name name ) {
+	return _CommTopology_New( sizeof(CommTopology), 
+				  CommTopology_Type, 
+				  _CommTopology_Delete, 
+				  _CommTopology_Print, 
+				  _CommTopology_Copy, 
+				  (void* (*)(Name))_CommTopology_New, 
+				  _CommTopology_Construct, 
+				  _CommTopology_Build, 
+				  _CommTopology_Initialise, 
+				  _CommTopology_Execute, 
+				  _CommTopology_Destroy, 
+				  name, 
+				  NON_GLOBAL );
+}
+
+CommTopology* _CommTopology_New( COMMTOPOLOGY_DEFARGS ) {
+	CommTopology* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(CommTopology) );
+	self = (CommTopology*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+
+	/* CommTopology info */
+	_CommTopology_Init( self );
+
+	return self;
+}
+
+void _CommTopology_Init( CommTopology* self ) {
+	self->comm = MPI_COMM_WORLD;
+	MPI_Comm_size( self->comm, (int*)&self->nProcs );
+	MPI_Comm_rank( self->comm, (int*)&self->rank );
+	self->nInc = 0;
+	self->inc = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CommTopology_Delete( void* generator ) {
+	CommTopology*	self = (CommTopology*)generator;
+
+	CommTopology_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _CommTopology_Print( void* generator, Stream* stream ) {
+	CommTopology*	self = (CommTopology*)generator;
+	
+	/* Set the Journal for printing informations */
+	Stream* generatorStream;
+	generatorStream = Journal_Register( InfoStream_Type, "CommTopologyStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "CommTopology (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void* _CommTopology_Copy( void* generator, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	CommTopology*	self = (CommTopology*)generator;
+	CommTopology*	newCommTopology;
+	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;
+	}
+	
+	newCommTopology = (CommTopology*)_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*)newCommTopology;
+#endif
+
+	return NULL;
+}
+
+void _CommTopology_Construct( void* generator, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _CommTopology_Build( void* generator, void* data ) {
+}
+
+void _CommTopology_Initialise( void* generator, void* data ) {
+}
+
+void _CommTopology_Execute( void* generator, void* data ) {
+}
+
+void _CommTopology_Destroy( void* generator, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void CommTopology_SetComm( void* commTopology, MPI_Comm comm ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+
+	CommTopology_Destruct( self );
+	self->comm = comm;
+	MPI_Comm_size( comm, (int*)&self->nProcs );
+	MPI_Comm_rank( comm, (int*)&self->rank );
+}
+
+
+void CommTopology_SetIncidence( void* commTopology, unsigned nInc, unsigned* inc ) {
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+	assert( !nInc || inc );
+#ifndef NDEBUG
+	{
+		unsigned	inc_i;
+
+		for( inc_i = 0; inc_i < nInc; inc_i++ ) {
+			assert( inc[inc_i] < self->nProcs );
+			assert( inc[inc_i] != self->rank );
+		}
+	}
+#endif
+
+	self->nInc = nInc;
+	if( nInc ) {
+		if( !self->inc )
+			self->inc = Memory_Alloc_Array( unsigned, nInc, "CommTopology::inc" );
+		else
+			self->inc = Memory_Realloc_Array( self->inc, unsigned, nInc );
+		memcpy( self->inc, inc, nInc * sizeof(unsigned) );
+		qsort( self->inc, nInc, sizeof(unsigned), CommTopology_CmpRanks );
+	}
+	else {
+		KillArray( self->inc );
+	}
+}
+
+
+void CommTopology_GetIncidence( void* commTopology, unsigned proc, 
+				unsigned* nInc, unsigned** inc )
+{
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+	assert( proc < self->nProcs );
+	assert( nInc && inc );
+
+	if( proc == self->rank ) {
+		*nInc = self->nInc;
+		*inc = self->inc;
+	}
+	else {
+		fprintf( stderr, "*** Error: Processor topology does not yet support retrieving\n" );
+		fprintf( stderr, "***        incidence from other processors.\n" );
+		abort();
+	}
+}
+
+
+void CommTopology_ReturnIncidence( void* commTopology, unsigned proc, 
+				   unsigned* nInc, unsigned** inc )
+{
+	CommTopology*	self = (CommTopology*)commTopology;
+
+	assert( self );
+	assert( proc < self->nProcs );
+	assert( nInc && inc );
+
+	if( proc != self->rank )
+		KillArray( *inc );
+	else
+		*inc = NULL;
+	*nInc = 0;
+}
+
+
+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;
+	unsigned*	tmpSizes;
+	Stg_Byte**	nbrArrays;
+	unsigned	p_i;
+
+	assert( self );
+	assert( !srcSize || srcArray );
+	assert( dstSizes );
+	assert( dstArrays );
+
+	/* Skip this if we have no neighbours. */
+	if( !self->nInc ) {
+		*dstSizes = NULL;
+		*dstArrays = NULL;
+		return;
+	}
+
+	/* Need space for neighbour sizes. */
+	nbrSizes = Memory_Alloc_Array_Unnamed( unsigned, self->nInc );
+	tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, self->nInc );
+
+	/* 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->nInc; p_i++ ) {
+		unsigned	nbr = self->inc[p_i];
+
+		MPI_Sendrecv( &srcSize, 1, MPI_UNSIGNED, nbr, tag, 
+			      nbrSizes + p_i, 1, MPI_UNSIGNED, nbr, tag, 
+			      self->comm, &status );
+
+		tmpSizes[p_i] = nbrSizes[p_i] * itemSize;
+	}
+
+	/* Allocate space for results. */
+	nbrArrays = Memory_Alloc_2DComplex_Unnamed( Stg_Byte, self->nInc, tmpSizes );
+
+	/* Transfer arrays. */
+	for( p_i = 0; p_i < self->nInc; p_i++ ) {
+		unsigned	nbr = self->inc[p_i];
+
+		MPI_Sendrecv( srcArray, srcSize * itemSize, MPI_BYTE, nbr, tag, 
+			      nbrArrays[p_i], tmpSizes[p_i], MPI_BYTE, nbr, tag, 
+			      self->comm, &status );
+	}
+
+	/* Free temporary sizes. */
+	FreeArray( tmpSizes );
+
+	/* 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;
+	unsigned*	tmpSizes;
+	Stg_Byte**	nbrArrays;
+	unsigned	p_i;
+
+	assert( self );
+	assert( !srcSizes || srcArrays );
+	assert( dstSizes );
+	assert( dstArrays );
+
+	/* Skip this if we have no neighbours. */
+	if( !self->nInc ) {
+		*dstSizes = NULL;
+		*dstArrays = NULL;
+		return;
+	}
+
+	/* Need space for neighbour sizes. */
+	nbrSizes = Memory_Alloc_Array_Unnamed( unsigned, self->nInc );
+	tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, self->nInc );
+
+	/* 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->nInc; p_i++ ) {
+		unsigned	nbr = self->inc[p_i];
+
+		MPI_Sendrecv( srcSizes + p_i, 1, MPI_UNSIGNED, nbr, tag, 
+			      nbrSizes + p_i, 1, MPI_UNSIGNED, nbr, tag, 
+			      self->comm, &status );
+
+		tmpSizes[p_i] = nbrSizes[p_i] * itemSize;
+	}
+
+	/* Allocate space for results. */
+	nbrArrays = Memory_Alloc_2DComplex_Unnamed( Stg_Byte, self->nInc, tmpSizes );
+
+	/* Transfer arrays. */
+	for( p_i = 0; p_i < self->nInc; p_i++ ) {
+		unsigned	nbr = self->inc[p_i];
+
+		MPI_Sendrecv( srcArrays[p_i], srcSizes[p_i] * itemSize, MPI_BYTE, nbr, tag, 
+			      nbrArrays[p_i], tmpSizes[p_i], MPI_BYTE, nbr, tag, 
+			      self->comm, &status );
+	}
+
+	/* Free temporary sizes. */
+	FreeArray( tmpSizes );
+
+	/* 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->inc );
+	self->nInc = 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: CommTopology.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_CommTopology_h__
+#define __Discretisaton_Mesh_CommTopology_h__
+
+	/** Textual name of this class */
+	extern const Type CommTopology_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __CommTopology				\
+		/* General info */			\
+		__Stg_Component				\
+							\
+		/* Virtual info */			\
+							\
+		/* CommTopology info */			\
+		MPI_Comm		comm;		\
+		unsigned		nProcs;		\
+		unsigned		rank; 		\
+							\
+		unsigned		nInc;		\
+		unsigned*		inc;
+
+	struct CommTopology { __CommTopology };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define COMMTOPOLOGY_DEFARGS	\
+		STG_COMPONENT_DEFARGS
+
+	#define COMMTOPOLOGY_PASSARGS	\
+		STG_COMPONENT_PASSARGS
+
+	CommTopology* CommTopology_New( Name name );
+	CommTopology* _CommTopology_New( COMMTOPOLOGY_DEFARGS );
+	void _CommTopology_Init( CommTopology* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _CommTopology_Delete( void* generator );
+	void _CommTopology_Print( void* generator, Stream* stream );
+
+	#define CommTopology_Copy( self )				\
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CommTopology_DeepCopy( self )				\
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _CommTopology_Copy( void* generator, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _CommTopology_Construct( void* generator, Stg_ComponentFactory* cf, void* data );
+	void _CommTopology_Build( void* generator, void* data );
+	void _CommTopology_Initialise( void* generator, void* data );
+	void _CommTopology_Execute( void* generator, void* data );
+	void _CommTopology_Destroy( void* generator, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void CommTopology_SetComm( void* commTopology, MPI_Comm comm );
+	void CommTopology_SetIncidence( void* commTopology, unsigned nInc, unsigned* inc );
+
+	void CommTopology_GetIncidence( void* commTopology, unsigned proc, 
+					unsigned* nInc, unsigned** inc );
+	void CommTopology_ReturnIncidence( void* commTopology, unsigned proc, 
+					   unsigned* nInc, unsigned** inc );
+	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 );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	int CommTopology_CmpRanks( const void* rank0, const void* rank1 );
+	void CommTopology_Destruct( CommTopology* self );
+
+#endif /* __Discretisaton_Mesh_CommTopology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">CommTopology</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: CornerNL.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "CornerNL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type CornerNL_Type = "CornerNL";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+CornerNL* CornerNL_DefaultNew( Name name )
+{
+	return (CornerNL*)_CornerNL_New( 
+		sizeof(CornerNL), 
+		CornerNL_Type, 
+		_CornerNL_Delete, 
+		_CornerNL_Print,
+		_CornerNL_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CornerNL_DefaultNew,
+		_CornerNL_Construct,
+		_CornerNL_Build,
+		_CornerNL_Initialise,
+		_CornerNL_Execute,
+		_CornerNL_Destroy,
+		name,
+		False,
+		_CornerNL_NodeCoordAt,
+		_CornerNL_BuildNodeCoords,
+		_CornerNL_ElementNodeCount,
+		_CornerNL_BuildElementNodes,
+		_CornerNL_NodeElementCount,
+		_CornerNL_BuildNodeElements,
+		_CornerNL_CalcNodeCountInDimFromElementCount,
+		NULL,
+		NULL,
+		NULL );
+}
+	
+CornerNL* CornerNL_New(
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology )
+{
+	return _CornerNL_New( 
+		sizeof(CornerNL), 
+		CornerNL_Type, 
+		_CornerNL_Delete, 
+		_CornerNL_Print,
+		_CornerNL_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CornerNL_DefaultNew,
+		_CornerNL_Construct,
+		_CornerNL_Build,
+		_CornerNL_Initialise,
+		_CornerNL_Execute,
+		_CornerNL_Destroy,
+		name,
+		True,
+		_CornerNL_NodeCoordAt,
+		_CornerNL_BuildNodeCoords,
+		_CornerNL_ElementNodeCount,
+		_CornerNL_BuildElementNodes,
+		_CornerNL_NodeElementCount,
+		_CornerNL_BuildNodeElements,
+		_CornerNL_CalcNodeCountInDimFromElementCount,
+		dictionary,
+		elementLayout,
+		topology );
+}
+
+void CornerNL_Init(
+		CornerNL*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology )
+{
+	/* General info */
+	self->type = CornerNL_Type;
+	self->_sizeOfSelf = sizeof(CornerNL);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _CornerNL_Delete;
+	self->_print = _CornerNL_Print;
+	self->_copy = _CornerNL_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)CornerNL_DefaultNew;
+	self->_construct = _CornerNL_Construct;
+	self->_build = _CornerNL_Build;
+	self->_initialise = _CornerNL_Initialise;
+	self->_execute = _CornerNL_Execute;
+	self->_destroy = _CornerNL_Destroy;
+	self->nodeCoordAt = _CornerNL_NodeCoordAt;
+	self->buildNodeCoords = _CornerNL_BuildNodeCoords;
+	self->elementNodeCount = _CornerNL_ElementNodeCount;
+	self->buildElementNodes = _CornerNL_BuildElementNodes;
+	self->nodeElementCount = _CornerNL_NodeElementCount;
+	self->buildNodeElements = _CornerNL_BuildNodeElements;
+	self->calcNodeCountInDimFromElementCount = _CornerNL_CalcNodeCountInDimFromElementCount;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_NodeLayout_Init( (NodeLayout*)self, elementLayout, topology );
+	
+	/* CornerNL info */
+	_CornerNL_Init( self );
+}
+
+CornerNL* _CornerNL_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,
+		NodeLayout_NodeCoordAtFunction*			nodeCoordAt,
+		NodeLayout_BuildNodeCoordsFunction*		buildNodeCoords,
+		NodeLayout_ElementNodeCountFunction*		elementNodeCount,
+		NodeLayout_BuildElementNodesFunction*		buildElementNodes,
+		NodeLayout_NodeElementCountFunction*		nodeElementCount,
+		NodeLayout_BuildNodeElementsFunction*		buildNodeElements,
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction*  calcNodeCountInDimFromElementCount,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology)
+{
+	CornerNL* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(CornerNL) );
+	self = (CornerNL*)_NodeLayout_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		nodeCoordAt,
+		buildNodeCoords,
+		elementNodeCount,
+		buildElementNodes,
+		nodeElementCount,
+		buildNodeElements,
+		calcNodeCountInDimFromElementCount,
+		dictionary,
+		elementLayout,
+		topology );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* CornerNL info */
+	if( initFlag ){
+		_CornerNL_Init( self );
+	}
+	
+	return self;
+}
+
+void _CornerNL_Init(
+		CornerNL*					self )
+{
+	/* General and Virtual info should already be set */
+	
+	/* CornerNL info */
+	self->isConstructed = True;
+	self->nodeCount = self->elementLayout->geometry->pointCount;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CornerNL_Delete( void* cornerNL ) {
+	CornerNL* self = (CornerNL*)cornerNL;
+	
+	/* Stg_Class_Delete parent */
+	_NodeLayout_Delete( self );
+}
+
+
+void _CornerNL_Print( void* cornerNL, Stream* stream ) {
+	CornerNL* self = (CornerNL*)cornerNL;
+	
+	/* Set the Journal for printing informations */
+	Stream* cornerNLStream;
+	cornerNLStream = Journal_Register( InfoStream_Type, "CornerNLStream" );
+
+	/* Print parent */
+	_NodeLayout_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "CornerNL (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* CornerNL info */
+}
+	
+void _CornerNL_Construct( void* cornerNL, Stg_ComponentFactory* cf, void* data ){
+	CornerNL *self = (CornerNL*)cornerNL;
+	ElementLayout *elementLayout = NULL;
+	Topology *topology = NULL;
+
+	self->dictionary = cf->rootDict;
+	
+	elementLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  ElementLayout_Type, ElementLayout,  True, data ) ;	
+	topology =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  Topology_Type, Topology,  True, data ) ;
+	
+	_NodeLayout_Init( (NodeLayout*)self, elementLayout, topology );
+	_CornerNL_Init( self );
+}
+	
+void _CornerNL_Build( void* cornerNL, void* data ){
+	
+}
+	
+void _CornerNL_Initialise( void* cornerNL, void* data ){
+	
+}
+	
+void _CornerNL_Execute( void* cornerNL, void* data ){
+	
+}
+	
+void _CornerNL_Destroy( void* cornerNL, void* data ){
+	
+}
+
+void* _CornerNL_Copy( void* cornerNL, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	CornerNL*	self = (CornerNL*)cornerNL;
+	CornerNL*	newCornerNL;
+	
+	newCornerNL = (CornerNL*)_NodeLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	return (void*)newCornerNL;
+}
+
+
+void _CornerNL_NodeCoordAt( void* cornerNL, Node_Index index, Coord coord ) {
+	CornerNL*       self = (CornerNL*)cornerNL;
+	Geometry*       geometry = self->elementLayout->geometry;
+	
+	geometry->pointAt( geometry, index, coord );
+}
+
+
+void _CornerNL_BuildNodeCoords( void* cornerNL, Coord_List coords ) {
+	CornerNL*	self = (CornerNL*)cornerNL;
+	Geometry*       geometry = self->elementLayout->geometry;
+	
+	geometry->buildPoints( geometry, coords );
+}
+
+
+Node_Index _CornerNL_ElementNodeCount( void* cornerNL, Element_GlobalIndex index ) {
+	CornerNL* self = (CornerNL*)cornerNL;
+	
+	return self->elementLayout->elementCornerCount;
+}
+
+
+void _CornerNL_BuildElementNodes( void* cornerNL, Element_GlobalIndex globalIndex, Element_Nodes nodes ) {
+	CornerNL*       self = (CornerNL*)cornerNL;
+	ElementLayout*  eLayout = self->elementLayout;
+	
+	eLayout->buildCornerIndices( eLayout, globalIndex, nodes );
+}
+
+
+Element_GlobalIndex _CornerNL_NodeElementCount( void* cornerNL, Node_GlobalIndex globalIndex ) {
+	CornerNL*	self = (CornerNL*)cornerNL;
+	ElementLayout*  eLayout = self->elementLayout;
+	
+	return eLayout->cornerElementCount( eLayout, globalIndex );
+}
+
+
+void _CornerNL_BuildNodeElements( void* cornerNL, Node_GlobalIndex globalIndex, Node_Elements elements ) {
+	CornerNL*	self = (CornerNL*)cornerNL;
+	ElementLayout*    eLayout = self->elementLayout;
+	
+	eLayout->buildCornerElements( eLayout, globalIndex, elements );
+}
+
+
+Node_GlobalIndex _CornerNL_CalcNodeCountInDimFromElementCount( void* nodeLayout, Element_GlobalIndex elementCountInDim )
+{
+	/* Corner node layout means we just add 1 to the element count to account for the 2 ends */
+	return elementCountInDim+1;
+}
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,164 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: CornerNL.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_CornerNL_h__
+#define __Discretisaton_Mesh_CornerNL_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type CornerNL_Type;
+
+	/* CornerNL information */
+	#define __CornerNL \
+		/* General info */ \
+		__NodeLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* CornerNL info ... */
+	struct _CornerNL { __CornerNL };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a CornerNL with all additional parameters */
+	CornerNL* CornerNL_DefaultNew( Name name );
+	
+	CornerNL* CornerNL_New(
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+
+	void CornerNL_LoadFromDict( void* nodeLayout, Dictionary* subDict, Dictionary* dictionary, Stg_ObjectList* objList);
+	
+	/* Initialise a CornerNL */
+	void CornerNL_Init(
+		CornerNL*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+	
+	/* Creation implementation */
+	CornerNL* _CornerNL_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,
+		NodeLayout_NodeCoordAtFunction*			nodeCoordAt,
+		NodeLayout_BuildNodeCoordsFunction*		buildNodeCoords,
+		NodeLayout_ElementNodeCountFunction*		elementNodeCount,
+		NodeLayout_BuildElementNodesFunction*		buildElementNodes,
+		NodeLayout_NodeElementCountFunction*		nodeElementCount,
+		NodeLayout_BuildNodeElementsFunction*		buildNodeElements,
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction*  calcNodeCountInDimFromElementCount,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+
+	/* Initialisation implementation functions */
+	void _CornerNL_Init(
+		CornerNL*					self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete cornerNL implementation */
+	void _CornerNL_Delete( void* cornerNL );
+	
+	/* Print cornerNL implementation */
+	void _CornerNL_Print( void* cornerNL, Stream* stream );
+	
+	void _CornerNL_Construct( void* cornerNL, Stg_ComponentFactory* cf, void* data );
+	
+	void _CornerNL_Build( void* cornerNL, void* data );
+	
+	void _CornerNL_Initialise( void* cornerNL, void* data );
+	
+	void _CornerNL_Execute( void* cornerNL, void* data );
+	
+	void _CornerNL_Destroy( void* cornerNL, void* data );
+	
+	/* Copy */
+	#define CornerNL_Copy( self ) \
+		(CornerNL*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CornerNL_DeepCopy( self ) \
+		(CornerNL*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _CornerNL_Copy( void* cornerNL, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _CornerNL_NodeCoordAt( void* cornerNL, Node_Index index, Coord coord );
+	
+	void _CornerNL_BuildNodeCoords( void* cornerNL, Coord_List coords );
+	
+	Node_GlobalIndex _CornerNL_ElementNodeCount( void* cornerNL, Element_GlobalIndex globalIndex );
+	
+	void _CornerNL_BuildElementNodes( void* cornerNL, Element_GlobalIndex globalIndex, Element_Nodes nodes );
+	
+	Element_GlobalIndex _CornerNL_NodeElementCount( void* cornerNL, Node_GlobalIndex globalIndex );
+	
+	void _CornerNL_BuildNodeElements( void* cornerNL, Node_GlobalIndex globalIndex, Node_Elements elements );
+	
+	Node_GlobalIndex _CornerNL_CalcNodeCountInDimFromElementCount( void* nodeLayout, Element_GlobalIndex elementCountInDim );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_CornerNL_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CornerNL</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">NodeLayout</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">ElementLayout</param>
+		<param name="Type">ElementLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 257 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Topology</param>
+		<param name="Type">Topology</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 258 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,374 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <mpi.h>
+
+#include "Base/Base.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp_Sync.h"
+#include "Decomp.h"
+
+
+/* Textual name of this class */
+const Type Decomp_Type = "Decomp";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Decomp* Decomp_New( Name name ) {
+	return _Decomp_New( sizeof(Decomp), 
+			    Decomp_Type, 
+			    _Decomp_Delete, 
+			    _Decomp_Print, 
+			    _Decomp_Copy, 
+			    (void* (*)(Name))_Decomp_New, 
+			    _Decomp_Construct, 
+			    _Decomp_Build, 
+			    _Decomp_Initialise, 
+			    _Decomp_Execute, 
+			    _Decomp_Destroy, 
+			    name, 
+			    NON_GLOBAL );
+}
+
+Decomp* _Decomp_New( DECOMP_DEFARGS ) {
+	Decomp* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomp) );
+	self = (Decomp*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+
+	/* Decomp info */
+	_Decomp_Init( self );
+
+	return self;
+}
+
+void _Decomp_Init( Decomp* self ) {
+	self->comm = MPI_COMM_WORLD;
+
+	self->nGlobals = 0;
+	self->nLocals = 0;
+	self->locals = NULL;
+
+	self->glMap = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Decomp_Delete( void* decomp ) {
+	Decomp*	self = (Decomp*)decomp;
+
+	Decomp_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _Decomp_Print( void* decomp, Stream* stream ) {
+	Decomp*	self = (Decomp*)decomp;
+	
+	/* Set the Journal for printing informations */
+	Stream* decompStream;
+	decompStream = Journal_Register( InfoStream_Type, "DecompStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "Decomp (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void* _Decomp_Copy( void* decomp, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	Decomp*	self = (Decomp*)decomp;
+	Decomp*	newDecomp;
+	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 = (Decomp*)_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;
+#endif
+
+	return NULL;
+}
+
+void _Decomp_Construct( void* decomp, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Decomp_Build( void* decomp, void* data ) {
+}
+
+void _Decomp_Initialise( void* decomp, void* data ) {
+}
+
+void _Decomp_Execute( void* decomp, void* data ) {
+}
+
+void _Decomp_Destroy( void* decomp, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+#define DECOMP_OK		0x0000
+#define DECOMP_OVERLAPPING	0x0001
+#define DECOMP_INCOMPLETE	0x0002
+
+void Decomp_SetComm( void* decomp, MPI_Comm comm ) {
+	Decomp*	self = (Decomp*)decomp;
+
+	assert( self );
+
+	Decomp_Destruct( self );
+
+	self->comm = comm;
+}
+
+void Decomp_SetLocals( void* decomp, unsigned nLocals, unsigned* locals ) {
+	Decomp*		self = (Decomp*)decomp;
+	unsigned	status;
+
+	assert( self );
+	assert( !nLocals || locals );
+
+	Decomp_DestructLocals( self );
+
+	/* Store local information. */
+	self->nLocals = nLocals;
+	self->locals = Memory_Alloc_Array( unsigned, nLocals, "Decomp::locals" );
+	memcpy( self->locals, locals, nLocals * sizeof(unsigned) );
+
+	/* Validate the domain. */
+	Decomp_ValidateDomain( self, &status );
+	assert( status == DECOMP_OK );
+
+	/* Build global to local map. */
+	Decomp_BuildGLMap( self );
+}
+
+void Decomp_AddSync( void* decomp, Decomp_Sync* sync ) {
+	Decomp*		self = (Decomp*)decomp;
+
+	assert( self );
+	assert( sync );
+
+	if( !self->nSyncs )
+		self->syncs = Memory_Alloc_Array( Decomp_Sync*, ++self->nSyncs, "Decomp::syncs" );
+	else
+		self->syncs = Memory_Realloc_Array( self->syncs, Decomp_Sync*, ++self->nSyncs );
+	self->syncs[self->nSyncs - 1] = sync;
+}
+
+void Decomp_RemoveSync( void* decomp, Decomp_Sync* sync ) {
+	Decomp*		self = (Decomp*)decomp;
+	unsigned	s_i = 0;
+
+	assert( self );
+	assert( sync );
+
+	while( self->syncs[s_i++] != sync && s_i < self->nSyncs );
+	assert( s_i <= self->nSyncs );
+	for( ; s_i < self->nSyncs; s_i++ )
+		self->syncs[s_i - 1] = self->syncs[s_i];
+
+	if( --self->nSyncs == 0 ) {
+		KillArray( self->syncs );
+	}
+	else
+		self->syncs = Memory_Realloc_Array( self->syncs, Decomp_Sync*, self->nSyncs );
+}
+
+Bool Decomp_IsLocal( void* decomp, unsigned global ) {
+	Decomp*	self = (Decomp*)decomp;
+
+	assert( self );
+	assert( global < self->nGlobals );
+	assert( self->glMap );
+
+	return UIntMap_HasKey( self->glMap, global );
+}
+
+unsigned Decomp_LocalToGlobal( void* decomp, unsigned local ) {
+	Decomp*	self = (Decomp*)decomp;
+
+	assert( self );
+	assert( local < self->nLocals );
+	assert( self->locals );
+
+	return self->locals[local];
+}
+
+unsigned Decomp_GlobalToLocal( void* decomp, unsigned global ) {
+	Decomp*	self = (Decomp*)decomp;
+
+	assert( self );
+	assert( global < self->nGlobals );
+	assert( self->glMap );
+
+	return UIntMap_Map( self->glMap, global );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomp_BuildGLMap( Decomp* self ) {
+	UIntMap*	map;
+	unsigned	l_i;
+
+	FreeObject( self->glMap );
+
+	map = UIntMap_New();
+	for( l_i = 0; l_i < self->nLocals; l_i++ )
+		UIntMap_Insert( map, self->locals[l_i], l_i );
+	self->glMap = map;
+}
+
+void Decomp_ValidateDomain( Decomp* self, unsigned* status ) {
+	unsigned	rank, nProcs;
+	unsigned	nBytes;
+	Stg_Byte*		bytes;
+	unsigned	tag = 6669;
+	RangeSet*	lSet;
+	RangeSet*	gSet;
+	unsigned	netInds;
+
+	assert( self );
+
+	/* Clear the status. */
+	*status = DECOMP_OK;
+
+	/* Get basic MPI info. */
+	MPI_Comm_rank( self->comm, (int*)&rank );
+	MPI_Comm_size( self->comm, (int*)&nProcs );
+
+	/* Create a local range set. */
+	lSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, self->nLocals, self->locals );
+
+	/* Create a global range set. */
+	gSet = RangeSet_New();
+
+	/* Receive from previous rank. */
+	if( rank > 0 ) {
+		MPI_Status	mpiStatus;
+
+		MPI_Recv( &nBytes, 1, MPI_UNSIGNED, rank - 1, tag, self->comm, &mpiStatus );
+		bytes = Memory_Alloc_Array_Unnamed( Stg_Byte, nBytes );
+		MPI_Recv( bytes, nBytes, MPI_BYTE, rank - 1, tag, self->comm, &mpiStatus );
+		RangeSet_Unpickle( gSet, nBytes, bytes );
+		FreeArray( bytes );
+	}
+
+	/* Combine sets. */
+	RangeSet_Union( gSet, lSet );
+
+	if( rank < nProcs - 1 ) {
+		RangeSet_Pickle( gSet, &nBytes, &bytes );
+		MPI_Send( &nBytes, 1, MPI_UNSIGNED, rank + 1, tag, self->comm );
+		MPI_Send( bytes, nBytes, MPI_BYTE, rank + 1, tag, self->comm );
+		FreeArray( bytes );
+	}
+	else {
+		self->nGlobals = RangeSet_GetNIndices( gSet );
+		if( RangeSet_GetNRanges( gSet ) > 1 )
+			*status |= DECOMP_INCOMPLETE;
+	}
+
+	/* Transfer global count to all. */
+	MPI_Bcast( &self->nGlobals, 1, MPI_UNSIGNED, nProcs - 1, self->comm );
+
+	/* Check for overlap. */
+	MPI_Allreduce( &lSet->nInds, &netInds, 1, MPI_UNSIGNED, MPI_SUM, self->comm );
+	if( netInds != self->nGlobals )
+		*status |= DECOMP_OVERLAPPING;
+
+	/* Free the sets. */
+	FreeObject( lSet );
+	FreeObject( gSet );
+}
+
+void Decomp_Destruct( Decomp* self ) {
+	Decomp_DestructLocals( self );
+}
+
+void Decomp_DestructLocals( Decomp* self ) {
+	Decomp_DestructSyncs( self );
+	self->nLocals = 0;
+	KillArray( self->locals );
+	KillObject( self->glMap );
+}
+
+void Decomp_DestructSyncs( Decomp* self ) {
+	unsigned	s_i;
+	unsigned	tmpNSyncs;
+	Decomp_Sync**	tmpSyncs;
+
+	tmpNSyncs = self->nSyncs;
+	tmpSyncs = Memory_Alloc_Array_Unnamed( Decomp_Sync*, tmpNSyncs );
+	memcpy( tmpSyncs, self->syncs, tmpNSyncs * sizeof(Decomp_Sync*) );
+	for( s_i = 0; s_i < tmpNSyncs; s_i++ )
+		Decomp_Sync_SetDecomp( tmpSyncs[s_i], NULL );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Decomp.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_Decomp_h__
+#define __Discretisaton_Mesh_Decomp_h__
+
+	/** Textual name of this class */
+	extern const Type Decomp_Type;
+
+	/** Virtual function types */
+
+	/** Class contents */
+	#define __Decomp				\
+		/* General info */			\
+		__Stg_Component				\
+							\
+		/* Virtual info */			\
+							\
+		/* Decomp info */			\
+		MPI_Comm		comm;		\
+							\
+		unsigned		nGlobals;	\
+		unsigned		nLocals;	\
+		unsigned*		locals;		\
+							\
+		UIntMap*		glMap;		\
+							\
+		unsigned		nSyncs;		\
+		Decomp_Sync**		syncs;
+
+	struct Decomp { __Decomp };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMP_DEFARGS		\
+		STG_COMPONENT_DEFARGS
+
+	#define DECOMP_PASSARGS		\
+		STG_COMPONENT_PASSARGS
+
+	Decomp* Decomp_New( Name name );
+	Decomp* _Decomp_New( DECOMP_DEFARGS );
+	void _Decomp_Init( Decomp* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Decomp_Delete( void* decomp );
+	void _Decomp_Print( void* decomp, Stream* stream );
+
+	#define Decomp_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Decomp_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Decomp_Copy( void* decomp, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _Decomp_Construct( void* decomp, Stg_ComponentFactory* cf, void* data );
+	void _Decomp_Build( void* decomp, void* data );
+	void _Decomp_Initialise( void* decomp, void* data );
+	void _Decomp_Execute( void* decomp, void* data );
+	void _Decomp_Destroy( void* decomp, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Decomp_SetComm( void* decomp, MPI_Comm comm );
+	void Decomp_SetLocals( void* decomp, unsigned nLocals, unsigned* locals );
+	void Decomp_AddSync( void* decomp, Decomp_Sync* sync );
+	void Decomp_RemoveSync( void* decomp, Decomp_Sync* sync );
+
+	Bool Decomp_IsLocal( void* decomp, unsigned global );
+	unsigned Decomp_GlobalToLocal( void* decomp, unsigned global );
+	unsigned Decomp_LocalToGlobal( void* decomp, unsigned local );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomp_BuildGLMap( Decomp* self );
+	void Decomp_ValidateDomain( Decomp* self, unsigned* status );
+	void Decomp_Destruct( Decomp* self );
+	void Decomp_DestructLocals( Decomp* self );
+	void Decomp_DestructSyncs( Decomp* self );
+
+#endif /* __Discretisaton_Mesh_Decomp_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Decomp</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,674 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.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;
+	unsigned	rank;
+	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;
+	MPI_Comm_rank( commTopo->comm, (int*)&rank );
+
+	/* 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, rank, &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, 
+			      commTopo->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 = self->decomps[0]->comm;
+	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_IsLocal( self->decomps[1], self->incIndices[1][ind_i] ) ) {
+			mappedInd = Decomp_GlobalToLocal( self->decomps[1], self->incIndices[1][ind_i] );
+			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 );
+	MPIArray2D_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->nInc ) {
+	self->nSnks = Memory_Alloc_Array( unsigned, self->commTopo->nInc, "DecompTransfer::nSnks" );
+	self->nSrcs = Memory_Alloc_Array( unsigned, self->commTopo->nInc, "DecompTransfer::nSrcs" );
+	self->snks = Memory_Alloc_Array( unsigned*, self->commTopo->nInc, "DecompTransfer::nSnks" );
+	self->srcs = Memory_Alloc_Array( unsigned*, self->commTopo->nInc, "DecompTransfer::nSrcs" );
+	for( p_i = 0; p_i < nProcs; p_i++ ) {
+		unsigned	incRank;
+
+		incRank = self->commTopo->inc[p_i];
+		if( retSets[incRank] )
+			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] )
+			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->nInc; p_i++ ) {
+		self->netSnks += self->nSnks[p_i];
+		for( ind_i = 0; ind_i < self->nSnks[p_i]; ind_i++ ) {
+			self->snks[p_i][ind_i] = UIntMap_Map( invMap, self->snks[p_i][ind_i] );
+			self->snks[p_i][ind_i] = Decomp_GlobalToLocal( self->decomps[0], self->snks[p_i][ind_i] );
+		}
+
+		self->netSrcs += self->nSrcs[p_i];
+		for( ind_i = 0; ind_i < self->nSrcs[p_i]; ind_i++ )
+			self->srcs[p_i][ind_i] = Decomp_GlobalToLocal( self->decomps[1], self->srcs[p_i][ind_i] );
+	}
+	FreeObject( invMap );
+}
+
+void DecompTransfer_BuildArray( DecompTransfer* self, DecompTransfer_Array* array ) {
+	CommTopology*	commTopo;
+	unsigned	rank;
+	unsigned	nInc;
+	unsigned*	inc;
+
+	assert( self );
+	assert( self->commTopo );
+
+	/* Shortcuts. */
+	commTopo = self->commTopo;
+	MPI_Comm_rank( commTopo->comm, (int*)&rank );
+
+	/* Extract incidence. */
+	CommTopology_GetIncidence( commTopo, rank, &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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_DecompTransfer_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_DecompTransfer_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">DecompTransfer</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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 "Base/Base.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "Decomp_Sync_Claim.h"
+#include "Decomp_Sync_Negotiate.h"
+#include "Decomp_Sync.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, 
+				 _Decomp_Sync_Copy, 
+				 (void* (*)(Name))_Decomp_Sync_New, 
+				 _Decomp_Sync_Construct, 
+				 _Decomp_Sync_Build, 
+				 _Decomp_Sync_Initialise, 
+				 _Decomp_Sync_Execute, 
+				 _Decomp_Sync_Destroy, 
+				 name, 
+				 NON_GLOBAL );
+}
+
+Decomp_Sync* _Decomp_Sync_New( DECOMP_SYNC_DEFARGS ) {
+	Decomp_Sync* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(Decomp_Sync) );
+	self = (Decomp_Sync*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+
+	/* Decomp_Sync info */
+	_Decomp_Sync_Init( self );
+
+	return self;
+}
+
+void _Decomp_Sync_Init( Decomp_Sync* self ) {
+	self->decomp = NULL;
+	self->commTopo = NULL;
+
+	self->claim = Decomp_Sync_Claim_New( "" );
+	self->negotiate = Decomp_Sync_Negotiate_New( "" );
+
+	self->nRemotes = 0;
+	self->remotes = NULL;
+	self->nShared = 0;
+	self->shared = 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 _Decomp_Sync_Delete( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	Decomp_Sync_Destruct( self );
+	FreeObject( self->claim );
+	FreeObject( self->negotiate );
+
+	/* Delete the parent. */
+	_Stg_Component_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_Component_Print( self, stream );
+}
+
+void* _Decomp_Sync_Copy( void* sync, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	Decomp_Sync*	newDecomp_Sync;
+	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 = (Decomp_Sync*)_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;
+#endif
+
+	return NULL;
+}
+
+void _Decomp_Sync_Construct( void* sync, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _Decomp_Sync_Build( void* sync, void* data ) {
+}
+
+void _Decomp_Sync_Initialise( void* sync, void* data ) {
+}
+
+void _Decomp_Sync_Execute( void* sync, void* data ) {
+}
+
+void _Decomp_Sync_Destroy( void* sync, void* data ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Decomp_Sync_SetDecomp( void* sync, Decomp* decomp ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_Destruct( self );
+
+	self->decomp = decomp;
+	if( decomp )
+		Decomp_AddSync( decomp, self );
+}
+
+void Decomp_Sync_SetClaim( void* sync, Decomp_Sync_Claim* claim ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+	FreeObject( self->claim );
+
+	if( claim )
+		self->claim = claim;
+	else
+		self->claim = Decomp_Sync_Claim_New( "" );
+}
+
+void Decomp_Sync_SetNegotiate( void* sync, Decomp_Sync_Negotiate* negotiate ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+
+	Decomp_Sync_DestructRemotes( self );
+	FreeObject( self->negotiate );
+
+	if( negotiate )
+		self->negotiate = negotiate;
+	else
+		self->negotiate = Decomp_Sync_Negotiate_New( "" );
+}
+
+void Decomp_Sync_SetRemotes( void* sync, unsigned nRemotes, unsigned* remotes ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	RangeSet*	lSet;
+	RangeSet*	rSet;
+	unsigned	nInds;
+	unsigned*	inds;
+
+	assert( self );
+	assert( self->decomp );
+	assert( !nRemotes || remotes );
+#ifndef NDEBUG
+	{
+		lSet = RangeSet_New();
+		rSet = RangeSet_New();
+		RangeSet_SetIndices( lSet, self->decomp->nLocals, self->decomp->locals );
+		RangeSet_SetIndices( rSet, nRemotes, remotes );
+		RangeSet_Intersection( rSet, lSet );
+		assert( !RangeSet_GetNIndices( rSet ) );
+		FreeObject( lSet );
+		FreeObject( rSet );
+	}
+#endif
+
+	Decomp_Sync_DestructRemotes( self );
+
+	/* Store remote values. */
+	self->nRemotes = nRemotes;
+	if( nRemotes ) {
+		self->remotes = Memory_Alloc_Array( unsigned, nRemotes, "Decomp_Sync::remotes" );
+		memcpy( self->remotes, remotes, nRemotes * sizeof(unsigned) );
+	}
+	else
+		self->remotes = NULL;
+
+	/* Build a communication topology and intersections. */
+	lSet = RangeSet_New();
+	rSet = RangeSet_New();
+	RangeSet_SetIndices( lSet, self->decomp->nLocals, self->decomp->locals );
+	RangeSet_SetIndices( rSet, nRemotes, remotes );
+	RangeSet_Union( lSet, rSet );
+	FreeObject( rSet );
+	RangeSet_GetIndices( lSet, &nInds, &inds );
+	FreeObject( lSet );
+	Decomp_Sync_BuildIntersections( self, nInds, inds );
+	FreeArray( inds );
+
+	/* Negotiate sources and sinks. */
+	Decomp_Sync_Negotiate_Select( self->negotiate, self );
+
+	/* Build the global to remote map. */
+	Decomp_Sync_BuildGRMap( self );
+
+	/* Build shared information. */
+	Decomp_Sync_BuildShared( self );
+}
+
+void Decomp_Sync_Decompose( void* sync, unsigned nRequired, unsigned* required ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	Decomp*		decomp;
+	unsigned	nLocals;
+	unsigned*	locals;
+
+	assert( self );
+	assert( self->decomp );
+	assert( !nRequired || required );
+
+	/* Destroy self. */
+	decomp = self->decomp;
+	Decomp_Sync_Destruct( self );
+	self->decomp = decomp;
+
+	/* Build index intersections and communication topology. */
+	Decomp_Sync_BuildIntersections( self, nRequired, required );
+
+	/* Claim ownership. */
+	Decomp_Sync_Claim_Select( self->claim, self, nRequired, required, 
+				  &nLocals, &locals );
+
+	/* Reset the decomposition. */
+	Decomp_SetLocals( decomp, nLocals, locals );
+	self->decomp = decomp;
+	Decomp_AddSync( decomp, self );
+	Decomp_Sync_Negotiate_Select( self->negotiate, self );
+	Decomp_Sync_BuildGRMap( self );
+	Decomp_Sync_BuildShared( self );
+}
+
+unsigned Decomp_Sync_GetDomainSize( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+
+	return self->decomp->nLocals + self->nRemotes;
+}
+
+Bool Decomp_Sync_IsDomain( void* sync, unsigned global ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( global < self->decomp->nGlobals );
+	assert( self->decomp->glMap );
+	assert( self->grMap );
+
+	return Decomp_IsLocal( self->decomp, global ) || UIntMap_HasKey( self->grMap, global );
+}
+
+Bool Decomp_Sync_IsRemote( void* sync, unsigned domain ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( domain < self->decomp->nLocals + self->nRemotes );
+
+	return domain >= self->decomp->nLocals;
+}
+
+unsigned Decomp_Sync_GlobalToDomain( void* sync, unsigned global ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( global < self->decomp->nGlobals );
+	assert( self->decomp->glMap );
+	assert( self->grMap );
+
+	if( Decomp_IsLocal( self->decomp, global ) )
+		return Decomp_GlobalToLocal( self->decomp, global );
+	else
+		return self->decomp->nLocals + UIntMap_Map( self->grMap, global );
+}
+
+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 - self->decomp->nLocals];
+}
+
+unsigned Decomp_Sync_DomainToShared( void* sync, unsigned domain ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+
+	assert( self );
+	assert( self->decomp );
+	assert( domain < self->decomp->nLocals + self->nRemotes );
+	assert( self->dsMap );
+
+	return UIntMap_Map( self->dsMap, domain );
+}
+
+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];
+}
+
+Decomp_Sync_Array* Decomp_Sync_AddArray( void* sync, void* localArray, void* remoteArray, 
+					 size_t localStride, size_t remoteStride, size_t itemSize )
+{
+	Decomp_Sync*		self = (Decomp_Sync*)sync;
+	Decomp_Sync_Array*	array;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( self->decomp );
+	assert( !self->decomp->nLocals || localArray );
+	assert( !self->nRemotes || remoteArray );
+	assert( itemSize );
+
+	/* Resize the array array (?). */
+	if( self->nArrays ) {
+		self->arrays = Memory_Realloc_Array( self->arrays, Decomp_Sync_Array*, ++self->nArrays );
+	}
+	else {
+		self->arrays = Memory_Alloc_Array( Decomp_Sync_Array*, ++self->nArrays, "Decomp_Sync::Arrays" );
+	}
+	self->arrays[self->nArrays - 1] = Memory_Alloc_Array_Unnamed( Decomp_Sync_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. */
+	Decomp_Sync_BuildArray( self, array );
+
+	return array;
+}
+
+void Decomp_Sync_RemoveArray( void* sync, Decomp_Sync_Array* array ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	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, Decomp_Sync_Array*, self->nArrays );
+
+	Decomp_Sync_DestructArray( array );
+}
+
+void Decomp_Sync_Sync( void* sync ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	unsigned	a_i;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( !self->nArrays || self->arrays );
+
+	for( a_i = 0; a_i < self->nArrays; a_i++ )
+		Decomp_Sync_SyncArray( self, self->arrays[a_i] );
+}
+
+void Decomp_Sync_SyncArray( void* sync, Decomp_Sync_Array* array ) {
+	Decomp_Sync*	self = (Decomp_Sync*)sync;
+	CommTopology*	commTopo;
+	unsigned	rank;
+	unsigned	nInc;
+	unsigned*	inc;
+	Stg_Byte*	snkArray;
+	Stg_Byte*	srcArray;
+	unsigned	p_i;
+
+	/* Sanity checks. */
+	assert( self );
+	assert( self->commTopo );
+	assert( array );
+
+	/* Shortcuts. */
+	commTopo = self->commTopo;
+	MPI_Comm_rank( commTopo->comm, (int*)&rank );
+
+	/* 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, rank, &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, 
+			      commTopo->comm, &status );
+	}
+
+	/* Return incidence. */
+	CommTopology_ReturnIncidence( commTopo, rank, &nInc, &inc );
+
+	/* 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 );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void Decomp_Sync_BuildIntersections( Decomp_Sync* self, unsigned nIndices, unsigned* indices ) {
+	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( !nIndices || indices );
+
+	/* Get basic MPI info. */
+	MPI_Comm_rank( self->decomp->comm, (int*)&rank );
+	MPI_Comm_size( self->decomp->comm, (int*)&nProcs );
+
+	/* We'll need to modify the world group. */
+	MPI_Comm_group( self->decomp->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, nIndices, indices );
+
+	/* 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->decomp->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. */
+	self->commTopo = CommTopology_New( "Decomp_Sync::commTopo" );
+	CommTopology_SetComm( self->commTopo, self->decomp->comm );
+	CommTopology_SetIncidence( self->commTopo, nCommInc, commInc );
+	FreeArray( commInc );
+
+	/* Build final intersections. */
+	CommTopology_GetIncidence( self->commTopo, rank, &nInc, &inc );
+	if( nInc ) {
+		unsigned	inc_i;
+
+		self->isects = Memory_Alloc_Array_Unnamed( RangeSet*, nInc );
+		for( inc_i = 0; inc_i < nInc; inc_i++ )
+			self->isects[inc_i] = iSets[inc[inc_i]];
+	}
+	else
+		self->isects = NULL;
+	CommTopology_ReturnIncidence( self->commTopo, rank, &nInc, &inc );
+
+	/* Free intersection array. */
+	FreeArray( iSets );
+}
+
+void Decomp_Sync_BuildShared( Decomp_Sync* self ) {
+	unsigned	rank;
+	RangeSet*	sharedSet;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned**	sharers;
+	unsigned	s_i, p_i;
+
+	assert( self );
+	assert( self->commTopo );
+
+	/* Get basic MPI info. */
+	MPI_Comm_rank( self->decomp->comm, (int*)&rank );
+
+	/* Get incidence. */
+	CommTopology_GetIncidence( self->commTopo, rank, &nInc, &inc );
+
+	if( nInc ) {
+		assert( self->isects );
+
+		/* Take the union of all intersections to determine how many shared indices we have. */
+		sharedSet = RangeSet_New();
+		for( p_i = 0; p_i < nInc; p_i++ )
+			RangeSet_Union( sharedSet, self->isects[p_i] );
+
+		/* Build table and map. */
+		RangeSet_GetIndices( sharedSet, &self->nShared, &self->shared );
+		self->dsMap = UIntMap_New();
+		for( s_i = 0; s_i < self->nShared; s_i++ ) {
+			self->shared[s_i] = Decomp_Sync_GlobalToDomain( self, self->shared[s_i] );
+			UIntMap_Insert( self->dsMap, self->shared[s_i], s_i );
+		}
+		FreeObject( sharedSet );
+
+		/* Allocate enough space to hold maximum results. */
+		self->nSharers = Memory_Alloc_Array( unsigned, self->nShared, "Decomp_Sync::nSharers" );
+		sharers = Memory_Alloc_2DArray_Unnamed( unsigned, self->nShared, nInc );
+		memset( self->nSharers, 0, self->nShared * sizeof(unsigned) );
+
+		/* Collect processors. */
+		for( p_i = 0; p_i < nInc; p_i++ ) {
+			unsigned	nInds;
+			unsigned*	inds;
+			unsigned	ind_i;
+
+			RangeSet_GetIndices( self->isects[p_i], &nInds, &inds );
+			for( ind_i = 0; ind_i < nInds; ind_i++ ) {
+				unsigned	dInd = Decomp_Sync_GlobalToDomain( self, inds[ind_i] );
+				unsigned       	sInd = Decomp_Sync_DomainToShared( self, dInd );
+
+				sharers[sInd][self->nSharers[sInd]++] = p_i;
+			}
+			FreeArray( inds );
+		}
+
+		/* Transfer results to self. */
+		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) );
+
+		/* Cleanup. */
+		FreeArray( sharers );
+	}
+
+	/* Return incidence. */
+	CommTopology_ReturnIncidence( self->commTopo, rank, &nInc, &inc );
+}
+
+void Decomp_Sync_BuildGRMap( Decomp_Sync* self ) {
+	UIntMap*	map;
+	unsigned	r_i;
+
+	FreeObject( self->grMap );
+
+	map = UIntMap_New();
+	for( r_i = 0; r_i < self->nRemotes; r_i++ )
+		UIntMap_Insert( map, self->remotes[r_i], r_i );
+	self->grMap = map;
+}
+
+void Decomp_Sync_BuildArray( Decomp_Sync* self, Decomp_Sync_Array* array ) {
+	CommTopology*	commTopo;
+	Decomp*		decomp;
+	unsigned	rank;
+	unsigned	nInc;
+	unsigned*	inc;
+
+	assert( self );
+	assert( self->commTopo );
+
+	/* Shortcuts. */
+	decomp = self->decomp;
+	commTopo = self->commTopo;
+	MPI_Comm_rank( commTopo->comm, (int*)&rank );
+
+	/* Extract incidence. */
+	CommTopology_GetIncidence( commTopo, rank, &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, "Decomp_Sync_Array::snkDisps" );
+			snkSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::snkSizes" );
+			snkOffs = Memory_Alloc_Array( unsigned, self->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->nSnks[p_i]; snk_i++ ) {
+					unsigned	dInd = Decomp_Sync_GlobalToDomain( self, self->snks[p_i][snk_i] );
+
+					snkOffs[snkInd] = dInd * 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, "Decomp_Sync_Array::snkDisps" );
+			array->snkSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::snkSizes" );
+			memset( array->snkDisps, 0, nInc * sizeof(unsigned) );
+			memset( array->snkSizes, 0, nInc * sizeof(unsigned) );
+		}
+
+		/* Determine source (shadow) 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, "Decomp_Sync_Array::srcDisps" );
+			srcSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_Array::srcSizes" );
+			srcOffs = Memory_Alloc_Array( unsigned, self->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->nSrcs[p_i]; src_i++ ) {
+					unsigned	sInd = Decomp_Sync_GlobalToDomain( self, self->srcs[p_i][src_i] );
+
+					assert( sInd >= decomp->nLocals );
+					sInd -= decomp->nLocals;
+					srcOffs[srcInd] = sInd * 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, "Decomp_Sync_Array::srcDisps" );
+			array->srcSizes = Memory_Alloc_Array( unsigned, nInc, "Decomp_Sync_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;
+	}
+
+	/* Return incidence. */
+	CommTopology_ReturnIncidence( commTopo, rank, &nInc, &inc );
+}
+
+void Decomp_Sync_Destruct( Decomp_Sync* self ) {
+	Decomp_Sync_DestructRemotes( self );
+
+	if( self->decomp ) {
+		Decomp_RemoveSync( self->decomp, self );
+		self->decomp = NULL;
+	}
+}
+
+void Decomp_Sync_DestructRemotes( Decomp_Sync* self ) {
+	Decomp_Sync_DestructArrays( self );
+
+	if( self->commTopo ) {
+		unsigned	p_i;
+
+		for( p_i = 0; p_i < self->commTopo->nInc; p_i++ )
+			FreeObject( self->isects[p_i] );
+	}
+	KillArray( self->isects );
+	KillObject( self->commTopo );
+
+	KillArray( self->remotes );
+	self->nRemotes = 0;
+	KillArray( self->shared );
+	self->nShared = 0;
+	KillArray( self->nSharers );
+	KillArray( self->sharers );
+
+	KillObject( self->grMap );
+	KillObject( self->dsMap );
+
+	self->netSrcs = 0;
+	KillArray( self->nSrcs );
+	KillArray( self->srcs );
+	self->netSnks = 0;
+	KillArray( self->nSnks );
+	KillArray( self->snks );
+}
+
+void Decomp_Sync_DestructArrays( Decomp_Sync* self ) {
+	unsigned	a_i;
+
+	for( a_i = 0; a_i < self->nArrays; a_i++ )
+		Decomp_Sync_DestructArray( self->arrays[a_i] );
+	KillArray( self->arrays );
+	self->nArrays = 0;
+}
+
+void Decomp_Sync_DestructArray( Decomp_Sync_Array* array ) {
+	FreeArray( array->snkDisps );
+	FreeArray( array->snkSizes );
+	FreeArray( array->snkOffs );
+	FreeArray( array->srcDisps );
+	FreeArray( array->srcSizes );
+	FreeArray( array->srcOffs );
+	FreeArray( array );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Decomp_Sync.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_Decomp_Sync_h__
+#define __Discretisaton_Mesh_Decomp_Sync_h__
+
+	/** Textual name of this class */
+	extern const Type Decomp_Sync_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;
+	} Decomp_Sync_Array;
+
+	#define __Decomp_Sync				\
+		/* General info */			\
+		__Stg_Component				\
+							\
+		/* Virtual info */			\
+							\
+		/* Decomp_Sync info */			\
+		Decomp*			decomp;		\
+		CommTopology*		commTopo;	\
+		RangeSet**		isects;		\
+							\
+		Decomp_Sync_Claim*	claim;		\
+		Decomp_Sync_Negotiate*	negotiate;	\
+							\
+		unsigned		nRemotes;	\
+		unsigned*		remotes;	\
+		unsigned		nShared;	\
+		unsigned*		shared;		\
+		unsigned*		nSharers;	\
+		unsigned**		sharers;	\
+							\
+		UIntMap*		grMap;		\
+		UIntMap*		dsMap;		\
+							\
+		unsigned		netSrcs;	\
+		unsigned*		nSrcs;		\
+		unsigned**		srcs;		\
+		unsigned		netSnks;	\
+		unsigned*		nSnks;		\
+		unsigned**		snks;		\
+							\
+		unsigned		nArrays;	\
+		Decomp_Sync_Array**	arrays;
+
+	struct Decomp_Sync { __Decomp_Sync };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define DECOMP_SYNC_DEFARGS	\
+		STG_COMPONENT_DEFARGS
+
+	#define DECOMP_SYNC_PASSARGS	\
+		STG_COMPONENT_PASSARGS
+
+	Decomp_Sync* Decomp_Sync_New( Name name );
+	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 );
+
+	#define Decomp_Sync_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Decomp_Sync_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Decomp_Sync_Copy( void* sync, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _Decomp_Sync_Construct( void* sync, Stg_ComponentFactory* cf, void* data );
+	void _Decomp_Sync_Build( void* sync, void* data );
+	void _Decomp_Sync_Initialise( void* sync, void* data );
+	void _Decomp_Sync_Execute( void* sync, void* data );
+	void _Decomp_Sync_Destroy( void* sync, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Decomp_Sync_SetDecomp( void* sync, Decomp* decomp );
+	void Decomp_Sync_SetClaim( void* sync, Decomp_Sync_Claim* claim );
+	void Decomp_Sync_SetNegotiate( void* sync, Decomp_Sync_Negotiate* negotiate );
+	void Decomp_Sync_SetRemotes( void* sync, unsigned nRemotes, unsigned* remotes );
+	void Decomp_Sync_Decompose( void* sync, unsigned nRequired, unsigned* required );
+
+	unsigned Decomp_Sync_GetDomainSize( void* sync );
+	Bool Decomp_Sync_IsDomain( void* sync, unsigned global );
+	Bool Decomp_Sync_IsRemote( void* sync, unsigned domain );
+	Bool Decomp_Sync_IsShared( void* sync, unsigned domain );
+	unsigned Decomp_Sync_GlobalToDomain( void* sync, unsigned global );
+	unsigned Decomp_Sync_DomainToGlobal( void* sync, unsigned domain );
+	unsigned Decomp_Sync_DomainToShared( void* sync, unsigned domain );
+	unsigned Decomp_Sync_SharedToDomain( void* sync, unsigned shared );
+
+	Decomp_Sync_Array* Decomp_Sync_AddArray( void* sync, void* localArray, void* remoteArray, 
+						 size_t localStride, size_t remoteStride, size_t itemSize );
+	void Decomp_Sync_RemoveArray( void* sync, Decomp_Sync_Array* array );
+	void Decomp_Sync_Sync( void* sync );
+	void Decomp_Sync_SyncArray( void* self, Decomp_Sync_Array* array );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void Decomp_Sync_BuildIntersections( Decomp_Sync* self, unsigned nIndices, unsigned* indices );
+	void Decomp_Sync_BuildShared( Decomp_Sync* self );
+	void Decomp_Sync_BuildGRMap( Decomp_Sync* self );
+
+	void Decomp_Sync_BuildArray( Decomp_Sync* self, Decomp_Sync_Array* array );
+	void Decomp_Sync_Destruct( Decomp_Sync* self );
+	void Decomp_Sync_DestructRemotes( Decomp_Sync* self );
+	void Decomp_Sync_DestructArrays( Decomp_Sync* self );
+	void Decomp_Sync_DestructArray( Decomp_Sync_Array* array );
+
+#endif /* __Discretisaton_Mesh_Decomp_Sync_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Decomp_Sync</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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 "Base/Base.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;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned	nBytes;
+	Stg_Byte*		bytes;
+	RangeSet*	tmpClaimed;
+	unsigned	tag = 6669;
+	unsigned	p_i, p_j;
+
+	/* Get basic MPI info. */
+	MPI_Comm_rank( topo->comm, (int*)&rank );
+	MPI_Comm_size( topo->comm, (int*)&nProcs );
+
+	/* Extract our neighbouring processors. */
+	CommTopology_GetIncidence( topo, rank, &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, topo->comm, &status );
+		bytes = Memory_Alloc_Array_Unnamed( Stg_Byte, nBytes );
+		MPI_Recv( bytes, nBytes, MPI_BYTE, inc[p_i], tag, topo->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, topo->comm );
+		MPI_Send( bytes, nBytes, MPI_BYTE, inc[p_j], tag, topo->comm );
+		FreeArray( bytes );
+	}
+
+	/* Return incidence. */
+	CommTopology_ReturnIncidence( topo, rank, &nInc, &inc );
+}
+
+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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_Decomp_Sync_Claim_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_Decomp_Sync_Claim_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Decomp_Sync_Claim</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,366 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.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;
+	MPI_Comm_rank( commTopo->comm, (int*)&rank );
+
+	/* Locate remote indices. */
+	Decomp_Sync_Negotiate_RemoteSearch( self, sync, &nFound, &found );
+
+	/* Get processor incidence. */
+	CommTopology_GetIncidence( commTopo, rank, &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];
+		}
+	}
+
+	/* Return incidence. */
+	CommTopology_ReturnIncidence( commTopo, rank, &nInc, &inc );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** 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;
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_Decomp_Sync_Negotiate_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_Decomp_Sync_Negotiate_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Decomp_Sync_Negotiate</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,386 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: DummyMD.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "MeshDecomp.h"
+#include "DummyMD.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type DummyMD_Type = "DummyMD";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+DummyMD* DummyMD_DefaultNew( Name name ){
+	
+	return (DummyMD*)_DummyMD_New( 
+		sizeof(DummyMD), 
+		DummyMD_Type, 
+		_DummyMD_Delete, 
+		_DummyMD_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)DummyMD_DefaultNew,
+		_DummyMD_Construct,
+		_DummyMD_Build,
+		_DummyMD_Initialise,
+		_DummyMD_Execute,
+		_DummyMD_Destroy,
+		name,
+		False,
+		_MeshDecomp_Node_LocalToGlobal1D,
+		_MeshDecomp_Node_DomainToGlobal1D,
+		_MeshDecomp_Node_ShadowToGlobal1D, 
+		_MeshDecomp_Node_GlobalToLocal1D, 
+		_MeshDecomp_Node_GlobalToDomain1D, 
+		_MeshDecomp_Node_GlobalToShadow1D,
+		_MeshDecomp_Element_LocalToGlobal1D,
+		_MeshDecomp_Element_DomainToGlobal1D,
+		_MeshDecomp_Element_ShadowToGlobal1D, 
+		_MeshDecomp_Element_GlobalToLocal1D, 
+		_MeshDecomp_Element_GlobalToDomain1D, 
+		_MeshDecomp_Element_GlobalToShadow1D,
+		_DummyMD_Shadow_ProcCount,
+		_DummyMD_Shadow_BuildProcs,
+		_MeshDecomp_Shadow_ProcElementCount,
+		_MeshDecomp_Proc_WithElement,
+		NULL,
+		MPI_COMM_WORLD,
+		NULL,
+		NULL );
+}
+
+DummyMD* DummyMD_New(
+		Name						name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout )
+{
+	return _DummyMD_New( 
+		sizeof(DummyMD), 
+		DummyMD_Type, 
+		_DummyMD_Delete, 
+		_DummyMD_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)DummyMD_DefaultNew,
+		_DummyMD_Construct,
+		_DummyMD_Build,
+		_DummyMD_Initialise,
+		_DummyMD_Execute,
+		_DummyMD_Destroy,
+		name,
+		True,
+		_MeshDecomp_Node_LocalToGlobal1D,
+		_MeshDecomp_Node_DomainToGlobal1D,
+		_MeshDecomp_Node_ShadowToGlobal1D, 
+		_MeshDecomp_Node_GlobalToLocal1D, 
+		_MeshDecomp_Node_GlobalToDomain1D, 
+		_MeshDecomp_Node_GlobalToShadow1D,
+		_MeshDecomp_Element_LocalToGlobal1D,
+		_MeshDecomp_Element_DomainToGlobal1D,
+		_MeshDecomp_Element_ShadowToGlobal1D, 
+		_MeshDecomp_Element_GlobalToLocal1D, 
+		_MeshDecomp_Element_GlobalToDomain1D, 
+		_MeshDecomp_Element_GlobalToShadow1D,
+		_DummyMD_Shadow_ProcCount,
+		_DummyMD_Shadow_BuildProcs,
+		_MeshDecomp_Shadow_ProcElementCount,
+		_MeshDecomp_Proc_WithElement,
+		dictionary,
+		communicator,
+		eLayout,
+		nLayout );
+}
+
+
+void DummyMD_Init(
+		DummyMD*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout )
+{
+	/* General info */
+	self->type = DummyMD_Type;
+	self->_sizeOfSelf = sizeof(DummyMD);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _DummyMD_Delete;
+	self->_print = _DummyMD_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)DummyMD_DefaultNew;
+	self->_construct = _DummyMD_Construct;
+	self->_build = _DummyMD_Build;
+	self->_initialise = _DummyMD_Initialise;
+	self->_execute = _DummyMD_Execute;
+	self->_destroy = _DummyMD_Destroy;
+	self->nodeMapLocalToGlobal = _MeshDecomp_Node_LocalToGlobal1D;
+	self->nodeMapDomainToGlobal = _MeshDecomp_Node_DomainToGlobal1D;
+	self->nodeMapShadowToGlobal = _MeshDecomp_Node_ShadowToGlobal1D;
+	self->nodeMapGlobalToLocal = _MeshDecomp_Node_GlobalToLocal1D;
+	self->nodeMapGlobalToDomain = _MeshDecomp_Node_GlobalToDomain1D;
+	self->nodeMapGlobalToShadow = _MeshDecomp_Node_GlobalToShadow1D;
+	self->elementMapLocalToGlobal = _MeshDecomp_Element_LocalToGlobal1D;
+	self->elementMapDomainToGlobal = _MeshDecomp_Element_DomainToGlobal1D;
+	self->elementMapShadowToGlobal = _MeshDecomp_Element_ShadowToGlobal1D;
+	self->elementMapGlobalToLocal = _MeshDecomp_Element_GlobalToLocal1D;
+	self->elementMapGlobalToDomain = _MeshDecomp_Element_GlobalToDomain1D;
+	self->elementMapGlobalToShadow = _MeshDecomp_Element_GlobalToShadow1D;
+	self->shadowProcCount = _DummyMD_Shadow_ProcCount;
+	self->shadowBuildProcs = _DummyMD_Shadow_BuildProcs;
+	self->shadowProcElementCount = _MeshDecomp_Shadow_ProcElementCount;
+	self->procWithElement = _MeshDecomp_Proc_WithElement;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_MeshDecomp_Init( (MeshDecomp*)self, communicator, eLayout, nLayout, NULL );
+	
+	/* DummyMD info */
+	_DummyMD_Init( self );
+}
+
+
+DummyMD* _DummyMD_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*		shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*		shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*		procWithElement,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout )
+{
+	DummyMD* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(DummyMD) );
+	self = (DummyMD*)_MeshDecomp_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		nodeMapLocalToGlobal, 
+		nodeMapDomainToGlobal,
+		nodeMapShadowToGlobal,
+		nodeMapGlobalToLocal,
+		nodeMapGlobalToDomain,
+		nodeMapGlobalToShadow, 
+		elementMapLocalToGlobal,
+		elementMapDomainToGlobal,
+		elementMapShadowToGlobal, 
+		elementMapGlobalToLocal,
+		elementMapGlobalToDomain, 
+		elementMapGlobalToShadow,
+		shadowProcCount,
+		shadowBuildProcs,
+		shadowProcElementCount,
+		procWithElement,
+		dictionary, 
+		communicator,
+		eLayout,
+		nLayout );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* DummyMD info */
+	if( initFlag ){
+		_DummyMD_Init( self );
+	}
+	
+	return self;
+}
+
+
+void _DummyMD_Init(
+		DummyMD*					self )
+{
+	/* General and Virtual info should already be set */
+	Element_GlobalIndex e_I;
+	
+	assert( self->rank == 0 );
+	/* DummyMD info */
+	
+	self->isConstructed = True;
+	self->procsInUse = 1;
+	
+	self->elementGlobalCount = self->elementLayout->elementCount;
+	self->nodeGlobalCount = self->nodeLayout->nodeCount;
+	
+	self->localElementSets = Memory_Alloc( IndexSet*, "DummyMD" );
+	self->localElementSets[0] = IndexSet_New( self->elementGlobalCount );
+	for( e_I = 0; e_I < self->elementGlobalCount; e_I++ )
+		IndexSet_Add( self->localElementSets[0], e_I );
+	
+	_MeshDecomp_DecomposeNodes( self );
+	
+	self->elementLocalCount = self->elementGlobalCount;
+	self->elementShadowCount = 0;
+	self->elementDomainCount = self->elementLocalCount;
+	
+	self->nodeLocalCount = self->nodeGlobalCount;
+	self->nodeShadowCount = 0;
+	self->nodeDomainCount = self->nodeLocalCount;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _DummyMD_Delete( void* dummyMD ) {
+	DummyMD* self = (DummyMD*)dummyMD;
+	
+	/* Stg_Class_Delete parent */
+	_MeshDecomp_Delete( self );
+}
+
+void _DummyMD_Print( void* dummyMD, Stream* stream ) {
+	DummyMD* self = (DummyMD*)dummyMD;
+	
+	/* Set the Journal for printing informations */
+	Stream* dummyMDStream;
+	dummyMDStream = Journal_Register( InfoStream_Type, "DummyMDStream" );
+
+	/* Print parent */
+	_MeshDecomp_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "DummyMD (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* DummyMD info */
+}
+
+void _DummyMD_Construct( void* dummyMD, Stg_ComponentFactory *cf, void* data ){
+	DummyMD*        self          = (DummyMD*)dummyMD;
+	ElementLayout*  elementLayout = NULL;
+	NodeLayout*     nodeLayout    = NULL;
+	Stg_ObjectList* pointerRegister;
+
+	self->dictionary = cf->rootDict;
+	
+	elementLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  ElementLayout_Type, ElementLayout,  True, data ) ;
+	nodeLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  NodeLayout_Type, NodeLayout,  True, data ) ;
+	pointerRegister = Stg_ObjectList_Get( cf->registerRegister, "Pointer_Register" );
+
+	_MeshDecomp_Init( (MeshDecomp*)self, MPI_COMM_WORLD, elementLayout, nodeLayout, pointerRegister );
+	_DummyMD_Init( self );
+}
+	
+void _DummyMD_Build( void* dummyMD, void* data ){
+	
+}
+	
+void _DummyMD_Initialise( void* dummyMD, void* data ){
+	
+}
+	
+void _DummyMD_Execute( void* dummyMD, void* data ){
+	
+}
+	
+void _DummyMD_Destroy( void* dummyMD, void* data ){
+	
+}
+
+Partition_Index _DummyMD_Shadow_ProcCount( void* dummyMD ) {
+	return 0;
+}
+
+
+void _DummyMD_Shadow_BuildProcs( void* dummyMD, Partition_Index* procs ) {
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: DummyMD.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_DummyMD_h__
+#define __Discretisaton_Mesh_DummyMD_h__
+
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type DummyMD_Type;
+
+	/* DummyMD information */
+	#define __DummyMD \
+		/* General info */ \
+		__MeshDecomp \
+		\
+		/* Virtual info */ \
+		\
+		/* DummyMD info ... */
+	struct _DummyMD { __DummyMD };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a DummyMD */
+	DummyMD* DummyMD_DefaultNew( Name name );
+	
+	DummyMD* DummyMD_New(
+		Name						name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout );
+	
+	/* Initialise a DummyMD */
+	void DummyMD_Init(
+		DummyMD*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout );
+	
+	/* Creation implementation */
+	DummyMD* _DummyMD_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*		shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*		shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*		procWithElement,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nlayout );
+	
+	/* Initialisation implementation functions */
+	void _DummyMD_Init(
+		DummyMD*					self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete DummyMD implementation */
+	void _DummyMD_Delete( void* dummyMD );
+	
+	/* Print DummyMD implementation */
+	void _DummyMD_Print( void* dummyMD, Stream* stream );
+	
+	void _DummyMD_Construct( void* dummyMD, Stg_ComponentFactory *cf, void* data );
+	
+	void _DummyMD_Build( void* dummyMD, void* data );
+	
+	void _DummyMD_Initialise( void* dummyMD, void* data );
+	
+	void _DummyMD_Execute( void* dummyMD, void* data );
+	
+	void _DummyMD_Destroy( void* dummyMD, void* data );
+	
+	Partition_Index _DummyMD_Shadow_ProcCount( void* dummyMD );
+	
+	void _DummyMD_Shadow_BuildProcs( void* dummyMD, Partition_Index* procs );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+#endif /* __Discretisaton_Mesh_DummyMD_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">DummyMD</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">MeshDecomp</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">ElementLayout</param>
+		<param name="Type">ElementLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 338 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">NodeLayout</param>
+		<param name="Type">NodeLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 339 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: ElementLayout.c 3817 2006-09-27 06:55:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+
+#include <assert.h>
+
+/* Textual name of this class */
+const Type ElementLayout_Type = "ElementLayout";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+ElementLayout* _ElementLayout_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,
+		ElementLayout_BuildFunction*  						build,
+		ElementLayout_BuildCornerIndicesFunction*       	buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*       	cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*      	buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*			buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*			edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*		buildEdgeElements,
+		ElementLayout_EdgeAtFunction*				edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*	getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*	getStaticMinAndMaxGlobalCoords,
+		ElementLayout_ElementWithPointFunction*			elementWithPoint,
+		Dictionary*						dictionary,
+		Geometry*						geometry,
+		Topology*						topology )
+{
+	ElementLayout* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ElementLayout) );
+	self = (ElementLayout*)_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->build = build;
+	self->buildCornerIndices = buildCornerIndices;
+	self->cornerElementCount = cornerElementCount;
+	self->buildCornerElements = buildCornerElements;
+	self->buildEdgeIndices = buildEdgeIndices;
+	self->edgeElementCount = edgeElementCount;
+	self->buildEdgeElements = buildEdgeElements;
+	self->edgeAt = edgeAt;
+	self->getStaticMinAndMaxLocalCoords = getStaticMinAndMaxLocalCoords;
+	self->getStaticMinAndMaxGlobalCoords = getStaticMinAndMaxGlobalCoords;
+	self->elementWithPoint = elementWithPoint;
+	
+	/* ElementLayout info */
+	if( initFlag ){
+		_ElementLayout_Init( self, geometry, topology );
+	}
+	
+	return self;
+}
+
+void _ElementLayout_Init(
+		ElementLayout*					self,
+		Geometry*					geometry,
+		Topology*					topology )
+{
+	/* General and Virtual info should already be set */
+	
+	/* ElementLayout info */
+	self->isConstructed = True;
+	self->geometry = geometry;
+	self->topology = topology;
+	self->elementCount = 0;
+	self->elementCornerCount = 0;
+	self->cornerCount = 0;
+	self->topo = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _ElementLayout_Delete( void* elementLayout ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _ElementLayout_Print( void* elementLayout, Stream* stream ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* elementLayoutStream;
+	elementLayoutStream = Journal_Register( InfoStream_Type, "ElementLayoutStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "ElementLayout (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* ElementLayout info */
+}
+
+
+void* _ElementLayout_Copy( void* elementLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ElementLayout*	self = (ElementLayout*)elementLayout;
+	ElementLayout*	newElementLayout;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newElementLayout = (ElementLayout*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newElementLayout->build = self->build;
+	newElementLayout->buildCornerIndices = self->buildCornerIndices;
+	newElementLayout->cornerElementCount = self->cornerElementCount;
+	newElementLayout->buildCornerElements = self->buildCornerElements;
+	newElementLayout->buildEdgeIndices = self->buildEdgeIndices;
+	newElementLayout->edgeElementCount = self->edgeElementCount;
+	newElementLayout->buildEdgeElements = self->buildEdgeElements;
+	newElementLayout->edgeAt = self->edgeAt;
+	newElementLayout->elementWithPoint = self->elementWithPoint;
+	
+	newElementLayout->dictionary = self->dictionary;
+	newElementLayout->elementCount = self->elementCount;
+	newElementLayout->elementCornerCount = self->elementCornerCount;
+	newElementLayout->cornerCount = self->cornerCount;
+	newElementLayout->elementEdgeCount = self->elementEdgeCount;
+	newElementLayout->edgeCount = self->edgeCount;
+	
+	if( deep ) {
+		newElementLayout->geometry = (Geometry*)Stg_Class_Copy( self->geometry, NULL, deep, nameExt, map );
+		newElementLayout->topology = (Topology*)Stg_Class_Copy( self->topology, NULL, deep, nameExt, map );
+	}
+	else {
+		newElementLayout->geometry = self->geometry;
+		newElementLayout->topology = self->topology;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newElementLayout;
+}
+
+
+void ElementLayout_Build( void* elementLayout, void* decomp ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+
+	self->build( self, decomp );
+}
+
+
+void _ElementLayout_Build( void* elementLayout, void* decomp ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+
+	/* Default implementation does nothing. */
+	Build( self->geometry, NULL, False );
+}
+
+void ElementLayout_BuildCornerElements( void* elementLayout, Index corner, Element_GlobalIndex* elements ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+
+	self->buildCornerElements( self, corner, elements );
+}
+
+void ElementLayout_BuildEdgeIndices( void* elementLayout, Element_GlobalIndex globalIndex, Index* edges ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+
+	self->buildEdgeIndices( self, globalIndex, edges );
+}
+
+void ElementLayout_EdgeAt( void* elementLayout, Index index, Edge edge ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+
+	self->edgeAt( self, index, edge );
+}
+
+Element_GlobalIndex ElementLayout_ElementWithPoint( void* elementLayout, void* decomp, Coord point, void* mesh, 
+						    PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+
+	return self->elementWithPoint( self, decomp, point, mesh, boundaryStatus, nHints, hints );
+}
+
+Bool ElementLayout_GetStaticMinAndMaxLocalCoords( void* elementLayout, Coord min, Coord max ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+	return self->getStaticMinAndMaxLocalCoords( self, min, max );
+}
+
+Bool _ElementLayout_GetStaticMinAndMaxLocalCoords( void* elementLayout, Coord min, Coord max ) {
+	/* Default implementation: no static shortcut known:- return false. */
+	return False;
+}
+
+
+Bool ElementLayout_GetStaticMinAndMaxGlobalCoords( void* elementLayout, Coord min, Coord max ) {
+	ElementLayout* self = (ElementLayout*)elementLayout;
+	return self->getStaticMinAndMaxGlobalCoords( self, min, max );
+}
+
+Bool _ElementLayout_GetStaticMinAndMaxGlobalCoords( void* elementLayout, Coord min, Coord max ) {
+	/* Default implementation: no static shortcut known:- return false. */
+	return False;
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+Index ElementLayout_BuildEdgeSubset( void* elementLayout, Index elementCount, Index* elements, Index** edges ) {
+	ElementLayout*		self = (ElementLayout*)elementLayout;
+	Element_GlobalIndex	edgeCnt = 0;
+	Element_GlobalIndex     element_I;
+	Index*			eEdges;
+	IndexSet*		set;
+	
+	set = IndexSet_New( self->edgeCount );
+	eEdges = Memory_Alloc_Array( Element_GlobalIndex, self->elementEdgeCount, "ElementLayout" );
+	
+	for( element_I = 0; element_I < elementCount; element_I++ ) {
+		Index   edge_I;
+		
+		self->buildEdgeIndices( self, elements[element_I], eEdges );
+		for( edge_I = 0; edge_I < self->elementEdgeCount; edge_I++ )
+			IndexSet_Add( set, eEdges[edge_I] );
+	}
+	
+	Memory_Free( eEdges );
+	
+	IndexSet_GetMembers( set, &edgeCnt, edges );
+	Stg_Class_Delete( set );
+	
+	return edgeCnt;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,184 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ElementLayout.h 3817 2006-09-27 06:55:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_ElementLayout_h__
+#define __Discretisaton_Mesh_ElementLayout_h__
+
+
+	/* Virtual function types */
+	typedef void			(ElementLayout_BuildFunction)				( void* elementLayout, void* decomp );
+	typedef void			(ElementLayout_BuildCornerIndicesFunction)		( void* elementLayout, Element_GlobalIndex globalIndex, Index* points );
+	typedef Element_GlobalIndex     (ElementLayout_CornerElementCountFunction)		( void* elementLayout, Index corner );
+	typedef void			(ElementLayout_BuildCornerElementsFunction)		( void* elementLayout, Index corner, Element_GlobalIndex* elements );
+	typedef void			(ElementLayout_BuildEdgeIndicesFunction)		( void* elementLayout, Element_GlobalIndex globalIndex, Index* edges );
+	typedef Element_GlobalIndex     (ElementLayout_EdgeElementCountFunction)		( void* elementLayout, Index edge );
+	typedef void			(ElementLayout_BuildEdgeElementsFunction)		( void* elementLayout, Index edge, Element_GlobalIndex* elements );
+	
+	typedef void			(ElementLayout_EdgeAtFunction)				( void* elementLayout, Index index, Edge edge );
+	typedef Element_GlobalIndex     (ElementLayout_ElementWithPointFunction)		( void* elementLayout,
+												  void* meshDecomp, Coord point, void* mesh, PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	typedef Bool			(ElementLayout_GetStaticMinAndMaxLocalCoordsFunction)	( void* elementLayout, Coord min, Coord max );
+	typedef Bool			(ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction)	( void* elementLayout, Coord min, Coord max );
+		
+	
+	/* Textual name of this class */
+	extern const Type ElementLayout_Type;
+
+	/* ElementLayout information */
+	#define __ElementLayout \
+		/* General info */ \
+		__Stg_Component \
+		Dictionary*					dictionary; \
+		\
+		/* Virtual info */ \
+		ElementLayout_BuildFunction*				build; \
+		ElementLayout_BuildCornerIndicesFunction*       	buildCornerIndices; \
+		ElementLayout_CornerElementCountFunction*       	cornerElementCount; \
+		ElementLayout_BuildCornerElementsFunction*      	buildCornerElements; \
+		ElementLayout_BuildEdgeIndicesFunction*			buildEdgeIndices; \
+		ElementLayout_EdgeElementCountFunction*			edgeElementCount; \
+		ElementLayout_BuildEdgeElementsFunction*		buildEdgeElements; \
+		ElementLayout_EdgeAtFunction*				edgeAt; \
+		ElementLayout_ElementWithPointFunction*			elementWithPoint; \
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*	getStaticMinAndMaxLocalCoords; \
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*	getStaticMinAndMaxGlobalCoords; \
+		\
+		/* ElementLayout info ... */ \
+		Geometry*						geometry; \
+		Topology*						topology; \
+		Element_Index						elementCount; \
+		\
+		Index							elementCornerCount; \
+		Index							cornerCount; \
+		Index							elementEdgeCount; \
+		Index							edgeCount; \
+		\
+		MeshTopology*						topo;
+
+	struct _ElementLayout { __ElementLayout };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Creation implementation */
+
+	ElementLayout* _ElementLayout_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,
+		ElementLayout_BuildFunction*  						build,
+		ElementLayout_BuildCornerIndicesFunction*       	buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*       	cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*      	buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*			buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*			edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*		buildEdgeElements,
+		ElementLayout_EdgeAtFunction*				edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*	getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*	getStaticMinAndMaxGlobalCoords,
+		ElementLayout_ElementWithPointFunction*			elementWithPoint,
+		Dictionary*						dictionary,
+		Geometry*						geometry,
+		Topology*						topology );
+
+	/* Initialisation implementation functions */
+	void _ElementLayout_Init(
+		ElementLayout*					self,
+		Geometry*					geometry,
+		Topology*					topology );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete ElementLayout implementation */
+	void _ElementLayout_Delete( void* elementLayout );
+	
+	/* Print ElementLayout implementation */
+	void _ElementLayout_Print( void* elementLayout, Stream* stream );
+	
+	/* Copy */
+	#define ElementLayout_Copy( self ) \
+		(ElementLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ElementLayout_DeepCopy( self ) \
+		(ElementLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ElementLayout_Copy( void* elementLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Build: For preparing point searching stuff etc. */
+	void ElementLayout_Build( void* elementLayout, void* decomp );
+	/** Default implementation, does nothing. */
+	void _ElementLayout_Build( void* elementLayout, void* decomp );
+	
+	void ElementLayout_BuildCornerElements( void* elementLayout, Index corner, Element_GlobalIndex* elements ) ;
+	void ElementLayout_BuildEdgeIndices( void* elementLayout, Element_GlobalIndex globalIndex, Index* edges ) ;
+	void ElementLayout_EdgeAt( void* elementLayout, Index index, Edge edge ) ;
+	Element_GlobalIndex ElementLayout_ElementWithPoint( void* elementLayout, void* decomp, Coord point, void* mesh, 
+							    PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints ) ;
+	Bool ElementLayout_GetStaticMinAndMaxLocalCoords( void* elementLayout, Coord min, Coord max );
+	Bool _ElementLayout_GetStaticMinAndMaxLocalCoords( void* elementLayout, Coord min, Coord max );
+	
+	Bool ElementLayout_GetStaticMinAndMaxGlobalCoords( void* elementLayout, Coord min, Coord max );
+	Bool _ElementLayout_GetStaticMinAndMaxGlobalCoords( void* elementLayout, Coord min, Coord max );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	Index ElementLayout_BuildEdgeSubset( void* elementLayout, Index elementCount, Index* elements, Index** edges );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_ElementLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ElementLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool DiscretisationMesh_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_Finalise_h__
+#define __Discretisaton_Mesh_Finalise_h__
+	
+	Bool DiscretisationMesh_Finalise( void );
+	
+#endif /* __Discretisaton_Mesh_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,248 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/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, 
+			  _Grid_Copy );
+}
+
+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;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Grid_Delete( void* grid ) {
+	Grid*	self = (Grid*)grid;
+
+	/* 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 );
+}
+
+void* _Grid_Copy( void* grid, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	Grid*	self = (Grid*)grid;
+	Grid*	newGrid;
+	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;
+	}
+	
+	newGrid = (Grid*)_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*)newGrid;
+#endif
+
+	return NULL;
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Grid_SetNDims( 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_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.
+	*/
+
+	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];
+	}
+
+	return ind;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: Grid.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_Grid_h__
+#define __Discretisaton_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;
+
+	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 );
+
+	#define Grid_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Grid_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _Grid_Copy( void* grid, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void Grid_SetNDims( void* grid, unsigned nDims );
+	void Grid_SetSizes( void* grid, unsigned* sizes );
+
+	void Grid_Lift( void* grid, unsigned ind, unsigned* params );
+	unsigned Grid_Project( void* grid, unsigned* params );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Discretisaton_Mesh_Grid_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_HMesh_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_HMesh_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">HMesh</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="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>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1617 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: HexaEL.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "HexaEL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "MeshDecomp.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "MeshTopology.h"
+#include "HexaMD.h"
+#include "MeshClass.h"
+
+
+/* Textual name of this class */
+const Type HexaEL_Type = "HexaEL";
+const Name defaultHexaEL_IJK26TopologyName = "defaultHexaEL_IJK26TopologyName";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+HexaEL* HexaEL_DefaultNew( Name name )
+{
+	return (HexaEL*)_HexaEL_New( 
+		sizeof(HexaEL), 
+		HexaEL_Type, 
+		_HexaEL_Delete, 
+		_HexaEL_Print,
+		_HexaEL_Copy,
+		(Stg_Component_DefaultConstructorFunction*)HexaEL_DefaultNew,
+		_HexaEL_Construct,
+		_HexaEL_Build,
+		_HexaEL_Initialise,
+		_HexaEL_Execute,
+		_HexaEL_Destroy,
+		name,
+		False,
+		_ElementLayout_Build,
+		_HexaEL_BuildCornerIndices,
+		_HexaEL_CornerElementCount,
+		_HexaEL_BuildCornerElements,
+		_HexaEL_BuildEdgeIndices,
+		_HexaEL_EdgeElementCount,
+		_HexaEL_BuildEdgeElements,
+		_HexaEL_EdgeAt,
+		_ElementLayout_GetStaticMinAndMaxLocalCoords,
+		_ElementLayout_GetStaticMinAndMaxGlobalCoords,
+		_HexaEL_ElementWithPoint,
+		0,
+		NULL,
+		NULL );
+}
+
+HexaEL* HexaEL_New(
+	Name						name,
+	Dimension_Index             dim,
+	Dictionary*					dictionary,
+	Geometry*					geometry )
+{
+	return _HexaEL_New( 
+		sizeof(HexaEL), 
+		HexaEL_Type, 
+		_HexaEL_Delete, 
+		_HexaEL_Print,
+		_HexaEL_Copy,
+		(Stg_Component_DefaultConstructorFunction*)HexaEL_DefaultNew,
+		_HexaEL_Construct,
+		_HexaEL_Build,
+		_HexaEL_Initialise,
+		_HexaEL_Execute,
+		_HexaEL_Destroy,
+		name,
+		True,
+		_ElementLayout_Build,
+		_HexaEL_BuildCornerIndices,
+		_HexaEL_CornerElementCount,
+		_HexaEL_BuildCornerElements,
+		_HexaEL_BuildEdgeIndices,
+		_HexaEL_EdgeElementCount,
+		_HexaEL_BuildEdgeElements,
+		_HexaEL_EdgeAt,
+		_ElementLayout_GetStaticMinAndMaxLocalCoords,
+		_ElementLayout_GetStaticMinAndMaxGlobalCoords,
+		_HexaEL_ElementWithPoint,
+		dim,
+		dictionary,
+		geometry );
+}
+
+void HexaEL_Init(
+	HexaEL*						self,
+	Name						name,
+	Dimension_Index             dim,
+	Dictionary*					dictionary,
+	Geometry*					geometry )
+{
+	/* General info */
+	self->type = HexaEL_Type;
+	self->_sizeOfSelf = sizeof(HexaEL);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _HexaEL_Delete;
+	self->_print = _HexaEL_Print;
+	self->_copy = _HexaEL_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)HexaEL_DefaultNew;
+	self->_construct = _HexaEL_Construct;
+	self->_build = _HexaEL_Build;
+	self->_initialise = _HexaEL_Initialise;
+	self->_execute = _HexaEL_Execute;
+	self->_destroy = _HexaEL_Destroy;
+	self->build = _ElementLayout_Build;
+	self->buildCornerIndices = _HexaEL_BuildCornerIndices;
+	self->cornerElementCount = _HexaEL_CornerElementCount;
+	self->buildCornerElements = _HexaEL_BuildCornerElements;
+	self->buildEdgeIndices = _HexaEL_BuildEdgeIndices;
+	self->edgeElementCount = _HexaEL_EdgeElementCount;
+	self->buildEdgeElements = _HexaEL_BuildEdgeElements;
+	self->edgeAt = _HexaEL_EdgeAt;
+	self->getStaticMinAndMaxLocalCoords = _ElementLayout_GetStaticMinAndMaxLocalCoords;
+	self->getStaticMinAndMaxGlobalCoords = _ElementLayout_GetStaticMinAndMaxGlobalCoords;
+	self->elementWithPoint = _HexaEL_ElementWithPoint;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_ElementLayout_Init( (ElementLayout*)self, geometry, (Topology*)IJK26Topology_New( defaultHexaEL_IJK26TopologyName, dictionary ) );
+	self->topologyWasCreatedInternally = True;
+	
+	/* HexaEL info */
+	_HexaEL_Init( self, dim, NULL, NULL );
+}
+
+HexaEL* _HexaEL_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,
+	ElementLayout_BuildFunction*                            build,		
+	ElementLayout_BuildCornerIndicesFunction*               buildCornerIndices,
+	ElementLayout_CornerElementCountFunction*               cornerElementCount,
+	ElementLayout_BuildCornerElementsFunction*              buildCornerElements,
+	ElementLayout_BuildEdgeIndicesFunction*                 buildEdgeIndices,
+	ElementLayout_EdgeElementCountFunction*                 edgeElementCount,
+	ElementLayout_BuildEdgeElementsFunction*                buildEdgeElements,
+	ElementLayout_EdgeAtFunction*                           edgeAt,
+	ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*    getStaticMinAndMaxLocalCoords,
+	ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*   getStaticMinAndMaxGlobalCoords,				
+	ElementLayout_ElementWithPointFunction*                 elementWithPoint,
+	Dimension_Index                                         dim,
+	Dictionary*                                             dictionary,
+	Geometry*                                               geometry )
+{
+	HexaEL* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(HexaEL) );
+	self = (HexaEL*)_ElementLayout_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		build,
+		buildCornerIndices,
+		cornerElementCount,
+		buildCornerElements,
+		buildEdgeIndices,
+		edgeElementCount,
+		buildEdgeElements,
+		edgeAt,
+		getStaticMinAndMaxLocalCoords,
+		getStaticMinAndMaxGlobalCoords,
+		elementWithPoint,
+		dictionary,
+		geometry,
+		(initFlag)?(Topology*)IJK26Topology_New( defaultHexaEL_IJK26TopologyName, dictionary ):NULL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* HexaEL info */
+	if( initFlag ){
+		_HexaEL_Init( self, dim, NULL, NULL );
+		self->topologyWasCreatedInternally = True;
+	}
+	
+	return self;
+}
+
+void _HexaEL_Init( HexaEL* self, Dimension_Index dim, IJK pointSize, IJK elementSize ) {
+	/* General and Virtual info should already be set */
+	
+	/* HexaEL info */
+	self->isConstructed = True;
+	self->dim = dim;
+	if (pointSize) {
+		memcpy( self->pointSize, pointSize, sizeof(IJK) );
+	}
+	else {
+		self->pointSize[ I_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeI", 2 );
+		self->pointSize[ J_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeJ", 2 );
+		self->pointSize[ K_AXIS ] = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "meshSizeK", 2 );
+	}
+
+	if ( dim <= 2 ) {
+		self->pointSize[ K_AXIS ] = 1;
+		if( dim == 1 )
+			self->pointSize[J_AXIS] = 1;
+	}
+	assert( self->pointSize[0] * self->pointSize[1] * self->pointSize[2] );
+	
+	if ( elementSize ) {
+		memcpy( self->elementSize, elementSize, sizeof(IJK) );
+	}
+	else {
+		self->elementSize[0] = self->pointSize[0] - 1;
+		self->elementSize[1] = self->pointSize[1] - 1;
+		self->elementSize[2] = self->pointSize[2] - 1;
+	}
+	if ( dim <= 2 ) {
+		self->elementSize[ K_AXIS ] = 1;
+		if( dim == 1 )
+			self->elementSize[J_AXIS] = 1;
+	}
+	self->elementCount = self->elementSize[0] * self->elementSize[1] * self->elementSize[2];
+	assert( self->elementCount );
+	
+	self->cornerCount = self->geometry->pointCount;
+	if( dim == 1 ) {
+		self->elementCornerCount = 2;
+		self->elementEdgeCount = 0;
+		self->edgeCount = 0;
+	}
+	else if ( dim == 2 ) {
+		self->elementCornerCount = 4;
+		self->elementEdgeCount = 4;
+		self->edgeCount = self->elementSize[0] * self->pointSize[1] + self->elementSize[1] * self->pointSize[0];
+	}
+	else {
+		self->elementCornerCount = 8;
+		self->elementEdgeCount = 12;
+		self->edgeCount = (self->elementSize[0] * self->pointSize[1] + self->elementSize[1] * self->pointSize[0]) * 
+			self->pointSize[2] + self->pointSize[0] * self->pointSize[1] * self->elementSize[2];
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _HexaEL_Delete( void* hexaEL ) {
+	HexaEL* self = (HexaEL*)hexaEL;
+	
+
+	/* modified by Patrick Sunter 18 May 2006 : in this component's construct it now grabs a topology from
+	   the component factory : thus we shouldn't delete it as it may be shared. Only delete if its using
+	   the default name and was thus constructed the old way */
+	if ( self->topologyWasCreatedInternally == True ) {
+		Stg_Class_Delete( self->topology );
+		self->topology = NULL;
+	}
+	
+	/* Stg_Class_Delete parent */
+	_ElementLayout_Delete( self );
+}
+
+
+void _HexaEL_Print( void* hexaEL, Stream* stream ) {
+	HexaEL* self = (HexaEL*)hexaEL;
+	
+	/* Set the Journal for printing informations */
+	Stream* hexaELStream;
+	hexaELStream = Journal_Register( InfoStream_Type, "HexaELStream" );
+
+	/* Print parent */
+	_ElementLayout_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "HexaEL (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* HexaEL info */
+}
+
+
+void* _HexaEL_Copy( void* hexaEL, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	HexaEL*	self = (HexaEL*)hexaEL;
+	HexaEL*	newHexaEL;
+	
+	newHexaEL = (HexaEL*)_ElementLayout_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	newHexaEL->pointSize[0] = self->pointSize[0];
+	newHexaEL->pointSize[1] = self->pointSize[1];
+	newHexaEL->pointSize[2] = self->pointSize[2];
+	newHexaEL->elementSize[0] = self->elementSize[0];
+	newHexaEL->elementSize[1] = self->elementSize[1];
+	newHexaEL->elementSize[2] = self->elementSize[2];
+	
+	return (void*)newHexaEL;
+}
+
+void _HexaEL_Construct( void* hexaEL, Stg_ComponentFactory* cf, void* data ) {
+	HexaEL*   self = (HexaEL*) hexaEL;
+	IJK26Topology *topology = NULL;
+	Geometry *geometry = NULL;
+	Dimension_Index dim;
+
+	self->dictionary = cf->rootDict;
+	
+	topology =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  Topology_Type, IJK26Topology,  True, data  ) ;
+	geometry =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  Geometry_Type, Geometry,  True, data  ) ;
+
+	dim = Dictionary_GetUnsignedInt( self->dictionary, "dim" );
+	
+	_ElementLayout_Init( (ElementLayout*)self, geometry, (Topology*)topology );
+	_HexaEL_Init( (HexaEL*)self, dim, ((BlockGeometry*) geometry)->size, topology->size );
+}
+	
+void _HexaEL_Build( void* hexaEL, void* data )
+{
+	
+}
+	
+void _HexaEL_Initialise( void* hexaEL, void* data )
+{
+	
+}
+	
+void _HexaEL_Execute( void* hexaEL, void* data )
+{
+	
+}
+	
+void _HexaEL_Destroy( void* hexaEL, void* data )
+{
+	
+}
+
+#define HEL_P_3DTo1D_3( self, i, j, k )					\
+	((k) * (self)->pointSize[0] * (self)->pointSize[1] + (j) * (self)->pointSize[0] + (i))
+
+#define HEL_P_3DTo1D( self, ijk )			\
+	HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] )
+
+
+#define HEL_P_1DTo3D_3( self, index, i, j, k )				\
+	*(i) = (index) % (self)->pointSize[0];				\
+	*(j) = ((index) / (self)->pointSize[0]) % (self)->pointSize[1]; \
+	*(k) = (index) / ((self)->pointSize[0] * (self)->pointSize[1])
+
+#define HEL_P_1DTo3D( self, index, ijk )				\
+	HEL_P_1DTo3D_3( self, index, &(ijk)[0], &(ijk)[1], &(ijk)[2] )
+
+
+#define HEL_E_3DTo1D_3( self, i, j, k )					\
+	((k) * (self)->elementSize[0] * (self)->elementSize[1] + (j) * (self)->elementSize[0] + (i))
+
+
+#define HEL_E_1DTo3D_3( self, index, i, j, k )				\
+	*(i) = (index) % (self)->elementSize[0];			\
+	*(j) = ((index) / (self)->elementSize[0]) % (self)->elementSize[1]; \
+	*(k) = (index) / ((self)->elementSize[0] * (self)->elementSize[1])
+
+#define HEL_E_1DTo3D( self, index, ijk )				\
+	HEL_E_1DTo3D_3( self, index, &(ijk)[0], &(ijk)[1], &(ijk)[2] )
+
+#define HEL_P_2DTo1D_2( self, i, j )		\
+	((j) * (self)->pointSize[0] + (i))
+
+#define HEL_P_2DTo1D( self, ij )		\
+	HEL_P_2DTo1D_2( self, ij[0], ij[1] )
+
+
+#define HEL_P_1DTo2D_2( self, index, i, j)				\
+	*(i) = (index) % (self)->pointSize[0];				\
+	*(j) = ((index) / (self)->pointSize[0]) % (self)->pointSize[1]
+
+#define HEL_P_1DTo2D( self, index, ij )				\
+	HEL_P_1DTo2D_2( self, index, &(ij)[0], &(ij)[1] )
+
+
+#define HEL_E_2DTo1D_2( self, i, j )		\
+	((j) * (self)->elementSize[0] + (i))
+
+
+#define HEL_E_1DTo2D_2( self, index, i, j )				\
+	*(i) = (index) % (self)->elementSize[0];			\
+	*(j) = ((index) / (self)->elementSize[0]) % (self)->elementSize[1]
+
+#define HEL_E_1DTo2D( self, index, ij )				\
+	HEL_E_1DTo2D_2( self, index, &(ij)[0], &(ij)[1] )
+
+
+void _HexaEL_BuildCornerIndices( void* hexaEL, Element_GlobalIndex globalIndex, Index* points ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	IJK		ijk;
+	
+	HEL_E_1DTo3D( self, globalIndex, ijk );
+	
+	points[0] = HEL_P_3DTo1D_3( self, ijk[0],       ijk[1],		ijk[2] );
+	points[1] = HEL_P_3DTo1D_3( self, ijk[0] + 1,	ijk[1],		ijk[2] );
+	points[3] = HEL_P_3DTo1D_3( self, ijk[0],       ijk[1] + 1,	ijk[2] );
+	points[2] = HEL_P_3DTo1D_3( self, ijk[0] + 1,	ijk[1] + 1,	ijk[2] );
+	if ( self->dim == 3 ) {
+		points[4] = HEL_P_3DTo1D_3( self, ijk[0],       ijk[1],		ijk[2] + 1 );
+		points[5] = HEL_P_3DTo1D_3( self, ijk[0] + 1,	ijk[1],		ijk[2] + 1 );
+		points[7] = HEL_P_3DTo1D_3( self, ijk[0],       ijk[1] + 1,	ijk[2] + 1 );
+		points[6] = HEL_P_3DTo1D_3( self, ijk[0] + 1,	ijk[1] + 1,	ijk[2] + 1 );
+	}
+}
+
+Element_GlobalIndex _HexaEL_CornerElementCount( void* hexaEL, Index corner ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	return ( self->dim == 1 ? 2 : self->dim == 2 ? 4 : 8 );
+}
+
+void _HexaEL_BuildCornerElements( void* hexaEL, Index corner, Element_GlobalIndex* elements ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+
+	self->buildCornerElements = (self->dim == 1 ? _HexaEL_BuildCornerElements1D : 
+				     self->dim == 2 ? _HexaEL_BuildCornerElements2D : _HexaEL_BuildCornerElements3D );
+
+	ElementLayout_BuildCornerElements( self, corner, elements );
+}
+
+void _HexaEL_BuildCornerElements1D( void* hexaEL, Index corner, Element_GlobalIndex* elements ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+
+	if( corner > 0 )
+		elements[0] = corner;
+	else
+		elements[0] = self->elementCount;
+
+	if( corner < self->elementCount - 1 )
+		elements[1] = corner + 1;
+	else
+		elements[1] = self->elementCount;
+}
+
+void _HexaEL_BuildCornerElements2D( void* hexaEL, Index corner, Element_GlobalIndex* elements ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	IJK		ij;
+	
+	HEL_P_1DTo2D( self, corner, ij );
+	
+	if( ij[0] > 0 && ij[1] > 0 )
+		elements[0] = HEL_E_2DTo1D_2( self, ij[0] - 1, ij[1] - 1 );
+	else
+		elements[0] = self->elementCount;
+	
+	if( ij[0] < self->elementSize[0] && ij[1] > 0 )
+		elements[1] = HEL_E_2DTo1D_2( self, ij[0], ij[1] - 1 );
+	else
+		elements[1] = self->elementCount;
+	
+	if( ij[0] > 0 && ij[1] < self->elementSize[1] )
+		elements[2] = HEL_E_2DTo1D_2( self, ij[0] - 1, ij[1] );
+	else
+		elements[2] = self->elementCount;
+	
+	if( ij[0] < self->elementSize[0] && ij[1] < self->elementSize[1] )
+		elements[3] = HEL_E_2DTo1D_2( self, ij[0], ij[1] );
+	else
+		elements[3] = self->elementCount;
+}
+
+void _HexaEL_BuildCornerElements3D( void* hexaEL, Index corner, Element_GlobalIndex* elements ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	IJK		ijk;
+	
+	HEL_P_1DTo3D( self, corner, ijk );
+	
+	if( ijk[0] > 0 && ijk[1] > 0 && ijk[2] > 0 )
+		elements[0] = HEL_E_3DTo1D_3( self, ijk[0] - 1, ijk[1] - 1, ijk[2] - 1 );
+	else
+		elements[0] = self->elementCount;
+	
+	if( ijk[0] < self->elementSize[0] && ijk[1] > 0 && ijk[2] > 0 )
+		elements[1] = HEL_E_3DTo1D_3( self, ijk[0], ijk[1] - 1, ijk[2] - 1 );
+	else
+		elements[1] = self->elementCount;
+	
+	if( ijk[0] > 0 && ijk[1] < self->elementSize[1] && ijk[2] > 0 )
+		elements[2] = HEL_E_3DTo1D_3( self, ijk[0] - 1, ijk[1], ijk[2] - 1 );
+	else
+		elements[2] = self->elementCount;
+	
+	if( ijk[0] < self->elementSize[0] && ijk[1] < self->elementSize[1] && ijk[2] > 0 )
+		elements[3] = HEL_E_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] - 1 );
+	else
+		elements[3] = self->elementCount;
+	
+	if( ijk[0] > 0 && ijk[1] > 0 && ijk[2] < self->elementSize[2] )
+		elements[4] = HEL_E_3DTo1D_3( self, ijk[0] - 1, ijk[1] - 1, ijk[2] );
+	else
+		elements[4] = self->elementCount;
+	
+	if( ijk[0] < self->elementSize[0] && ijk[1] > 0 && ijk[2] < self->elementSize[2] )
+		elements[5] = HEL_E_3DTo1D_3( self, ijk[0], ijk[1] - 1, ijk[2] );
+	else
+		elements[5] = self->elementCount;
+	
+	if( ijk[0] > 0 && ijk[1] < self->elementSize[1] && ijk[2] < self->elementSize[2] )
+		elements[6] = HEL_E_3DTo1D_3( self, ijk[0] - 1, ijk[1], ijk[2] );
+	else
+		elements[6] = self->elementCount;
+	
+	if( ijk[0] < self->elementSize[0] && ijk[1] < self->elementSize[1] && ijk[2] < self->elementSize[2] )
+		elements[7] = HEL_E_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] );
+	else
+		elements[7] = self->elementCount;
+}
+
+void _HexaEL_BuildEdgeIndices( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+
+	self->buildEdgeIndices = (self->dim == 1 ? _HexaEL_BuildEdgeIndices1D : 
+				  self->dim == 2 ? _HexaEL_BuildEdgeIndices2D : _HexaEL_BuildEdgeIndices3D );
+
+	ElementLayout_BuildEdgeIndices( self, globalIndex, edges );
+}
+
+void _HexaEL_BuildEdgeIndices1D( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges ) {
+	abort();
+}
+
+void _HexaEL_BuildEdgeIndices2D( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	IJK		ij;
+	
+	HEL_E_1DTo2D( self, globalIndex, ij );
+	
+	edges[0] = (self->elementSize[0] + self->pointSize[0]) * ij[1];
+	edges[0] += ij[0];
+	
+	edges[1] = edges[0] + self->elementSize[0];
+	
+	edges[2] = edges[1] + 1;
+	
+	edges[3] = edges[2] + self->elementSize[0];
+}
+
+void _HexaEL_BuildEdgeIndices3D( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	IJK		ijk;
+	
+	HEL_E_1DTo3D( self, globalIndex, ijk );
+	
+	edges[0] = (self->elementSize[0] * self->pointSize[1] + self->elementSize[1] * self->pointSize[0] + 
+		    self->pointSize[0] * self->pointSize[1]) * ijk[2];
+	edges[0] += (self->elementSize[0] + self->pointSize[0]) * ijk[1];
+	edges[0] += ijk[0];
+	
+	edges[1] = edges[0] + self->elementSize[0];
+	
+	edges[2] = edges[1] + 1;
+	
+	edges[3] = edges[2] + self->elementSize[0];
+	
+	edges[4] = (self->elementSize[0] * self->pointSize[1] + self->elementSize[1] * self->pointSize[0] + 
+		    self->pointSize[0] * self->pointSize[1]) * ijk[2] + 
+		self->elementSize[0] * self->pointSize[1] + self->elementSize[1] * self->pointSize[0];
+	edges[4] += ijk[1] * self->pointSize[0] + ijk[0];
+	
+	edges[5] = edges[4] + 1;
+	
+	edges[6] = edges[4] + self->pointSize[0];
+	
+	edges[7] = edges[6] + 1;
+
+	edges[8] = (self->elementSize[0] * self->pointSize[1] + self->elementSize[1] * self->pointSize[0] + 
+		    self->pointSize[0] * self->pointSize[1]) * (ijk[2] + 1);
+	edges[8] += (self->elementSize[0] + self->pointSize[0]) * ijk[1];
+	edges[8] += ijk[0];
+	
+	edges[9] = edges[8] + self->elementSize[0];
+	
+	edges[10] = edges[9] + 1;
+	
+	edges[11] = edges[10] + self->elementSize[0];
+}
+
+
+Element_GlobalIndex _HexaEL_EdgeElementCount( void* hexaEL, Index edge ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+
+	return (self->dim == 1 ? 0 : self->dim == 2 ? 2 : 4 );
+}
+
+
+void _HexaEL_BuildEdgeElements( void* hexaEL, Index edge, Element_GlobalIndex* elements ) {
+	/*HexaEL*		self = (HexaEL*)hexaEL; */
+	/* TODO */
+	assert( 0 );
+}
+
+void _HexaEL_EdgeAt( void* hexaEL, Index index, Edge edge ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+
+	self->edgeAt = (self->dim == 1 ? _HexaEL_EdgeAt1D : 
+			self->dim == 2 ? _HexaEL_EdgeAt2D : _HexaEL_EdgeAt3D );
+	ElementLayout_EdgeAt( self, index, edge );
+}
+
+void _HexaEL_EdgeAt1D( void* hexaEL, Index index, Edge edge ) {
+	abort();
+}
+
+void _HexaEL_EdgeAt2D( void* hexaEL, Index index, Edge edge ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	
+	if( index < self->edgeCount ) {
+		IJK     ij;
+		Index   base;
+		
+		base = self->elementSize[0] + self->pointSize[0];
+		
+		ij[1] = index / base;
+		ij[0] = index % base;
+		
+		if( ij[0] < self->elementSize[0] ) {
+			edge[1] = HEL_P_2DTo1D_2( self, ij[0] + 1, ij[1] );
+		}
+		else {
+			ij[0] -= self->elementSize[0];
+			edge[1] = HEL_P_2DTo1D_2( self, ij[0], ij[1] + 1 );
+		}
+		
+		edge[0] = HEL_P_2DTo1D( self, ij );
+	}
+	else {
+		edge[0] = self->geometry->pointCount;
+		edge[1] = self->geometry->pointCount;
+	}
+}
+
+
+void _HexaEL_EdgeAt3D( void* hexaEL, Index index, Edge edge ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	
+	if( index < self->edgeCount ) {
+		IJK     ijk, base;
+		Index   mod;
+		
+		base[0] = self->elementSize[0] + self->pointSize[0];
+		base[1] = base[0] * self->elementSize[1] + self->elementSize[0];
+		base[2] = base[1] + self->pointSize[0] * self->pointSize[1];
+		
+		ijk[2] = index / base[2];
+		mod = index % base[2];
+		
+		if( mod < base[1] ) {
+			ijk[1] = mod / base[0];
+			ijk[0] = mod % base[0];
+			
+			if( ijk[0] < self->elementSize[0] ) {
+				edge[1] = HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] );
+			}
+			else {
+				ijk[0] -= self->elementSize[0];
+				edge[1] = HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] );
+			}
+		}
+		else {
+			ijk[1] = (mod - base[1]) / self->pointSize[0];
+			ijk[0] = (mod - base[1]) % self->pointSize[0];
+			
+			edge[1] = HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] + 1 );
+		}
+		
+		edge[0] = HEL_P_3DTo1D( self, ijk );
+	}
+	else {
+		edge[0] = self->geometry->pointCount;
+		edge[1] = self->geometry->pointCount;
+	}
+}
+
+Element_DomainIndex _HexaEL_ElementWithPoint( void* hexaEL, void* decomp, Coord point, void* mesh, 
+					      PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{		
+	HexaEL*			self = (HexaEL*)hexaEL;
+
+	self->elementWithPoint = (self->dim == 1 ? _HexaEL_ElementWithPoint1D : 
+				  self->dim == 2 ? _HexaEL_ElementWithPoint2D : _HexaEL_ElementWithPoint3D );
+
+	return ElementLayout_ElementWithPoint( self, decomp, point, mesh, boundaryStatus, nHints, hints );
+}
+
+
+Bool _HexaEL_Equiv( double var, double val ) {
+	static const double	fac = 1e-13;
+
+	return (var > val - fac && var < val + fac);
+}
+
+
+void _HexaEL_TriBarycenter( Coord tri[3], const Coord pnt, Coord dst ) {
+	double	a = tri[0][0] - tri[2][0];
+	double	b = tri[1][0] - tri[2][0];
+	double	c = tri[2][0] - pnt[0];
+	double	d = tri[0][1] - tri[2][1];
+	double	e = tri[1][1] - tri[2][1];
+	double	f = tri[2][1] - pnt[1];
+
+	dst[0] = (b * f - c * e) / (a * e - b * d);
+	if( _HexaEL_Equiv( dst[0], 0.0 ) ) dst[0] = 0.0;
+	else if( _HexaEL_Equiv( dst[0], 1.0 ) ) dst[0] = 1.0;
+
+	dst[1] = (a * f - c * d) / (b * d - a * e);
+	if( _HexaEL_Equiv( dst[1], 0.0 ) ) dst[1] = 0.0;
+	else if( _HexaEL_Equiv( dst[1], 1.0 ) ) dst[1] = 1.0;
+
+	dst[2] = 1.0 - dst[0] - dst[1];
+	if( _HexaEL_Equiv( dst[2], 0.0 ) ) dst[2] = 0.0;
+	else if( _HexaEL_Equiv( dst[2], 1.0 ) ) dst[2] = 1.0;
+}
+
+
+void _HexaEL_TetBarycenter( Coord tet[4], const Coord pnt, double* dst ) {
+	double	x0 = tet[0][0], x1 = tet[1][0], x2 = tet[2][0], x3 = tet[3][0];
+	double	y0 = tet[0][1], y1 = tet[1][1], y2 = tet[2][1], y3 = tet[3][1];
+	double	z0 = tet[0][2], z1 = tet[1][2], z2 = tet[2][2], z3 = tet[3][2];
+	double	px = pnt[0], py = pnt[1], pz = pnt[2];
+	double	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)));
+
+	dst[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( _HexaEL_Equiv( dst[1], 0.0 ) ) dst[1] = 0.0;
+	else if( _HexaEL_Equiv( dst[1], 1.0 ) ) dst[1] = 1.0;
+
+	dst[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( _HexaEL_Equiv( dst[2], 0.0 ) ) dst[2] = 0.0;
+	else if( _HexaEL_Equiv( dst[2], 1.0 ) ) dst[2] = 1.0;
+
+	dst[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( _HexaEL_Equiv( dst[3], 0.0 ) ) dst[3] = 0.0;
+	else if( _HexaEL_Equiv( dst[3], 1.0 ) ) dst[3] = 1.0;
+
+	dst[0] = 1.0 - dst[1] - dst[2] - dst[3];
+	if( _HexaEL_Equiv( dst[0], 0.0 ) ) dst[0] = 0.0;
+	else if( _HexaEL_Equiv( dst[0], 1.0 ) ) dst[0] = 1.0;
+}
+
+
+Bool _HexaEL_FindTriBarycenter( const Coord crds[4], const Coord pnt, double* bcs, unsigned* dstInds, 
+				PartitionBoundaryStatus bndStatus, MeshTopology* topo, unsigned gElInd )
+{
+	const unsigned	nTris = 2;
+	const unsigned	inds[2][3] = {{0, 1, 2}, {1, 3, 2}};
+	Coord		tri[3];
+	unsigned	tri_i;
+
+	for( tri_i = 0; tri_i < nTris; tri_i++ ) {
+		unsigned	ind_i;
+
+		/* Copy coordinate. */
+		for( ind_i = 0; ind_i < 3; ind_i++ ) {
+			dstInds[ind_i] = inds[tri_i][ind_i];
+			memcpy( tri[ind_i], crds[inds[tri_i][ind_i]], sizeof(Coord) );
+		}
+
+		/* Clac the barycenter. */
+		_HexaEL_TriBarycenter( tri, pnt, bcs );
+
+		/* Check for completeness. */
+		for( ind_i = 0; ind_i < 3; ind_i++ ) {
+			if( bcs[ind_i] < 0.0 || bcs[ind_i] > 1.0 )
+				break;
+		}
+		if( ind_i == 3 ) {
+			if( topo && topo->domains && bndStatus == EXCLUSIVE_UPPER_BOUNDARY ) {
+				Decomp*		decomp;
+				unsigned	telInd;
+				unsigned	dElInd = Decomp_Sync_GlobalToDomain( topo->domains[MT_FACE], gElInd );
+
+				assert( dElInd < MeshTopology_GetDomainSize( topo, MT_FACE ) );
+
+				/* Check boundary ownership. */
+				if( bcs[0] == 0.0 || bcs[0] == -0.0 ) {
+					if( bcs[1] == 0.0 || bcs[1] == -0.0 ) {
+						decomp = topo->domains[MT_VERTEX]->decomp;
+						telInd = topo->incEls[MT_FACE][MT_VERTEX][dElInd][inds[tri_i][2]];
+					}
+					else if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+						decomp = topo->domains[MT_VERTEX]->decomp;
+						telInd = topo->incEls[MT_FACE][MT_VERTEX][dElInd][inds[tri_i][1]];
+					}
+					else {
+						decomp = topo->domains[MT_EDGE]->decomp;
+						if( tri_i == 0 )
+							return True;
+						else if( tri_i == 1 )
+							telInd = topo->incEls[MT_FACE][MT_EDGE][dElInd][1];
+					}
+					return telInd < decomp->nLocals;
+				}
+				else if( bcs[1] == 0.0 || bcs[1] == -0.0 ) {
+					if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+						decomp = topo->domains[MT_VERTEX]->decomp;
+						telInd = topo->incEls[MT_FACE][MT_VERTEX][dElInd][inds[tri_i][0]];
+					}
+					else {
+						decomp = topo->domains[MT_EDGE]->decomp;
+						if( tri_i == 0 )
+							telInd = topo->incEls[MT_FACE][MT_EDGE][dElInd][2];
+						else if( tri_i == 1 )
+							return True;
+					}
+					return telInd < decomp->nLocals;
+				}
+				else if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+					decomp = topo->domains[MT_EDGE]->decomp;
+					if( tri_i == 0 )
+						telInd = topo->incEls[MT_FACE][MT_EDGE][dElInd][0];
+					else if( tri_i == 1 )
+						telInd = topo->incEls[MT_FACE][MT_EDGE][dElInd][3];
+					return telInd < decomp->nLocals;
+				}
+			}
+
+			return True;
+		}
+	}
+
+	return False;
+}
+
+
+Bool _HexaEL_FindTetBarycenter( const Coord crds[8], const Coord pnt, double* bcs, unsigned* dstInds, 
+				PartitionBoundaryStatus bndStatus, MeshTopology* topo, unsigned gElInd )
+{
+	const unsigned	nTets = 10;
+	const unsigned	inds[10][4] = {{0, 1, 2, 4}, 
+				       {1, 2, 3, 7}, 
+				       {1, 4, 5, 7}, 
+				       {2, 4, 6, 7}, 
+				       {1, 2, 4, 7}, 
+				       {0, 1, 3, 5}, 
+				       {0, 4, 5, 6}, 
+				       {0, 2, 3, 6}, 
+				       {3, 5, 6, 7}, 
+				       {0, 3, 5, 6}};
+	Coord		tet[4];
+	int		tet_i;
+
+	for( tet_i = 0; tet_i < nTets; tet_i++ ) {
+		int	ind_i;
+
+		/* Copy coordinates to the correct order. */
+		for( ind_i = 0; ind_i < 4; ind_i++ ) {
+			dstInds[ind_i] = inds[tet_i][ind_i];
+			memcpy( tet[ind_i], crds[inds[tet_i][ind_i]], sizeof(Coord) );
+		}
+
+		/* Calc barycenter. */
+		_HexaEL_TetBarycenter( tet, pnt, bcs );
+
+		/* Is this the right tetrahedron? */
+		for( ind_i = 0; ind_i < 4; ind_i++ ) {
+			if( bcs[ind_i] < 0.0 || bcs[ind_i] > 1.0 )
+				break;
+		}
+		if( ind_i == 4 ){
+			if( topo && topo->domains && bndStatus == EXCLUSIVE_UPPER_BOUNDARY ) {
+				Decomp*		decomp;
+				unsigned	telInd;
+				unsigned	dElInd = Decomp_Sync_GlobalToDomain( topo->domains[MT_VOLUME], gElInd );
+
+				assert( dElInd < MeshTopology_GetDomainSize( topo, MT_VOLUME ) );
+
+				/* Check boundary ownership. */
+				if( bcs[0] == 0.0 || bcs[0] == -0.0 ) {
+					if( bcs[1] == 0.0 || bcs[1] == -0.0 ) {
+						if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+							decomp = topo->domains[MT_VERTEX]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_VERTEX][dElInd][inds[tet_i][3]];
+						}
+						else if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+							decomp = topo->domains[MT_VERTEX]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_VERTEX][dElInd][inds[tet_i][2]];
+						}
+						else {
+							if( tet_i == 0 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+							}
+							else if( tet_i == 1 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][11];
+							}
+							else if( tet_i == 2 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][7];
+							}
+							else if( tet_i == 3 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][5];
+							}
+							else if( tet_i == 4 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+							}
+							else if( tet_i == 5 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+							}
+							else if( tet_i == 6 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+							}
+							else if( tet_i == 7 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+							}
+							else if( tet_i == 8 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][5];
+							}
+							else {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+							}
+						}
+					}
+					else if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+						if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+							decomp = topo->domains[MT_VERTEX]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_VERTEX][dElInd][inds[tet_i][1]];
+						}
+						else {
+							if( tet_i == 0 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+							}
+							else if( tet_i == 1 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+							}
+							else if( tet_i == 2 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+							}
+							else if( tet_i == 3 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+							}
+							else if( tet_i == 4 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+							}
+							else if( tet_i == 5 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][9];
+							}
+							else if( tet_i == 6 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][6];
+							}
+							else if( tet_i == 7 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][10];
+							}
+							else if( tet_i == 8 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][7];
+							}
+							else {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+							}
+						}
+					}
+					else if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+						if( tet_i == 0 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+						}
+						else if( tet_i == 1 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][1];
+						}
+						else if( tet_i == 2 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][4];
+						}
+						else if( tet_i == 3 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][6];
+						}
+						else if( tet_i == 4 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+						}
+						else if( tet_i == 5 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][3];
+						}
+						else if( tet_i == 6 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][4];
+						}
+						else if( tet_i == 7 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][1];
+						}
+						else if( tet_i == 8 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+						}
+						else {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+						}
+					}
+					else {
+						if( tet_i == 0 )
+							return True;
+						else if( tet_i == 1 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+						}
+						else if( tet_i == 2 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+						}
+						else if( tet_i == 3 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+						}
+						else if( tet_i == 4 )
+							return True;
+						else if( tet_i == 5 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+						}
+						else if( tet_i == 6 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+						}
+						else if( tet_i == 7 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+						}
+						else if( tet_i == 8 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][1];
+						}
+						else
+							return True;
+					}
+
+					return telInd < decomp->nLocals;
+				}
+				else if( bcs[1] == 0.0 || bcs[1] == -0.0 ) {
+					if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+						if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+							decomp = topo->domains[MT_VERTEX]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_VERTEX][dElInd][inds[tet_i][0]];
+						}
+						else {
+							if( tet_i == 0 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][8];
+							}
+							else if( tet_i == 1 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+							}
+							else if( tet_i == 2 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+							}
+							else if( tet_i == 3 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+							}
+							else if( tet_i == 4 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+							}
+							else if( tet_i == 5 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+							}
+							else if( tet_i == 6 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+							}
+							else if( tet_i == 7 ) {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+							}
+							else if( tet_i == 8 ) {
+								decomp = topo->domains[MT_EDGE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][7];
+							}
+							else {
+								decomp = topo->domains[MT_FACE]->decomp;
+								telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+							}
+						}
+					}
+					else if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+						if( tet_i == 0 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][2];
+						}
+						else if( tet_i == 1 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][3];
+						}
+						else if( tet_i == 2 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][9];
+						}
+						else if( tet_i == 3 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][10];
+						}
+						else if( tet_i == 4 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+						}
+						else if( tet_i == 5 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+						}
+						else if( tet_i == 6 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+						}
+						else if( tet_i == 7 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+						}
+						else if( tet_i == 8 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+						}
+						else {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+						}
+					}
+					else {
+						if( tet_i == 0 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+						}
+						else if( tet_i == 1 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+						}
+						else if( tet_i == 2 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+						}
+						else if( tet_i == 3 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+						}
+						else if( tet_i == 4 )
+							return True;
+						else if( tet_i == 5 )
+							return True;
+						else if( tet_i == 6 )
+							return True;
+						else if( tet_i == 7 )
+							return True;
+						else if( tet_i == 8 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][3];
+						}
+						else
+							return True;
+					}
+
+					return telInd < decomp->nLocals;
+				}
+				else if( bcs[2] == 0.0 || bcs[2] == -0.0 ) {
+					if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+						if( tet_i == 0 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][0];
+						}
+						else if( tet_i == 1 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+						}
+						else if( tet_i == 2 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+						}
+						else if( tet_i == 3 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+						}
+						else if( tet_i == 4 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+						}
+						else if( tet_i == 5 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][0];
+						}
+						else if( tet_i == 6 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][8];
+						}
+						else if( tet_i == 7 ) {
+							decomp = topo->domains[MT_EDGE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_EDGE][dElInd][2];
+						}
+						else if( tet_i == 8 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+						}
+						else {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+						}
+					}
+					else {
+						if( tet_i == 0 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+						}
+						else if( tet_i == 1 )
+							return True;
+						else if( tet_i == 2 )
+							return True;
+						else if( tet_i == 3 )
+							return True;
+						else if( tet_i == 4 )
+							return True;
+						else if( tet_i == 5 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+						}
+						else if( tet_i == 6 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+						}
+						else if( tet_i == 7 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+						}
+						else if( tet_i == 8 ) {
+							decomp = topo->domains[MT_FACE]->decomp;
+							telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][5];
+						}
+						else
+							return True;
+					}
+
+					return telInd < decomp->nLocals;
+				}
+				else if( bcs[3] == 0.0 || bcs[3] == -0.0 ) {
+					if( tet_i == 0 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+					}
+					else if( tet_i == 1 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+					}
+					else if( tet_i == 2 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+					}
+					else if( tet_i == 3 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][4];
+					}
+					else if( tet_i == 4 )
+						return True;
+					else if( tet_i == 5 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+					}
+					else if( tet_i == 6 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][2];
+					}
+					else if( tet_i == 7 ) {
+						decomp = topo->domains[MT_FACE]->decomp;
+						telInd = topo->incEls[MT_VOLUME][MT_FACE][dElInd][0];
+					}
+					else if( tet_i == 8 )
+						return True;
+					else
+						return True;
+
+					return telInd < decomp->nLocals;
+				}
+			}
+
+			return True;
+		}
+	}
+
+	return False;
+}
+
+Element_DomainIndex _HexaEL_ElementWithPoint1D( void* hexaEL, void* _decomp, Coord point, void* _mesh, 
+						PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{
+	abort();
+}
+
+Element_DomainIndex _HexaEL_ElementWithPoint2D( void* hexaEL, void* _decomp, Coord point, void* _mesh, 
+						PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{
+	HexaEL*		self = (HexaEL*)hexaEL;
+	HexaMD*		decomp = (HexaMD*)_decomp;
+	Geometry*       geometry = self->geometry;
+	Mesh*		mesh = (Mesh*)_mesh;
+	IJK		ij;
+	Coord		crds[4];
+	unsigned	inds[3];
+	Coord		bc;
+	unsigned	nEls = nHints ? nHints : decomp->elementDomainCount;
+	unsigned	e_i;
+
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		unsigned	elInd = nHints ? hints[e_i] : e_i;
+
+		if( elInd >= decomp->elementDomainCount ) {
+			continue;
+		}
+
+		/* Convert global point to 2D. */
+		if( mesh )
+			elInd = Mesh_ElementMapDomainToGlobal( mesh, elInd );
+		else
+			elInd = decomp->elementMapDomainToGlobal( decomp, elInd );
+		HEL_E_1DTo2D( self, elInd, ij );
+
+		/* Collect points. */
+		geometry->pointAt( geometry, 
+				   HEL_P_2DTo1D_2( self, ij[0], ij[1] ), 
+				   crds[0] );
+		geometry->pointAt( geometry, 
+				   HEL_P_2DTo1D_2( self, ij[0] + 1, ij[1] ), 
+				   crds[1] );
+		geometry->pointAt( geometry, 
+				   HEL_P_2DTo1D_2( self, ij[0], ij[1] + 1 ), 
+				   crds[2] );
+		geometry->pointAt( geometry, 
+				   HEL_P_2DTo1D_2( self, ij[0] + 1, ij[1] + 1 ), 
+				   crds[3] );
+		if( _HexaEL_FindTriBarycenter( (const Coord*)crds, point, bc, inds, 
+					       boundaryStatus, self->topo, elInd ) )
+		{
+			return decomp->elementMapGlobalToDomain( decomp, elInd );
+		}
+	}
+
+	return decomp->elementDomainCount;
+}
+
+
+Element_DomainIndex _HexaEL_ElementWithPoint3D( void* hexaEL, void* _decomp, Coord point, void* _mesh, 
+						PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{
+	HexaEL*		self = (HexaEL*)hexaEL;
+	HexaMD*		decomp = (HexaMD*)_decomp;
+	Geometry*       geometry = self->geometry;
+	Mesh*		mesh = (Mesh*)_mesh;
+	IJK		ijk;
+	Coord		crds[8];
+	unsigned	inds[4];
+	double		bc[4];
+	unsigned	nEls = nHints ? nHints : decomp->elementDomainCount;
+	unsigned	e_i;
+
+	for( e_i = 0; e_i < nEls; e_i++ ) {
+		unsigned	elInd = nHints ? hints[e_i] : e_i;
+
+		/* Safety check. */
+		if( elInd >= decomp->elementDomainCount )
+			continue;
+
+		/* Convert global point to 3D. */
+		if( mesh )
+			elInd = Mesh_ElementMapDomainToGlobal( mesh, elInd );
+		else
+			elInd = decomp->elementMapDomainToGlobal( decomp, elInd );
+		HEL_E_1DTo3D( self, elInd, ijk );
+
+		/* Collect the coordinates. */
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] ), 
+				   crds[0] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] ), 
+				   crds[1] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] ), 
+				   crds[2] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1] + 1, ijk[2] ), 
+				   crds[3] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] + 1 ), 
+				   crds[4] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] + 1 ), 
+				   crds[5] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] + 1 ), 
+				   crds[6] );
+		geometry->pointAt( geometry, 
+				   HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1] + 1, ijk[2] + 1 ), 
+				   crds[7] );
+
+		/* Find the barycenter. */
+		if( _HexaEL_FindTetBarycenter( (const Coord*)crds, point, bc, inds, 
+					       boundaryStatus, self->topo, elInd ) )
+		{
+			return decomp->elementMapGlobalToDomain( decomp, elInd );
+		}
+	}
+
+	return decomp->elementDomainCount;
+}
+
+#if 0
+Element_DomainIndex _HexaEL_ElementWithPoint3D( void* hexaEL, void* decomp, Coord point,
+						PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{		
+	HexaEL*			self = (HexaEL*)hexaEL;
+	HexaMD*			hexaDecomp = (HexaMD*)decomp;
+	Element_GlobalIndex     e_I;
+	Plane			planes[6];
+	unsigned		nEls = nHints ? nHints : hexaDecomp->elementDomainCount;
+	
+	for( e_I = 0; e_I < nEls; e_I++ ) {
+		unsigned	elInd = nHints ? hints[e_I] : e_I;
+		Index		i;
+
+		if( elInd >= hexaDecomp->elementDomainCount ) continue;
+		
+		_HexaEL_BuildElementPlanes( self, elInd, planes );
+		
+		for( i = 0; i < 6; i++ )
+			if( Plane_DistanceToPoint( planes[i], point ) > 0.0 )
+				break;
+		
+		if( i == 6 )
+			return elInd;
+	}
+	
+	return hexaDecomp->elementDomainCount;
+}
+#endif
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _HexaEL_BuildElementPlanes( void* hexaEL, Element_GlobalIndex globalIndex, Plane_List planes ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	Geometry*   geometry = self->geometry;
+	Coord		a, b, c, axisA, axisB;
+	IJK		ijk;
+	
+	HEL_E_1DTo3D( self, globalIndex, ijk );
+	
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] ), a );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] ), b );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] ), c );
+	Vector_Sub( axisA, b, a );
+	Vector_Sub( axisB, c, a );
+	Plane_CalcFromVec( planes[0], axisB, axisA, a );
+
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] + 1 ), b );
+	Vector_Sub( axisA, b, a );
+	Plane_CalcFromVec( planes[1], axisA, axisB, a );
+	
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] ), b );
+	Vector_Sub( axisB, b, a );
+	Plane_CalcFromVec( planes[2], axisB, axisA, a );
+	
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1] + 1, ijk[2] + 1 ), a );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] + 1 ), b );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] + 1 ), c );
+	Vector_Sub( axisA, b, a );
+	Vector_Sub( axisB, c, a );
+	Plane_CalcFromVec( planes[3], axisA, axisB, a );
+	
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1] + 1, ijk[2] ), b );
+	Vector_Sub( axisA, b, a );
+	Plane_CalcFromVec( planes[4], axisB, axisA, a );
+	
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] + 1 ), c );
+	Vector_Sub( axisB, c, a );
+	Plane_CalcFromVec( planes[5], axisA, axisB, a );
+
+#ifndef NDEBUG
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1] + 1, ijk[2] ), b );
+	assert( Plane_DistanceToPoint( planes[0], b ) > -1e-9 && Plane_DistanceToPoint( planes[0], b ) < 1e-9 );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] + 1 ), b );
+	assert( Plane_DistanceToPoint( planes[1], b ) > -1e-9 && Plane_DistanceToPoint( planes[1], b ) < 1e-9 );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] + 1 ), b );
+	assert( Plane_DistanceToPoint( planes[2], b ) > -1e-9 && Plane_DistanceToPoint( planes[2], b ) < 1e-9 );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1], ijk[2] + 1 ), b );
+	assert( Plane_DistanceToPoint( planes[3], b ) > -1e-9 && Plane_DistanceToPoint( planes[3], b ) < 1e-9 );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0] + 1, ijk[1], ijk[2] ), b );
+	assert( Plane_DistanceToPoint( planes[4], b ) > -1e-9 && Plane_DistanceToPoint( planes[4], b ) < 1e-9 );
+	geometry->pointAt( geometry, HEL_P_3DTo1D_3( self, ijk[0], ijk[1] + 1, ijk[2] ), b );
+	assert( Plane_DistanceToPoint( planes[5], b ) > -1e-9 && Plane_DistanceToPoint( planes[5], b ) < 1e-9 );
+#endif
+}
+
+void _HexaEL_BuildElementLines( void* hexaEL, Element_GlobalIndex globalIndex, Stg_Line_List lines ) {
+	HexaEL*		self = (HexaEL*)hexaEL;
+	Geometry*       geometry = self->geometry;
+	Coord		a, b;
+	IJK		ij;
+	
+	HEL_E_1DTo2D( self, globalIndex, ij );
+	
+	geometry->pointAt( geometry, HEL_P_2DTo1D_2( self, ij[0], ij[1] ), a );
+	geometry->pointAt( geometry, HEL_P_2DTo1D_2( self, ij[0] + 1, ij[1] ), b );
+	Stg_Line_CalcFromPoints( lines[0], a, b );
+	
+	geometry->pointAt( geometry, HEL_P_2DTo1D_2( self, ij[0], ij[1] + 1 ), b );
+	Stg_Line_CalcFromPoints( lines[1], b, a );
+	
+	geometry->pointAt( geometry, HEL_P_2DTo1D_2( self, ij[0] + 1, ij[1] + 1 ), a );
+	geometry->pointAt( geometry, HEL_P_2DTo1D_2( self, ij[0], ij[1] + 1 ), b );
+	Stg_Line_CalcFromPoints( lines[2], a, b );
+	
+	geometry->pointAt( geometry, HEL_P_2DTo1D_2( self, ij[0] + 1, ij[1] ), b );
+	Stg_Line_CalcFromPoints( lines[3], b, a );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: HexaEL.h 3858 2006-10-14 18:08:55Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_HexaEL_h__
+#define __Discretisaton_Mesh_HexaEL_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type HexaEL_Type;
+
+	/* HexaEL information */
+	#define __HexaEL \
+		/* General info */ \
+		__ElementLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* HexaEL info ... */ \
+		Dimension_Index dim;       \
+		IJK				pointSize; \
+		IJK				elementSize; \
+		Bool                            topologyWasCreatedInternally;
+		
+	struct _HexaEL { __HexaEL };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a HexaEL */
+	HexaEL* HexaEL_DefaultNew( Name name );
+	
+	HexaEL* HexaEL_New(
+		Name                        name,
+		Dimension_Index             dim,
+		Dictionary*                 dictionary,
+		Geometry*                   geometry );
+
+	/* Initialise a HexaEL */
+	void HexaEL_Init(
+		HexaEL*                     self,
+		Name                        name,
+		Dimension_Index             dim,
+		Dictionary*                 dictionary,
+		Geometry*                   geometry );
+	
+	/* Creation implementation */
+	HexaEL* _HexaEL_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,
+		ElementLayout_BuildFunction*                            build,		
+		ElementLayout_BuildCornerIndicesFunction*               buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*               cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*              buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*                 buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*                 edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*                buildEdgeElements,
+		ElementLayout_EdgeAtFunction*                           edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*    getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*   getStaticMinAndMaxGlobalCoords,				
+		ElementLayout_ElementWithPointFunction*                 elementWithPoint,
+		Dimension_Index                                         dim,
+		Dictionary*                                             dictionary,
+		Geometry*                                               geometry );
+
+	/* Initialisation implementation functions */
+	void _HexaEL_Init( HexaEL* self, Dimension_Index dim, IJK pointSize, IJK elementSize ) ;
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete HexaEL implementation */
+	void _HexaEL_Delete( void* hexaEL );
+	
+	/* Print HexaEL implementation */
+	void _HexaEL_Print( void* hexaEL, Stream* stream );
+	
+	void _HexaEL_Construct( void* hexaEL, Stg_ComponentFactory* cf, void* data );
+	
+	void _HexaEL_Build( void* hexaEL, void* data );
+	
+	void _HexaEL_Initialise( void* hexaEL, void* data );
+	
+	void _HexaEL_Execute( void* hexaEL, void* data );
+	
+	void _HexaEL_Destroy( void* hexaEL, void* data );
+	
+	/* Copy */
+	#define HexaEL_Copy( self ) \
+		(HexaEL*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define HexaEL_DeepCopy( self ) \
+		(HexaEL*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _HexaEL_Copy( void* hexaEL, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _HexaEL_BuildCornerIndices( void* hexaEL, Element_GlobalIndex globalIndex, Index* points );
+	
+	Element_GlobalIndex _HexaEL_CornerElementCount( void* hexaEL, Index corner );
+	
+	void _HexaEL_BuildCornerElements( void* hexaEL, Index corner, Element_GlobalIndex* elements );
+	void _HexaEL_BuildCornerElements1D( void* hexaEL, Index corner, Element_GlobalIndex* elements ) ;
+	void _HexaEL_BuildCornerElements2D( void* hexaEL, Index corner, Element_GlobalIndex* elements ) ;
+	void _HexaEL_BuildCornerElements3D( void* hexaEL, Index corner, Element_GlobalIndex* elements ) ;
+	
+	void _HexaEL_BuildEdgeIndices( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges );
+	void _HexaEL_BuildEdgeIndices1D( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges );
+	void _HexaEL_BuildEdgeIndices2D( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges ) ;
+	void _HexaEL_BuildEdgeIndices3D( void* hexaEL, Element_GlobalIndex globalIndex, Index* edges ) ;
+	
+	Element_GlobalIndex _HexaEL_EdgeElementCount( void* hexaEL, Index edge );
+	
+	void _HexaEL_BuildEdgeElements( void* hexaEL, Index edge, Element_GlobalIndex* elements );
+	
+	void _HexaEL_EdgeAt( void* hexaEL, Index index, Edge edge );
+	void _HexaEL_EdgeAt1D( void* hexaEL, Index index, Edge edge ) ;
+	void _HexaEL_EdgeAt2D( void* hexaEL, Index index, Edge edge ) ;
+	void _HexaEL_EdgeAt3D( void* hexaEL, Index index, Edge edge ) ;
+
+	void _HexaEL_TriBarycenter( Coord tri[3], const Coord pnt, Coord dst );
+	void _HexaEL_TetBarycenter( Coord tet[4], const Coord pnt, double* dst );
+	Bool _HexaEL_FindTriBarycenter( const Coord crds[4], const Coord pnt, double* bcs, unsigned* dstInds, 
+					PartitionBoundaryStatus bndStatus, MeshTopology* topo, unsigned gElInd );
+	Bool _HexaEL_FindTetBarycenter( const Coord crds[8], const Coord pnt, double* bcs, unsigned* dstInds, 
+					PartitionBoundaryStatus bndStatus, MeshTopology* topo, unsigned gElInd );
+	
+	/** TODO: not sure how these functions handle points on the upper border. Have to test.
+		PatrickSunter, 7 Mar 2006 */
+	Element_GlobalIndex _HexaEL_ElementWithPoint( void* hexaEL, void* decomp, Coord point, void* mesh, 
+						      PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	Element_DomainIndex _HexaEL_ElementWithPoint1D( void* hexaEL, void* _decomp, Coord point, void* _mesh, 
+							PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	Element_DomainIndex _HexaEL_ElementWithPoint2D( void* hexaEL, void* decomp, Coord point, void* mesh, 
+							PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	Element_DomainIndex _HexaEL_ElementWithPoint3D( void* hexaEL, void* decomp, Coord point, void* mesh, 
+							PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	void _HexaEL_BuildElementPlanes( void* hexaEL, Element_GlobalIndex globalIndex, Plane_List planes );
+	void _HexaEL_BuildElementLines( void* hexaEL, Element_GlobalIndex globalIndex, Stg_Line_List lines ) ;
+	
+	
+#endif /* __Discretisaton_Mesh_HexaEL_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">HexaEL</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">ElementLayout</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">Topology</param>
+		<param name="Type">Topology</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 -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Geometry</param>
+		<param name="Type">Geometry</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 346 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1897 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: HexaMD.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "MeshDecomp.h"
+#include "HexaMD.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "CornerNL.h"
+#include "BodyNL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type HexaMD_Type = "HexaMD";
+const Name HexaMDIJK26TopologyName = "defaultHexaMDIJK26TopologyName";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+HexaMD* HexaMD_DefaultNew( Name name )
+{
+	return (HexaMD*)_HexaMD_New( 
+		sizeof(HexaMD), 
+		HexaMD_Type, 
+		_HexaMD_Delete, 
+		_HexaMD_Print,
+		_HexaMD_Copy,
+		(Stg_Component_DefaultConstructorFunction*)HexaMD_DefaultNew,
+		_HexaMD_Construct,
+		_HexaMD_Build,
+		_HexaMD_Initialise,
+		_HexaMD_Execute,
+		(Stg_Component_DestroyFunction*)_HexaMD_Destroy,
+		name,
+		False,
+		// TODO: these should all be over-ridden with fast specific versions using the existing macros,
+		//	which are maybe in regMeshUtils ?
+		_MeshDecomp_Node_LocalToGlobal1D,
+		_MeshDecomp_Node_DomainToGlobal1D,
+		_MeshDecomp_Node_ShadowToGlobal1D, 
+		_MeshDecomp_Node_GlobalToLocal1D, 
+		_MeshDecomp_Node_GlobalToDomain1D, 
+		_MeshDecomp_Node_GlobalToShadow1D,
+		_MeshDecomp_Element_LocalToGlobal1D,
+		_MeshDecomp_Element_DomainToGlobal1D,
+		_MeshDecomp_Element_ShadowToGlobal1D, 
+		_MeshDecomp_Element_GlobalToLocal1D, 
+		_MeshDecomp_Element_GlobalToDomain1D, 
+		_MeshDecomp_Element_GlobalToShadow1D,
+		_HexaMD_Shadow_ProcCount,
+		_HexaMD_Shadow_BuildProcs,
+		_MeshDecomp_Shadow_ProcElementCount,
+		_MeshDecomp_Proc_WithElement,
+		NULL,
+		MPI_COMM_WORLD,
+		NULL,
+		NULL,
+		0 );
+}
+
+HexaMD* HexaMD_New_All(
+		Name							name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout,
+		unsigned char					numPartitionedDims )
+{
+	return _HexaMD_New( 
+		sizeof(HexaMD), 
+		HexaMD_Type, 
+		_HexaMD_Delete, 
+		_HexaMD_Print,
+		_HexaMD_Copy,
+		(Stg_Component_DefaultConstructorFunction*)HexaMD_DefaultNew,
+		_HexaMD_Construct,
+		_HexaMD_Build,
+		_HexaMD_Initialise,
+		_HexaMD_Execute,
+		(Stg_Component_DestroyFunction*)_HexaMD_Destroy,
+		name,
+		True,
+		_MeshDecomp_Node_LocalToGlobal1D,
+		_MeshDecomp_Node_DomainToGlobal1D,
+		_MeshDecomp_Node_ShadowToGlobal1D, 
+		_MeshDecomp_Node_GlobalToLocal1D, 
+		_MeshDecomp_Node_GlobalToDomain1D, 
+		_MeshDecomp_Node_GlobalToShadow1D,
+		_MeshDecomp_Element_LocalToGlobal1D,
+		_MeshDecomp_Element_DomainToGlobal1D,
+		_MeshDecomp_Element_ShadowToGlobal1D, 
+		_MeshDecomp_Element_GlobalToLocal1D, 
+		_MeshDecomp_Element_GlobalToDomain1D, 
+		_MeshDecomp_Element_GlobalToShadow1D,
+		_HexaMD_Shadow_ProcCount,
+		_HexaMD_Shadow_BuildProcs,
+		_MeshDecomp_Shadow_ProcElementCount,
+		_MeshDecomp_Proc_WithElement,
+		dictionary,
+		communicator,
+		eLayout,
+		nLayout,
+		numPartitionedDims );
+}
+
+void HexaMD_Init(
+		HexaMD*						self,
+		Name							name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout,
+		unsigned char					numPartitionedDims )
+{
+	/* General info */
+	self->type = HexaMD_Type;
+	self->_sizeOfSelf = sizeof(HexaMD);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _HexaMD_Delete;
+	self->_print = _HexaMD_Print;
+	self->_copy = _HexaMD_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)HexaMD_DefaultNew;
+	self->_construct = _HexaMD_Construct;
+	self->_build = _HexaMD_Build;
+	self->_initialise = _HexaMD_Initialise;
+	self->_execute = _HexaMD_Execute;
+	self->_destroy = (Stg_Component_DestroyFunction*)_HexaMD_Destroy;
+	// TODO: these should all be over-ridden with fast specific versions using the existing macros,
+	//	which are maybe in regMeshUtils ?
+	self->nodeMapLocalToGlobal = _MeshDecomp_Node_LocalToGlobal1D;
+	self->nodeMapDomainToGlobal = _MeshDecomp_Node_DomainToGlobal1D;
+	self->nodeMapShadowToGlobal = _MeshDecomp_Node_ShadowToGlobal1D;
+	self->nodeMapGlobalToLocal = _MeshDecomp_Node_GlobalToLocal1D;
+	self->nodeMapGlobalToDomain = _MeshDecomp_Node_GlobalToDomain1D;
+	self->nodeMapGlobalToShadow = _MeshDecomp_Node_GlobalToShadow1D;
+	self->elementMapLocalToGlobal = _MeshDecomp_Element_LocalToGlobal1D;
+	self->elementMapDomainToGlobal = _MeshDecomp_Element_DomainToGlobal1D;
+	self->elementMapShadowToGlobal = _MeshDecomp_Element_ShadowToGlobal1D;
+	self->elementMapGlobalToLocal = _MeshDecomp_Element_GlobalToLocal1D;
+	self->elementMapGlobalToDomain = _MeshDecomp_Element_GlobalToDomain1D;
+	self->elementMapGlobalToShadow = _MeshDecomp_Element_GlobalToShadow1D;
+	self->shadowProcCount = _HexaMD_Shadow_ProcCount;
+	self->shadowBuildProcs = _HexaMD_Shadow_BuildProcs;
+	self->shadowProcElementCount = _MeshDecomp_Shadow_ProcElementCount;
+	self->procWithElement = _MeshDecomp_Proc_WithElement;
+
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_MeshDecomp_Init( (MeshDecomp*)self, communicator, eLayout, nLayout, NULL );
+	
+	/* HexaMD info */
+	_HexaMD_Init( self, numPartitionedDims );
+}
+
+
+HexaMD* _HexaMD_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*		shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*		shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*		procWithElement,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout,
+		unsigned char					numPartitionedDims )
+{
+	HexaMD* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(HexaMD) );
+	self = (HexaMD*)_MeshDecomp_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		nodeMapLocalToGlobal, 
+		nodeMapDomainToGlobal,
+		nodeMapShadowToGlobal,
+		nodeMapGlobalToLocal,
+		nodeMapGlobalToDomain,
+		nodeMapGlobalToShadow, 
+		elementMapLocalToGlobal,
+		elementMapDomainToGlobal,
+		elementMapShadowToGlobal, 
+		elementMapGlobalToLocal,
+		elementMapGlobalToDomain, 
+		elementMapGlobalToShadow,
+		shadowProcCount,
+		shadowBuildProcs,
+		shadowProcElementCount,
+		procWithElement,
+		dictionary, 
+		communicator,
+		eLayout,
+		nLayout );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* HexaMD info */
+	if( initFlag ){
+		_HexaMD_Init( self, numPartitionedDims );
+	}
+	
+	return self;
+}
+
+#define HMD_E_3DTo1D( self, i, j, k ) \
+	(((self)->elementGlobal3DCounts[2] ? (k) * ((self)->elementGlobal3DCounts[0] ? (self)->elementGlobal3DCounts[0] : 1) * \
+		((self)->elementGlobal3DCounts[1] ? (self)->elementGlobal3DCounts[1] : 1) : 0) + \
+		((self)->elementGlobal3DCounts[1] ? (j) * ((self)->elementGlobal3DCounts[0] ? \
+		(self)->elementGlobal3DCounts[0] : 1) : 0) + \
+		((self)->elementGlobal3DCounts[0] ? (i) : 0))
+
+
+void _HexaMD_Init(
+		HexaMD*						self,
+		unsigned char					numPartitionedDims )
+{
+	/* General and Virtual info should already be set */
+	
+	/* HexaMD info */
+	Partition_Index		proc_I;
+	Index			axis;
+	unsigned char		axisIJK[3];
+	Element_GlobalIndex*	localSizes[3];
+	Element_GlobalIndex*	localOffsets[3];
+	Index			dim_I;
+	Stream*			debug;
+	Stream*			error;
+	SizeT			candidateSize;
+	IJK*			candidate;
+	IJK*			candidateIJK;
+	Index			candidateCount;
+	Index*			candidateResidual;
+	IJK			ijk;
+	Index			candidate_I;
+	IndexSet*		filter;
+	Index			filterCount;
+	IndexSet*		bestFilter;
+	Index			bestCount;
+	Index			lowest;
+	Index			highest;
+	Element_GlobalIndex	ecI[3]; /* frequently accessed... cached on stack */
+	double			ecD[3]; /* frequently accessed... cached on stack */
+	Index			bestCandidate_I;
+	double			lowestD;
+
+	/* Assign function pointers in case the decomp is serial */
+	MeshDecomp_OverrideMethodsIfSerial(self);
+	
+	debug = Journal_Register( DebugStream_Type, HexaMD_Type );
+	error = Journal_Register( ErrorStream_Type, HexaMD_Type );
+	
+	self->isConstructed = True;
+	self->numPartitionedDims = (numPartitionedDims <= 3) ? numPartitionedDims : 3;
+	
+	Journal_Firewall( 
+		self->nodeLayout->nodeCount > 1,
+		error,
+		"Error: %s component \"%s\" asked to decompose mesh based on NodeLayout \"%s\", but "
+		"provided NodeLayout has only 1 node. Did you specify a valid input file? Did you specify "
+		"the number of elements/nodes in your input file?\n",
+		self->type, self->name, self->nodeLayout->name );
+
+	self->nodeGlobalCount = self->nodeLayout->nodeCount;
+	self->elementGlobalCount = self->elementLayout->elementCount;
+	
+	/* Start Steve 20040103 */
+	
+	/* Changed by Patrick Sunter, 22/7/2004, so Body meshes work properly
+	(which have same number of elements and nodes in each axis ) */
+	for (dim_I = 0; dim_I < 3; dim_I++) {
+		self->nodeGlobal3DCounts[dim_I] = ((IJKTopology*)self->nodeLayout->topology)->size[dim_I];
+		/* element global counts stored as an integer */
+		ecI[dim_I] = self->elementGlobal3DCounts[dim_I] = ((IJKTopology*)self->elementLayout->topology)->size[dim_I];
+		/* element global counts stored as a double */
+		ecD[dim_I] = (double)ecI[dim_I];
+	}
+	Journal_Firewall( 
+		self->nodeGlobal3DCounts[I_AXIS] * self->nodeGlobal3DCounts[J_AXIS] * self->nodeGlobal3DCounts[K_AXIS],
+		error,
+		"Error: you specified node Global counts of { %u, %u, %u }, but mesh must have at least 1 node in each dimension "
+		"(If you want a 2d mesh set node count to 1 in one of the dimensions.\n",
+		self->nodeGlobal3DCounts[0], 
+		self->nodeGlobal3DCounts[1], 
+		self->nodeGlobal3DCounts[2] );
+	Journal_Printf( debug, "nodeGlobalCount: %u, elementGlobalCount: %u\n", self->nodeGlobalCount, self->elementGlobalCount );
+	Journal_Printf( 
+		debug, 
+		"nodeGlobal3DCount: { %u, %u, %u }, elementGlobal3DCount: { %u, %u, %u }\n",
+		self->nodeGlobal3DCounts[0], 
+		self->nodeGlobal3DCounts[1], 
+		self->nodeGlobal3DCounts[2], 
+		ecI[0],
+		ecI[1],
+		ecI[2] );
+	
+	/* Phase 1:Find all combinations of i, j, k that multiply to nproc. We do this by trying all i,j,k = 0->nproc combinations.
+	   Once the combination is > nproc, we can forfiet the rest of the loop */
+	candidateSize = self->nproc; /* initial guess */
+	candidate = Memory_Alloc_Array( IJK, candidateSize, "candidate" );
+	candidateCount = 0;
+	for( ijk[2] = 1; ijk[2] <= self->nproc; ijk[2]++ ) {
+		for( ijk[1] = 1; ijk[1] <= self->nproc; ijk[1]++ ) {
+			for( ijk[0] = 1; ijk[0] <= self->nproc; ijk[0]++ ) {
+				Index total = ijk[0] * ijk[1] * ijk[2];
+				
+				if( total == self->nproc ) {
+					Index			dim_I;
+					
+					/* If list is full... increase array size */
+					if( candidateCount == candidateSize ) {
+						candidateSize += self->nproc;
+						candidate = Memory_Realloc_Array( candidate, IJK, candidateSize );
+					}
+					
+					for( dim_I = 0; dim_I < 3; dim_I++ ) {
+						candidate[candidateCount][dim_I] = ijk[dim_I];
+					}
+					candidateCount++;
+					break;
+				}
+				else if( total > self->nproc ) {
+					break;
+				}
+			}
+		
+		}
+	}
+	#ifdef DEBUG
+	{
+		Index			candidate_I;
+		
+		Journal_Printf( debug, "Decomposition candidates count (phase 1): %u\n", candidateCount );
+		Journal_Printf( debug, "Decomposition candidates (phase 1): { " );
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			Journal_Printf( 
+				debug, 
+				"{ %u, %u, %u } ", 
+				candidate[candidate_I][0], 
+				candidate[candidate_I][1], 
+				candidate[candidate_I][2] );
+		}
+		Journal_Printf( debug, "}\n" );
+	}
+	#endif
+	
+	/* Phase 2: Cull out candidates of an order of decomposition greater than asked for. */
+	filter = IndexSet_New( candidateCount );
+	filterCount = 0;
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		Bool			decomposeAxis[3];
+		Index			decomposeCount;
+
+		decomposeCount = 0;
+		for( dim_I = 0; dim_I < 3; dim_I++ ) {
+			decomposeAxis[dim_I] = candidate[candidate_I][dim_I] > 1 ? True : False;
+			decomposeCount += decomposeAxis[dim_I];
+		}
+		
+		if( decomposeCount <= self->numPartitionedDims ) {
+			IndexSet_Add( filter, candidate_I );
+			filterCount++;
+		}
+	}
+	#ifdef DEBUG
+	{
+		Index			candidate_I;
+		
+		Journal_Printf( debug, "Decomposition candidates count (phase 2): %u\n", filterCount );
+		Journal_Printf( debug, "Decomposition candidates (phase 2): { " );
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			if( IndexSet_IsMember( filter, candidate_I ) ) {
+				Journal_Printf( 
+					debug, 
+					"{ %u, %u, %u } ", 
+					candidate[candidate_I][0], 
+					candidate[candidate_I][1], 
+					candidate[candidate_I][2] );
+			}
+		}
+		Journal_Printf( debug, "}\n" );
+	}
+	#endif
+	
+	/* Phase 3: Make sure there are enough elements to decompose across, then calculate
+	    the residual elements.  Note that residual processors have not yet been
+		    considered. */
+	candidateIJK = Memory_Alloc_Array( IJK, candidateCount, "candidateIJK" );
+	candidateResidual = Memory_Alloc_Array( Index, candidateCount, "candidateResidual" );
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		Index   dim_I;
+		Index   residual[3];
+		
+		for( dim_I = 0; dim_I < 3; dim_I++ ) {
+			candidateIJK[candidate_I][dim_I] = candidate[candidate_I][dim_I] <= ecI[dim_I] ?
+				candidate[candidate_I][dim_I] : ecI[dim_I];
+			residual[dim_I] = 
+				ecI[dim_I] - 
+				ecI[dim_I] / candidateIJK[candidate_I][dim_I] * 
+				candidateIJK[candidate_I][dim_I];
+		}
+		
+		if( residual[0] || residual[1] || residual[2] ) {
+			candidateResidual[candidate_I] = 
+				residual[0] ? residual[0] : 1 * 
+				residual[1] ? residual[1] : 1 * 
+				residual[2] ? residual[2] : 1;
+		}
+		else {
+			candidateResidual[candidate_I] = 0;
+		}
+	}
+
+/* This formula could be useful for direct calculation of the decomposition, so I thought it best
+   not to delete it. */
+#if 0
+	/* Phase 3 (a): Work out the element counts...
+	   fi * fj * fk = pi * pj * pk = fPrime, where px > 1, else fx = ex = px = 1
+	                  --   --   --
+	                  ei   ej   ek
+	   fx = proc to element fraction in dir, px = proc count in dir, ex = element count in dir
+	   
+	   Logically px     = fx
+	             ------   ------
+	             p(x+1)   f(x+1)
+	*/
+	candidateIJK = Memory_Alloc_Array( IJK, candidateCount, "candidateIJK" );
+	candidateResidual = Memory_Alloc_Array( Index, candidateCount, "candidateResidual" );
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		/* Only work out legitimate values for real candidates */
+		if( IndexSet_IsMember( filter, candidate_I ) ) {
+			Bool			decomposeAxis[3];
+			Index			decomposeCount;
+			Index			dim_I;
+			double			f[3];
+			Index			residual[3];
+			
+			/* if decomposed in a dimension, calculate inverse element count, store in f[dim_I] */
+			decomposeCount = 0;
+			for( dim_I = 0; dim_I < 3; dim_I++ ) {
+				decomposeAxis[dim_I] = candidate[candidate_I][dim_I] > 1 ? True : False;
+				decomposeCount += decomposeAxis[dim_I];
+				f[dim_I] = (double)1.0f / ecD[dim_I];
+			}
+			
+			if( decomposeCount == 0 ) {
+				/* Do nothing... no decomposition */
+			}
+			else if( decomposeCount == 1 ) {
+				Index			dim_I1 = decomposeAxis[0] ? 0 : decomposeAxis[1] ? 1 : 2;
+				
+				f[dim_I1] = (double)candidate[candidate_I][dim_I1] / ecD[dim_I1];
+			}
+			else if( decomposeCount == 2 ) {
+				Index			dim_I1 = decomposeAxis[0] ? 0 : 1;
+				Index			dim_I2 = dim_I1 == 0 ? (decomposeAxis[1] ? 1 : 2) : 2;
+				double			fPrime;
+				double			ratio;
+				
+				fPrime = 
+					(double)candidate[candidate_I][dim_I1] * 
+					(double)candidate[candidate_I][dim_I2] / 
+					ecD[dim_I1] /
+					ecD[dim_I2];
+				
+				ratio = (double)candidate[candidate_I][dim_I1] / (double)candidate[candidate_I][dim_I2];
+				
+				f[dim_I2] = pow( fPrime / ratio, 1.0f / 2.0f );
+				f[dim_I1] = ratio * f[dim_I2];
+			}
+			else if( decomposeCount == 3 ) {
+				double			fPrime;
+				double			ratio1;
+				double			ratio2;
+				
+				fPrime = 
+					(double)candidate[candidate_I][0] * 
+					(double)candidate[candidate_I][1] * 
+					(double)candidate[candidate_I][2] / 
+					ecD[0] /
+					ecD[1] /
+					ecD[2];
+				
+				ratio1 = (double)candidate[candidate_I][0] / (double)candidate[candidate_I][1];
+				ratio2 = (double)candidate[candidate_I][1] / (double)candidate[candidate_I][2];
+				
+				f[2] = pow( fPrime / ratio1 / ratio2 / ratio2, 1.0f / 3.0f );
+				f[1] = ratio2 * f[2];
+				f[0] = ratio1 * f[1];
+			}
+			else {
+				Journal_Firewall( 
+					0, 
+					error,
+					"Illegal number of decomposition axis.\n" );
+			}
+			
+			for( dim_I = 0; dim_I < 3; dim_I++ ) {
+				candidateIJK[candidate_I][dim_I] = rint( f[dim_I] * ecD[dim_I] );
+				residual[dim_I] = 
+					ecI[dim_I] - 
+					ecI[dim_I] / candidateIJK[candidate_I][dim_I] * 
+					candidateIJK[candidate_I][dim_I];
+			}
+			if( residual[0] || residual[1] || residual[2] ) {
+				candidateResidual[candidate_I] = 
+					residual[0] ? residual[0] : 1 * 
+					residual[1] ? residual[1] : 1 * 
+					residual[2] ? residual[2] : 1;
+			}
+			else {
+				candidateResidual[candidate_I] = 0;
+			}
+		}
+		else {
+			Index			dim_I;
+			
+			for( dim_I = 0; dim_I < 3; dim_I++ ) {
+				candidateIJK[candidate_I][dim_I] = 0;
+			}
+			candidateResidual[candidate_I] = -1;
+		}
+	}
+#endif
+	#ifdef DEBUG
+	{
+		Index			candidate_I;
+		
+		Journal_Printf( debug, "Decomposition candidates element counts & residual (phase 3): { " );
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			if( IndexSet_IsMember( filter, candidate_I ) ) {
+				Journal_Printf( 
+					debug, 
+					"{ %u, %u, %u (%u) } ", 
+					candidateIJK[candidate_I][0], 
+					candidateIJK[candidate_I][1], 
+					candidateIJK[candidate_I][2],
+					candidateResidual[candidate_I] );
+			}
+		}
+		Journal_Printf( debug, "}\n" );
+	}
+	#endif
+	
+	
+	/* Phase 3 (b): Cull out those with residuals (unless allowUnsed or allowUnBalanced is enabled), or are no longer the 
+	   processor count*/
+	if( self->allowUnusedCPUs || self->allowUnbalancing ) {
+		/* Do nothing... code further on will deal with the residuals */
+	}
+	else {
+		Index			count;
+		
+		count = 0;
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			/* Only for those that we have considered so far as real candidates */
+			if( IndexSet_IsMember( filter, candidate_I ) ) {
+				/* If it has a residual, it is no longer a candidate */
+				if( candidateResidual[candidate_I] ) {
+					IndexSet_Remove( filter, candidate_I );
+					filterCount--;
+				}
+				else if( 
+					( candidateIJK[candidate_I][0] * 
+					  candidateIJK[candidate_I][1] * 
+					  candidateIJK[candidate_I][2] ) != self->nproc ) 
+				{
+					IndexSet_Remove( filter, candidate_I );
+					filterCount--;
+				}
+				else {
+					count++;
+				}
+			}
+		}
+		
+		/* If there are no more candidates left, inform and error */
+		if( !count ) {
+			Journal_Firewall( 
+				0, 
+				error,
+				"Cannot decompose mesh of dimensions %u %u %u by %u processors allowing for upto %uD decomposition (unbalancing and/or unused cpus disallowed).\n",
+				ecI[0],
+				ecI[1],
+				ecI[2],
+				self->nproc,
+				self->numPartitionedDims );
+		}
+	}
+	#ifdef DEBUG
+	{
+		Index			candidate_I;
+		
+		Journal_Printf( debug, "Decomposition candidates count (phase 3): %u\n", filterCount );
+		Journal_Printf( debug, "Decomposition candidates (phase 3): { " );
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			if( IndexSet_IsMember( filter, candidate_I ) ) {
+				Journal_Printf( 
+					debug, 
+					"{ %u, %u, %u } ", 
+					candidateIJK[candidate_I][0], 
+					candidateIJK[candidate_I][1], 
+					candidateIJK[candidate_I][2] );
+			}
+		}
+		Journal_Printf( debug, "}\n" );
+	}
+	#endif
+	
+	/* Phase 4a. Find the highest decomposition count. */
+	highest = 0;
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		if( IndexSet_IsMember( filter, candidate_I ) ) {
+			Bool			decomposeAxis[3];
+			Index			decomposeCount;
+			
+			decomposeCount = 0;
+			for( dim_I = 0; dim_I < 3; dim_I++ ) {
+				decomposeAxis[dim_I] = candidateIJK[candidate_I][dim_I] > 1 ? True : False;
+				decomposeCount += decomposeAxis[dim_I];
+			}
+			
+			if( decomposeCount > highest ) {
+				highest = decomposeCount;
+			}
+		}
+	}
+	/* TODO: Steve, this firewall causes it to always exit when using 1 processor...please fix*/
+	/*Journal_Firewall( highest != 0, error, "Highest decomposition count not found... something is wrong!\n" );*/
+	Journal_DPrintf( debug, "Decomposition count highest value: %u\n", highest );
+	
+	/* Phase 4b. Choose the best decomposition(s) based on using the highest decomposition count. */
+	bestFilter = IndexSet_New( candidateCount );
+	bestCount = 0;
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		if( IndexSet_IsMember( filter, candidate_I ) ) {
+			Bool			decomposeAxis[3];
+			Index			decomposeCount;
+			
+			decomposeCount = 0;
+			for( dim_I = 0; dim_I < 3; dim_I++ ) {
+				decomposeAxis[dim_I] = candidateIJK[candidate_I][dim_I] > 1 ? True : False;
+				decomposeCount += decomposeAxis[dim_I];
+			}
+			
+			if( decomposeCount == highest ) {
+				IndexSet_Add( bestFilter, candidate_I );
+				bestCount++;
+			}
+		}
+	}
+	#ifdef DEBUG
+	{
+		Index			candidate_I;
+		
+		Journal_Printf( debug, "Decomposition best decomposition candidates count (phase 4): %u\n", bestCount );
+		Journal_Printf( debug, "Decomposition best decomposition candidates (phase 4): { " );
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			if( IndexSet_IsMember( bestFilter, candidate_I ) ) {
+				Journal_Printf( 
+					debug, 
+					"{ %u, %u, %u } ", 
+					candidateIJK[candidate_I][0], 
+					candidateIJK[candidate_I][1], 
+					candidateIJK[candidate_I][2] );
+			}
+		}
+		Journal_Printf( debug, "}\n" );
+	}
+	#endif
+	
+	/* Phase 5a. Find the lowest surface boundary area proxy value. */
+	lowest = (unsigned)-1;
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		if( IndexSet_IsMember( bestFilter, candidate_I ) ) {
+			Index count = 
+				ecI[0] / 
+				candidateIJK[candidate_I][0] + 
+				ecI[1] /
+				candidateIJK[candidate_I][1] + 
+				ecI[2] /
+				candidateIJK[candidate_I][2];
+			
+			if( count < lowest ) {
+				lowest = count;
+			}
+		}
+	}
+	Journal_Firewall( lowest != (unsigned)-1, error, "Lowest surface area proxy not found... something is wrong!\n" );
+	#ifdef DEBUG
+		Journal_Printf( debug, "Decomposition lowest surface area proxy value: %u\n", lowest );
+	#endif
+	
+	/* Phase 5b. Choose the best decomposition(s) based on the lowest surface boundary area. */
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		if( IndexSet_IsMember( bestFilter, candidate_I ) ) {
+			Index count = 
+				ecI[0] / 
+				candidateIJK[candidate_I][0] + 
+				ecI[1] /
+				candidateIJK[candidate_I][1] + 
+				ecI[2] /
+				candidateIJK[candidate_I][2];
+			
+			if( count != lowest ) {
+				IndexSet_Remove( bestFilter, candidate_I );
+				bestCount--;
+			}
+		}
+	}
+	#ifdef DEBUG
+	{
+		Index			candidate_I;
+		
+		Journal_Printf( debug, "Decomposition best surface area candidates count (phase 5): %u\n", bestCount );
+		Journal_Printf( debug, "Decomposition best surface area candidates (phase 5): { " );
+		for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+			if( IndexSet_IsMember( bestFilter, candidate_I ) ) {
+				Journal_Printf( 
+					debug, 
+					"{ %u, %u, %u } ", 
+					candidateIJK[candidate_I][0], 
+					candidateIJK[candidate_I][1], 
+					candidateIJK[candidate_I][2] );
+			}
+		}
+		Journal_Printf( debug, "}\n" );
+	}
+	#endif
+	
+	/* Phase 6: Choose the candidate that provides the most work per cpu */
+	bestCandidate_I = 0;
+	
+	lowestD = ecD[0] * ecD[1] * ecD[2];
+	bestCandidate_I = 0;
+	for( candidate_I = 0; candidate_I < candidateCount; candidate_I++ ) {
+		if( IndexSet_IsMember( bestFilter, candidate_I ) ) {
+			double			average;
+			Index			dim_I;
+			
+			average = 0;
+			for( dim_I = 0; dim_I < 3; dim_I++ ) {
+				average += ecD[dim_I] / (double)candidateIJK[candidate_I][dim_I];
+			}
+			average /= 3;
+			
+			if( average < lowestD ) {
+				lowestD = average;
+				bestCandidate_I = candidate_I;
+			}
+		}
+	}
+	Journal_Firewall( 
+		lowestD != ecD[0] * ecD[1] * ecD[2], 
+		error, 
+		"Couldn't choose out of the best... something is wrong!\n" );
+	for( dim_I = 0; dim_I < 3; dim_I++) {
+		self->partitionedAxis[dim_I] = candidate[bestCandidate_I][dim_I] == 1 ? 0 : 1;
+		self->partition3DCounts[dim_I] = candidateIJK[bestCandidate_I][dim_I];
+	}
+	Journal_Printf( 
+		debug, 
+		"Out of %u valid decomposition candidates, %u are best surface area candidates. Best work rate is: { %u, %u, %u }\n", 
+		filterCount,
+		bestCount,
+		self->partition3DCounts[0],
+		self->partition3DCounts[1],
+		self->partition3DCounts[2] );
+	
+	/* End Steve 20040103 */
+	
+	/* Decompose each dimension */
+	self->procsInUse = 1;
+	for( axis = 0; axis < 3; axis++ ) {
+		localSizes[axis] = Memory_Alloc_Array( Element_GlobalIndex, self->partition3DCounts[axis],
+			"HexaMD ... localSizes" );
+		localOffsets[axis] = Memory_Alloc_Array( Element_GlobalIndex, self->partition3DCounts[axis],
+			"HexaMD ... localOffsets" );
+		
+		if( self->partitionedAxis[axis] ) {
+			_HexaMD_DecomposeDimension(
+				self,
+				self->elementGlobal3DCounts[axis],
+				self->partition3DCounts[axis],
+				localSizes[axis],
+				localOffsets[axis] );
+		}
+		else {
+			for( proc_I = 0; proc_I < self->partition3DCounts[axis]; proc_I++ ) {
+				localSizes[axis][proc_I] = self->elementGlobal3DCounts[axis];
+				localOffsets[axis][proc_I] = 0;
+			}
+		}
+		
+		proc_I = 0;
+		while( proc_I < self->partition3DCounts[axis] && localSizes[axis][proc_I] )
+			proc_I++;
+		
+		self->partition3DCounts[axis] = proc_I;
+		if( self->partition3DCounts[axis] == 1 )
+			self->partitionedAxis[axis] = False;
+		
+		self->procsInUse *= proc_I;
+	}
+	
+	if( self->rank < self->procsInUse ) {
+		/* processors being used now need to fill in all counts */
+		Partition_Index		procCnt;
+		Partition_Index*	procs;
+		Bool			isPeriodic[3];
+		
+		/* Allocate enough memory for everything */
+		self->elementLocal3DCounts = Memory_Alloc_Array( Element_LocalIJK, self->procsInUse, "HexaMD" );
+		self->_elementOffsets = Memory_Alloc_Array( Element_GlobalIJK, self->procsInUse, "HexaMD" );
+		self->nodeLocal3DCounts = Memory_Alloc_Array( Node_LocalIJK, self->procsInUse, "HexaMD" );
+		self->_nodeOffsets = Memory_Alloc_Array( Node_GlobalIJK, self->procsInUse, "HexaMD" );
+		
+		proc_I = 0;
+		for( axisIJK[2] = 0; axisIJK[2] < self->partition3DCounts[2]; axisIJK[2]++ ) {
+			for( axisIJK[1] = 0; axisIJK[1] < self->partition3DCounts[1]; axisIJK[1]++ ) {
+				for( axisIJK[0] = 0; axisIJK[0] < self->partition3DCounts[0]; axisIJK[0]++ ) {
+
+					for ( dim_I=0; dim_I < 3; dim_I++ ) {
+						self->elementLocal3DCounts[proc_I][dim_I] = localSizes[dim_I][axisIJK[dim_I]];
+						self->_elementOffsets[proc_I][dim_I] = localOffsets[dim_I][axisIJK[dim_I]];
+					
+						Journal_Firewall( self->elementLocal3DCounts[proc_I][dim_I]
+							<= self->elementGlobal3DCounts[dim_I], error,
+							"Error - in %s(), proc %d: elementLocal3DCounts[%d]=%d is > than "
+							"elementGlobalCounts[%d]=%d for proc %d.\n", __func__,
+							self->rank, dim_I, self->elementLocal3DCounts[proc_I][dim_I],
+							dim_I, self->elementGlobal3DCounts[dim_I], self->rank ); 
+					}	
+		
+					for ( dim_I=0; dim_I < 3; dim_I++ ) {
+
+						/* Fixed by Patrick Sunter, 15 May 2006: now calculates node counts
+						 * correctly for body node layouts */
+						self->nodeLocal3DCounts[proc_I][dim_I] = NodeLayout_CalcNodeCountInDimFromElementCount(
+							self->nodeLayout, localSizes[dim_I][axisIJK[dim_I]] );
+
+						/* Correct for special case of 2D meshes : node count always 1, not 2 */
+						if ( self->nodeGlobal3DCounts[dim_I] == 1 ) {
+							self->nodeLocal3DCounts[proc_I][dim_I] = 1;
+						}
+						self->_nodeOffsets[proc_I][dim_I] = localOffsets[dim_I][axisIJK[dim_I]];
+
+						Journal_Firewall( self->nodeLocal3DCounts[proc_I][dim_I]
+							<= self->nodeGlobal3DCounts[dim_I], error,
+							"Error - in %s(), proc %d: nodeLocal3DCounts[%d]=%d is > than "
+							"nodeGlobalCounts[%d]=%d for proc %d.\n", __func__,
+							self->rank, dim_I, self->nodeLocal3DCounts[proc_I][dim_I],
+							dim_I, self->nodeGlobal3DCounts[dim_I], self->rank ); 
+					}	
+
+					proc_I++;
+				}
+			}
+		}
+		
+		for( axis = 0; axis < 3; axis++ ) {
+			if( localSizes[axis] )
+				Memory_Free( localSizes[axis] );
+			
+			if( localOffsets[axis] )
+				Memory_Free( localOffsets[axis] );
+		}
+		
+		isPeriodic[I_AXIS] = Dictionary_GetBool_WithDefault( self->dictionary, "isPeriodicI", False );
+		isPeriodic[J_AXIS] = Dictionary_GetBool_WithDefault( self->dictionary, "isPeriodicJ", False );
+		isPeriodic[K_AXIS] = Dictionary_GetBool_WithDefault( self->dictionary, "isPeriodicK", False );
+		
+		/* Construct processor topology */
+		self->procTopology = (Topology*)IJK26Topology_New_All( HexaMDIJK26TopologyName, NULL,
+			self->partition3DCounts, isPeriodic );
+		((IJK26Topology*)self->procTopology)->dynamicSizes = True;
+		
+		/* Build local element IndexSets */
+		self->localElementSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "HexaMD->localElementSets" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			self->localElementSets[proc_I] = NULL;
+		
+		if( self->storage == StoreAll ) {
+			procCnt = self->procsInUse;
+			procs = Memory_Alloc_Array( Partition_Index, procCnt, "HexaMD" );
+			for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+				procs[proc_I] = proc_I;
+		}
+		else if( self->storage == StoreSelf ) {
+			procCnt = 1;
+			procs = Memory_Alloc_Array( Partition_Index, procCnt, "HexaMD" );
+			procs[0] = self->rank;
+		}
+		else /*( self->storage == StoreNeighbours )*/ {
+			procCnt = self->shadowProcCount( self ) + 1;
+			procs = Memory_Alloc_Array( Partition_Index, procCnt, "HexaMD" );
+			procs[0] = self->rank;
+			self->shadowBuildProcs( self, &procs[1] );
+		}
+		
+		for( proc_I = 0; proc_I < procCnt; proc_I++ ) {
+			IJK		max = { 1, 1, 1 };
+			Index		sizeI, sizeJ, sizeK;
+			Dimension_Index	dim_I;
+
+			for ( dim_I=0; dim_I < 3; dim_I++ ) {
+				if ( self->elementLocal3DCounts[procs[proc_I]][dim_I] ) {
+					max[dim_I] = self->elementLocal3DCounts[procs[proc_I]][dim_I];
+				}	
+			}
+			
+			self->localElementSets[procs[proc_I]] = IndexSet_New( self->elementGlobalCount );
+			
+			for( sizeK = 0; sizeK < max[2]; sizeK++ ) {
+				for( sizeJ = 0; sizeJ < max[1]; sizeJ++ ) {
+					for( sizeI = 0; sizeI < max[0]; sizeI++ ) {
+						IndexSet_Add( self->localElementSets[procs[proc_I]], HMD_E_3DTo1D( self, 
+							self->_elementOffsets[procs[proc_I]][0] + sizeI, 
+							self->_elementOffsets[procs[proc_I]][1] + sizeJ, 
+							self->_elementOffsets[procs[proc_I]][2] + sizeK ) );
+					}
+				}
+			}
+		}
+		
+		/* Decompose local nodes based on element decomp */
+		_MeshDecomp_DecomposeNodes( self );
+		
+		/* Calculate local totals */
+		self->elementLocalCount = IndexSet_UpdateMembersCount( self->localElementSets[self->rank] );
+		self->nodeLocalCount = IndexSet_UpdateMembersCount( self->localNodeSets[self->rank] );
+		
+		/* Setup shadowing information */
+		self->shadowDepth = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, "shadowDepth", 
+			Dictionary_Entry_Value_FromUnsignedInt( 0 ) ) );
+		
+		if( self->shadowDepth && self->procsInUse > 1 ) {
+			Processor_Index    lastProcIndex = self->nproc;
+
+			for( proc_I = 0; proc_I < procCnt; proc_I++ ) {
+				/* Special case for 2 processors with periodic : lower nbr proc = upper nbr proc */
+				if ( procs[proc_I] == lastProcIndex ) continue;
+				_HexaMD_BuildShadowSets( self, procs[proc_I] );
+				lastProcIndex = procs[proc_I];
+			}
+		}
+		
+		if( procs )
+			Memory_Free( procs );
+			
+		/* Calculate totals */
+		if( self->shadowElementSets && self->shadowElementSets[self->rank] ) {
+			self->elementShadowCount = IndexSet_UpdateMembersCount( self->shadowElementSets[self->rank] );
+		}
+		else
+			self->elementShadowCount = 0;
+
+		self->elementDomainCount = self->elementLocalCount + self->elementShadowCount;
+		
+		if( self->shadowNodeSets && self->shadowNodeSets[self->rank] ) {
+			self->nodeShadowCount = IndexSet_UpdateMembersCount( self->shadowNodeSets[self->rank] );
+		}
+		else
+			self->nodeShadowCount = 0;
+
+		self->nodeDomainCount = self->nodeLocalCount + self->nodeShadowCount;
+	}
+	else {
+		/* processors not being used fill necessary arrays with null values */
+		for( axis = 0; axis < 3; axis++ ) {
+			if( localSizes[axis] )
+				Memory_Free( localSizes[axis] );
+			
+			if( localOffsets[axis] )
+				Memory_Free( localOffsets[axis] );
+		}
+
+		/* Clear all values for ranks that are not in use */
+		self->partitionedAxis[I_AXIS] = False;
+		self->partitionedAxis[J_AXIS] = False;
+		self->partitionedAxis[K_AXIS] = False;
+		self->procTopology = NULL;
+		
+		for( axis = 0; axis < 3; axis++ ) {
+			self->partition3DCounts[axis] = 0;
+			self->elementGlobal3DCounts[axis] = 0;
+		}
+		
+		self->shadowDepth = 0;
+	}
+	
+	Memory_Free( candidateResidual );
+	Memory_Free( candidateIJK );
+	Memory_Free( candidate );
+	Stg_Class_Delete( bestFilter );
+	Stg_Class_Delete( filter );
+
+	_HexaMD_CalculateDomain3DCounts( self );
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _HexaMD_Delete( void* hexaMD ) {
+	HexaMD* self = (HexaMD*)hexaMD;
+	
+	if( self->elementLocal3DCounts )
+		Memory_Free( self->elementLocal3DCounts );
+	
+	if( self->_elementOffsets )
+		Memory_Free( self->_elementOffsets );
+	
+	if( self->nodeLocal3DCounts )
+		Memory_Free( self->nodeLocal3DCounts );
+	
+	if( self->_nodeOffsets )
+		Memory_Free( self->_nodeOffsets );
+	
+	/* Stg_Class_Delete parent */
+	_MeshDecomp_Delete( self );
+}
+
+
+void _HexaMD_Print( void* hexaMD, Stream* stream ) {
+	HexaMD* self = (HexaMD*)hexaMD;
+	
+	/* Set the Journal for printing informations */
+	Stream* hexaMDStream;
+	hexaMDStream = Journal_Register( InfoStream_Type, "HexaMDStream" );
+
+	/* Print parent */
+	_MeshDecomp_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "HexaMD (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* HexaMD info */
+}
+
+
+void* _HexaMD_Copy( void* hexaMD, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	HexaMD*		self = (HexaMD*)hexaMD;
+	HexaMD*		newHexaMD;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	Index		idx_I;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newHexaMD = (HexaMD*)_MeshDecomp_Copy( self, dest, deep, nameExt, map );
+	
+	newHexaMD->numPartitionedDims = self->numPartitionedDims;
+	for( idx_I = 0; idx_I < 3; idx_I++ ) {
+		newHexaMD->partitionedAxis[idx_I] = self->partitionedAxis[idx_I];
+		newHexaMD->partition3DCounts[idx_I] = self->partition3DCounts[idx_I];
+		newHexaMD->nodeGlobal3DCounts[idx_I] = self->nodeGlobal3DCounts[idx_I];
+		newHexaMD->elementGlobal3DCounts[idx_I] = self->elementGlobal3DCounts[idx_I];
+		newHexaMD->elementDomain3DCounts[idx_I] = self->elementDomain3DCounts[idx_I];
+	}
+	
+	if( deep ) {
+		if( (newHexaMD->nodeLocal3DCounts = PtrMap_Find( map, self->nodeLocal3DCounts )) == NULL && self->nodeLocal3DCounts ) {
+			Partition_Index		proc_I;
+			
+			newHexaMD->nodeLocal3DCounts = Memory_Alloc_Array( Node_LocalIJK, newHexaMD->procsInUse, "HexaMD->nodeLocal3DCounts" );
+			for( proc_I = 0; proc_I < newHexaMD->procsInUse; proc_I++ ) {
+				newHexaMD->nodeLocal3DCounts[proc_I][0] = self->nodeLocal3DCounts[proc_I][0];
+				newHexaMD->nodeLocal3DCounts[proc_I][1] = self->nodeLocal3DCounts[proc_I][1];
+				newHexaMD->nodeLocal3DCounts[proc_I][2] = self->nodeLocal3DCounts[proc_I][2];
+			}
+		}
+		
+		if( (newHexaMD->_nodeOffsets = PtrMap_Find( map, self->_nodeOffsets )) == NULL && self->_nodeOffsets ) {
+			Partition_Index		proc_I;
+			
+			newHexaMD->_nodeOffsets = Memory_Alloc_Array( Node_LocalIJK, newHexaMD->procsInUse, "HexaMD->_nodeOffsets" );
+			for( proc_I = 0; proc_I < newHexaMD->procsInUse; proc_I++ ) {
+				newHexaMD->_nodeOffsets[proc_I][0] = self->_nodeOffsets[proc_I][0];
+				newHexaMD->_nodeOffsets[proc_I][1] = self->_nodeOffsets[proc_I][1];
+				newHexaMD->_nodeOffsets[proc_I][2] = self->_nodeOffsets[proc_I][2];
+			}
+		}
+		
+		if( (newHexaMD->elementLocal3DCounts = PtrMap_Find( map, self->elementLocal3DCounts )) == NULL && self->elementLocal3DCounts ) {
+			Partition_Index		proc_I;
+			
+			newHexaMD->elementLocal3DCounts = Memory_Alloc_Array( Node_LocalIJK, newHexaMD->procsInUse, "HexaMD->elementLocal3DCounts" );
+			for( proc_I = 0; proc_I < newHexaMD->procsInUse; proc_I++ ) {
+				newHexaMD->elementLocal3DCounts[proc_I][0] = self->elementLocal3DCounts[proc_I][0];
+				newHexaMD->elementLocal3DCounts[proc_I][1] = self->elementLocal3DCounts[proc_I][1];
+				newHexaMD->elementLocal3DCounts[proc_I][2] = self->elementLocal3DCounts[proc_I][2];
+			}
+		}
+		
+		if( (newHexaMD->_elementOffsets = PtrMap_Find( map, self->_elementOffsets )) == NULL && self->_elementOffsets ) {
+			Partition_Index		proc_I;
+			
+			newHexaMD->_elementOffsets = Memory_Alloc_Array( Node_LocalIJK, newHexaMD->procsInUse, "HexaMD->_elementOffsets" );
+			for( proc_I = 0; proc_I < newHexaMD->procsInUse; proc_I++ ) {
+				newHexaMD->_elementOffsets[proc_I][0] = self->_elementOffsets[proc_I][0];
+				newHexaMD->_elementOffsets[proc_I][1] = self->_elementOffsets[proc_I][1];
+				newHexaMD->_elementOffsets[proc_I][2] = self->_elementOffsets[proc_I][2];
+			}
+		}
+	}
+	else {
+		newHexaMD->nodeLocal3DCounts = self->nodeLocal3DCounts;;
+		newHexaMD->_nodeOffsets = self->_nodeOffsets;
+		newHexaMD->elementLocal3DCounts = self->elementLocal3DCounts;
+		newHexaMD->_elementOffsets = self->_elementOffsets;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newHexaMD;
+}
+
+void _HexaMD_Construct( void* hexaMD, Stg_ComponentFactory *cf, void* data ) {
+	HexaMD *        self            = (HexaMD*)hexaMD;
+	ElementLayout*  elementLayout   = NULL;
+	NodeLayout*     nodeLayout      = NULL;
+	Stg_ObjectList* pointerRegister;
+	Index           numPartitionedDims = 1;
+
+	self->dictionary = cf->rootDict;
+	
+	elementLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  ElementLayout_Type, ElementLayout, True, data ) ;
+	nodeLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  NodeLayout_Type, NodeLayout,  True, data ) ;
+	numPartitionedDims = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "numPartitionedDims", 1 ); 
+	
+	pointerRegister = Stg_ObjectList_Get( cf->registerRegister, "Pointer_Register" );
+	_MeshDecomp_Init( (MeshDecomp*)self, MPI_COMM_WORLD, elementLayout, nodeLayout, pointerRegister );
+	_HexaMD_Init( self, numPartitionedDims );
+}
+	
+void _HexaMD_Build( void* hexaMD, void* data ){
+	HexaMD *        self            = (HexaMD*)hexaMD;
+
+	/* TODO _MeshDecomp_Build( self, data ); */
+	Build( self->elementLayout, self /* TODO - WHY IS ELEMENT LAYOUT EXPECTING DECOMP */, False );
+	Build( self->nodeLayout, data, False );
+}
+	
+void _HexaMD_Initialise( void* hexaMD, void* data ){
+	
+}
+	
+void _HexaMD_Execute( void* hexaMD, void* data ){
+	
+}
+
+Partition_Index _HexaMD_Shadow_ProcCount( void* hexaMD ) {
+	HexaMD* self = (HexaMD*)hexaMD;
+	
+	return self->procTopology->neighbourCount( self->procTopology, self->rank );
+}
+
+
+void _HexaMD_Shadow_BuildProcs( void* hexaMD, Partition_Index* procs ) {
+	HexaMD* self = (HexaMD*)hexaMD;
+	
+	self->procTopology->buildNeighbours( self->procTopology, self->rank, procs );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+
+/* Find boundary elements */
+void _HexaMD_GetBoundarySet(
+		HexaMD*            self,
+		Processor_Index    proc_I,
+		IndexSet*          boundaryElementSet )
+{
+	IJK               min, max, ijk;
+	Dimension_Index   boundaryAxis, otherAxisA, otherAxisB, dim_I;
+
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		min[dim_I] = self->_elementOffsets[proc_I][dim_I];
+		max[dim_I] = self->_elementOffsets[proc_I][dim_I] + self->elementLocal3DCounts[proc_I][dim_I] - 1;
+	}
+	
+	/* Iterate through all the boundary elements, and add them to the element set. Have to go through the mix and
+	   max boundary for each axis, then add every element on that surface */ 
+	for ( boundaryAxis = I_AXIS; boundaryAxis < 3; boundaryAxis++ ) {	
+		otherAxisA = (boundaryAxis+1) % 3;
+		otherAxisB = (boundaryAxis+2) % 3;
+		
+		ijk[boundaryAxis] = min[boundaryAxis];
+		while ( ijk[boundaryAxis] <= max[boundaryAxis] ) {
+			for ( ijk[otherAxisA] = min[otherAxisA]; ijk[otherAxisA] <= max[otherAxisA]; ijk[otherAxisA]++ )
+			{
+				for ( ijk[otherAxisB] = min[otherAxisB]; ijk[otherAxisB] <= max[otherAxisB]; ijk[otherAxisB]++ )
+				{
+					IndexSet_Add( boundaryElementSet, ijk[2] * self->elementGlobal3DCounts[0] * 
+						self->elementGlobal3DCounts[1] + ijk[1] * 
+						self->elementGlobal3DCounts[0] + ijk[0] );
+				}
+			}	
+				
+			/* Necessary for 2D runs, where num elements in a dimension may be zero,
+			   or for thin decomps where the slice in a dim is 1 wide, therefore min = max */
+			if ( min[boundaryAxis] == max[boundaryAxis] ) break;
+
+			ijk[boundaryAxis] += self->elementLocal3DCounts[proc_I][boundaryAxis] - 1;
+		}
+	}
+}
+
+
+void _HexaMD_BuildShadowSets( HexaMD* self, Processor_Index procIndexToBuildFor ) {
+	Dimension_Index   shadowAxis;
+	int               lowerStartShadowRegions[3]; 
+	int               upperStartShadowRegions[3]; 
+	unsigned int      lowerAdjustedShadowDepth;
+	unsigned int      upperAdjustedShadowDepth;
+	unsigned int      shadowRegionTotalWidth[3];
+	Stream*           debug = Journal_Register( DebugStream_Type, HexaMD_Type );
+	Index             shadowElementsFoundCount = 0;
+	Index             shadowNodesFoundCount = 0;
+	IJK               currProcMin, currProcMax;
+	Dimension_Index   dim_I;
+	Stream*           error = Journal_Register( Error_Type, self->type );
+	Processor_Index   proc_I = 0;
+
+	Journal_DPrintfL( debug, 1, "In %s(): calculating shadow elements & nodes for processor %d, shadow depth=%d:\n",
+		__func__, procIndexToBuildFor, self->shadowDepth );
+	Stream_Indent( debug );	
+
+	Journal_Firewall( self->shadowDepth > 0, error, "Error: %s() called when shadow depth set to 0.\n",
+		__func__ );
+
+	Journal_Firewall( self->nproc > 1, error, "Error: %s() called when number of processors is 1.\n",
+		__func__ );
+	
+	/* If the shadow set arrays have not yet been allocated, do it now */
+	if( !self->shadowElementSets ) {
+		self->shadowElementSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "MeshDecomp->shadowElementSets" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			self->shadowElementSets[proc_I] = NULL;
+	}
+	
+	if( !self->shadowNodeSets ) {
+		self->shadowNodeSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "MeshDecomp->shadowNodeSets" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			self->shadowNodeSets[proc_I] = NULL;
+	}
+	
+	/* If the IndexSets for this proc have not been constructed, do it now */
+	if( !self->shadowElementSets[procIndexToBuildFor] )
+		self->shadowElementSets[procIndexToBuildFor] = IndexSet_New( self->elementGlobalCount );
+	
+	if( !self->shadowNodeSets[procIndexToBuildFor] )
+		self->shadowNodeSets[procIndexToBuildFor] = IndexSet_New( self->nodeGlobalCount );
+
+	Journal_DPrintfL( debug, 2, "calculating shadow elements:\n", shadowAxis );
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		currProcMin[dim_I] = self->_elementOffsets[procIndexToBuildFor][dim_I];
+		currProcMax[dim_I] = self->_elementOffsets[procIndexToBuildFor][dim_I] +
+			self->elementLocal3DCounts[procIndexToBuildFor][dim_I] - 1;
+	}
+	Stream_Indent( debug );
+	shadowElementsFoundCount = 0;
+	for ( shadowAxis = I_AXIS; shadowAxis < 3; shadowAxis++ ) {	
+
+		lowerStartShadowRegions[shadowAxis] = currProcMin[shadowAxis];
+		upperStartShadowRegions[shadowAxis] = currProcMin[shadowAxis];
+		shadowRegionTotalWidth[shadowAxis] = 0;
+
+		if ( False == self->partitionedAxis[shadowAxis] ) continue;
+	
+		/* Calculate shadow elements on the lower end of the partitioned axis */
+		Journal_DPrintfL( debug, 2, "calculating lower shadow elements for Axis %d:\n", shadowAxis );
+		_HexaMD_CalculateLowerShadowStartAndEnd( self, shadowAxis, ELEMENT_ITEM_TYPE,
+			currProcMin[shadowAxis], self->elementGlobal3DCounts[shadowAxis],
+			&lowerStartShadowRegions[shadowAxis], &lowerAdjustedShadowDepth );
+
+		shadowElementsFoundCount += _HexaMD_AddItemsInSliceToSet( self, shadowAxis,
+			lowerStartShadowRegions[shadowAxis], lowerAdjustedShadowDepth,
+			currProcMin, currProcMax, self->elementGlobal3DCounts,
+			self->shadowElementSets[procIndexToBuildFor] );
+
+		/* Calculate shadow elements on the upper end of the partitioned axis */
+		Journal_DPrintfL( debug, 2, "calculating upper shadow elements for Axis %d:\n", shadowAxis );
+		_HexaMD_CalculateUpperShadowStartAndEnd( self, shadowAxis, ELEMENT_ITEM_TYPE,
+			currProcMax[shadowAxis], self->elementGlobal3DCounts[shadowAxis],
+			&upperStartShadowRegions[shadowAxis], &upperAdjustedShadowDepth );
+
+		shadowElementsFoundCount += _HexaMD_AddItemsInSliceToSet( self, shadowAxis,
+			upperStartShadowRegions[shadowAxis], upperAdjustedShadowDepth,
+			currProcMin, currProcMax, self->elementGlobal3DCounts,
+			self->shadowElementSets[procIndexToBuildFor] );
+
+		shadowRegionTotalWidth[shadowAxis] = lowerAdjustedShadowDepth + upperAdjustedShadowDepth;  
+	}	
+
+	if ( self->numPartitionedDims > 1 ) {
+		/* now add the corner elements in case this is a 2D decomp */
+		Journal_DPrintfL( debug, 2, "calculating corner shadow elements:\n" );
+		shadowElementsFoundCount += _HexaMD_AddItemsInBlockCornersOutsideInnerBlockToSet( 
+			self, lowerStartShadowRegions, shadowRegionTotalWidth,
+			currProcMin, currProcMax, self->elementGlobal3DCounts,
+			self->shadowElementSets[procIndexToBuildFor] );
+	}
+
+	Stream_UnIndent( debug );
+
+	Journal_DPrintfL( debug, 1, "%s(): calculated there were %d shadow elements for processor %d:\n",
+		__func__, shadowElementsFoundCount, procIndexToBuildFor );
+
+	
+	Journal_DPrintfL( debug, 2, "calculating shadow nodes:\n", shadowAxis );
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		currProcMin[dim_I] = self->_nodeOffsets[procIndexToBuildFor][dim_I];
+		currProcMax[dim_I] = self->_nodeOffsets[procIndexToBuildFor][dim_I] +
+			self->nodeLocal3DCounts[procIndexToBuildFor][dim_I] - 1;
+	}
+	Stream_Indent( debug );
+	shadowNodesFoundCount = 0;
+	for ( shadowAxis = I_AXIS; shadowAxis < 3; shadowAxis++ ) {	
+
+		if ( False == self->partitionedAxis[shadowAxis] ) continue;
+	
+		/* Calculate shadow nodes on the lower end of the partitioned axis */
+		Journal_DPrintfL( debug, 2, "calculating lower shadow nodes in Axis %d:\n", shadowAxis );
+		_HexaMD_CalculateLowerShadowStartAndEnd( self, shadowAxis, NODE_ITEM_TYPE,
+			currProcMin[shadowAxis], self->nodeGlobal3DCounts[shadowAxis],
+			&lowerStartShadowRegions[shadowAxis], &lowerAdjustedShadowDepth );
+
+		shadowNodesFoundCount += _HexaMD_AddItemsInSliceToSet( self, shadowAxis,
+			lowerStartShadowRegions[shadowAxis], lowerAdjustedShadowDepth, currProcMin, currProcMax,
+			self->nodeGlobal3DCounts, self->shadowNodeSets[procIndexToBuildFor] );
+		
+		/* Calculate shadow nodes on the upper end of the partitioned axis */
+		Journal_DPrintfL( debug, 2, "calculating upper shadow nodes in Axis %d:\n", shadowAxis );
+		_HexaMD_CalculateUpperShadowStartAndEnd( self, shadowAxis, NODE_ITEM_TYPE,
+			currProcMax[shadowAxis], self->nodeGlobal3DCounts[shadowAxis],
+			&upperStartShadowRegions[shadowAxis], &upperAdjustedShadowDepth );
+
+		shadowNodesFoundCount += _HexaMD_AddItemsInSliceToSet( self, shadowAxis,
+			upperStartShadowRegions[shadowAxis], upperAdjustedShadowDepth, currProcMin, currProcMax,
+			self->nodeGlobal3DCounts, self->shadowNodeSets[procIndexToBuildFor] );
+
+		shadowRegionTotalWidth[shadowAxis] = lowerAdjustedShadowDepth + upperAdjustedShadowDepth;  
+	}	
+
+	if ( self->numPartitionedDims > 1 ) {
+		/* now add the corner nodes in case this is a 2D decomp */
+		Journal_DPrintfL( debug, 2, "calculating corner shadow nodes:\n" );
+		shadowNodesFoundCount += _HexaMD_AddItemsInBlockCornersOutsideInnerBlockToSet( 
+			self, lowerStartShadowRegions, shadowRegionTotalWidth,
+			currProcMin, currProcMax, self->nodeGlobal3DCounts,
+			self->shadowNodeSets[procIndexToBuildFor] );
+	}
+
+	Stream_UnIndent( debug );
+
+	Journal_DPrintfL( debug, 1, "%s(): calculated there were %d shadow nodes for processor %d:\n",
+		__func__, shadowNodesFoundCount, procIndexToBuildFor );
+
+	Stream_UnIndent( debug );	
+}
+
+
+/* Selecting start and end of lower shadow region, taking into account periodicity */
+void _HexaMD_CalculateLowerShadowStartAndEnd(
+		HexaMD*         self,
+		Dimension_Index shadowAxis,
+		MeshItemType    itemType,
+		GlobalIndex     currProcMinInShadowAxis,
+		GlobalIndex     globalCountInShadowAxis,            
+		int*            startIndexInShadowAxis,
+		Index*          adjustedShadowDepth )
+{	
+	Stream*           debug = Journal_Register( DebugStream_Type, HexaMD_Type );
+
+	/* Can safely refer to elementLayout's periodicity since both nodes & elements must be the same periodicity */
+	if ( False == ((IJKTopology*)self->elementLayout->topology)->isPeriodic[shadowAxis] ) {
+		/* If not periodic, we have to truncate shadow depth if it crosses the global zero element */
+		(*startIndexInShadowAxis) = currProcMinInShadowAxis - self->shadowDepth;
+		if ( (*startIndexInShadowAxis) < 0 ) {
+			(*startIndexInShadowAxis) = 0;
+		}
+		
+		(*adjustedShadowDepth) = currProcMinInShadowAxis - (*startIndexInShadowAxis);
+		Journal_DPrintfL( debug, 2, "Not periodic -> start at index %d, go for %d\n",
+			(*startIndexInShadowAxis), (*adjustedShadowDepth) );
+	}
+	else {	/* Periodic elements in decomp dim */
+		/* When periodic, wrap around the start to the other end */
+		(*startIndexInShadowAxis) = currProcMinInShadowAxis - self->shadowDepth;
+		(*adjustedShadowDepth) = self->shadowDepth;
+
+		if ( (*startIndexInShadowAxis) < 0 ) {
+
+			(*startIndexInShadowAxis) += globalCountInShadowAxis;
+
+			if ( (itemType == NODE_ITEM_TYPE) && (self->nodeLayout->type == CornerNL_Type ) ) {
+				/* If we are going to hit a period boundary, and are on nodes, need to add one to depth */
+				(*startIndexInShadowAxis) -= 1;
+				(*adjustedShadowDepth) += 1;
+			}	
+
+			// TODO
+			/* Need to check if shadow depth is so high that we've wrapped around into
+			   our own element/node space */
+			/*   
+			if ( (*startIndexInShadowAxis) <= currProcMaxInShadowAxis ) {
+				(*startIndexIn 
+				// TODO: print warning
+			}
+			*/
+		}
+
+		Journal_DPrintfL( debug, 2, "periodic -> start at index %d, go for %d\n", 
+			(*startIndexInShadowAxis), (*adjustedShadowDepth) );
+	}
+}	
+
+
+/* Selecting start and end of upper shadow region, taking into account periodicity */
+void _HexaMD_CalculateUpperShadowStartAndEnd(
+		HexaMD*         self,
+		Dimension_Index shadowAxis,
+		MeshItemType    itemType,
+		GlobalIndex     currProcMaxInShadowAxis,
+		GlobalIndex     globalCountInShadowAxis,            
+		int*            startIndexInShadowAxis,
+		Index*          adjustedShadowDepth )
+{	
+	Stream*           debug = Journal_Register( DebugStream_Type, HexaMD_Type );
+
+
+	/* Selecting start and end of upper shadow region, taking into account periodicity */
+	if ( False == ((IJKTopology*)self->elementLayout->topology)->isPeriodic[shadowAxis] ) {
+		/* If not periodic, we have to truncate shadow depth if it crosses the global max element */
+		(*startIndexInShadowAxis) = currProcMaxInShadowAxis + 1;
+
+		(*adjustedShadowDepth) = self->shadowDepth;
+		if ( (currProcMaxInShadowAxis + self->shadowDepth) >= globalCountInShadowAxis ) {
+			/* truncate */
+			(*adjustedShadowDepth) = globalCountInShadowAxis - (*startIndexInShadowAxis);
+		}
+		
+		Journal_DPrintfL( debug, 2, "Not periodic -> start at index %d, go for %d\n",
+			(*startIndexInShadowAxis), (*adjustedShadowDepth) );
+	}
+	else {	/* Periodic elements in decomp dim */
+		(*startIndexInShadowAxis) = currProcMaxInShadowAxis + 1;
+		/* In case this is the last processor: need to wrap the start */
+		(*startIndexInShadowAxis) = (*startIndexInShadowAxis) % (int)globalCountInShadowAxis;
+
+		(*adjustedShadowDepth) = self->shadowDepth;
+		if ( (currProcMaxInShadowAxis + self->shadowDepth) >= globalCountInShadowAxis ) {
+			/* For periodic corner nodes, need to add an extra one to get the right element shadow depth */
+			if ( (itemType == NODE_ITEM_TYPE) && (self->nodeLayout->type == CornerNL_Type ) ) {
+				(*adjustedShadowDepth) += 1;
+			}
+		}
+
+		Journal_DPrintfL( debug, 2, "periodic -> start at index %d, go for %d\n", 
+			(*startIndexInShadowAxis), (*adjustedShadowDepth) );
+	}
+}
+
+
+GlobalIndex _HexaMD_AddItemsInBlockCornersOutsideInnerBlockToSet( 
+		HexaMD*         self,
+		IJK             outerBlockMin,
+		IJK             outerBlockCounts,
+		IJK             innerBlockMin,
+		IJK             innerBlockMax,
+		IJK             itemGlobal3DCounts,   
+		IndexSet*       itemSet )
+{	
+	IJK                  ijk;
+	Index                block_I[3];
+	Index                itemsFoundInCornersCount = 0;
+	Stream*              debug = Journal_Register( DebugStream_Type, HexaMD_Type );
+	Dimension_Index      dim_I, axisA, axisB, internalAxis;
+	GlobalIndex          gItem_I;
+
+	Journal_DPrintfL( debug, 3, "In %s(): Filling in corner element/nodes around block (%d,%d,%d) - (%d,%d,%d)\n",
+		__func__, innerBlockMin[0], innerBlockMin[1], innerBlockMin[2],
+		innerBlockMax[0], innerBlockMax[1], innerBlockMax[2] );
+
+	Stream_Indent( debug );
+
+	/* We have to deal with the potentially 8 blocks of 2D corners where one axis is still internal to the 
+	   inner block first */
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		axisA = dim_I;
+		axisB = (dim_I+1) % 3;
+		internalAxis = (dim_I+2) % 3;
+
+		Journal_DPrintfL( debug, 3, "Filling 2D side corners items in the %c,%c planes around block\n",
+			IJKTopology_DimNumToDimLetter[axisA], IJKTopology_DimNumToDimLetter[axisB] );
+
+		memcpy( ijk, outerBlockMin, sizeof(IJK) );
+
+		Stream_Indent( debug );
+		for ( ijk[internalAxis] = innerBlockMin[internalAxis]; ijk[internalAxis] <= innerBlockMax[internalAxis]; ijk[internalAxis]++ ) {
+			ijk[axisB] = outerBlockMin[axisB];
+
+			for ( block_I[axisB] = 0; block_I[axisB] < outerBlockCounts[axisB]; block_I[axisB]++ ) {
+				if ( ijk[axisB] == innerBlockMin[axisB] ) {
+					/* Fast-forward to end of inner block */
+					ijk[axisB] = innerBlockMax[axisB] + 1;
+				}
+				ijk[axisB] = ijk[axisB] % itemGlobal3DCounts[axisB];
+
+				ijk[axisA] = outerBlockMin[axisA];
+				
+				for ( block_I[axisA] = 0; block_I[axisA] < outerBlockCounts[axisA]; block_I[axisA]++ ) {
+					if ( ijk[axisA] == innerBlockMin[axisA] ) {
+						/* Fast-forward to end of inner block */
+						ijk[axisA] = innerBlockMax[axisA] + 1;
+					}
+					ijk[axisA] = ijk[axisA] % itemGlobal3DCounts[axisA];
+
+					/* Convert ijk to global item, and add */
+					gItem_I = ijk[2] * itemGlobal3DCounts[0] * itemGlobal3DCounts[1]
+						+ ijk[1] * itemGlobal3DCounts[0]
+						+ ijk[0];
+					Journal_DPrintfL( debug, 3, "Adding 2D corner element/node at global index (%d,%d,%d) -> %d\n",
+						ijk[0], ijk[1], ijk[2], gItem_I );
+					IndexSet_Add( itemSet, gItem_I );
+					itemsFoundInCornersCount++;	
+
+					ijk[axisA]++;
+				}	
+				ijk[axisB]++;
+			}
+		}
+		Stream_UnIndent( debug );
+	}	
+
+	Journal_DPrintfL( debug, 3, "Filling 3D corners items\n" );
+
+	Stream_Indent( debug );
+	memcpy( ijk, outerBlockMin, sizeof(IJK) );
+	for ( block_I[K_AXIS] = 0; block_I[K_AXIS] < outerBlockCounts[K_AXIS]; block_I[K_AXIS]++ ) {
+		if ( ijk[K_AXIS] == innerBlockMin[K_AXIS] ) {
+			/* Fast-forward to end of inner block */
+			ijk[K_AXIS] = innerBlockMax[K_AXIS] + 1;
+		}
+		ijk[K_AXIS] = ijk[K_AXIS] % itemGlobal3DCounts[K_AXIS];
+
+		ijk[J_AXIS] = outerBlockMin[J_AXIS];
+
+		for ( block_I[J_AXIS] = 0; block_I[J_AXIS] < outerBlockCounts[J_AXIS]; block_I[J_AXIS]++ ) {
+			if ( ijk[J_AXIS] == innerBlockMin[J_AXIS] ) {
+				/* Fast-forward to end of inner block */
+				ijk[J_AXIS] = innerBlockMax[J_AXIS] + 1;
+			}
+			ijk[J_AXIS] = ijk[J_AXIS] % itemGlobal3DCounts[J_AXIS];
+
+			ijk[I_AXIS] = outerBlockMin[I_AXIS];
+		
+			for ( block_I[I_AXIS] = 0; block_I[I_AXIS] < outerBlockCounts[I_AXIS]; block_I[I_AXIS]++ ) {
+				if ( ijk[I_AXIS] == innerBlockMin[I_AXIS] ) {
+					/* Fast-forward to end of inner block */
+					ijk[I_AXIS] = innerBlockMax[I_AXIS] + 1;
+				}
+				ijk[I_AXIS] = ijk[I_AXIS] % itemGlobal3DCounts[I_AXIS];
+
+				/* Convert ijk to global item, and add */
+				gItem_I = ijk[2] * itemGlobal3DCounts[0] * itemGlobal3DCounts[1]
+					+ ijk[1] * itemGlobal3DCounts[0]
+					+ ijk[0];
+				Journal_DPrintfL( debug, 3, "Adding 3D corner element/node at global index (%d,%d,%d) -> %d\n",
+					ijk[0], ijk[1], ijk[2], gItem_I );
+				IndexSet_Add( itemSet, gItem_I );
+				itemsFoundInCornersCount++;	
+				ijk[I_AXIS]++;
+			}
+			ijk[J_AXIS]++;
+		}
+
+		ijk[K_AXIS]++;
+	}
+	Stream_UnIndent( debug );
+	Stream_UnIndent( debug );
+
+	return itemsFoundInCornersCount;
+}
+
+
+GlobalIndex  _HexaMD_AddItemsInSliceToSet(
+		HexaMD*         self,
+		Dimension_Index sliceAxis,
+		Index           startOfRange,
+		Index           widthOfSlice,
+		IJK             otherAxisMinimums,
+		IJK             otherAxisMaximums,
+		IJK             itemGlobal3DCounts,   
+		IndexSet*       itemSet )
+{	
+	Stream*              debug = Journal_Register( DebugStream_Type, HexaMD_Type );
+	Index                sliceWidth_I;
+	IJK                  ijk;
+	Dimension_Index      otherAxisA, otherAxisB;
+	GlobalIndex          gItem_I;
+	Index                itemsFoundInSliceCount = 0;
+
+	otherAxisA = (sliceAxis+1) % 3;
+	otherAxisB = (sliceAxis+2) % 3;
+		
+	ijk[sliceAxis] = startOfRange;
+
+	Stream_Indent( debug );
+	for ( sliceWidth_I=0; sliceWidth_I < widthOfSlice; sliceWidth_I++ ) {
+		/* to handle when periodic, check if we have flipped from upper->lower end */
+		ijk[sliceAxis] = ijk[sliceAxis] % itemGlobal3DCounts[sliceAxis];
+		
+		for ( ijk[otherAxisB] = otherAxisMinimums[otherAxisB]; ijk[otherAxisB] <= otherAxisMaximums[otherAxisB]; ijk[otherAxisB]++ )
+		{
+			for ( ijk[otherAxisA] = otherAxisMinimums[otherAxisA]; ijk[otherAxisA] <= otherAxisMaximums[otherAxisA]; ijk[otherAxisA]++ )
+			{
+				gItem_I = ijk[2] * itemGlobal3DCounts[0] * itemGlobal3DCounts[1]
+					+ ijk[1] * itemGlobal3DCounts[0]
+					+ ijk[0];
+				Journal_DPrintfL( debug, 3, "Adding element/node at global index (%d,%d,%d) -> %d\n",
+					ijk[0], ijk[1], ijk[2], gItem_I );
+				IndexSet_Add( itemSet, gItem_I );
+				itemsFoundInSliceCount++;	
+			}
+		}	
+		(ijk[sliceAxis])++;
+	}
+	Stream_UnIndent( debug );
+
+	return itemsFoundInSliceCount;
+}
+
+
+void _HexaMD_DecomposeDimension(
+		HexaMD*				self,
+		Element_GlobalIndex		numElementsThisDim,
+		Partition_Index			procCount,
+		Element_LocalIndex*		localElementCounts,
+		Element_LocalIndex*		localElementOffsets )
+{
+	Partition_Index		procCountToUse = procCount;
+	Partition_Index		proc_I;
+	Partition_Index		div;
+	Partition_Index		rem;
+	Index				offsetIncrement;
+	
+	/* We need at least one processor */
+	assert( procCount );
+	
+	/* Clear values to zero */
+	for( proc_I = 0; proc_I < procCount; proc_I++ ) {
+		localElementCounts[proc_I] = 0;
+		localElementOffsets[proc_I] = 0;
+	}
+	
+	if( self->allowUnbalancing ) {
+		/* prefer partition on node */
+		if( self->allowPartitionOnNode ) {
+			
+			div = numElementsThisDim / procCount;
+			rem = numElementsThisDim % procCount;
+			if( !div ) {
+				assert( self->allowUnusedCPUs );
+				procCountToUse = rem;
+			}
+		}
+		else if( self->allowPartitionOnElement ) {
+			Element_GlobalIndex     ae;
+			
+			procCountToUse = (numElementsThisDim + 1) / 2;
+			if( procCountToUse > procCount ) {
+				procCountToUse = procCount;
+			}	
+			else if( procCountToUse < procCount )
+				assert( self->allowUnusedCPUs );
+			
+			ae = numElementsThisDim - procCountToUse + 1;
+			
+			div = ae / procCountToUse;
+			rem = ae % procCountToUse;
+			
+			for( proc_I = 1; proc_I < procCount; proc_I++ )
+				localElementOffsets[proc_I] = proc_I;
+		}
+	}
+	else {
+		/* Ok, so unbalanced numbers of elements aren't allowed.
+		Go through trying to find an even division partitioned on nodes or
+		elements, progressively reducing the procs to use if allowed to. */
+		do {
+			if( self->allowPartitionOnNode ) {
+				rem = numElementsThisDim % procCountToUse;
+				if( 0 == rem ) {
+					div = numElementsThisDim / procCountToUse;
+					break;
+				}
+			}
+			
+			if( self->allowPartitionOnElement &&
+				(procCountToUse <= ((numElementsThisDim + 1) / 2)) ) {
+				Element_GlobalIndex     ae = numElementsThisDim - procCountToUse + 1;
+				
+				rem = ae % procCountToUse;
+				if( 0 == rem ) {
+					div = ae / procCountToUse;
+					
+					for( proc_I = 1; proc_I < procCount; proc_I++ )
+						localElementOffsets[proc_I] = proc_I;
+					
+					break;
+				}
+			}
+			else {
+				assert( self->allowUnusedCPUs );
+				--procCountToUse;
+				assert( procCountToUse );
+			}
+		}
+		while( True );
+	}
+	
+	/* Now we work out the initial local sizes and offsets */
+	for( proc_I = 0; proc_I < procCountToUse; proc_I++ ) {
+		localElementCounts[proc_I] = div;
+		localElementOffsets[proc_I] += proc_I * div;
+	}
+	
+	/* If there was a remainder, we now need to update the sizes and offsets */
+	if ( rem != 0 ) {
+		/* only the first 'rem' processors have their size increased to take up
+		the remainder */
+		for( proc_I = 0; proc_I < rem; proc_I++ )
+			localElementCounts[proc_I]++;
+
+		/* Now we update the offsets - this is a little tricky ... each time
+		a size was increased, we need to increase the _offset to add_ to the
+		existing offset of every subsequent processor by 1 */
+		offsetIncrement = 1;
+		for( proc_I = 1; proc_I < procCountToUse; proc_I++ ) {
+			localElementOffsets[proc_I] += offsetIncrement;
+			
+			if (offsetIncrement < rem ) {
+				offsetIncrement++;
+			}	
+		
+		}	
+	}
+}
+
+
+void _HexaMD_CalculateDomain3DCounts( HexaMD* self )
+{
+	Dimension_Index		dim_I = 0;
+	Processor_Index		myRank = self->rank;
+
+	if ( myRank < self->procsInUse ) {	
+		for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+			self->elementDomain3DCounts[dim_I] = self->elementLocal3DCounts[myRank][dim_I];
+		}
+
+		if ( self->elementShadowCount > 0 ) {
+			for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+				if ( self->_elementOffsets[myRank][dim_I] != 0
+					|| (((IJKTopology*)self->procTopology)->isPeriodic[dim_I] ) )
+				{	
+					self->elementDomain3DCounts[dim_I] += self->shadowDepth;
+				}
+				if ( self->_elementOffsets[myRank][dim_I] + self->elementLocal3DCounts[myRank][dim_I] != self->elementGlobal3DCounts[dim_I]
+					|| (((IJKTopology*)self->procTopology)->isPeriodic[dim_I] ) )
+				{	
+					self->elementDomain3DCounts[dim_I] += self->shadowDepth;
+				}	
+			}
+		}
+	}	
+	else {
+		for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+			self->elementDomain3DCounts[dim_I] = 0;
+		}	
+	}		
+}
+
+
+void _HexaMD_Destroy( HexaMD* self, void *data ) {
+	if( self->elementLocal3DCounts )
+		Memory_Free( self->elementLocal3DCounts );
+	
+	if( self->_elementOffsets )
+		Memory_Free( self->_elementOffsets );
+	
+	if( self->nodeLocal3DCounts )
+		Memory_Free( self->nodeLocal3DCounts );
+	
+	if( self->_nodeOffsets )
+		Memory_Free( self->_nodeOffsets );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: HexaMD.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_HexaMD_h__
+#define __Discretisaton_Mesh_HexaMD_h__
+
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type HexaMD_Type;
+
+	/* HexaMD information */
+	#define __HexaMD \
+		/* General info */ \
+		__MeshDecomp \
+		\
+		/* Virtual info */ \
+		\
+		/* HexaMD info ... */ \
+		Index				numPartitionedDims; \
+		Bool				partitionedAxis[3]; \
+		Partition_IJK			partition3DCounts; \
+		\
+		Node_GlobalIJK			nodeGlobal3DCounts; \
+		Node_LocalIJK*			nodeLocal3DCounts; \
+		Node_GlobalIJK*			_nodeOffsets; \
+		\
+		Element_GlobalIJK		elementGlobal3DCounts; \
+		Element_LocalIJK*		elementLocal3DCounts; \
+		Element_DomainIJK		elementDomain3DCounts; \
+		Element_GlobalIJK*		_elementOffsets;
+
+	struct _HexaMD { __HexaMD };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	#define HexaMD_New( name, dictionary, communicator, eLayout, nLayout ) \
+		HexaMD_New_All( name, dictionary, communicator, eLayout, nLayout, 1 )
+
+	/* Create a HexaMD */
+	
+	/* Create a HexaMD */
+	HexaMD* HexaMD_DefaultNew( Name name );
+	
+	HexaMD* HexaMD_New_All(
+		Name							name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout,
+		unsigned char					numPartitionedDims );
+	
+	/* Initialise a HexaMD */
+	void HexaMD_Init(
+		HexaMD*						self,
+		Name							name,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nLayout,
+		unsigned char					numPartitionedDims );
+
+	/* Creation implementation */
+	HexaMD* _HexaMD_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Shadow_ProcCountFunction*		shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*		shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*		procWithElement,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					eLayout,
+		NodeLayout*					nlayout,
+		unsigned char					numPartitionedDims );
+
+	/* Initialisation implementation functions */
+	void _HexaMD_Init(
+		HexaMD*						self,
+		unsigned char					numPartitionedDims );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete HexaMD implementation */
+	void _HexaMD_Delete( void* hexaMD );
+	
+	/* Print HexaMD implementation */
+	void _HexaMD_Print( void* hexaMD, Stream* stream );
+	
+	/* Copy */
+	#define HexaMD_Copy( self ) \
+		(HexaMD*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define HexaMD_DeepCopy( self ) \
+		(HexaMD*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _HexaMD_Copy( void* hexaMD, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _HexaMD_Construct( void* hexaMD, Stg_ComponentFactory *cf, void* data );
+	
+	void _HexaMD_Build( void* hexaMD, void* data );
+	
+	void _HexaMD_Initialise( void* hexaMD, void* data );
+	
+	void _HexaMD_Execute( void* hexaMD, void* data );
+
+	Partition_Index _HexaMD_Shadow_ProcCount( void* hexaMD );
+	
+	void _HexaMD_Shadow_BuildProcs( void* hexaMD, Partition_Index* procs );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	/** Function to calculate the set of Boundary elements of a given processor. The element
+	    set given must be of size element global count */
+	void _HexaMD_GetBoundarySet(
+		HexaMD*            self,
+		Processor_Index    proc_I,
+		IndexSet*          boundaryElementSet );	    
+	
+	/** Function to calculate the shadow elements of a processor. Works for cases of shadow
+		depth > 1 */
+	void _HexaMD_BuildShadowSets( HexaMD* self, Processor_Index proc_I );
+	
+
+	/** Calculates the start and end of the lower shadow region in a given axis, taking into account periodicity.
+		can be re-used for both nodes and elements by passing the appropriate parameters. */
+	void _HexaMD_CalculateLowerShadowStartAndEnd(
+		HexaMD*         self,
+		Dimension_Index shadowAxis,
+		MeshItemType    itemType,
+		GlobalIndex     currProcMinInShadowAxis,
+		GlobalIndex     globalCountInShadowAxis,            
+		int*            startIndexInShadowAxis, /* needs to be an int rather than unsigned since it may be < zero in 
+							* calcs */
+		Index*          adjustedShadowDepth );
+
+	/** Selecting start and end of upper shadow region, taking into account periodicity */
+	void _HexaMD_CalculateUpperShadowStartAndEnd(
+		HexaMD*         self,
+		Dimension_Index shadowAxis,
+		MeshItemType    itemType,
+		GlobalIndex     currProcMaxInShadowAxis,
+		GlobalIndex     globalCountInShadowAxis,            
+		int*            startIndexInShadowAxis,
+		Index*          adjustedShadowDepth );
+
+	/** Fills the "corners" around a 2D or 3D block - used as part of setting up shadow nodes if more than
+		one decomp dimension. Automatically handles periodicity in the outer block. */
+	GlobalIndex _HexaMD_AddItemsInBlockCornersOutsideInnerBlockToSet( 
+		HexaMD*         self,
+		IJK             outerBlockMin,
+		IJK             outerBlockCounts,
+		IJK             innerBlockMin,
+		IJK             innerBlockMax,
+		IJK             itemGlobal3DCounts,   
+		IndexSet*       itemSet );
+
+	/** Utility function to fill an IndexSet representing global element/node indices with 1s for all
+	     element/nodes that live inside a slice for a particular dimension. Slices can handle periodic meshes
+	     	\param self HexaMD object
+		\param sliceAxis the primary axis you wish to slice along
+		\param startOfRange where the slice should start 
+		\param widthOfSlice how wide the slice should be
+		\param otherAxisMinimums IJK object containing the 3D coords of where the other parts of the slice start
+			in the mesh
+		\param otherAxisMaximums IJK object specifying where the other Axis end in space
+		\param itemGlobal3DCounts 3D Count of global max in each dim
+		\param itemSet the IndexSet to store the results in. */
+	GlobalIndex  _HexaMD_AddItemsInSliceToSet(
+		HexaMD*         self,
+		Dimension_Index sliceAxis,
+		Index           startOfRange,
+		Index           widthOfSlice,
+		IJK             otherAxisMinimums,
+		IJK             otherAxisMaximums,
+		IJK             itemGlobal3DCounts,   
+		IndexSet*       itemSet );
+
+	/** Decomposes the elements in a particular dimension, given the
+	size of the partition and the number of processors available.
+	
+	If the number of processors doesn't divide evenly into the number of
+	elements in the dimension to be decomposed on; the following occurs:
+
+	If HexaMD::allowUnbalancing is True, then the remaining nodes will
+	be distributed among the first few processors.
+
+	If HexaMD::allowUnbalancing is False, then if and only if 
+	HexaMD::allowUnusedCPUs is True, the number of processors
+	to be used will be reduced until the division is even. Otherwise, an
+	assert() and exit will occur.
+
+	In either of the above 2 cases, the default behaviour is to decompose
+	on nodes. Only if this is disallowed, or in the balanced case where
+	the node partition is uneven, will partition on elements be used.
+
+	TODO: Allow partition on node in the unbalanced case causes problems
+	later on - not sure if it's a problem with this code or the
+	way it's interpreted later.
+	*/
+	void _HexaMD_DecomposeDimension(
+		HexaMD*				self,
+		Element_GlobalIndex		numElementsThisDim,
+		Partition_Index			procCount,
+		Element_LocalIndex*		localElementCounts,
+		Element_LocalIndex*		localElementOffsets );
+	
+	void _HexaMD_CalculateDomain3DCounts( HexaMD* self );
+	
+	void _HexaMD_Destroy( HexaMD* self, void *data );
+	
+#endif /* __Discretisaton_Mesh_HexaMD_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">HexaMD</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">MeshDecomp</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">ElementLayout</param>
+		<param name="Type">ElementLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 1197 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">NodeLayout</param>
+		<param name="Type">NodeLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 1198 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Init.h"
+
+#include "MeshClass.h"
+#include "MeshLayout.h"
+#include "MeshDecomp.h"
+#include "HexaMD.h"
+#include "DummyMD.h"
+#include "NodeLayout.h"
+#include "BodyNL.h"
+#include "CornerNL.h"
+#include "ElementLayout.h"
+#include "HexaEL.h"
+#include "IrregEL.h"
+#include "ParallelPipedHexaEL.h"
+#include "MeshGeometry.h"
+#include "Mesh.h"
+#include <stdio.h>
+
+Stream* Mesh_VerboseConfig = NULL;
+Stream* Mesh_Debug = NULL;
+Stream* Mesh_Warning = NULL;
+Stream* Mesh_Error = NULL;
+
+Bool DiscretisationMesh_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(), 
+				   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(), 
+				   SurfaceAdaptor_Type, "0", (Stg_Component_DefaultConstructorFunction*)SurfaceAdaptor_New );
+	
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), BodyNL_Type, "0", (Stg_Component_DefaultConstructorFunction*)BodyNL_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CornerNL_Type, "0", (Stg_Component_DefaultConstructorFunction*)CornerNL_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), DummyMD_Type, "0", (Stg_Component_DefaultConstructorFunction*)DummyMD_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), HexaMD_Type, "0", (Stg_Component_DefaultConstructorFunction*)HexaMD_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), HexaEL_Type, "0", (Stg_Component_DefaultConstructorFunction*)HexaEL_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), IrregEL_Type, "0", (Stg_Component_DefaultConstructorFunction*)IrregEL_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ParallelPipedHexaEL_Type, "0", (Stg_Component_DefaultConstructorFunction*)ParallelPipedHexaEL_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), MeshGeometry_Type, "0", (Stg_Component_DefaultConstructorFunction*)MeshGeometry_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Mesh_Type, "0", (Stg_Component_DefaultConstructorFunction*)Mesh_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), MeshLayout_Type, "0", (Stg_Component_DefaultConstructorFunction*)MeshLayout_DefaultNew );
+
+	RegisterParent( MeshTopology_Type, Stg_Component_Type );
+	RegisterParent( CartesianGenerator_Type, MeshGenerator_Type );
+	RegisterParent( SurfaceAdaptor_Type, MeshAdaptor_Type );
+
+	RegisterParent( NodeLayout_Type,          Stg_Component_Type );
+	RegisterParent( BodyNL_Type,              NodeLayout_Type );
+	RegisterParent( CornerNL_Type,            NodeLayout_Type );
+	
+	RegisterParent( MeshDecomp_Type,          Stg_Component_Type );
+	RegisterParent( DummyMD_Type,             MeshDecomp_Type );
+	RegisterParent( HexaMD_Type,              MeshDecomp_Type );
+	
+	RegisterParent( ElementLayout_Type,       Stg_Component_Type );
+	RegisterParent( IrregEL_Type,             ElementLayout_Type );
+	RegisterParent( HexaEL_Type,              ElementLayout_Type );
+	RegisterParent( ParallelPipedHexaEL_Type, HexaEL_Type );
+	RegisterParent( MeshGeometry_Type,	  BlockGeometry_Type );
+	
+	RegisterParent( MeshLayout_Type,          Stg_Component_Type );
+	RegisterParent( Mesh_Type,                Stg_Component_Type );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_Init_h__
+#define __Discretisaton_Mesh_Init_h__
+	
+	Bool DiscretisationMesh_Init( int* argc, char** argv[] );
+	
+#endif /* __Discretisaton_Mesh_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,523 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: IrregEL.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "IrregEL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+
+
+
+/* Textual name of this class */
+const Type IrregEL_Type = "IrregEL";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+IrregEL* IrregEL_DefaultNew( Name name )
+{
+	return (IrregEL*)_IrregEL_New( 
+		sizeof(IrregEL), 
+		IrregEL_Type, 
+		_IrregEL_Delete, 
+		_IrregEL_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)IrregEL_DefaultNew,
+		_IrregEL_Construct,
+		_IrregEL_ComponentBuild,
+		_IrregEL_Initialise,
+		_IrregEL_Execute,
+		_IrregEL_Destroy,
+		name,
+		False,
+		_ElementLayout_Build,
+		_IrregEL_BuildCornerIndices,
+		_IrregEL_CornerElementCount,
+		_IrregEL_BuildCornerElements,
+		_IrregEL_BuildEdgeIndices,
+		_IrregEL_EdgeElementCount,
+		_IrregEL_BuildEdgeElements,
+		_IrregEL_EdgeAt,
+		_ElementLayout_GetStaticMinAndMaxLocalCoords,
+		_ElementLayout_GetStaticMinAndMaxLocalCoords,		
+		_IrregEL_ElementWithPoint,
+		NULL,
+		NULL,
+		NULL,
+		NULL );
+}
+
+IrregEL* IrregEL_New(
+		Name						name,
+		Dictionary*					dictionary,
+		Geometry*					geometry,
+		Topology*					topology,
+		Name						listKey )
+{
+	return _IrregEL_New( 
+		sizeof(IrregEL), 
+		IrregEL_Type, 
+		_IrregEL_Delete, 
+		_IrregEL_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)IrregEL_DefaultNew,
+		_IrregEL_Construct,
+		_IrregEL_ComponentBuild,
+		_IrregEL_Initialise,
+		_IrregEL_Execute,
+		_IrregEL_Destroy,
+		name,
+		True,
+		_ElementLayout_Build,
+		_IrregEL_BuildCornerIndices,
+		_IrregEL_CornerElementCount,
+		_IrregEL_BuildCornerElements,
+		_IrregEL_BuildEdgeIndices,
+		_IrregEL_EdgeElementCount,
+		_IrregEL_BuildEdgeElements,
+		_IrregEL_EdgeAt,
+		_ElementLayout_GetStaticMinAndMaxLocalCoords,
+		_ElementLayout_GetStaticMinAndMaxLocalCoords,		
+		_IrregEL_ElementWithPoint,
+		dictionary,
+		geometry,
+		topology,
+		listKey );
+}
+
+
+void IrregEL_Init(
+		IrregEL*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		Geometry*					geometry,
+		Topology*					topology,
+		Name						listKey )
+{
+	/* General info */
+	self->type = IrregEL_Type;
+	self->_sizeOfSelf = sizeof(IrregEL);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _IrregEL_Delete;
+	self->_print = _IrregEL_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)IrregEL_DefaultNew;
+	self->_construct = _IrregEL_Construct;
+	self->_build = _IrregEL_ComponentBuild;
+	self->_initialise = _IrregEL_Initialise;
+	self->_execute = _IrregEL_Execute;
+	self->_destroy = _IrregEL_Destroy;
+	self->build = _ElementLayout_Build;
+	self->buildCornerIndices = _IrregEL_BuildCornerIndices;
+	self->cornerElementCount = _IrregEL_CornerElementCount;
+	self->buildCornerElements = _IrregEL_BuildCornerElements;
+	self->buildEdgeIndices = _IrregEL_BuildEdgeIndices;
+	self->edgeElementCount = _IrregEL_EdgeElementCount;
+	self->buildEdgeElements = _IrregEL_BuildEdgeElements;
+	self->edgeAt = _IrregEL_EdgeAt;
+	self->getStaticMinAndMaxLocalCoords = _ElementLayout_GetStaticMinAndMaxLocalCoords;
+	self->getStaticMinAndMaxGlobalCoords = _ElementLayout_GetStaticMinAndMaxGlobalCoords;	
+	self->elementWithPoint = _IrregEL_ElementWithPoint;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_ElementLayout_Init( (ElementLayout*)self, geometry, topology );
+	
+	/* IrregEL info */
+	_IrregEL_Init( self, listKey );
+}
+
+
+IrregEL* _IrregEL_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,
+		ElementLayout_BuildFunction*  				build,		
+		ElementLayout_BuildCornerIndicesFunction*       	buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*       	cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*      	buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*			buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*			edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*		buildEdgeElements,
+		ElementLayout_EdgeAtFunction*				edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*	getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*	getStaticMinAndMaxGlobalCoords,				
+		ElementLayout_ElementWithPointFunction*			elementWithPoint,
+		Dictionary*						dictionary,
+		Geometry*						geometry,		
+		Topology*						topology,
+		Name							listKey )
+{
+	IrregEL* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(IrregEL) );
+	self = (IrregEL*)_ElementLayout_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		build,
+		buildCornerIndices,
+		cornerElementCount,
+		buildCornerElements,
+		buildEdgeIndices,
+		edgeElementCount,
+		buildEdgeElements,
+		edgeAt,
+		getStaticMinAndMaxLocalCoords,
+		getStaticMinAndMaxGlobalCoords,		
+		elementWithPoint,
+		dictionary,
+		geometry,
+		topology );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* IrregEL info */
+	if ( initFlag ){
+		_IrregEL_Init( self, listKey );
+	}
+	
+	return self;
+}
+
+void _IrregEL_Init(
+		IrregEL*					self,
+		Name						listKey )
+{
+	/* General and Virtual info should already be set */
+	
+	/* IrregEL info */
+	Dictionary_Entry_Value*		list;
+	Dictionary_Entry_Value*		elementList;
+	Dictionary_Entry_Value*		element;
+	Dictionary_Entry_Value*		point;
+	Index				e_I;
+	
+	self->isConstructed = True;
+	list = Dictionary_Get( self->dictionary, listKey );
+	self->elementCornerCount = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_Entry_Value_GetMember( list, "elementCornerCount" ) );
+	if ( 0 == self->elementCornerCount ) {
+		fprintf( stderr, "Error - %s: Required Dictionary entry for this element layout\" elementCornerCount\" "
+			"not found. Aborting.\n", __func__ );
+		MPI_Finalize();
+		exit(EXIT_FAILURE);
+	}
+	
+	elementList = Dictionary_Entry_Value_GetMember( list, "elementList" );
+	self->elementCount = Dictionary_Entry_Value_GetCount( elementList );
+	
+/* TEMPORARY. Until test are verified the following #ifdef will be used */
+#ifdef USE_2D_CODE
+
+	self->elementTbl = Memory_Alloc_2DArray( Index, self->elementCount, self->elementCornerCount, "IrregEL->elementTbl" );
+		
+	element = Dictionary_Entry_Value_GetFirstElement( elementList );		
+	for( e_I = 0; e_I < self->elementCount; e_I++) {
+		Index p_I;
+		
+		point = Dictionary_Entry_Value_GetFirstElement( element );
+		for( p_I = 0; p_I < self->elementCornerCount; p_I++ ) {
+			self->elementTbl[e_I][p_I] = Dictionary_Entry_Value_AsUnsignedInt( point );
+			point = point->next;
+		}
+		
+		element = element->next;	
+	}
+
+#else
+	
+	self->elementTbl = Memory_Alloc_Array( Index*, self->elementCount, "IrregEL->elementTbl" );
+
+	element = Dictionary_Entry_Value_GetFirstElement( elementList );			
+	for( e_I = 0; e_I < self->elementCount; e_I++ ) {
+		Index p_I;
+		
+		point = Dictionary_Entry_Value_GetFirstElement( element );
+		self->elementTbl[e_I] = Memory_Alloc_Array( Index, self->elementCornerCount, "IrregEL->elementTbl[]" );
+		
+		for( p_I = 0; p_I < self->elementCornerCount; p_I++ ) {
+			self->elementTbl[e_I][p_I] = Dictionary_Entry_Value_AsUnsignedInt( point );
+			point = point->next;
+		}
+		
+		element = element->next;
+	}
+#endif
+
+	self->cornerCount = self->geometry->pointCount;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _IrregEL_Delete( void* irregEL ) {
+	IrregEL*		self = (IrregEL*)irregEL;
+	Element_GlobalIndex     e_I;
+
+#ifdef USE_2D_CODE
+
+	Memory_Free( self->elementTbl );
+	self->elementTbl = NULL;
+
+#else
+	
+	for( e_I = 0; e_I < self->elementCount; e_I++ )
+		if( self->elementTbl[e_I] )
+			Memory_Free( self->elementTbl[e_I] );
+	if( self->elementTbl ) {
+		Memory_Free( self->elementTbl );
+		self->elementTbl = NULL;
+	}
+
+#endif
+	
+	/* Stg_Class_Delete parent */
+	_ElementLayout_Delete( self );
+}
+
+
+void _IrregEL_Print( void* irregEL, Stream* stream ) {
+	IrregEL* self = (IrregEL*)irregEL;
+	
+	/* Set the Journal for printing informations */
+	Stream* irregELStream;
+	irregELStream = Journal_Register( InfoStream_Type, "IrregELStream" );
+
+	/* Print parent */
+	_ElementLayout_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "IrregEL (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* IrregEL info */
+}
+
+void _IrregEL_Construct( void* irregEL, Stg_ComponentFactory* cf, void* data ){
+	IrregEL *self = (IrregEL*)irregEL;
+	Name listName = NULL;
+	Topology *topology = NULL;
+	Geometry *geometry = NULL;
+
+	self->dictionary = cf->rootDict;
+	listName = Stg_ComponentFactory_GetString( cf, self->name, "ListName", "" ); 
+	
+	topology =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  Topology_Type, Topology,  True, data  ) ;
+	geometry =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  Geometry_Type, Geometry,  True, data ) ;
+
+	_ElementLayout_Init( (ElementLayout*)self, geometry, topology );
+	_IrregEL_Init( self, listName );
+}
+	
+void _IrregEL_ComponentBuild( void* irregEL, void* data ){
+	
+}
+	
+void _IrregEL_Initialise( void* irregEL, void* data ){
+	
+}
+	
+void _IrregEL_Execute( void* irregEL, void* data ){
+	
+}
+	
+void _IrregEL_Destroy( void* irregEL, void* data ){
+	
+}
+
+void _IrregEL_BuildCornerIndices( void* irregEL, Element_GlobalIndex globalIndex, Index* points ) {
+	IrregEL*	self = (IrregEL*)irregEL;
+	Index		p_I;
+	
+	for( p_I = 0; p_I < self->elementCornerCount; p_I++ )
+		points[p_I] = self->elementTbl[globalIndex][p_I];
+}
+
+
+Element_GlobalIndex _IrregEL_CornerElementCount( void* irregEL, Index corner ) {
+	IrregEL*		self = (IrregEL*)irregEL;
+	Topology*		topology = self->topology;
+	Index			e_I;
+	Element_GlobalIndex     eNbrCnt;
+	Element_Neighbours      eNbrs;
+	Element_GlobalIndex     eCnt = 1;
+	
+	for( e_I = 0; e_I < self->elementCount; e_I++ ) {
+		Index p_I;
+		
+		for( p_I = 0; p_I < self->elementCornerCount; p_I++ )
+			if( self->elementTbl[e_I][p_I] == corner )
+				break;
+		
+		if( p_I < self->elementCornerCount )
+			break;
+	}
+	
+	if( e_I == self->elementCount )
+		assert( 0 );
+	
+	eNbrCnt = topology->neighbourCount( topology, e_I );
+	eNbrs = Memory_Alloc_Array( Element_GlobalIndex, eNbrCnt, "IrregEL" );
+	topology->buildNeighbours( topology, e_I, eNbrs );
+	
+	for( e_I = 0; e_I < eNbrCnt; e_I++ ) {
+		Index p_I;
+		
+		for( p_I = 0; p_I < self->elementCornerCount; p_I++ )
+			if( self->elementTbl[eNbrs[e_I]][p_I] == corner ) {
+				eCnt++;
+				break;
+			}
+	}
+	
+	return eCnt;
+}
+
+
+void _IrregEL_BuildCornerElements( void* irregEL, Index corner, Element_GlobalIndex* elements ) {
+	IrregEL*		self = (IrregEL*)irregEL;
+	Topology*		topology = self->topology;
+	Index			e_I;
+	Element_GlobalIndex     eCnt = 1;
+	Element_GlobalIndex     eNbrCnt;
+	Element_Neighbours      eNbrs;
+	
+	for( e_I = 0; e_I < self->elementCount; e_I++ ) {
+		Index p_I;
+		
+		for( p_I = 0; p_I < self->elementCornerCount; p_I++ )
+			if( self->elementTbl[e_I][p_I] == corner )
+				break;
+		
+		if( p_I < self->elementCornerCount )
+			break;
+	}
+	
+	if( e_I == self->elementCount )
+		assert( 0 );
+	
+	eNbrCnt = topology->neighbourCount( topology, e_I );
+	eNbrs = Memory_Alloc_Array( Element_GlobalIndex, eNbrCnt, "IrregEL" );
+	topology->buildNeighbours( topology, e_I, eNbrs );
+	
+	elements[0] = e_I;
+	
+	for( e_I = 0; e_I < eNbrCnt; e_I++ ) {
+		Index p_I;
+		
+		for( p_I = 0; p_I < self->elementCornerCount; p_I++ )
+			if( self->elementTbl[eNbrs[e_I]][p_I] == corner ) {
+				elements[eCnt++] = eNbrs[e_I];
+				break;
+			}
+	}
+}
+
+
+void _IrregEL_BuildEdgeIndices( void* irregEL, Element_GlobalIndex globalIndex, Index* edges ) {
+	assert( 0 );
+}
+
+
+Element_GlobalIndex _IrregEL_EdgeElementCount( void* irregEL, Index edge ) {
+	assert( 0 );
+	return 0;
+}
+
+
+void _IrregEL_BuildEdgeElements( void* irregEL, Index edge, Element_GlobalIndex* elements ) {
+	assert( 0 );
+}
+
+
+void _IrregEL_EdgeAt( void* irregEL, Index index, Edge edge ) {
+	assert( 0 );
+}
+
+
+Element_GlobalIndex _IrregEL_ElementWithPoint( void* irregEL, void* decomp, Coord point, void* mesh, 
+					       PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{		
+	/* Not yet supported */
+	assert( 0 );
+	return 0;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: IrregEL.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_IrregEL_h__
+#define __Discretisaton_Mesh_IrregEL_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type IrregEL_Type;
+
+	/* IrregEL information */
+	#define __IrregEL \
+		/* General info */ \
+		__ElementLayout \
+		\
+		/* Virtual info */ \
+		\
+		/* IrregEL info ... */ \
+		Index**				elementTbl;
+	struct _IrregEL { __IrregEL };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a IrregEL */
+	IrregEL* IrregEL_DefaultNew( Name name );
+
+	IrregEL* IrregEL_New(
+		Name						name,
+		Dictionary*					dictionary,
+		Geometry*					geometry,
+		Topology*					topology,
+		Name						listKey );
+	
+	/* Initialise a IrregEL */
+	void IrregEL_Init(
+		IrregEL*					self,
+		Name						name,
+		Dictionary*					dictionary,
+		Geometry*					geometry,
+		Topology*					topology,
+		Name						listKey );
+	
+	/* Creation implementation */
+	IrregEL* _IrregEL_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,
+		ElementLayout_BuildFunction*  				build,		
+		ElementLayout_BuildCornerIndicesFunction*       	buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*       	cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*      	buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*			buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*			edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*		buildEdgeElements,
+		ElementLayout_EdgeAtFunction*				edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*	getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*	getStaticMinAndMaxGlobalCoords,				
+		ElementLayout_ElementWithPointFunction*			elementWithPoint,
+		Dictionary*						dictionary,
+		Geometry*						geometry,		
+		Topology*						topology,
+		Name							listKey );
+	
+	/* Initialisation implementation functions */
+	void _IrregEL_Init(
+		IrregEL*					self,
+		Name						listKey );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete IrregEL implementation */
+	void _IrregEL_Delete( void* irregEL );
+	
+	/* Print IrregEL implementation */
+	void _IrregEL_Print( void* irregEL, Stream* stream );
+	
+	void _IrregEL_Construct( void* irregEL, Stg_ComponentFactory* cf, void* data );
+	
+	void _IrregEL_ComponentBuild( void* irregEL, void* data );
+	
+	void _IrregEL_Initialise( void* irregEL, void* data );
+	
+	void _IrregEL_Execute( void* irregEL, void* data );
+	
+	void _IrregEL_Destroy( void* irregEL, void* data );
+	
+	void _IrregEL_BuildCornerIndices( void* irregEL, Element_GlobalIndex globalIndex, Index* points );
+	
+	Element_GlobalIndex _IrregEL_CornerElementCount( void* irregEL, Index corner );
+	
+	void _IrregEL_BuildCornerElements( void* irregEL, Index corner, Element_GlobalIndex* elements );
+	
+	void _IrregEL_BuildEdgeIndices( void* irregEL, Element_GlobalIndex globalIndex, Index* edges );
+	
+	Element_GlobalIndex _IrregEL_EdgeElementCount( void* irregEL, Index edge );
+	
+	void _IrregEL_BuildEdgeElements( void* irregEL, Index edge, Element_GlobalIndex* elements );
+	
+	void _IrregEL_EdgeAt( void* irregEL, Index index, Edge edge );
+	
+	Element_GlobalIndex _IrregEL_ElementWithPoint( void* irregEL, void* decomp, Coord point, void* mesh, 
+						       PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_IrregEL_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">IrregEL</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">ElementLayout</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">ListName</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">Topology</param>
+		<param name="Type">Topology</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 367 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">Geometry</param>
+		<param name="Type">Geometry</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 368 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3860 2006-10-14 18:12:14Z LukeHodkinson $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainDiscretisationMesh
+def_inc = StGermain/Discretisation/Mesh
+
+def_srcs = \
+	Grid.c \
+	CommTopology.c \
+	Decomp.c \
+	Decomp_Sync.c \
+	Decomp_Sync_Claim.c \
+	Decomp_Sync_Negotiate.c \
+	DecompTransfer.c \
+	MeshTopology.c \
+	MeshGenerator.c \
+	CartesianGenerator.c \
+	MeshAdaptor.c \
+	SurfaceAdaptor.c \
+	MeshDecomp.c \
+	ElementLayout.c \
+	HexaEL.c \
+	ParallelPipedHexaEL.c \
+	IrregEL.c \
+	NodeLayout.c \
+	CornerNL.c \
+	BodyNL.c \
+	HexaMD.c \
+	DummyMD.c \
+	MeshGeometry.c \
+	MeshLayout.c \
+	MeshClass.c \
+	Init.c \
+	Finalise.c \
+	# StencilMD.c \
+
+def_hdrs = \
+	types.h \
+	shortcuts.h \
+	Grid.h \
+	CommTopology.h \
+	Decomp.h \
+	Decomp_Sync.h \
+	Decomp_Sync_Claim.h \
+	Decomp_Sync_Negotiate.h \
+	DecompTransfer.h \
+	MeshTopology.h \
+	MeshGenerator.h \
+	CartesianGenerator.h \
+	MeshAdaptor.h \
+	SurfaceAdaptor.h \
+	ShadowInfo.h \
+	ElementLayout.h \
+	HexaEL.h \
+	ParallelPipedHexaEL.h \
+	IrregEL.h \
+	NodeLayout.h \
+	CornerNL.h \
+	BodyNL.h \
+	MeshDecomp.h \
+	HexaMD.h \
+	DummyMD.h \
+	MeshGeometry.h \
+	MeshLayout.h \
+	MeshClass.h \
+	Init.h \
+	Finalise.h \
+	Mesh.h \
+	# StencilMD.h \
+
+def_objlists = 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Mesh.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Mesh.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Mesh.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Mesh.h 3860 2006-10-14 18:12:14Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_h__
+#define __Discretisaton_Mesh_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "Grid.h"
+	#include "CommTopology.h"
+	#include "Decomp.h"
+	#include "Decomp_Sync.h"
+	#include "Decomp_Sync_Claim.h"
+	#include "Decomp_Sync_Negotiate.h"
+	#include "DecompTransfer.h"
+	#include "MeshTopology.h"
+	#include "MeshGenerator.h"
+	#include "CartesianGenerator.h"
+	#include "MeshAdaptor.h"
+	#include "SurfaceAdaptor.h"
+
+	#include "ElementLayout.h"
+	#include "HexaEL.h"
+	#include "ParallelPipedHexaEL.h"
+	#include "IrregEL.h"
+	#include "NodeLayout.h"
+	#include "CornerNL.h"
+	#include "BodyNL.h"
+	#include "MeshDecomp.h"
+	#include "HexaMD.h"
+	/*#include "StencilMD.h"*/
+	#include "DummyMD.h"
+	#include "MeshGeometry.h"
+	#include "MeshLayout.h"
+	#include "MeshClass.h"
+	#include "ShadowInfo.h"
+	#include "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Discretisaton_Mesh_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.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;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshAdaptor_Delete( void* meshAdaptor ) {
+	MeshAdaptor*	self = (MeshAdaptor*)meshAdaptor;
+
+	/* Delete the parent. */
+	_MeshGenerator_Delete( self );
+}
+
+void _MeshAdaptor_Print( void* meshAdaptor, Stream* stream ) {
+	MeshAdaptor*	self = (MeshAdaptor*)meshAdaptor;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshAdaptorStream;
+	meshAdaptorStream = Journal_Register( InfoStream_Type, "MeshAdaptorStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "MeshAdaptor (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void* _MeshAdaptor_Copy( void* meshAdaptor, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	MeshAdaptor*	self = (MeshAdaptor*)meshAdaptor;
+	MeshAdaptor*	newMeshAdaptor;
+	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;
+	}
+	
+	newMeshAdaptor = (MeshAdaptor*)_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*)newMeshAdaptor;
+#endif
+
+	return NULL;
+}
+
+void _MeshAdaptor_Construct( void* meshAdaptor, Stg_ComponentFactory* cf, void* data ) {
+	MeshAdaptor*	self = (MeshAdaptor*)meshAdaptor;
+
+	_MeshGenerator_Construct( self, cf, data );
+
+	/* Read the source generator. */
+	self->generator = Stg_ComponentFactory_ConstructByKey( cf, self->name, "sourceGenerator", 
+							       MeshGenerator, True, data );
+}
+
+void _MeshAdaptor_Build( void* meshAdaptor, void* data ) {
+	_MeshGenerator_Build( meshAdaptor, data );
+}
+
+void _MeshAdaptor_Initialise( void* meshAdaptor, void* data ) {
+}
+
+void _MeshAdaptor_Execute( void* meshAdaptor, void* data ) {
+}
+
+void _MeshAdaptor_Destroy( void* meshAdaptor, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshAdaptor_SetGenerator( void* meshAdaptor, void* generator ) {
+	MeshAdaptor*	self = (MeshAdaptor*)meshAdaptor;
+
+	self->generator = generator;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MeshAdaptor.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshAdaptor_h__
+#define __Discretisaton_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;
+
+	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* meshAdaptor );
+	void _MeshAdaptor_Print( void* meshAdaptor, Stream* stream );
+
+	#define MeshAdaptor_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshAdaptor_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _MeshAdaptor_Copy( void* meshAdaptor, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _MeshAdaptor_Construct( void* meshAdaptor, Stg_ComponentFactory* cf, void* data );
+	void _MeshAdaptor_Build( void* meshAdaptor, void* data );
+	void _MeshAdaptor_Initialise( void* meshAdaptor, void* data );
+	void _MeshAdaptor_Execute( void* meshAdaptor, void* data );
+	void _MeshAdaptor_Destroy( void* meshAdaptor, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void MeshAdaptor_SetGenerator( void* meshAdaptor, void* generator );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Discretisaton_Mesh_MeshAdaptor_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshAdaptor</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2522 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "MeshTopology.h"
+#include "MeshClass.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "MeshDecomp.h"
+#include "MeshLayout.h"
+#include "ShadowInfo.h"
+#include "MeshGeometry.h"
+#include "HexaEL.h"
+#include "ParallelPipedHexaEL.h"
+
+/* Textual name of this class */
+const Type Mesh_Type = "Mesh";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Mesh* Mesh_DefaultNew( Name name )
+{
+	return _Mesh_New( 
+		sizeof(Mesh), 
+		Mesh_Type, 
+		_Mesh_Delete, 
+		_Mesh_Print, 
+		_Mesh_Copy, 
+		(void* (*)(Name))Mesh_DefaultNew,
+		_Mesh_Construct,
+		_Mesh_Build, 
+		_Mesh_Initialise, 
+		_Mesh_Execute,
+		_Mesh_Destroy,
+		name,
+		False,
+		_Mesh_Node_IsLocal1D,
+		_Mesh_Node_IsShadow1D,
+		_Mesh_Element_IsLocal1D,
+		_Mesh_Element_IsShadow1D,
+		NULL, 
+		0,
+		0, 
+		NULL, 
+		NULL );
+}
+
+Mesh* Mesh_New(
+	Name						name,
+	void*						layout,
+	SizeT						_nodeSize,
+	SizeT						_elementSize,
+	void*						extensionMgr_Register,
+	Dictionary*					dictionary )
+{
+	return _Mesh_New( 
+		sizeof(Mesh), 
+		Mesh_Type, 
+		_Mesh_Delete, 
+		_Mesh_Print, 
+		_Mesh_Copy, 
+		(void* (*)(Name))Mesh_DefaultNew,
+		_Mesh_Construct,
+		_Mesh_Build, 
+		_Mesh_Initialise, 
+		_Mesh_Execute,
+		_Mesh_Destroy,
+		name,
+		True,
+		_Mesh_Node_IsLocal1D,
+		_Mesh_Node_IsShadow1D,
+		_Mesh_Element_IsLocal1D,
+		_Mesh_Element_IsShadow1D,
+		layout, 
+		_nodeSize,
+		_elementSize, 
+		extensionMgr_Register, 
+		dictionary );
+}
+
+
+void Mesh_Init(
+	Mesh*						self,
+	Name						name,
+	void*						layout,
+	SizeT						_nodeSize,
+	SizeT						_elementSize,
+	void*						extensionMgr_Register,
+	Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = Mesh_Type;
+	self->_sizeOfSelf = sizeof(Mesh);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _Mesh_Delete;
+	self->_print = _Mesh_Print;
+	self->_copy = _Mesh_Copy;
+	self->_defaultConstructor = (void* (*)(Name))Mesh_DefaultNew;
+	self->_construct = _Mesh_Construct,
+		self->_build = _Mesh_Build;
+	self->_initialise = _Mesh_Initialise;
+	self->_execute = _Mesh_Execute;
+	self->_destroy = _Mesh_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 info */
+	_Mesh_Init( self, layout, _nodeSize, _elementSize, extensionMgr_Register );
+}
+
+
+Mesh* _Mesh_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*			_destProc_Iroy,
+	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*						extensionMgr_Register,
+	Dictionary*					dictionary )
+{
+	Mesh* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Mesh) );
+	self = (Mesh*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor, _construct, _build, 
+					  _initialise, _execute, _destProc_Iroy, name, NON_GLOBAL );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->nodeIsLocal = _nodeIsLocal;
+	self->nodeIsShadow = _nodeIsShadow;
+	self->elementIsLocal = _elementIsLocal;
+	self->elementIsShadow = _elementIsShadow;
+	
+	/* Mesh info */
+	if( initFlag ){
+		_Mesh_Init( self, layout, nodeSize, elementSize, extensionMgr_Register );
+	}
+	
+	return self;
+}
+
+void _Mesh_Init(
+	Mesh*						self,
+	void*						layout,
+	SizeT						_nodeSize,
+	SizeT						_elementSize,
+	void*						extensionMgr_Register )
+{
+	/* General and Virtual info should already be set */
+	
+	/* Mesh info */
+	self->isConstructed = True;
+	self->layout = (MeshLayout*)layout;
+	self->nodeExtensionMgr = ExtensionManager_New_OfStruct( "node", _nodeSize );
+	self->elementExtensionMgr = ExtensionManager_New_OfStruct( "element", _elementSize );
+	ExtensionManager_Register_Add( extensionMgr_Register, self->nodeExtensionMgr );
+	ExtensionManager_Register_Add( extensionMgr_Register, self->elementExtensionMgr );
+	self->extensionMgr_Register = extensionMgr_Register;
+	self->debug = Journal_Register( Debug_Type, self->type );
+
+	/* New topology stuff. */
+	self->topo = MeshTopology_New( "" );
+	self->useTopo = False;
+	self->generator = NULL;
+	self->info = ExtensionManager_New_OfExistingObject( "mesh_info", self );
+	
+	/* Nodes */
+	self->nodeLocalCount = 0;
+	self->nodeDomainCount = 0;
+	self->nodeShadowCount = 0;
+	self->nodeGlobalCount = 0;
+	self->nodeL2G = 0;
+	self->nodeD2G = 0;
+	self->nodeG2L = 0;
+	self->nodeG2D = 0;
+	self->nodeNeighbourTbl = 0;
+	self->nodeNeighbourCountTbl = 0;
+	self->nodeElementTbl = 0;
+	self->nodeElementCountTbl = 0;
+	/* By default, build the local to global table for speed. The global to local tables are
+	   potentially memory-hungry for large parallel runs, so don't build them by default */
+	self->buildNodeLocalToGlobalMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildNodeLocalToGlobalMap",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->buildNodeDomainToGlobalMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildNodeDomainToGlobalMap",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->buildNodeGlobalToLocalMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildNodeGlobalToLocalMap",
+				       Dictionary_Entry_Value_FromBool( False ) ) );
+	self->buildNodeGlobalToDomainMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildNodeGlobalToDomainMap",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->buildNodeNeighbourTbl = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildNodeNeighbourTbl",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->buildNodeElementTbl = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildNodeElementTbl",
+				       Dictionary_Entry_Value_FromBool( False ) ) );
+	self->ownsNodeLocalToGlobalMap = True;
+	self->ownsNodeDomainToGlobalMap = True;
+	self->ownsNodeGlobalToDomainMap = True;
+	self->ownsNodeGlobalToLocalMap = True;
+	self->ownsNodeNeighbourTbl = True;
+	self->ownsNodeNeighbourCountTbl = True;
+	self->ownsNodeElementTbl = True;
+	self->ownsNodeElementCountTbl = True;
+	
+	/* Element */
+	self->elementDomainCount = 0;
+	self->elementLocalCount = 0;
+	self->elementShadowCount = 0;
+	self->elementGlobalCount = 0;
+	self->elementL2G = 0;
+	self->elementD2G = 0;
+	self->elementG2L = 0;
+	self->elementG2D = 0;
+	self->elementNodeTbl = 0;
+	self->elementNodeCountTbl = 0;
+	self->elementNeighbourTbl = 0;
+	self->elementNeighbourCountTbl = 0;
+	self->buildElementLocalToGlobalMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildElementLocalToGlobalMap",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->buildElementDomainToGlobalMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildElementDomainToGlobalMap",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->buildElementGlobalToLocalMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildElementGlobalToLocalMap",
+				       Dictionary_Entry_Value_FromBool( False ) ) );
+	self->buildElementGlobalToDomainMap = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildElementGlobalToDomainMap",
+				       Dictionary_Entry_Value_FromBool( False ) ) );
+	self->buildElementNodeTbl = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildElementNodeTbl",
+				       Dictionary_Entry_Value_FromBool( False ) ) );
+	self->buildElementNeighbourTbl = Dictionary_Entry_Value_AsBool(
+		Dictionary_GetDefault( self->dictionary, "buildElementNeighbourTbl",
+				       Dictionary_Entry_Value_FromBool( False ) ) );
+	self->buildTemporaryGlobalTables = Dictionary_Entry_Value_AsBool(		
+		Dictionary_GetDefault( self->dictionary, "buildTemporaryGlobalTables",
+				       Dictionary_Entry_Value_FromBool( True ) ) );
+	self->ownsElementLocalToGlobalMap = True;
+	self->ownsElementDomainToGlobalMap = True;
+	self->ownsElementGlobalToDomainMap = True;
+	self->ownsElementGlobalToLocalMap = True;
+	self->ownsElementNodeTbl = True;
+	self->ownsElementNodeCountTbl = True;
+	self->ownsElementNeighbourTbl = True;
+	self->ownsElementNeighbourCountTbl = True;
+	
+	/* sync info */
+	self->procNbrInfo = Memory_Alloc( ProcNbrInfo, "Mesh->procNbrInfo" );
+	self->procNbrInfo->procNbrCnt = 0;
+	self->procNbrInfo->procNbrTbl = NULL;
+	self->elementShadowInfo = Memory_Alloc( ShadowInfo, "Mesh->elementShadowInfo" );
+	self->elementShadowInfo->procShadowedCnt = NULL;
+	self->elementShadowInfo->procShadowedTbl = NULL;
+	self->elementShadowInfo->procShadowCnt = NULL;
+	self->elementShadowInfo->procShadowTbl = NULL;
+	self->nodeShadowInfo = Memory_Alloc( ShadowInfo, "Mesh->nodeShadowInfo" );
+	self->nodeShadowInfo->procShadowedCnt = NULL;
+	self->nodeShadowInfo->procShadowedTbl = NULL;
+	self->nodeShadowInfo->procShadowCnt = NULL;
+	self->nodeShadowInfo->procShadowTbl = NULL;
+	
+	self->syncRequestTbl = NULL;
+	self->syncElementTbl = NULL;
+	self->syncNodeCoordTbl = NULL;
+	self->syncNodeTbl = NULL;
+	self->syncElementSendTbl = NULL;
+	self->syncNodeCoordTbl = NULL;
+	self->syncNodeTbl = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Mesh_Construct( void* mesh, Stg_ComponentFactory* cf, void* data ) {
+	Mesh* self = (Mesh*)mesh;
+	Dictionary *componentDict = NULL;
+	Dictionary *thisComponentDict = NULL;
+	MeshLayout *meshLayout = NULL;
+	void *extensionManager_Register = NULL;
+	unsigned int elementSize = 0;
+	unsigned int nodeSize = 0;
+
+	self->dictionary = cf->rootDict;
+	componentDict = cf->componentDict;
+	assert( componentDict );
+	thisComponentDict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( componentDict, self->name ) );
+	assert( thisComponentDict );
+	
+	meshLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  MeshLayout_Type, MeshLayout,  True, data ) ;
+	
+	extensionManager_Register = Stg_ObjectList_Get( cf->registerRegister, "ExtensionManager_Register" );
+	assert( extensionManager_Register );
+	
+
+	elementSize = Dictionary_GetUnsignedInt_WithDefault( thisComponentDict, "ElementSize", 8 );
+	nodeSize = Dictionary_GetUnsignedInt_WithDefault( thisComponentDict, "NodeSize", 0 );
+
+	self->nSpaceDims = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "dim", 0 );
+
+	_Mesh_Init( (Mesh*)self, meshLayout, nodeSize, elementSize, extensionManager_Register );
+}
+
+void _Mesh_Destroy( void* mesh, void* data )
+{
+	
+}
+
+void _Mesh_Delete( void* mesh ) {
+	Mesh* self = (Mesh*)mesh;
+
+	FreeObject( self->topo );
+	Memory_Free( self->nodeCoord );
+
+	Mesh_DestroyTables( self );
+	
+	/* Stg_Class_Delete the mesh itself */
+	if( self->element ) {
+		ExtensionManager_Free( self->elementExtensionMgr, self->element );
+	}
+	if( self->node ) {
+		ExtensionManager_Free( self->nodeExtensionMgr, self->node );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void Mesh_DestroyTables( void* mesh ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	/* Because remeshing may have the same connectivity, we may want to pass this onto the new mesh, hence "owns" flags */
+	if( self->ownsElementNeighbourTbl && self->elementNeighbourTbl ) {
+		Memory_Free( self->elementNeighbourTbl );
+	}
+	if( self->ownsElementNeighbourCountTbl && self->elementNeighbourCountTbl ) {
+		Memory_Free( self->elementNeighbourCountTbl );
+	}
+	if( self->ownsElementNodeTbl && self->elementNodeTbl ) {
+		Memory_Free( self->elementNodeTbl );
+	}
+	if( self->ownsElementNodeCountTbl && self->elementNodeCountTbl ) {
+		Memory_Free( self->elementNodeCountTbl );
+	}
+	if( self->ownsElementGlobalToDomainMap && self->elementG2D ) {
+		Memory_Free( self->elementG2D );
+	}
+	/* Note: G2D is same ptr as G2L if both active and no shadowing */
+	if( self->ownsElementGlobalToLocalMap && self->elementG2L && 
+	    !(self->elementG2D && (self->nodeShadowCount == 0) ) )
+	{
+		Memory_Free( self->elementG2L );
+	}
+	if( self->ownsElementDomainToGlobalMap && self->elementD2G ) {
+		Memory_Free( self->elementD2G );
+	}
+	/* L2G is same ptr as D2G if both requested */
+	if( self->ownsElementLocalToGlobalMap && self->elementL2G && !self->elementD2G ) {
+		Memory_Free( self->elementL2G );
+	}
+	if( self->ownsNodeElementTbl && self->nodeElementTbl ) {
+		Memory_Free( self->nodeElementTbl );
+	}
+	if( self->ownsNodeElementCountTbl && self->nodeElementCountTbl ) {
+		Memory_Free( self->nodeElementCountTbl );
+	}
+	if( self->ownsNodeNeighbourTbl && self->nodeNeighbourTbl ) {
+		Memory_Free( self->nodeNeighbourTbl );
+	}
+	if( self->ownsNodeNeighbourCountTbl && self->nodeNeighbourCountTbl ) {
+		Memory_Free( self->nodeNeighbourCountTbl );
+	}
+	if( self->ownsNodeGlobalToDomainMap && self->nodeG2D ) {
+		Memory_Free( self->nodeG2D );
+	}
+	/* G2D is same ptr as G2L if both active and no shadowing */
+	if( self->ownsNodeGlobalToLocalMap && self->nodeG2L && 
+	    !(self->nodeG2D && (self->nodeShadowCount == 0) ) )
+	{	
+		Memory_Free( self->nodeG2L );
+	}
+	if( self->ownsElementDomainToGlobalMap && self->nodeD2G ) {
+		Memory_Free( self->nodeD2G );
+	}
+	/* L2G is same ptr as D2G if both requested */
+	if( self->ownsElementLocalToGlobalMap && self->nodeL2G && !self->nodeD2G ) {
+		Memory_Free( self->nodeL2G );
+	}
+	
+	/* sync info */
+	if( self->procNbrInfo->procNbrTbl ) {
+		Memory_Free( self->procNbrInfo->procNbrTbl );
+	}
+	
+	if( self->elementShadowInfo->procShadowedCnt ) {
+		Memory_Free( self->elementShadowInfo->procShadowedCnt );
+	}
+	if( self->elementShadowInfo->procShadowedTbl ) {
+		NeighbourIndex			nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->elementShadowInfo->procShadowedTbl[nbr_I] ) {
+				Memory_Free( self->elementShadowInfo->procShadowedTbl[nbr_I] );
+			}
+		}
+		Memory_Free( self->elementShadowInfo->procShadowedTbl );
+	}
+	if( self->elementShadowInfo->procShadowCnt ) {
+		Memory_Free( self->elementShadowInfo->procShadowCnt );
+	}
+	if( self->elementShadowInfo->procShadowTbl ) {
+		NeighbourIndex			nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->elementShadowInfo->procShadowTbl[nbr_I] ) {
+				Memory_Free( self->elementShadowInfo->procShadowTbl[nbr_I] );
+			}
+		}
+		Memory_Free( self->elementShadowInfo->procShadowTbl );
+	}
+	
+	if( self->nodeShadowInfo->procShadowedCnt ) {
+		Memory_Free( self->nodeShadowInfo->procShadowedCnt );
+	}
+	if( self->nodeShadowInfo->procShadowedTbl ) {
+		NeighbourIndex			nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->nodeShadowInfo->procShadowedTbl[nbr_I] ) {
+				Memory_Free( self->nodeShadowInfo->procShadowedTbl[nbr_I] );
+			}
+		}
+		Memory_Free( self->nodeShadowInfo->procShadowedTbl );
+	}
+	if( self->nodeShadowInfo->procShadowCnt ) {
+		Memory_Free( self->nodeShadowInfo->procShadowCnt );
+	}
+	if( self->nodeShadowInfo->procShadowTbl ) {
+		NeighbourIndex			nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->nodeShadowInfo->procShadowTbl[nbr_I] ) {
+				Memory_Free( self->nodeShadowInfo->procShadowTbl[nbr_I] );
+			}
+		}
+		Memory_Free( self->nodeShadowInfo->procShadowTbl );
+	}
+	
+	if( self->syncRequestTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->syncRequestTbl[nbr_I] )
+				Memory_Free( self->syncRequestTbl[nbr_I] );
+		}
+		Memory_Free( self->syncRequestTbl );
+	}
+	if( self->syncElementTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->syncElementTbl[nbr_I] )
+				Memory_Free( self->syncElementTbl[nbr_I] );
+		}
+		Memory_Free( self->syncElementTbl );
+	}
+	if( self->syncNodeCoordTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->syncNodeCoordTbl[nbr_I] )
+				Memory_Free( self->syncNodeCoordTbl[nbr_I] );
+		}
+		Memory_Free( self->syncNodeCoordTbl );
+	}
+	if( self->syncNodeTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			if( self->syncNodeTbl[nbr_I] )
+				Memory_Free( self->syncNodeTbl[nbr_I] );
+		}
+		Memory_Free( self->syncNodeTbl );
+	}
+	
+	if( self->syncElementSendTbl ) {
+		Memory_Free( self->syncElementSendTbl );
+	}
+	if( self->syncNodeCoordSendTbl ) {
+		Memory_Free( self->syncNodeCoordSendTbl );
+	}
+	if( self->syncNodeTbl ) {
+		Memory_Free( self->syncNodeSendTbl );
+	}
+	Memory_Free( self->elementShadowInfo );
+	Memory_Free( self->nodeShadowInfo );
+	Memory_Free( self->procNbrInfo );
+}
+
+
+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 );
+	
+	/* General info */
+	Journal_Printf( stream, "\tdictionary (ptr): %p\n", self->dictionary );
+	
+	/* Virtual info */
+	
+	/* Mesh info */
+	Journal_Printf( stream, "\tlayout (ptr): %p\n", self->layout );
+	Print( self->nodeExtensionMgr, stream );
+	Print( self->elementExtensionMgr, stream );
+	
+	/* Nodes */
+	Journal_Printf( stream, "\tnode (ptr): %p\n", self->node );
+	Journal_Printf( stream, "\tnodeLocalCount: %d\n", self->nodeLocalCount );
+	Journal_Printf( stream, "\tnodeDomainCount: %d\n", self->nodeDomainCount );
+	Journal_Printf( stream, "\tnodeShadowCount: %d\n", self->nodeShadowCount );
+	Journal_Printf( stream, "\tnodeGlobalCount: %d\n", self->nodeGlobalCount );
+	_Mesh_PrintCoords( self, stream );
+
+	Journal_Printf( stream, "\townsNodeLocalToGlobalMap: %u\n", self->ownsNodeLocalToGlobalMap );
+	_Mesh_PrintTable( stream, self->nodeL2G, "nodeL2G", self->nodeLocalCount );
+	Journal_Printf( stream, "\townsNodeDomainToGlobalMap: %u\n", self->ownsNodeDomainToGlobalMap );
+	_Mesh_PrintTable( stream, self->nodeD2G, "nodeD2G", self->nodeDomainCount );
+	Journal_Printf( stream, "\townsNodeGlobalToLocalMap: %u\n", self->ownsNodeGlobalToLocalMap );
+	_Mesh_PrintTable( stream, self->nodeG2L, "nodeG2L", self->nodeGlobalCount );
+	Journal_Printf( stream, "\townsNodeGlobalToDomainMap: %u\n", self->ownsNodeGlobalToDomainMap );
+	_Mesh_PrintTable( stream, self->nodeG2D, "nodeG2D", self->nodeGlobalCount );
+
+	Journal_Printf( stream, "\townsNodeNeighbourCountTbl: %u\n", self->ownsNodeNeighbourCountTbl );
+	Journal_Printf( stream, "\tnodeNeighbourCountTbl (ptr): %p\n", self->nodeNeighbourCountTbl );
+	Journal_Printf( stream, "\townsNodeNeighbourTbl: %u\n", self->ownsNodeNeighbourTbl );
+	_Mesh_Print2DTable( stream, self->nodeNeighbourTbl, self->nodeNeighbourCountTbl, "nodeNeighbourTbl",
+			    self->nodeDomainCount );
+
+	Journal_Printf( stream, "\townsNodeElementCountTbl: %u\n", self->ownsNodeElementCountTbl );
+	Journal_Printf( stream, "\tnodeElementCountTbl (ptr): %p\n", self->nodeElementCountTbl );
+	Journal_Printf( stream, "\townsNodeElementTbl: %u\n", self->ownsNodeElementTbl );
+	_Mesh_Print2DTable( stream, self->nodeElementTbl, self->nodeElementCountTbl, "nodeElementTbl",
+			    self->nodeDomainCount );
+	
+	/* Element */
+	Journal_Printf( stream, "\telement (ptr): %p\n", self->element );
+	Journal_Printf( stream, "\telementLocalCount: %d\n", self->elementLocalCount );
+	Journal_Printf( stream, "\telementDomainCount: %d\n", self->elementDomainCount );
+	Journal_Printf( stream, "\telementShadowCount: %d\n", self->elementShadowCount );
+	Journal_Printf( stream, "\telementGlobalCount: %d\n", self->elementGlobalCount );
+
+	Journal_Printf( stream, "\townsElementLocalToGlobalMap: %u\n", self->ownsElementLocalToGlobalMap );
+	_Mesh_PrintTable( stream, self->elementL2G, "elementL2G", self->elementLocalCount );
+	Journal_Printf( stream, "\townsElementDomainToGlobalMap: %u\n", self->ownsElementDomainToGlobalMap );
+	_Mesh_PrintTable( stream, self->elementD2G, "elementD2G", self->elementDomainCount );
+	Journal_Printf( stream, "\townsElementGlobalToLocalMap: %u\n", self->ownsElementGlobalToLocalMap );
+	_Mesh_PrintTable( stream, self->elementG2L, "elementG2L", self->elementGlobalCount );
+	Journal_Printf( stream, "\townsElementGlobalToDomainMap: %u\n", self->ownsElementGlobalToDomainMap );
+	_Mesh_PrintTable( stream, self->elementG2D, "elementG2D", self->elementGlobalCount );
+
+	Journal_Printf( stream, "\townsElementNeighbourCountTbl: %u\n", self->ownsElementNeighbourCountTbl );
+	Journal_Printf( stream, "\telementNeighbourCountTbl (ptr): %p\n", self->elementNeighbourCountTbl );
+	Journal_Printf( stream, "\townsElementNeighbourTbl: %u\n", self->ownsElementNeighbourTbl );
+	_Mesh_Print2DTable( stream, self->elementNeighbourTbl, self->elementNeighbourCountTbl, "elementNeighbourTbl",
+			    self->elementDomainCount );
+	Journal_Printf( stream, "\townsElementNodeCountTbl: %u\n", self->ownsElementNodeCountTbl );
+	Journal_Printf( stream, "\telementNodeCountTbl (ptr): %p\n", self->elementNodeCountTbl );
+	Journal_Printf( stream, "\townsElementNodeTbl: %u\n", self->ownsElementNodeTbl );
+	_Mesh_Print2DTable( stream, self->elementNodeTbl, self->elementNodeCountTbl, "elementNodeTbl",
+			    self->elementDomainCount );
+	
+	/* sync info */
+	Journal_Printf( stream, "\tprocNbrCnt: %d\n", self->procNbrInfo->procNbrCnt );
+	Journal_Printf( stream, "\tprocNbrTbl (ptr): %p\n", self->procNbrInfo->procNbrTbl );
+	if( self->procNbrInfo->procNbrTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\tprocNbrTbl[%d]: %d\n", nbr_I, self->procNbrInfo->procNbrTbl[nbr_I] );
+		}
+	}
+	
+	Journal_Printf( stream, "\telementShadowInfo->procShadowedCnt (ptr): %p\n", self->elementShadowInfo->procShadowedCnt );
+	if( self->elementShadowInfo->procShadowedCnt ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\telementShadowInfo->procShadowedCnt[%d]: %d\n", nbr_I, 
+					self->elementShadowInfo->procShadowedCnt[nbr_I] );
+		}
+	}
+	Journal_Printf( stream, "\telementShadowInfo->procShadowedTbl (ptr): %p\n", self->elementShadowInfo->procShadowedTbl );
+	if( self->elementShadowInfo->procShadowedTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\telementShadowInfo->procShadowedTbl[%d] (ptr): %p\n", nbr_I, 
+					self->elementShadowInfo->procShadowedTbl[nbr_I] );
+			if( self->elementShadowInfo->procShadowedTbl[nbr_I] ) {
+				Element_LocalIndex		element_lI;
+				
+				for( element_lI = 0; element_lI < self->elementShadowInfo->procShadowedCnt[nbr_I]; element_lI++ ) {
+					Journal_Printf( stream, "\t\t\telementShadowInfo->procShadowedTbl[%d][%d]: %d\n", nbr_I, element_lI, 
+							self->elementShadowInfo->procShadowedTbl[nbr_I][element_lI] );
+				}
+			}
+		}
+	}
+	
+	Journal_Printf( stream, "\telementShadowInfo->procShadowCnt (ptr): %p\n", self->elementShadowInfo->procShadowCnt );
+	if( self->elementShadowInfo->procShadowCnt ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\telementShadowInfo->procShadowCnt[%d]: %d\n", nbr_I, 
+					self->elementShadowInfo->procShadowCnt[nbr_I] );
+		}
+	}
+	Journal_Printf( stream, "\telementShadowInfo->procShadowTbl (ptr): %p\n", self->elementShadowInfo->procShadowTbl );
+	if( self->elementShadowInfo->procShadowTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\telementShadowInfo->procShadowTbl[%d] (ptr): %p\n", nbr_I, 
+					self->elementShadowInfo->procShadowTbl[nbr_I] );
+			if( self->elementShadowInfo->procShadowTbl[nbr_I] ) {
+				Element_ShadowIndex		element_sI;
+				
+				for( element_sI = 0; element_sI < self->elementShadowInfo->procShadowCnt[nbr_I]; element_sI++ ) {
+					Journal_Printf( stream, "\t\t\telementShadowInfo->procShadowTbl[%d][%d]: %d\n", nbr_I, element_sI, 
+							self->elementShadowInfo->procShadowTbl[nbr_I][element_sI] );
+				}
+			}
+		}
+	}
+	
+	Journal_Printf( stream, "\tnodeShadowInfo->procShadowedCnt (ptr): %p\n", self->nodeShadowInfo->procShadowedCnt );
+	if( self->nodeShadowInfo->procShadowedCnt ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\tnodeShadowInfo->procShadowedCnt[%d]: %d\n", nbr_I, 
+					self->nodeShadowInfo->procShadowedCnt[nbr_I] );
+		}
+	}
+	Journal_Printf( stream, "\tnodeShadowInfo->procShadowedTbl (ptr): %p\n", self->nodeShadowInfo->procShadowedTbl );
+	if( self->nodeShadowInfo->procShadowedTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\tnodeShadowInfo->procShadowedTbl[%d] (ptr): %p\n", nbr_I,
+					self->nodeShadowInfo->procShadowedTbl[nbr_I] );
+			if( self->nodeShadowInfo->procShadowedTbl[nbr_I] ) {
+				Node_LocalIndex		node_lI;
+				
+				for( node_lI = 0; node_lI < self->nodeShadowInfo->procShadowedCnt[nbr_I]; node_lI++ ) {
+					Journal_Printf( stream, "\t\t\tnodeShadowInfo->procShadowedTbl[%d][%d]: %d\n", nbr_I, node_lI, 
+							self->nodeShadowInfo->procShadowedTbl[nbr_I][node_lI] );
+				}
+			}
+		}
+	}
+	
+	Journal_Printf( stream, "\tnodeShadowInfo->procShadowCnt (ptr): %p\n", self->nodeShadowInfo->procShadowCnt );
+	if( self->nodeShadowInfo->procShadowCnt ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\tnodeShadowInfo->procShadowCnt[%d]: %d\n", nbr_I, 
+					self->nodeShadowInfo->procShadowCnt[nbr_I] );
+		}
+	}
+	Journal_Printf( stream, "\tnodeShadowInfo->procShadowTbl (ptr): %p\n", self->nodeShadowInfo->procShadowTbl );
+	if( self->nodeShadowInfo->procShadowTbl ) {
+		NeighbourIndex		nbr_I;
+		
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_Printf( stream, "\t\tnodeShadowInfo->procShadowTbl[%d] (ptr): %p\n", nbr_I,
+					self->nodeShadowInfo->procShadowTbl[nbr_I] );
+			if( self->nodeShadowInfo->procShadowTbl[nbr_I] ) {
+				Node_ShadowIndex		node_sI;
+				
+				for( node_sI = 0; node_sI < self->nodeShadowInfo->procShadowCnt[nbr_I]; node_sI++ ) {
+					Journal_Printf( stream, "\t\t\tnodeShadowInfo->procShadowTbl[%d][%d]: %d\n", nbr_I, node_sI, 
+							self->nodeShadowInfo->procShadowTbl[nbr_I][node_sI] );
+				}
+			}
+		}
+	}
+}
+
+
+void _Mesh_PrintCoords( Mesh* self, Stream* meshStream )
+{
+	Index	itemCount = self->nodeDomainCount;
+	Index	 item_I;
+
+	Journal_Printf( meshStream, "\tnodeCoord (ptr): %p\n", self->nodeCoord );
+	Journal_Printf( meshStream, "\t%s[0-%u]:   ", "nodeCoord", itemCount );
+	if( self->nodeCoord ) {
+		Coord* coordPtr = NULL;
+
+		for( item_I = 0; item_I < itemCount; item_I++ ) {
+			coordPtr = &self->nodeCoord[item_I];
+			Journal_Printf( meshStream, "(%.2f,%.2f,%.2f), ", (*coordPtr)[0], (*coordPtr)[1],
+					(*coordPtr)[2] );
+		}
+		Journal_Printf( meshStream, "\n" );
+	}
+	else {
+		Journal_Printf( meshStream, "(null)\n");
+	}
+}
+
+
+void _Mesh_PrintTable( Stream* meshStream, Index* table, const Name tableName, Index itemCount )
+{
+	Index item_I;
+
+	Journal_Printf( meshStream, "\t%s (ptr): %p\n", tableName, table );
+	Journal_Printf( meshStream, "\t%s[0-%u]:   ", tableName, itemCount );
+	if( table ) {
+		for( item_I = 0; item_I < itemCount; item_I++ ) {
+			Journal_Printf( meshStream, "%.3u ", table[item_I] );
+		}
+		Journal_Printf( meshStream, "\n" );
+	}
+	else {
+		Journal_Printf( meshStream, "(null)\n");
+	}
+}
+
+
+void _Mesh_Print2DTable( Stream* meshStream, Index** table, Index* tableEntryCounts, const Name tableName, Index entryCount )
+{
+	Index entry_I;
+	Index item_I;
+	Index itemCount;
+	
+	Journal_Printf( meshStream, "\t%s (ptr): %p\n", tableName, table );
+	if( table && tableEntryCounts ) {
+		Journal_Printf( meshStream, "\t%s[0-%u]:\n", tableName, entryCount );
+		for( entry_I = 0; entry_I < entryCount; entry_I++ ) {
+			itemCount = tableEntryCounts[entry_I];
+
+			Journal_Printf( meshStream, "\t\t%s[%u][0-%u]: ", tableName, entry_I, itemCount );
+
+			for( item_I = 0; item_I < itemCount; item_I++ ) {
+				Journal_Printf( meshStream, "%.3u ", table[entry_I][item_I] );
+			}
+			Journal_Printf( meshStream, "\n" );
+		}
+	}
+}
+
+
+void* _Mesh_Copy( void* mesh, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Mesh*		self = (Mesh*)mesh;
+	Mesh*		newMesh;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newMesh = (Mesh*)_Stg_Component_Copy( self, destProc_I, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newMesh->nodeIsLocal = self->nodeIsLocal;
+	newMesh->nodeIsShadow = self->nodeIsShadow;
+	newMesh->elementIsLocal = self->elementIsLocal;
+	newMesh->elementIsShadow = self->elementIsShadow;
+	
+	newMesh->dictionary = self->dictionary;
+	newMesh->nodeLocalCount = self->nodeLocalCount;
+	newMesh->nodeDomainCount = self->nodeDomainCount;
+	newMesh->nodeShadowCount = self->nodeShadowCount;
+	newMesh->nodeGlobalCount = self->nodeGlobalCount;
+	newMesh->buildNodeLocalToGlobalMap = self->buildNodeLocalToGlobalMap;
+	newMesh->buildNodeDomainToGlobalMap = self->buildNodeDomainToGlobalMap;
+	newMesh->buildNodeGlobalToLocalMap = self->buildNodeGlobalToLocalMap;
+	newMesh->buildNodeGlobalToDomainMap = self->buildNodeGlobalToDomainMap;
+	newMesh->ownsNodeLocalToGlobalMap = self->ownsNodeLocalToGlobalMap;
+	newMesh->ownsNodeDomainToGlobalMap = self->ownsNodeDomainToGlobalMap;
+	newMesh->ownsNodeGlobalToLocalMap = self->ownsNodeGlobalToLocalMap;
+	newMesh->ownsNodeGlobalToDomainMap = self->ownsNodeGlobalToDomainMap;
+	newMesh->buildNodeNeighbourTbl = self->buildNodeNeighbourTbl;
+	newMesh->buildNodeElementTbl = self->buildNodeElementTbl;
+	newMesh->ownsNodeNeighbourTbl = self->ownsNodeNeighbourTbl;
+	newMesh->ownsNodeNeighbourCountTbl = self->ownsNodeNeighbourCountTbl;
+	newMesh->ownsNodeElementTbl = self->ownsNodeElementTbl;
+	newMesh->ownsNodeElementCountTbl = self->ownsNodeElementCountTbl;
+	newMesh->elementLocalCount = self->elementLocalCount;
+	newMesh->elementDomainCount = self->elementDomainCount;
+	newMesh->elementShadowCount = self->elementShadowCount;
+	newMesh->elementGlobalCount = self->elementGlobalCount;
+	newMesh->buildElementLocalToGlobalMap = self->buildElementLocalToGlobalMap;
+	newMesh->buildElementDomainToGlobalMap = self->buildElementDomainToGlobalMap;
+	newMesh->buildElementGlobalToLocalMap = self->buildElementGlobalToLocalMap;
+	newMesh->buildElementGlobalToDomainMap = self->buildElementGlobalToDomainMap;
+	newMesh->ownsElementLocalToGlobalMap = self->ownsElementLocalToGlobalMap;
+	newMesh->ownsElementDomainToGlobalMap = self->ownsElementDomainToGlobalMap;
+	newMesh->ownsElementGlobalToLocalMap = self->ownsElementGlobalToLocalMap;
+	newMesh->ownsElementGlobalToDomainMap = self->ownsElementGlobalToDomainMap;
+	newMesh->buildElementNeighbourTbl = self->buildElementNeighbourTbl;
+	newMesh->buildElementNodeTbl = self->buildElementNodeTbl;
+	newMesh->ownsElementNeighbourTbl = self->ownsElementNeighbourTbl;
+	newMesh->ownsElementNeighbourCountTbl = self->ownsElementNeighbourCountTbl;
+	newMesh->ownsElementNodeTbl = self->ownsElementNodeTbl;
+	newMesh->ownsElementNodeCountTbl = self->ownsElementNodeCountTbl;
+	newMesh->buildTemporaryGlobalTables = self->buildTemporaryGlobalTables;
+	
+	if( deep ) {
+		newMesh->layout = (MeshLayout*)Stg_Class_Copy( self->layout, NULL, deep, nameExt, map );
+		newMesh->nodeExtensionMgr = (ExtensionManager*)Stg_Class_Copy( self->nodeExtensionMgr, NULL, deep, nameExt, map );
+		newMesh->elementExtensionMgr = (ExtensionManager*)Stg_Class_Copy( self->elementExtensionMgr, NULL, deep, nameExt, map );
+		
+		/* TODO: Temporary */
+		newMesh->node = NULL;
+		newMesh->nodeCoord = NULL;
+		newMesh->nodeL2G = NULL;
+		newMesh->nodeD2G = NULL;
+		newMesh->nodeG2L = NULL;
+		newMesh->nodeG2D = NULL;
+		newMesh->nodeNeighbourTbl = NULL;
+		newMesh->nodeNeighbourCountTbl = NULL;
+		newMesh->nodeElementTbl = NULL;
+		newMesh->nodeElementCountTbl = NULL;
+		newMesh->element = NULL;
+		newMesh->elementL2G = NULL;
+		newMesh->elementD2G = NULL;
+		newMesh->elementG2L = NULL;
+		newMesh->elementG2D = NULL;
+		newMesh->elementNeighbourTbl = NULL;
+		newMesh->elementNeighbourCountTbl = NULL;
+		newMesh->elementNodeTbl = NULL;
+		newMesh->elementNodeCountTbl = NULL;
+		newMesh->syncRequestTbl = NULL;
+		newMesh->syncElementTbl = NULL;
+		newMesh->syncNodeCoordTbl = NULL;
+		newMesh->syncNodeTbl = NULL;
+		newMesh->syncElementSendTbl = NULL;
+		newMesh->syncNodeCoordSendTbl = NULL;
+		newMesh->syncNodeSendTbl = NULL;
+		
+		if( (newMesh->procNbrInfo = PtrMap_Find( map, self->procNbrInfo )) == NULL && self->procNbrInfo ) {
+			newMesh->procNbrInfo = Memory_Alloc( ProcNbrInfo, "Mesh->procNbrInfo" );
+			memcpy( newMesh->procNbrInfo, self->procNbrInfo, sizeof(ProcNbrInfo) );
+		}
+		
+		if( (newMesh->nodeShadowInfo = PtrMap_Find( map, self->nodeShadowInfo )) == NULL && self->nodeShadowInfo ) {
+			newMesh->nodeShadowInfo = Memory_Alloc( ShadowInfo, "Mesh->nodeShadowInfo" );
+			memcpy( newMesh->nodeShadowInfo, self->nodeShadowInfo, sizeof(ShadowInfo) );
+		}
+		
+		if( (newMesh->elementShadowInfo = PtrMap_Find( map, self->elementShadowInfo )) == NULL && self->elementShadowInfo ) {
+			newMesh->elementShadowInfo = Memory_Alloc( ShadowInfo, "Mesh->elementShadowInfo" );
+			memcpy( newMesh->elementShadowInfo, self->elementShadowInfo, sizeof(ShadowInfo) );
+		}
+		
+		/*
+		** TODO: copy everything else.  We can leave it off now though, as we know it won't be used
+		**	 until copying after the build phase.
+		*/
+	}
+	else {
+		newMesh->layout = self->layout;
+		newMesh->nodeExtensionMgr = self->nodeExtensionMgr;
+		newMesh->elementExtensionMgr = self->elementExtensionMgr;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newMesh;
+}
+
+
+void _Mesh_Build( void* mesh, void* data ) {
+	Mesh* self = (Mesh*) mesh;
+
+	/* Run the generator if we have one. */
+	if( self->generator )
+		Build( self->generator, data, False );
+
+	/* Build Layout */
+	Build( self->layout, data, False );
+
+	/* KIND OF HACK: Add the topology to the element layout. */
+	self->layout->elementLayout->topo = self->topo;
+	
+	if ( self->layout->decomp->rank >= self->layout->decomp->procsInUse ) return;
+
+	/* Node counts */
+	self->nodeLocalCount = self->layout->decomp->nodeLocalCount;
+	self->nodeDomainCount = self->layout->decomp->nodeDomainCount;
+	self->nodeShadowCount = self->layout->decomp->nodeShadowCount;
+	self->nodeGlobalCount = self->layout->decomp->nodeGlobalCount;
+
+	/* Element counts */
+	self->elementDomainCount = self->layout->decomp->elementDomainCount;
+	self->elementLocalCount = self->layout->decomp->elementLocalCount;
+	self->elementShadowCount = self->layout->decomp->elementShadowCount;
+	self->elementGlobalCount = self->layout->decomp->elementGlobalCount;
+	
+	_Mesh_BuildNodes( self );
+
+	/* this func checks the individual if statements inside it. */
+	_Mesh_BuildNodeMaps( self );
+
+	if ( self->buildNodeNeighbourTbl )
+		_Mesh_BuildNodeNeighbours( self );
+	if ( self->buildNodeElementTbl ) 
+		_Mesh_BuildNodeElements( self );
+	
+	
+	/* TODO: should we add the option to not build elements for FD 
+	   schemes? will have to think about repercussions */
+
+	_Mesh_BuildElements( self );
+	/* Build element tables */
+	/* this func checks the individual if statements inside it. */
+	_Mesh_BuildElementMaps( self );
+	
+	if ( self->buildElementNeighbourTbl )
+		_Mesh_BuildElementNeighbours( self );
+	if ( self->buildElementNodeTbl ) 
+		_Mesh_BuildElementNodes( self );
+	
+	/* build sync tables (note that they will only build if there is shadowDepth > 0 and
+	   procsInUse > 1) */
+	_Mesh_BuildSyncTables( self );
+
+	ElementLayout_Build( self->layout->elementLayout, self->layout->decomp );
+
+	_Mesh_InitialNodeGeometries( self );
+}
+
+
+void _Mesh_BuildNodes( void* mesh ) {
+	Mesh*		self = (Mesh*) mesh;
+	
+	/* Allocate node array (local node array appended by shadow node arrays) */
+	self->node = (Node_List)ExtensionManager_Malloc( self->nodeExtensionMgr, self->nodeDomainCount );
+}
+
+
+void _Mesh_BuildElements( void* mesh ) {
+ 	Mesh*		self = (Mesh*)mesh;
+	
+	/* Allocate node array (local node array appended by shadow node arrays) */
+	self->element = (Element_List)ExtensionManager_Malloc( self->elementExtensionMgr, self->elementDomainCount );
+}
+
+
+void _Mesh_BuildNodeMaps( void* mesh ) {
+	Mesh*		self = (Mesh*) mesh;
+	MeshDecomp*     decomp = self->layout->decomp;
+
+	if( self->buildNodeDomainToGlobalMap ) {
+		self->nodeD2G = MeshDecomp_BuildNodeDomainToGlobalMap( decomp );
+	}
+	if( self->buildNodeLocalToGlobalMap ) {
+		/* if domain to global built, share pointer */
+		if ( self->nodeD2G ) {
+			self->nodeL2G = self->nodeD2G;
+		}
+		else {
+			self->nodeL2G = MeshDecomp_BuildNodeLocalToGlobalMap( decomp );
+		}	
+	}
+	if( self->buildNodeGlobalToDomainMap ) {
+		self->nodeG2D = MeshDecomp_BuildNodeGlobalToDomainMap( decomp );
+	}
+	if( self->buildNodeGlobalToLocalMap ) {
+		/* if we have build nodeG2D, and no shadowing is active, then
+		   nodeG2L will be exactly the same as it - just share the 
+		   pointer */
+		if ( self->nodeG2D && (0 == self->nodeShadowCount) ) {
+			self->nodeG2L = self->nodeG2D;
+		}
+		else {	
+			self->nodeG2L = MeshDecomp_BuildNodeGlobalToLocalMap( decomp );
+		}	
+	}
+}
+
+
+void _Mesh_BuildNodeNeighbours( void* mesh ) {
+	Mesh*		self = (Mesh*)mesh;
+	MeshDecomp*     decomp = self->layout->decomp;
+	Topology*       topology = self->layout->nodeLayout->topology;
+	Node_Index      dNode_I;
+	Node_NeighbourIndex neighbourIndex;
+	Node_GlobalIndex* nodeD2G = self->nodeD2G;
+	Bool nodeD2GBuiltTemporarily = False;
+	Bool nodeG2DBuiltTemporarily = False;
+
+	if ( !nodeD2G ) {
+		nodeD2G = MeshDecomp_BuildNodeDomainToGlobalMap( decomp );
+		nodeD2GBuiltTemporarily = True;
+	}
+
+	if ( (self->buildTemporaryGlobalTables == True) && (self->nodeG2D == 0) ) {
+		self->nodeG2D = MeshDecomp_BuildNodeGlobalToDomainMap( self->layout->decomp );
+		nodeG2DBuiltTemporarily = True;
+	}
+
+	self->nodeNeighbourCountTbl = Memory_Alloc_Array( Node_NeighbourIndex, self->nodeDomainCount,
+							  "Mesh->nodeNeighbourCountTbl" );
+	
+	/* Build complex 2D array indices */
+	for( dNode_I = 0; dNode_I < self->nodeDomainCount; dNode_I++ ) {
+
+		self->nodeNeighbourCountTbl[dNode_I] = topology->neighbourCount( topology, nodeD2G[dNode_I] );	
+	}
+	
+	self->nodeNeighbourTbl = Memory_Alloc_2DComplex( Node_DomainIndex, self->nodeDomainCount, self->nodeNeighbourCountTbl,
+							 "Mesh->nodeNeighbourTbl" );
+	
+	/* Build neighbour list */
+	for( dNode_I = 0; dNode_I < self->nodeDomainCount; dNode_I++ ) {
+		
+		/* Build neighbour info for global index */
+		topology->buildNeighbours( topology, nodeD2G[dNode_I], self->nodeNeighbourTbl[dNode_I] );
+		
+		/* self->nodeNeighbourTbl currently stores global indices... map to node array indices */
+		/* TODO: should change nLayout to store in local indices */
+		for( neighbourIndex = 0; neighbourIndex < self->nodeNeighbourCountTbl[dNode_I]; neighbourIndex++ ) {
+			self->nodeNeighbourTbl[dNode_I][neighbourIndex] = Mesh_NodeMapGlobalToDomain( self, 
+												      self->nodeNeighbourTbl[dNode_I][neighbourIndex] );
+		}
+	}
+	
+	if ( nodeD2GBuiltTemporarily == True) {
+		Memory_Free( nodeD2G );
+		self->nodeD2G = NULL;
+	}	
+	if ( nodeG2DBuiltTemporarily ) {
+		Memory_Free( self->nodeG2D );
+		self->nodeG2D = NULL;
+	}
+}
+
+
+void _Mesh_BuildNodeElements( void* mesh ) {
+	Mesh*		self = (Mesh*)mesh;
+	MeshDecomp*     decomp = self->layout->decomp;
+	NodeLayout*     nLayout = self->layout->nodeLayout;
+	Node_DomainIndex	dNode_I;
+	Node_GlobalIndex*	nodeD2G = self->nodeD2G;
+	Bool				nodeD2GBuiltTemporarily = False;
+	Bool				elementG2DBuiltTemporarily = False;
+
+	Node_ElementIndex elementIndex;
+
+	if ( !nodeD2G ) {
+		nodeD2G = MeshDecomp_BuildNodeDomainToGlobalMap( decomp );
+		nodeD2GBuiltTemporarily = True;
+	}
+
+	if	( (self->buildTemporaryGlobalTables == True) && (self->elementG2D == 0) ) 
+	{
+		self->elementG2D = MeshDecomp_BuildElementGlobalToDomainMap( self->layout->decomp );
+		elementG2DBuiltTemporarily = True;
+	}
+	
+	self->nodeElementCountTbl = Memory_Alloc_Array( Node_ElementIndex, self->nodeDomainCount, "Mesh->nodeElementCountTbl" );
+
+	/* Build counts of nodes per element */
+	for( dNode_I = 0; dNode_I < self->nodeDomainCount; dNode_I++ ) {
+		self->nodeElementCountTbl[dNode_I] = nLayout->nodeElementCount( nLayout, nodeD2G[dNode_I] );
+	}
+
+	self->nodeElementTbl = (Node_ElementsList)Memory_Alloc_2DComplex( Element_DomainIndex,
+									  self->nodeDomainCount, self->nodeElementCountTbl, "Mesh->nodeElementTbl" );
+	
+	/* Build element list */
+	for( dNode_I = 0; dNode_I < self->nodeDomainCount; dNode_I++ ) {
+		/* Build element info for global index */
+
+		nLayout->buildNodeElements( nLayout, nodeD2G[dNode_I], self->nodeElementTbl[dNode_I] );
+		
+		/* self->nodeElementTbl currently stores global indices... map to node array indices */
+		for( elementIndex = 0; elementIndex < self->nodeElementCountTbl[dNode_I]; elementIndex++ ) {
+			self->nodeElementTbl[dNode_I][elementIndex] = Mesh_ElementMapGlobalToDomain( self, 
+												     self->nodeElementTbl[dNode_I][elementIndex] );
+		}
+	}
+	
+	if ( nodeD2GBuiltTemporarily ) {
+		Memory_Free( nodeD2G );
+		self->nodeD2G = NULL;
+	}
+	
+	if ( elementG2DBuiltTemporarily == True ) {
+		Memory_Free( self->elementG2D );
+		self->elementG2D = NULL;
+	}
+}
+
+
+void _Mesh_BuildElementMaps( void* mesh ) {
+	Mesh*		self = (Mesh*) mesh;
+	MeshDecomp*  decomp = self->layout->decomp;
+
+	if( self->buildElementDomainToGlobalMap ) {
+		self->elementD2G = MeshDecomp_BuildElementDomainToGlobalMap( decomp );
+	}
+	if( self->buildElementLocalToGlobalMap ) {
+		/* if domain to global built, share pointer */
+		if ( self->elementD2G ) {
+			self->elementL2G = self->elementD2G;
+		}
+		else {
+			self->elementL2G = MeshDecomp_BuildElementLocalToGlobalMap( decomp );
+		}	
+	}
+	if( self->buildElementGlobalToDomainMap ) {
+		self->elementG2D = MeshDecomp_BuildElementGlobalToDomainMap( decomp );
+	}
+	if( self->buildElementGlobalToLocalMap ) {
+		/* if we have build elementG2D, and no shadowing is active, then
+		   elementG2L will be exactly the same as it - just share the 
+		   pointer */
+		if ( self->elementG2D && (0 == self->elementShadowCount) ) {
+			self->elementG2L = self->elementG2D;
+		}
+		else {	
+			self->elementG2L = MeshDecomp_BuildElementGlobalToLocalMap( decomp );
+		}	
+	}
+}
+
+
+void _Mesh_BuildElementNeighbours( void* mesh ) {
+	Mesh*		self = (Mesh*)mesh;
+	MeshDecomp*     decomp = self->layout->decomp;
+	Topology*       topology = self->layout->elementLayout->topology;
+	Element_Index      dElement_I;
+	Element_NeighbourIndex neighbourIndex;
+	Element_GlobalIndex* elementD2G = self->elementD2G;
+	Bool elementD2GBuiltTemporarily = False;
+	Bool elementG2DBuiltTemporarily = False;
+
+	if ( !elementD2G ) {
+		elementD2G = MeshDecomp_BuildElementDomainToGlobalMap( decomp );
+		elementD2GBuiltTemporarily = True;
+	}
+
+	if	( (self->buildTemporaryGlobalTables == True) && (self->elementG2D == 0) ) 
+	{
+		self->elementG2D = MeshDecomp_BuildElementGlobalToDomainMap( self->layout->decomp );
+		elementG2DBuiltTemporarily = True;
+	}
+	self->elementNeighbourCountTbl = Memory_Alloc_Array( Element_NeighbourIndex, self->elementDomainCount,
+							     "Mesh->elementNeighbourCountTbl" );
+	/* Build complex 2D array indices */
+	for( dElement_I = 0; dElement_I < self->elementDomainCount; dElement_I++ ) {
+		self->elementNeighbourCountTbl[dElement_I] = topology->neighbourCount( topology, elementD2G[dElement_I] );	
+	}
+	
+	self->elementNeighbourTbl = Memory_Alloc_2DComplex( Element_DomainIndex, self->elementDomainCount,
+							    self->elementNeighbourCountTbl, "Mesh->elementNeighbourTbl" );
+	
+	/* Build neighbour list */
+	for( dElement_I = 0; dElement_I < self->elementDomainCount; dElement_I++ ) {
+		
+		/* Build neighbour info for global index */
+		topology->buildNeighbours( topology, elementD2G[dElement_I], self->elementNeighbourTbl[dElement_I] );
+		
+		/* self->elementNeighbourTbl currently stores global indices... map to domain array indices */
+		/* TODO: should change eLayout to store in local indices */
+		for( neighbourIndex = 0; neighbourIndex < self->elementNeighbourCountTbl[dElement_I]; neighbourIndex++ ) {
+			self->elementNeighbourTbl[dElement_I][neighbourIndex] = Mesh_ElementMapGlobalToDomain( self, 
+													       self->elementNeighbourTbl[dElement_I][neighbourIndex] );
+		}
+	}
+	
+	if ( elementD2GBuiltTemporarily == True) {
+		Memory_Free( elementD2G );
+		self->elementD2G = NULL;
+	}	
+
+	if ( elementG2DBuiltTemporarily == True ) {
+		Memory_Free( self->elementG2D );
+		self->elementG2D = NULL;
+	}
+}
+
+
+void _Mesh_BuildElementNodes( void* mesh ) {
+	Mesh*			self = (Mesh*)mesh;
+	MeshDecomp*		decomp = self->layout->decomp;
+	NodeLayout*		nLayout = self->layout->nodeLayout;
+	Element_DomainIndex	dElement_I;
+	Element_GlobalIndex*	elementD2G = self->elementD2G;
+	Bool			elementD2GBuiltTemporarily = False;
+	Bool			nodeG2DBuiltTemporarily = False;
+
+	Element_NodeIndex nodeIndex;
+
+	if ( !elementD2G ) {
+		elementD2G = MeshDecomp_BuildElementDomainToGlobalMap( decomp );
+		elementD2GBuiltTemporarily = True;
+	}
+	
+	if ( (self->buildTemporaryGlobalTables == True) && (self->nodeG2D == 0) ) {
+		self->nodeG2D = MeshDecomp_BuildNodeGlobalToDomainMap( self->layout->decomp );
+		nodeG2DBuiltTemporarily = True;
+	}
+
+	self->elementNodeCountTbl = Memory_Alloc_Array( Element_NodeIndex, self->elementDomainCount, "Mesh->elementNodeCountTbl" );
+
+	/* Build counts of nodes per element */
+	for( dElement_I = 0; dElement_I < self->elementDomainCount; dElement_I++ ) {
+		self->elementNodeCountTbl[dElement_I] = nLayout->elementNodeCount( nLayout, elementD2G[dElement_I] );
+	}
+
+	self->elementNodeTbl = Memory_Alloc_2DComplex( Node_DomainIndex,
+						       self->elementDomainCount, self->elementNodeCountTbl, "Mesh->elementNodeTbl" );
+	
+	/* Build element list */
+	for( dElement_I = 0; dElement_I < self->elementDomainCount; dElement_I++ ) {
+		/* Build element info for global index */
+
+		nLayout->buildElementNodes( nLayout, elementD2G[dElement_I], self->elementNodeTbl[dElement_I] );
+		
+		/* self->elementNodesTbl currently stores global indices... map to element array indices */
+		for( nodeIndex = 0; nodeIndex < self->elementNodeCountTbl[dElement_I]; nodeIndex++ ) {
+			self->elementNodeTbl[dElement_I][nodeIndex] = Mesh_NodeMapGlobalToDomain( self, 
+												  self->elementNodeTbl[dElement_I][nodeIndex] );
+		}
+	}
+	
+	if ( elementD2GBuiltTemporarily ) {
+		Memory_Free( elementD2G );
+		self->elementD2G = NULL;
+	}
+
+	if ( nodeG2DBuiltTemporarily ) {
+		Memory_Free( self->nodeG2D );
+		self->nodeG2D = NULL;
+	}
+}
+
+
+void _Mesh_Initialise( void* mesh, void* data ) {
+	
+}
+
+
+void _Mesh_Execute( void* mesh, void* data ) {
+	/* Do nothing */
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+Node_GlobalIndex Mesh_NodeMapLocalToGlobal( void* mesh, Node_LocalIndex localIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( localIndex >= self->nodeLocalCount )
+		return Mesh_Node_Invalid( self );
+
+	if( self->nodeL2G ) {
+		return self->nodeL2G[localIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->nodeMapLocalToGlobal( decomp, localIndex );
+	}
+}
+
+
+Node_GlobalIndex Mesh_NodeMapShadowToGlobal( void* mesh, Node_ShadowIndex shadowIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( shadowIndex >= self->nodeShadowCount ) {
+		return Mesh_Node_Invalid( self );
+	}	
+	else if (self->nodeD2G ) {
+		return self->nodeD2G[self->nodeLocalCount+shadowIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->nodeMapShadowToGlobal( self, shadowIndex );
+	}
+}
+
+
+Node_GlobalIndex Mesh_NodeMapDomainToGlobal( void* mesh, Node_DomainIndex domainIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( domainIndex >= self->nodeDomainCount ) {
+		return Mesh_Element_Invalid( self );
+	}	
+	else if (self->nodeD2G ) {
+		return self->nodeD2G[domainIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->nodeMapDomainToGlobal( decomp, domainIndex );
+	}
+}
+
+
+Node_LocalIndex Mesh_NodeMapGlobalToLocal( void* mesh, Node_GlobalIndex globalIndex ) {
+	Mesh*		self = (Mesh*)mesh;
+	
+	if ( globalIndex >= self->nodeGlobalCount ) 
+	{	
+		return Mesh_Node_Invalid( self );
+	}	
+	else if( self->nodeG2L ) {
+		return self->nodeG2L[globalIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->nodeMapGlobalToLocal( decomp, globalIndex);
+	}
+}
+
+
+Node_DomainIndex Mesh_NodeMapGlobalToDomain( void* mesh, Node_GlobalIndex globalIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if( globalIndex >= self->nodeGlobalCount ) {
+		return Mesh_Node_Invalid( self );
+	}	
+	else if ( self->nodeG2D ) {
+		return self->nodeG2D[globalIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->nodeMapGlobalToDomain( decomp, globalIndex);
+	}
+}
+
+
+Node_ShadowIndex Mesh_NodeMapGlobalToShadow( void* mesh, Node_GlobalIndex globalIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( ( globalIndex >= self->nodeGlobalCount ) || 
+	     (0 == self->nodeShadowCount ) ) 
+	{	
+		return Mesh_Node_Invalid( self );
+	}	
+	else if ( self->nodeG2D ) {
+		Node_DomainIndex dNode_I;
+		dNode_I = self->nodeG2D[globalIndex];
+		if ( (dNode_I != MD_N_Invalid( self )) && (dNode_I >= self->nodeLocalCount ) ) {
+			return dNode_I - self->nodeLocalCount;
+		}
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->nodeMapGlobalToShadow( decomp, globalIndex );
+	}
+	
+	return Mesh_Node_Invalid( self );
+}
+
+
+#define M_N_IsL1D( self, localIndex )				\
+	((localIndex) < (self)->nodeLocalCount ? True : False)
+
+Bool _Mesh_Node_IsLocal1D( void* mesh, Node_LocalIndex localIndex ) {
+	return M_N_IsL1D( (Mesh*)mesh, localIndex );
+}
+
+
+#define M_N_IsS1D( self, shadowIndex )					\
+	((shadowIndex) < (self)->nodeShadowCount ? True : False)
+
+Bool _Mesh_Node_IsShadow1D( void* mesh, Node_ShadowIndex shadowIndex ) {
+	return M_N_IsS1D( (Mesh*)mesh, shadowIndex );
+}
+
+
+/* Element virtual functions */
+
+Element_GlobalIndex Mesh_ElementMapLocalToGlobal( void* mesh, Element_LocalIndex localIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( localIndex >= self->elementLocalCount )
+		return Mesh_Element_Invalid( self );
+
+	if( self->elementL2G ) {
+		return self->elementL2G[localIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->elementMapLocalToGlobal( decomp, localIndex );
+	}
+}
+
+
+Element_GlobalIndex Mesh_ElementMapShadowToGlobal( void* mesh, Element_ShadowIndex shadowIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( shadowIndex >= self->elementShadowCount ) {
+		return Mesh_Element_Invalid( self );
+	}	
+	else if (self->elementD2G ) {
+		return self->elementD2G[self->elementLocalCount+shadowIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->elementMapShadowToGlobal( self, shadowIndex );
+	}
+}
+
+
+Element_GlobalIndex Mesh_ElementMapDomainToGlobal( void* mesh, Element_DomainIndex domainIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( domainIndex >= self->elementDomainCount ) {
+		return Mesh_Element_Invalid( self );
+	}	
+	else if (self->elementD2G ) {
+		return self->elementD2G[domainIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->elementMapDomainToGlobal( decomp, domainIndex );
+	}
+}
+
+
+Element_LocalIndex Mesh_ElementMapGlobalToLocal( void* mesh, Element_GlobalIndex globalIndex ) {
+	Mesh*		self = (Mesh*)mesh;
+	
+	if ( globalIndex >= self->elementGlobalCount ) 
+	{	
+		return Mesh_Element_Invalid( self );
+	}	
+	else if( self->elementG2L ) {
+		return self->elementG2L[globalIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->elementMapGlobalToLocal( decomp, globalIndex);
+	}
+}
+
+
+Element_DomainIndex Mesh_ElementMapGlobalToDomain( void* mesh, Element_GlobalIndex globalIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if( globalIndex >= self->elementGlobalCount ) {
+		return Mesh_Element_Invalid( self );
+	}	
+	else if ( self->elementG2D ) {
+		return self->elementG2D[globalIndex];
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->elementMapGlobalToDomain( decomp, globalIndex);
+	}
+}
+
+
+Element_ShadowIndex Mesh_ElementMapGlobalToShadow( void* mesh, Element_GlobalIndex globalIndex ) {
+	Mesh* self = (Mesh*)mesh;
+	
+	if ( ( globalIndex >= self->elementGlobalCount ) || 
+	     (0 == self->elementShadowCount ) ) 
+	{	
+		return Mesh_Element_Invalid( self );
+	}	
+	else if ( self->elementG2D ) {
+		Element_DomainIndex dElement_I;
+		dElement_I = self->elementG2D[globalIndex];
+		if ( (dElement_I != MD_E_Invalid( self )) && (dElement_I >= self->elementLocalCount ) ) {
+			return dElement_I - self->elementLocalCount;
+		}
+	}
+	else {
+		MeshDecomp*     decomp = self->layout->decomp;
+		return decomp->elementMapGlobalToShadow( decomp, globalIndex );
+	}
+	
+	return Mesh_Element_Invalid( self );
+}
+
+
+#define M_E_IsL1D( self, localIndex )					\
+	(((localIndex) < (self)->nodeLocalCount) ? True : False)
+
+Bool _Mesh_Element_IsLocal1D( void* mesh, Element_LocalIndex localIndex ) {
+	return M_E_IsL1D( (Mesh*)mesh, localIndex );
+}
+
+
+#define M_E_IsS1D( self, shadowIndex )					\
+	(((shadowIndex) < (self)->nodeShadowCount) ? True : False)
+
+Bool _Mesh_Element_IsShadow1D( void* mesh, Element_ShadowIndex shadowIndex ) {
+	return M_E_IsS1D( (Mesh*)mesh, shadowIndex );
+}
+
+
+
+
+double* Mesh_CoordAtFunc( Mesh* self, Node_DomainIndex node_dI ) {
+	return Mesh_CoordAtMacro( self, node_dI );
+}
+
+Node* Mesh_NodeAtFunc( Mesh* self, Node_DomainIndex node_dI ) {
+	return Mesh_NodeAtMacro( self, node_dI );
+}
+
+Element* Mesh_ElementAtFunc( Mesh* self, Element_DomainIndex element_dI ) {
+	return Mesh_ElementAtMacro( self, element_dI );
+}
+
+
+void Mesh_GetNodeCoordPtrsOfElement( void* mesh, Element_DomainIndex element_dI, Coord** nodeCoordPtrs ) {
+	Mesh*			self = (Mesh*)mesh;
+	Node_ElementLocalIndex	node_elLocalI = 0;
+	Node_ElementLocalIndex	currElNodeCount = 0;
+
+	currElNodeCount = self->elementNodeCountTbl[element_dI];
+	
+	for ( node_elLocalI=0; node_elLocalI < currElNodeCount; node_elLocalI++ ) {
+		nodeCoordPtrs[node_elLocalI] = &( Mesh_CoordAt( self, self->elementNodeTbl[element_dI][node_elLocalI] ));
+	}
+}
+
+
+void Mesh_PrintNodeCoordsOfElement( void* mesh, Element_DomainIndex element_dI, Stream* stream ) {
+	Mesh*			self = (Mesh*)mesh;
+	Node_ElementLocalIndex	node_elLocalI = 0;
+	Node_ElementLocalIndex	currElementNodeCount = 0;
+	Coord**			coordPtrs = Memory_Alloc_Array_Unnamed( Coord*, self->elementNodeCountTbl[element_dI] );
+	Coord*			coordPtr = NULL;
+
+	currElementNodeCount = self->elementNodeCountTbl[element_dI];
+	Mesh_GetNodeCoordPtrsOfElement( self, element_dI, coordPtrs );
+
+	for ( node_elLocalI = 0; node_elLocalI < currElementNodeCount; node_elLocalI++ ) {
+		coordPtr = coordPtrs[node_elLocalI];
+		Journal_Printf( stream, "(%.2f,%.2f,%.2f), ", (*coordPtr)[0], (*coordPtr)[1],
+				(*coordPtr)[2] );
+	}
+	Journal_Printf( stream, "\n" );
+	Memory_Free( coordPtrs );
+}
+
+
+unsigned Mesh_ClosestNode( void* _self, Coord crd ) {
+	Mesh*		self = (Mesh*)_self;
+	Bool		done;
+	Coord*		nodeCrds = self->nodeCoord;
+	unsigned	curNode;
+	unsigned	nDims = self->nSpaceDims;
+	double		dist, tmp;
+	unsigned	d_i;
+
+	/* Must have neighbours enabled. */
+	assert( self->buildNodeNeighbourTbl && self->nodeNeighbourTbl );
+
+	/* Begin somewhere in the middle. */
+	curNode = self->nodeDomainCount / 2;
+
+	/* Calc distance squared to current node. */
+	tmp = nodeCrds[curNode][0] - crd[0];
+	dist = tmp * tmp;
+	for( d_i = 1; d_i < nDims; d_i++ ) {
+		tmp = nodeCrds[curNode][d_i] - crd[d_i];
+		dist += tmp * tmp;
+	}
+
+	/* Loop until we've found closest local node. */
+	do {
+		unsigned	nNbrs = self->nodeNeighbourCountTbl[curNode];
+		unsigned*	nbrs = self->nodeNeighbourTbl[curNode];
+		unsigned	nbr_i;
+
+		/* Assume we'll be done after this loop. */
+		done = True;
+
+		/* Compare to neighbours. */
+		for( nbr_i = 0; nbr_i < nNbrs; nbr_i++ ) {
+			double	nbrDist;
+
+			/* Skip invalid neighbours. */
+			if( nbrs[nbr_i] >= self->nodeDomainCount )
+				continue;
+
+			tmp = nodeCrds[nbrs[nbr_i]][0] - crd[0];
+			nbrDist = tmp * tmp;
+			for( d_i = 1; d_i < nDims; d_i++ ) {
+				tmp = nodeCrds[nbrs[nbr_i]][d_i] - crd[d_i];
+				nbrDist += tmp * tmp;
+			}
+
+			if( nbrDist < dist ) {
+				curNode = nbrs[nbr_i];
+				dist = nbrDist;
+				done = False;
+			}
+		}
+	}
+	while( !done );
+
+	return curNode;
+}
+
+
+double Mesh_NodeSeparation( Mesh* self ) {
+	double		sep = HUGE_VAL;
+	unsigned	e_i;
+
+	assert( self );
+
+	for( e_i = 0; e_i < self->elementDomainCount; e_i++ ) {
+		unsigned	en_i;
+
+		for( en_i = 0; en_i < self->elementNodeCountTbl[e_i]; en_i++ ) {
+			unsigned	nIndI = self->elementNodeTbl[e_i][en_i];
+			unsigned	en_j;
+
+			for( en_j = en_i + 1; en_j < self->elementNodeCountTbl[e_i]; en_j++ ) {
+				unsigned	nIndJ = self->elementNodeTbl[e_i][en_j];
+				Coord		tmp;
+				double		curSep;
+
+				Vector_Sub( tmp, self->nodeCoord[nIndI], self->nodeCoord[nIndJ] );
+				curSep = Vector_Mag( tmp );
+				if( curSep < sep ) sep = curSep;
+			}
+		}
+	}
+
+	return sep;
+}
+
+
+unsigned Mesh_ElementWithPoint( void* mesh, Coord pnt, PartitionBoundaryStatus bndStat ) {
+	Mesh*		self = (Mesh*)mesh;
+	ElementLayout*	eLyt = self->layout->elementLayout;
+
+	/* If using ParallelPipedHexaEL, just run it as it's bloody quick. */
+	if( eLyt->type == ParallelPipedHexaEL_Type )
+		return eLyt->elementWithPoint( eLyt, self->layout->decomp, pnt, self, bndStat, 0, NULL );
+	else if( self->nodeNeighbourTbl ) {
+		unsigned	closeNode;
+		unsigned	elInd;
+
+		/* If node neighbour table is built, use it to speed things up. */
+		closeNode = Mesh_ClosestNode( self, pnt );
+		elInd = eLyt->elementWithPoint( eLyt, self->layout->decomp, pnt, self, bndStat, 
+						self->nodeElementCountTbl[closeNode], self->nodeElementTbl[closeNode] );
+		if( elInd >= self->elementDomainCount )
+			elInd = eLyt->elementWithPoint( eLyt, self->layout->decomp, pnt, self, bndStat, 0, NULL );
+
+		return elInd;
+	}
+	else
+		return eLyt->elementWithPoint( eLyt, self->layout->decomp, pnt, self, bndStat, 0, NULL );
+}
+
+
+#define tagElementExt	300
+#define tagNodeCoord	301
+#define tagNodeExt	302
+
+void Mesh_Sync( void* mesh ) {
+	Mesh*			self = (Mesh*)mesh;
+	Neighbour_Index		nbr_I;
+	
+	assert( self );
+
+#if 0
+	if( self->layout->decomp->shadowDepth == 0 || self->layout->decomp->procsInUse == 1 ) {
+		printf( "Warning: attempting to sync a mesh under inappropriate circumstances (either\
+			shadowDepth = 0 or only one CPU in use)." );
+		return;
+	}
+#endif
+	
+	
+	/*
+	 * Initiate non-blocking receives for all data.
+	 */
+	
+	for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+		NeighbourIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+		MPI_Comm			comm = self->layout->decomp->communicator;
+		SizeT				size;
+		
+		if( self->elementShadowInfo->procShadowCnt[nbr_I] ) {
+			unsigned			finalSize = self->elementExtensionMgr->finalSize;
+			
+			size = finalSize * self->elementShadowInfo->procShadowCnt[nbr_I];
+			MPI_Irecv( self->syncElementTbl[nbr_I], size, MPI_BYTE, srcProc_I, tagElementExt, comm, 
+				   &self->syncRequestTbl[nbr_I][0] );
+		}
+		
+		if( self->nodeShadowInfo->procShadowCnt[nbr_I] ) {
+			unsigned				finalSize = self->nodeExtensionMgr->finalSize;
+			
+			/* receive the node coords */
+			size = sizeof(Coord) * self->nodeShadowInfo->procShadowCnt[nbr_I];
+			MPI_Irecv( self->syncNodeCoordTbl[nbr_I], size, MPI_BYTE, srcProc_I, tagNodeCoord, comm,
+				   &self->syncRequestTbl[nbr_I][1] );
+			
+			/* recieve the nodes */
+			size = finalSize * self->nodeShadowInfo->procShadowCnt[nbr_I];
+			MPI_Irecv( self->syncNodeTbl[nbr_I], size, MPI_BYTE, srcProc_I, tagNodeExt, comm,
+				   &self->syncRequestTbl[nbr_I][2] );
+		}
+	}
+
+	
+	/*
+	 * Send node coordinates, node extension info and element extension info to neighbouring procs
+	 */
+	 
+	for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+		PartitionIndex			destProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+		MPI_Comm			comm = self->layout->decomp->communicator;
+		SizeT				size;
+		
+		/* send element extensions */
+		if( self->elementShadowInfo->procShadowedCnt[nbr_I] ) {
+			Element_LocalIndex		element_lI;
+			unsigned			finalSize = self->elementExtensionMgr->finalSize;
+			
+			for( element_lI = 0; element_lI < self->elementShadowInfo->procShadowedCnt[nbr_I]; element_lI++ ) {
+				Element_LocalIndex			ncIdx;
+				
+				ncIdx =	self->elementShadowInfo->procShadowedTbl[nbr_I][element_lI];
+				
+				memcpy( (unsigned char*)self->syncElementSendTbl + finalSize * element_lI, 
+					(unsigned char*)self->element + finalSize * ncIdx, finalSize );
+			}
+
+			size = finalSize * self->elementShadowInfo->procShadowedCnt[nbr_I];
+			MPI_Send( self->syncElementSendTbl, size, MPI_BYTE, destProc_I, tagElementExt, comm );
+		}
+
+		/* move the node coords intended for nbr_I into the array */
+		if( self->nodeShadowInfo->procShadowedCnt[nbr_I] ) {
+			Node_LocalIndex			node_lI;
+			unsigned			finalSize = self->nodeExtensionMgr->finalSize;
+			
+			for( node_lI = 0; node_lI < self->nodeShadowInfo->procShadowedCnt[nbr_I]; node_lI++ ) {
+				Node_LocalIndex			ncIdx;
+				
+				ncIdx =	self->nodeShadowInfo->procShadowedTbl[nbr_I][node_lI];
+				
+				self->syncNodeCoordSendTbl[node_lI][0] = self->nodeCoord[ncIdx][0];
+				self->syncNodeCoordSendTbl[node_lI][1] = self->nodeCoord[ncIdx][1];
+				self->syncNodeCoordSendTbl[node_lI][2] = self->nodeCoord[ncIdx][2];
+				
+				memcpy( (unsigned char*)self->syncNodeSendTbl + finalSize * node_lI, 
+					(unsigned char*)self->node + finalSize * ncIdx, finalSize );
+			}
+			
+			size = sizeof(Coord) * self->nodeShadowInfo->procShadowedCnt[nbr_I];
+			MPI_Send( self->syncNodeCoordSendTbl, size, MPI_BYTE, destProc_I, tagNodeCoord, comm );
+			
+			size = finalSize * self->nodeShadowInfo->procShadowedCnt[nbr_I];
+			MPI_Send( self->syncNodeSendTbl, size, MPI_BYTE, destProc_I, tagNodeExt, comm );
+		}
+	}
+	
+	
+	/*
+	 * Receive node coordinates, node extension, blah blah blah
+	 */
+	
+	for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+		MPI_Status			status;
+		
+		/* grab the element extension */
+		if( self->elementShadowInfo->procShadowCnt[nbr_I] ) {
+			Element_ShadowIndex			element_sI;
+			unsigned				finalSize = self->elementExtensionMgr->finalSize;
+			
+			/* recieve the elements */
+			MPI_Wait( &self->syncRequestTbl[nbr_I][0], &status );
+			
+			for( element_sI = 0; element_sI < self->elementShadowInfo->procShadowCnt[nbr_I]; element_sI++ ) {
+				Element_ShadowIndex			ncIdx;
+				
+				ncIdx = self->elementShadowInfo->procShadowTbl[nbr_I][element_sI];
+				
+				memcpy( (unsigned char*)self->element + finalSize * ncIdx,
+					(unsigned char*)self->syncElementTbl[nbr_I] + finalSize * element_sI, finalSize );
+			}
+		}
+		
+		if( self->nodeShadowInfo->procShadowCnt[nbr_I] ) {
+			Node_ShadowIndex			node_sI;
+			unsigned				finalSize = self->nodeExtensionMgr->finalSize;
+			
+			/* receive the node coords */
+			MPI_Wait( &self->syncRequestTbl[nbr_I][1], &status );
+			
+			/* recieve the nodes */
+			MPI_Wait( &self->syncRequestTbl[nbr_I][2], &status );
+			
+			for( node_sI = 0; node_sI < self->nodeShadowInfo->procShadowCnt[nbr_I]; node_sI++ ) {
+				Node_ShadowIndex			ncIdx;
+				
+				ncIdx = self->nodeShadowInfo->procShadowTbl[nbr_I][node_sI];
+				
+				self->nodeCoord[ncIdx][0] = self->syncNodeCoordTbl[nbr_I][node_sI][0];
+				self->nodeCoord[ncIdx][1] = self->syncNodeCoordTbl[nbr_I][node_sI][1];
+				self->nodeCoord[ncIdx][2] = self->syncNodeCoordTbl[nbr_I][node_sI][2];
+				
+				memcpy( (unsigned char*)self->node + finalSize * ncIdx,
+					(unsigned char*)self->syncNodeTbl[nbr_I] + finalSize * node_sI, finalSize );
+			}
+		}
+	}
+}
+
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _Mesh_InitialNodeGeometries( void* mesh ) {
+	Mesh*			self = (Mesh*)mesh;
+	NodeLayout*		nLayout = self->layout->nodeLayout;
+	Node_DomainIndex	index;
+	
+	/* If we're using the new generation methods, skip this bit. */
+	if( !self->nodeCoord ) {
+		self->nodeCoord = Memory_Alloc_Array( Coord, self->nodeDomainCount, "Mesh->nodeCoord" );
+		for( index = 0;  index < self->nodeDomainCount; index++ ) {
+			Node_GlobalIndex globalIndex;
+		
+			globalIndex = Mesh_NodeMapDomainToGlobal( self, index );
+			nLayout->nodeCoordAt( nLayout, globalIndex, self->nodeCoord[index] );
+		}
+	}
+	else {
+		Coord*		newCoords;
+		unsigned	n_i;
+
+		newCoords = Memory_Alloc_Array( Coord, self->nodeDomainCount, "Mesh->nodeCoord" );
+		for( n_i = 0; n_i < MeshTopology_GetDomainSize( self->topo, MT_VERTEX ); n_i++ ) {
+			unsigned	dInd;
+
+			dInd = MeshTopology_DomainToGlobal( self->topo, MT_VERTEX, n_i );
+			dInd = Mesh_NodeMapGlobalToDomain( self, dInd );
+			memcpy( newCoords[dInd], self->nodeCoord[n_i], sizeof(Coord) );
+		}
+		FreeArray( self->nodeCoord );
+		self->nodeCoord = newCoords;
+	}
+
+	/* After we collect initial node geometries, we need to flag the element geometry so. */
+	if( !strcmp( self->layout->elementLayout->geometry->type, MeshGeometry_Type ) ) {
+		((MeshGeometry*)self->layout->elementLayout->geometry)->useMesh = True;
+	}
+}
+
+
+void _Mesh_BuildSyncTables( void* mesh ) {
+	Mesh*			self = (Mesh*)mesh;
+	
+	assert( self );
+	
+	if( self->layout->decomp->shadowDepth > 0 && self->layout->decomp->procsInUse > 1 ) {
+		MeshDecomp*		decomp = self->layout->decomp;
+		MPI_Comm		comm = decomp->communicator;
+		PartitionIndex		myRank = decomp->rank;
+		Topology*		procTop = decomp->procTopology;
+		NeighbourIndex		nbrCnt;
+		NeighbourIndex*		tempNbrArray = NULL;
+		NeighbourIndex		nbr_I;
+		NeighbourIndex		prevNbr_I;
+		Element_ShadowIndex*	elementTbl;
+		Element_ShadowIndex	element_sI;
+		Element_LocalIndex	element_lI;
+		Node_ShadowIndex*	nodeTbl;
+		Node_ShadowIndex	node_sI;
+		Node_LocalIndex		node_lI;
+		Index                   maxElementCnt;
+                Index                   maxNodeCnt;
+		MPI_Request*		request;
+		Bool			nodeG2LBuiltTemporarily = False;
+		Bool			nodeG2DBuiltTemporarily = False;
+		Bool			elementG2LBuiltTemporarily = False;
+		Bool			elementG2DBuiltTemporarily = False;
+		Stream*                 errorStream = Journal_Register( Error_Type, self->type );
+
+		Journal_DPrintf( self->debug, "In %s(), Proc %d:\n", __func__, myRank );
+		Stream_Indent( self->debug );
+
+		if (self->buildTemporaryGlobalTables == True) {
+			if (self->nodeG2L == NULL) {
+				self->nodeG2L = MeshDecomp_BuildNodeGlobalToLocalMap( self->layout->decomp );
+				nodeG2LBuiltTemporarily = True;
+			}	
+			if (self->nodeG2D == NULL) {
+				self->nodeG2D = MeshDecomp_BuildNodeGlobalToDomainMap( self->layout->decomp );
+				nodeG2DBuiltTemporarily = True;
+			}	
+			if (self->elementG2L == NULL) {
+				self->elementG2L = MeshDecomp_BuildElementGlobalToLocalMap( self->layout->decomp );
+				elementG2LBuiltTemporarily = True;
+			}	
+			if (self->elementG2D == NULL) {
+				self->elementG2D = MeshDecomp_BuildElementGlobalToDomainMap( self->layout->decomp );
+				elementG2DBuiltTemporarily = True;
+			}	
+		}
+
+		/* Build the set of valid proc neighbours */
+		/* modified by PatrickSunter, 16 May 2006 :
+		   For periodic problems the nbrs aren't necessarily unique, so we need to check
+		   to avoid adding the same one twice.
+		   
+		   Also, previously this part used to check for but silently ignore
+		   nbrs pointing to inactive processors, but this is no good as it has to
+		   be the responsibility of the meshDecomp to adjust its own procTopology if there are
+		   inactive processors, and return adjusted nbrs accordingly - since otherwise things 
+		   such as periodicity may not work.
+		*/
+		nbrCnt = procTop->neighbourCount( procTop, myRank );
+		tempNbrArray = Memory_Alloc_Array( NeighbourIndex, nbrCnt, "tempNbrArray" );
+		/* Just allocate the procNbrTbl to be the same size, even if there might be duplicates:
+		   doesn't hurt to have a few blank spots in the array so long as count is correct */
+		self->procNbrInfo->procNbrTbl = Memory_Alloc_Array( NeighbourIndex, nbrCnt, "Mesh->procNbrTbl" );
+		procTop->buildNeighbours( procTop, myRank, tempNbrArray );
+
+#if DEBUG
+		if ( 0 == strcmp( IJK26Topology_Type, procTop->type ) ) {
+			Journal_DPrintf( self->debug, "Calculated my neighbour processor are:\n" );
+			Stream_Indent( self->debug );
+			((IJK26Topology*)procTop)->dynamicSizes = False;
+			IJK26Topology_PrintNeighboursOfIndex( (IJK26Topology*)procTop, myRank, self->debug );
+			((IJK26Topology*)procTop)->dynamicSizes = True;
+			Stream_UnIndent( self->debug );
+		}
+#endif
+		Stream_Indent( self->debug );
+		self->procNbrInfo->procNbrCnt = 0;
+		/* Ok, now search through the temp list, and only add the unique Ids to our real list */
+		for( nbr_I = 0; nbr_I < nbrCnt; nbr_I++ ) {
+
+			Journal_Firewall( tempNbrArray[nbr_I] < decomp->procsInUse, errorStream,
+					  "Error - in %s() on proc %u: nbr %u in my ProcNbrInfo mapped "
+					  "to processor ID %u, which is >= calculated "
+					  "procs in use %u! Check the decomp info.\n",
+					  __func__, myRank, nbr_I, tempNbrArray[nbr_I], decomp->procsInUse );
+			
+			/* Check the current candidate in temp list for equality against prev acceptances */
+			for ( prevNbr_I = 0; prevNbr_I < self->procNbrInfo->procNbrCnt; prevNbr_I++ ) {
+				if ( self->procNbrInfo->procNbrTbl[prevNbr_I] == tempNbrArray[nbr_I] ) 
+				{	
+					Journal_DPrintfL( self->debug, 2, "In %s() on proc %u: nbr %u in my "
+							  "ProcNbrInfo mapped to proc ID %u, but have already added that "
+							  "processor to unique nbr list - ignoring duplicate.\n",
+							  __func__, myRank, nbr_I, tempNbrArray[nbr_I] );
+					break;	
+				}	
+			}
+			/* Only if we successfully checked each prev should we accept the new one - otherwise
+			   let it get over-written by not incrementing the count */
+			if ( prevNbr_I == self->procNbrInfo->procNbrCnt ) {
+				self->procNbrInfo->procNbrTbl[self->procNbrInfo->procNbrCnt] = tempNbrArray[nbr_I];
+				self->procNbrInfo->procNbrCnt++;
+			}
+		}
+		Stream_UnIndent( self->debug );
+		Memory_Free( tempNbrArray );
+
+#if DEBUG
+		Journal_DPrintf( self->debug, "Calculated my unique list of %u nbr procs is:\n\t{",
+				 self->procNbrInfo->procNbrCnt );
+		for ( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Journal_DPrintf( self->debug, "%u, ", self->procNbrInfo->procNbrTbl[nbr_I] );
+		}
+		Journal_DPrintf( self->debug, "}\n" );
+#endif
+
+		self->nodeShadowInfo->procNbrInfo = self->procNbrInfo;
+		self->elementShadowInfo->procNbrInfo = self->procNbrInfo;
+		
+		/*
+		 * Calculate where my shadow elements are going to come from.
+		 */
+		
+		/* TODO: FIX TAGS */
+		/* TODO: see if some of this can be reduced into re-usable funcs */
+
+		/* allocate some work space */
+		request = Memory_Alloc_Array( MPI_Request , self->procNbrInfo->procNbrCnt, "MPI_Request_procNbrCnt" );
+		assert( request );
+		
+		/* convert my shadow element indices to global element indices */
+		elementTbl = Memory_Alloc_Array(Element_ShadowIndex, self->elementShadowCount, "Element_ShadowIndex_ElementShadowCount" );
+		assert( elementTbl );
+		for( element_sI = 0; element_sI < self->elementShadowCount; element_sI++ ) {
+			elementTbl[element_sI] = Mesh_ElementMapShadowToGlobal( self, element_sI );
+		}
+		
+		/* prepare my 'shadowed tables' */
+		self->elementShadowInfo->procShadowedCnt = Memory_Alloc_Array( Element_LocalIndex,
+									       self->procNbrInfo->procNbrCnt, 
+									       "Mesh->elementShadowInfo->procShadowedCnt" );
+		self->elementShadowInfo->procShadowedTbl = Memory_Alloc_Array( Element_LocalIndex*,
+									       self->procNbrInfo->procNbrCnt,
+									       "Mesh->elementShadowInfo->procShadowedTbl" );
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			self->elementShadowInfo->procShadowedCnt[nbr_I] = 0;
+			self->elementShadowInfo->procShadowedTbl[nbr_I] = NULL;
+		}
+		
+		/* prepare non-blocking recieve for size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( &self->elementShadowInfo->procShadowedCnt[nbr_I], 1, MPI_UNSIGNED, srcProc_I, 100, comm,
+				   &request[nbr_I] );
+		}
+		
+		/* send my shadow element count to each neighbour */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			dst = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Send( &self->elementShadowCount, 1, MPI_UNSIGNED, dst, 100, comm );
+		}
+		
+		/* retrieve the size and prepare tables */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			MPI_Status		status;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			self->elementShadowInfo->procShadowedTbl[nbr_I] = 
+				Memory_Alloc_Array(
+					Element_LocalIndex,
+					self->elementShadowInfo->procShadowedCnt[nbr_I],
+					"self->elementShadowInfo->procShadowedTbl[nbr_I]" );
+			assert( self->elementShadowInfo->procShadowedTbl[nbr_I] );
+		}
+		
+		/* prepare non-bloking recieve for elements */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( self->elementShadowInfo->procShadowedTbl[nbr_I],
+				   self->elementShadowInfo->procShadowedCnt[nbr_I], MPI_UNSIGNED, srcProc_I, 
+				   101, comm, &request[nbr_I] );
+		}
+		
+		/* send my shadow elements to each neighbour */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			dst = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Send( elementTbl, self->elementShadowCount, MPI_UNSIGNED, dst, 101, comm );
+		}
+		
+		/* recieve elements from all neighbours one at a time and process them */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Element_GlobalIndex		element_gI;
+			MPI_Status			status;
+			IndexSet*			localElementSet;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			
+			localElementSet = IndexSet_New( self->elementLocalCount );
+			assert( localElementSet );
+			for( element_gI = 0; element_gI < self->elementShadowInfo->procShadowedCnt[nbr_I]; element_gI++ ) {
+				Element_LocalIndex		elementIdx;
+				
+				elementIdx = Mesh_ElementMapGlobalToLocal( self, 
+									   self->elementShadowInfo->procShadowedTbl[nbr_I][element_gI] );
+				if( elementIdx < self->elementLocalCount ) {
+					IndexSet_Add( localElementSet, elementIdx );
+				}
+			}
+			
+			Memory_Free( self->elementShadowInfo->procShadowedTbl[nbr_I] );
+			IndexSet_GetMembers( localElementSet, &self->elementShadowInfo->procShadowedCnt[nbr_I], 
+					     &self->elementShadowInfo->procShadowedTbl[nbr_I] );
+		}
+		
+		/* setup tables to store feedback */
+		self->elementShadowInfo->procShadowCnt = Memory_Alloc_Array( Element_DomainIndex, self->procNbrInfo->procNbrCnt,
+									     "Mesh->elementShadowInfo->procShadowCnt" );
+		self->elementShadowInfo->procShadowTbl = Memory_Alloc_Array( Element_DomainIndex*, self->procNbrInfo->procNbrCnt,
+									     "Mesh->elementShadowInfo->procShadowTbl" );
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			self->elementShadowInfo->procShadowCnt[nbr_I] = 0;
+			self->elementShadowInfo->procShadowTbl[nbr_I] = NULL;
+		}
+		
+		/* prepare non-blocking recieve for size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( &self->elementShadowInfo->procShadowCnt[nbr_I], 1, MPI_UNSIGNED, srcProc_I, 200,
+				   comm, &request[nbr_I] );
+		}
+		
+		/* send the size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			dst = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Send( &self->elementShadowInfo->procShadowedCnt[nbr_I], 1, MPI_UNSIGNED, dst, 200, comm );
+		}
+		
+		/* recieve the feedback size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			MPI_Status			status;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			self->elementShadowInfo->procShadowTbl[nbr_I] = Memory_Alloc_Array( Element_DomainIndex,
+											    self->elementShadowInfo->procShadowCnt[nbr_I], "Mesh->elementShadowInfo->procShadowTbl[][]" );
+		}
+		
+		/* prepare non-blocking recieve for feedback */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( self->elementShadowInfo->procShadowTbl[nbr_I],
+				   self->elementShadowInfo->procShadowCnt[nbr_I], MPI_UNSIGNED, 
+				   srcProc_I, 201, comm, &request[nbr_I] );
+		}
+		
+		/* convert the shadowed local indices to global indices and send back to the appropriate proc */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			destProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			Element_LocalIndex		elementCnt;
+			Element_GlobalIndex*		globalElementTbl;
+			
+			elementCnt = self->elementShadowInfo->procShadowedCnt[nbr_I];
+			globalElementTbl = Memory_Alloc_Array(Element_GlobalIndex, elementCnt, "Element_GlobalIndex_ElementCnt" );
+			assert( globalElementTbl );
+			for( element_lI = 0; element_lI < elementCnt; element_lI++ ) {
+				globalElementTbl[element_lI] = Mesh_ElementMapLocalToGlobal( self,
+											     self->elementShadowInfo->procShadowedTbl[nbr_I][element_lI] );
+			}
+			
+			MPI_Send( globalElementTbl, elementCnt, MPI_UNSIGNED, destProc_I, 201, comm );
+			
+			Memory_Free( globalElementTbl );
+		}
+		
+		/* recieve the feedback, convert to domain indices and store */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			MPI_Status			status;
+			Element_DomainIndex		element_dI;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			
+			for( element_dI = 0; element_dI < self->elementShadowInfo->procShadowCnt[nbr_I]; element_dI++ ) {
+				Element_DomainIndex		elementIdx;
+				
+				elementIdx = Mesh_ElementMapGlobalToDomain( self,
+									    self->elementShadowInfo->procShadowTbl[nbr_I][element_dI] );
+				assert( elementIdx < self->elementDomainCount );
+				self->elementShadowInfo->procShadowTbl[nbr_I][element_dI] = elementIdx;
+			}
+		}
+		
+		
+		/*
+		 * Use the calculated shadow elements and shadowed elements to build the same tables for nodes.
+		 * On second thought, just repeat everything above.
+		 */
+		
+		/* convert my shadow node indices to global node indices */
+		nodeTbl = Memory_Alloc_Array(Node_ShadowIndex, self->nodeShadowCount, "Node_ShadowIndex_nodeShadowCount" );
+		assert( nodeTbl );
+		for( node_sI = 0; node_sI < self->nodeShadowCount; node_sI++ ) {
+			nodeTbl[node_sI] = Mesh_NodeMapShadowToGlobal( self, node_sI );
+		}
+		
+		/* prepare my 'shadowed tables' */
+		self->nodeShadowInfo->procShadowedCnt = Memory_Alloc_Array( Node_LocalIndex, self->procNbrInfo->procNbrCnt, 
+									    "Mesh->nodeShadowInfo->procShadowedCnt" );
+		self->nodeShadowInfo->procShadowedTbl = Memory_Alloc_Array( Node_LocalIndex*, self->procNbrInfo->procNbrCnt,
+									    "Mesh->nodeShadowInfo->procShadowedTbl" );
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			self->nodeShadowInfo->procShadowedCnt[nbr_I] = 0;
+			self->nodeShadowInfo->procShadowedTbl[nbr_I] = NULL;
+		}
+		
+		/* prepare non-blocking recieve for size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( &self->nodeShadowInfo->procShadowedCnt[nbr_I], 1, MPI_UNSIGNED, srcProc_I,
+				   100, comm, &request[nbr_I] );
+		}
+		
+		/* send my shadow node count to each neighbour */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			dst = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Send( &self->nodeShadowCount, 1, MPI_UNSIGNED, dst, 100, comm );
+		}
+		
+		/* retrieve the size and prepare tables */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			MPI_Status		status;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			self->nodeShadowInfo->procShadowedTbl[nbr_I] = 
+				Memory_Alloc_Array(
+					Node_GlobalIndex,
+					self->nodeShadowInfo->procShadowedCnt[nbr_I],
+					"self->nodeShadowInfo->procShadowedTbl[nbr_I]" );
+			assert( self->nodeShadowInfo->procShadowedTbl[nbr_I] );
+		}
+		
+		/* prepare non-bloking recieve for nodes */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( self->nodeShadowInfo->procShadowedTbl[nbr_I],
+				   self->nodeShadowInfo->procShadowedCnt[nbr_I], MPI_UNSIGNED, srcProc_I, 
+				   101, comm, &request[nbr_I] );
+		}
+		
+		/* send my shadow nodes to each neighbour */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			dst = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Send( nodeTbl, self->nodeShadowCount, MPI_UNSIGNED, dst, 101, comm );
+		}
+		
+		/* recieve nodes from all neighbours one at a time and process them */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			Node_GlobalIndex		node_gI;
+			MPI_Status			status;
+			IndexSet*			localNodeSet;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			
+			localNodeSet = IndexSet_New( self->nodeLocalCount );
+			assert( localNodeSet );
+			for( node_gI = 0; node_gI < self->nodeShadowInfo->procShadowedCnt[nbr_I]; node_gI++ ) {
+				Node_LocalIndex		nodeIdx;
+				
+				nodeIdx = Mesh_NodeMapGlobalToLocal( self, 
+								     self->nodeShadowInfo->procShadowedTbl[nbr_I][node_gI] );
+				if( nodeIdx < self->nodeLocalCount ) {
+					IndexSet_Add( localNodeSet, nodeIdx );
+				}
+			}
+			
+			Memory_Free( self->nodeShadowInfo->procShadowedTbl[nbr_I] );
+			IndexSet_GetMembers( localNodeSet, &self->nodeShadowInfo->procShadowedCnt[nbr_I], 
+					     &self->nodeShadowInfo->procShadowedTbl[nbr_I] );
+		}
+		
+		/* setup tables to store feedback */
+		self->nodeShadowInfo->procShadowCnt = Memory_Alloc_Array( Node_DomainIndex, self->procNbrInfo->procNbrCnt,
+									  "Mesh->nodeShadowInfo->procShadowCnt" );
+		self->nodeShadowInfo->procShadowTbl = Memory_Alloc_Array( Node_DomainIndex*, self->procNbrInfo->procNbrCnt,
+									  "Mesh->nodeShadowInfo->procShadowTbl" );
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			self->nodeShadowInfo->procShadowCnt[nbr_I] = 0;
+			self->nodeShadowInfo->procShadowTbl[nbr_I] = NULL;
+		}
+		
+		/* prepare non-blocking recieve for size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( &self->nodeShadowInfo->procShadowCnt[nbr_I], 1, MPI_UNSIGNED,
+				   srcProc_I, 200, comm, &request[nbr_I] );
+		}
+		
+		/* send the size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			dst = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Send( &self->nodeShadowInfo->procShadowedCnt[nbr_I], 1, MPI_UNSIGNED, dst, 200, comm );
+		}
+		
+		/* recieve the feedback size */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			MPI_Status			status;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			self->nodeShadowInfo->procShadowTbl[nbr_I] = Memory_Alloc_Array( Node_DomainIndex,
+											 self->nodeShadowInfo->procShadowCnt[nbr_I], "Mesh->nodeShadowInfo->procShadowTbl[][]" );
+		}
+		
+		/* prepare non-blocking recieve for feedback */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			srcProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			
+			MPI_Irecv( self->nodeShadowInfo->procShadowTbl[nbr_I],
+				   self->nodeShadowInfo->procShadowCnt[nbr_I], MPI_UNSIGNED, 
+				   srcProc_I, 201, comm, &request[nbr_I] );
+		}
+		
+		/* convert the shadowed local indices to global indices and send back to the appropriate proc */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			PartitionIndex			destProc_I = self->procNbrInfo->procNbrTbl[nbr_I];
+			Node_LocalIndex		nodeCnt;
+			Node_GlobalIndex*		globalNodeTbl;
+			
+			nodeCnt = self->nodeShadowInfo->procShadowedCnt[nbr_I];
+			globalNodeTbl = Memory_Alloc_Array( Node_GlobalIndex, nodeCnt, "Node_GlobalIndex_nodeCnt" );
+			assert( globalNodeTbl );
+			for( node_lI = 0; node_lI < nodeCnt; node_lI++ ) {
+				globalNodeTbl[node_lI] = Mesh_NodeMapLocalToGlobal( self,
+										    self->nodeShadowInfo->procShadowedTbl[nbr_I][node_lI] );
+			}
+			
+			MPI_Send( globalNodeTbl, nodeCnt, MPI_UNSIGNED, destProc_I, 201, comm );
+			
+			Memory_Free( globalNodeTbl );
+		}
+		
+		/* recieve the feedback, convert to domain indices and store */
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			MPI_Status			status;
+			Node_DomainIndex		node_dI;
+			
+			MPI_Wait( &request[nbr_I], &status );
+			
+			for( node_dI = 0; node_dI < self->nodeShadowInfo->procShadowCnt[nbr_I]; node_dI++ ) {
+				Node_DomainIndex		nodeIdx;
+				
+				nodeIdx = Mesh_NodeMapGlobalToDomain( self, self->nodeShadowInfo->procShadowTbl[nbr_I][node_dI] );
+				assert( nodeIdx < self->nodeDomainCount );
+				self->nodeShadowInfo->procShadowTbl[nbr_I][node_dI] = nodeIdx;
+			}
+		}
+		if ( True == nodeG2LBuiltTemporarily ) {
+			Memory_Free( self->nodeG2L );
+			self->nodeG2L = NULL;
+		}
+		if ( True == nodeG2DBuiltTemporarily ) {
+			Memory_Free( self->nodeG2D );
+			self->nodeG2D = NULL;
+		}
+		if ( True == elementG2LBuiltTemporarily ) {
+			Memory_Free( self->elementG2L );
+			self->elementG2L = NULL;
+		}
+		if ( True == elementG2DBuiltTemporarily ) {
+			Memory_Free( self->elementG2D );
+			self->elementG2D = NULL;
+		}
+		
+		if( request )
+			Memory_Free( request );
+		
+		
+		/*
+		 * Set up the tables needed for sending and receiving when Mesh_Sync is called.
+		 */
+		
+		self->syncRequestTbl = Memory_Alloc_Array( MPI_Request*, self->procNbrInfo->procNbrCnt, "Mesh->syncRequestTbl" );
+		self->syncElementTbl = Memory_Alloc_Array( Element*, self->procNbrInfo->procNbrCnt, "Mesh->syncElementTbl" );
+		self->syncNodeCoordTbl = Memory_Alloc_Array( Coord*, self->procNbrInfo->procNbrCnt, "Mesh->syncNodeCoordTbl" );
+		self->syncNodeTbl = Memory_Alloc_Array( Node*, self->procNbrInfo->procNbrCnt, "Mesh->syncNodeTbl" );
+		for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+			self->syncRequestTbl[nbr_I] = Memory_Alloc_Array( MPI_Request, 3, "Mesh->syncRequestTbl[...]" );
+			self->syncElementTbl[nbr_I] = Memory_Alloc_Array_Bytes( self->elementExtensionMgr->finalSize, 
+										self->elementShadowInfo->procShadowCnt[nbr_I], "Element", "Mesh->syncElementTbl[...]" );
+			self->syncNodeCoordTbl[nbr_I] = Memory_Alloc_Array( Coord,
+									    self->nodeShadowInfo->procShadowCnt[nbr_I], 
+									    "Mesh->syncNodeCoordTbl[...]" );
+			self->syncNodeTbl[nbr_I] = Memory_Alloc_Array_Bytes( self->nodeExtensionMgr->finalSize, 
+									     self->nodeShadowInfo->procShadowCnt[nbr_I], "Node", "Mesh->syncNodeTbl[...]" );
+		}
+		
+		/* send tables */
+		maxElementCnt = 0;
+                maxNodeCnt = 0;
+                for( nbr_I = 0; nbr_I < self->procNbrInfo->procNbrCnt; nbr_I++ ) {
+                        if( self->elementShadowInfo->procShadowedCnt[nbr_I] > maxElementCnt )
+                                maxElementCnt = self->elementShadowInfo->procShadowedCnt[nbr_I];
+                        if( self->elementShadowInfo->procShadowCnt[nbr_I] > maxElementCnt )
+                                maxElementCnt = self->elementShadowInfo->procShadowCnt[nbr_I];
+
+                        if( self->nodeShadowInfo->procShadowedCnt[nbr_I] > maxNodeCnt )
+                                maxNodeCnt = self->nodeShadowInfo->procShadowedCnt[nbr_I];
+                        if( self->nodeShadowInfo->procShadowCnt[nbr_I] > maxNodeCnt )
+                                maxNodeCnt = self->nodeShadowInfo->procShadowCnt[nbr_I];
+                }
+
+                self->syncElementSendTbl = Memory_Alloc_Array_Bytes( self->elementExtensionMgr->finalSize, maxElementCnt,
+								     "Element", "Mesh->syncElementSendTbl" );
+                self->syncNodeCoordSendTbl = Memory_Alloc_Array( Coord, maxNodeCnt, "Mesh->syncNodeCoordSendTbl" );
+                self->syncNodeSendTbl = Memory_Alloc_Array_Bytes( self->nodeExtensionMgr->finalSize, maxNodeCnt, 
+								  "Node", "Mesh->syncNodeSendTbl" );
+		Stream_UnIndent( self->debug );
+	}
+	else {
+		/* Cancel everything to zero */
+		self->procNbrInfo->procNbrCnt = 0;
+		self->procNbrInfo->procNbrTbl = NULL;
+		self->elementShadowInfo->procShadowedCnt = NULL;
+		self->elementShadowInfo->procShadowedTbl = NULL;
+		self->elementShadowInfo->procShadowCnt = NULL;
+		self->elementShadowInfo->procShadowTbl = NULL;
+		self->nodeShadowInfo->procShadowedCnt = NULL;
+		self->nodeShadowInfo->procShadowedTbl = NULL;
+		self->nodeShadowInfo->procShadowCnt = NULL;
+		self->nodeShadowInfo->procShadowTbl = NULL;
+		self->syncElementTbl = NULL;
+		self->syncNodeCoordTbl = NULL;
+		self->syncNodeTbl = NULL;
+	}
+}
+
+
+IndexSet* Mesh_CreateIndexSetFromShape( void* mesh, void* _shape ) {
+	Mesh*             self              = Stg_CheckType( mesh, Mesh );
+	Stg_Shape*        shape             = Stg_CheckType( _shape, Stg_Shape );
+	Node_DomainIndex  dNode_I;
+	Node_DomainIndex  nodeDomainCount;
+	IndexSet*         indexSet;
+	double*           coord;
+
+	nodeDomainCount = self->nodeDomainCount;
+	indexSet = IndexSet_New( nodeDomainCount );
+	for( dNode_I = 0; dNode_I < nodeDomainCount; dNode_I++ ) {
+		coord = Mesh_CoordAt( self, dNode_I );
+		if ( Stg_Shape_IsCoordInside( shape, coord ) ) {
+			IndexSet_Add( indexSet, dNode_I );
+		}
+	}
+
+	return indexSet;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,482 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 mesh on a serial or parallel implementation.
+**	It may take out any form supported by the attached MeshLayout.
+**	Its behaviour is dedicated to ensuring the integrity of the mesh... it does not effect the state of what the mesh contains.
+**
+** Assumptions:
+**	The Node and Element state storage types are defined elsewhere.
+**	The Node and Element (if shadowed) state storage types can be mem-copied and MPI-sent/recvd (i.e they contain no pointers).
+**
+** Invariants:
+**	If shadowing is enabled, then shadow nodes are always placed after any local nodes in the domain tables. This
+**	means that a local node index is always the same as its domain equivalent. It also implies a shadow node index
+**	can be converted to a domain index by subtracting the appropriate local count.
+**
+** Comments:
+**	Originally made for Snark and Snac in mind. The Mesh class should be used as the interface to
+**	the Mesh's contents for other parts of the code (including e.g. mapping node numbers between
+**	global to local indices.)
+**
+**	Note for all the functions to map global indices to local ones such as Mesh::nodeMapGlobalToLocal, if
+**	the given global index corresponds to a node not held in the requested set (Local|Domain|Shadow), then the
+**	value looked up will be Mesh_Node_Invalid() or Mesh_Element_Invalid(), as appropriate.
+**	
+**	Client classes can perform local to global and vice versa transformations by either
+**	a) using the Mesh_NodeMapLocalToGlobal() and other public functions,
+**	since these will use the tables if they have been build, but otherwise calculate
+**	them on the fly.
+**	b) Asserting that the appropriate table has been built, then using it directly 
+**	(more efficient, so use if the mapping will be made frequently.)
+**	
+**	Not building the tables saves memory, but can cause a _very significant_ 
+**	performance hit for large meshes where the mappings are frequently required.
+**	Consequently, the local to global mapping tables are built by default, but
+**	the global to local ones aren't since they could be memory-hungry for large
+**	parallel runs.
+**	
+**	Mesh tables will be re-used where appropriate, e.g. the Mesh::nodeL2G and the Mesh::nodeD2G
+**	tables, if both requested, will point to the same mappings. (This can be done because of
+**	the invariant mentioned above.)
+**
+** $Id: MeshClass.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshClass_h__
+#define __Discretisaton_Mesh_MeshClass_h__
+	
+
+	/** Textual name of this class */
+	extern const Type Mesh_Type;
+
+	/* Virtual function types */
+	typedef Bool			(Mesh_Node_IsLocalFunction)		( void* mesh, Node_DomainIndex domainIndex );
+	typedef Bool			(Mesh_Node_IsShadowFunction)		( void* mesh, Node_DomainIndex domainIndex );
+	typedef Bool			(Mesh_Element_IsLocalFunction)		( void* mesh, Element_DomainIndex domainIndex );
+	typedef Bool			(Mesh_Element_IsShadowFunction)		( void* mesh, Element_DomainIndex domainIndex );
+	
+	/** Mesh class contents */
+	#define __Mesh								\
+		/* General info */						\
+		__Stg_Component							\
+		Stream*					debug;			\
+		Dictionary*				dictionary;		\
+										\
+		/* Virtual info */						\
+										\
+		MeshTopology*				topo;			\
+		Bool					useTopo;		\
+		MeshGenerator*				generator;		\
+		ExtensionManager*			info;			\
+										\
+		/* Node mapping functions */					\
+		Mesh_Node_IsLocalFunction*		nodeIsLocal;		\
+		Mesh_Node_IsShadowFunction*		nodeIsShadow;		\
+		/* Element mapping functions */					\
+		Mesh_Element_IsLocalFunction*		elementIsLocal;		\
+		Mesh_Element_IsShadowFunction*		elementIsShadow;	\
+										\
+		/* Mesh info ... */ \
+		MeshLayout*				layout; \
+		/** Extensions to individual nodes */ \
+		ExtensionManager*			nodeExtensionMgr; \
+		/** Extensions to individual elements */ \
+		ExtensionManager*			elementExtensionMgr; \
+		ExtensionManager_Register*		extensionMgr_Register; \
+		\
+		/* Node */ \
+		Node_List				node; \
+		Coord*					nodeCoord; \
+		unsigned				nSpaceDims;\
+		/* counts */ \
+		Node_LocalIndex				nodeLocalCount; \
+		Node_DomainIndex			nodeDomainCount; \
+		Node_ShadowIndex			nodeShadowCount; \
+		Node_GlobalIndex			nodeGlobalCount; \
+		/* permanent mapping table options */ \
+		Bool					buildNodeLocalToGlobalMap; \
+		Bool					buildNodeDomainToGlobalMap; \
+		Bool					buildNodeGlobalToLocalMap; \
+		Bool					buildNodeGlobalToDomainMap; \
+		/* permanent mapping tables */ \
+		Node_GlobalIndex*			nodeL2G; \
+		Node_GlobalIndex*			nodeD2G; \
+		Node_DomainIndex*			nodeG2L; \
+		Node_DomainIndex*			nodeG2D; \
+		/* ownership status of mapping tables */ \
+		Bool					ownsNodeLocalToGlobalMap; \
+		Bool					ownsNodeDomainToGlobalMap; \
+		Bool					ownsNodeGlobalToLocalMap; \
+		Bool					ownsNodeGlobalToDomainMap; \
+		/* node neighbour and node->elements table options */ \
+		Bool					buildNodeNeighbourTbl; \
+		Bool					buildNodeElementTbl; \
+		/* node neighbour and node->elements tables */ \
+		Node_NeighboursList			nodeNeighbourTbl; \
+		Node_NeighbourIndexList			nodeNeighbourCountTbl; \
+		Node_ElementsList			nodeElementTbl; \
+		Node_ElementIndexList			nodeElementCountTbl; \
+		/* ownership of node neighbour and node->element tables */ \
+		Bool					ownsNodeNeighbourTbl; \
+		Bool					ownsNodeNeighbourCountTbl; \
+		Bool					ownsNodeElementTbl;\
+		Bool					ownsNodeElementCountTbl; \
+		\
+		/* Element */ \
+		Element_List				element; \
+		/* counts */ \
+		Element_LocalIndex			elementLocalCount; \
+		Element_DomainIndex			elementDomainCount; \
+		Element_ShadowIndex			elementShadowCount; \
+		Element_GlobalIndex			elementGlobalCount; \
+		/* permanent mapping table options */ \
+		Bool					buildElementLocalToGlobalMap; \
+		Bool					buildElementDomainToGlobalMap; \
+		Bool					buildElementGlobalToLocalMap; \
+		Bool					buildElementGlobalToDomainMap; \
+		/* permanent mapping tables */ \
+		Element_DomainIndex*			elementL2G; \
+		Element_GlobalIndex*			elementD2G; \
+		Element_DomainIndex*			elementG2L; \
+		Element_DomainIndex*			elementG2D; \
+		/* ownership status of mapping tables */ \
+		Bool					ownsElementLocalToGlobalMap; \
+		Bool					ownsElementDomainToGlobalMap; \
+		Bool					ownsElementGlobalToLocalMap; \
+		Bool					ownsElementGlobalToDomainMap; \
+		/* element neighbour and element->node sets table options */ \
+		Bool					buildElementNodeTbl; \
+		Bool					buildElementNeighbourTbl; \
+		/* element neighbour and element->node sets tables */ \
+		Element_NodesList			elementNodeTbl; \
+		Element_NodeIndexList			elementNodeCountTbl; \
+		Element_NeighboursList			elementNeighbourTbl; \
+		Element_NeighbourIndexList		elementNeighbourCountTbl; \
+		/* element neighbour and element->node sets table ownership */ \
+		Bool					ownsElementNodeTbl; \
+		Bool					ownsElementNodeCountTbl; \
+		Bool					ownsElementNeighbourTbl; \
+		Bool					ownsElementNeighbourCountTbl; \
+		\
+		/** Determines if G2D tables will be built temporarily to speed up building of \
+		neighbour tables or nodeElement/elementNode tables */ \
+		Bool					buildTemporaryGlobalTables; \
+		\
+		/* sync info */ \
+		\
+		/** Info on nbr procs for shadowing purposes */ \
+		ProcNbrInfo*				procNbrInfo; \
+		/** Shadow information for all the elements */ \
+		ShadowInfo*				elementShadowInfo; \
+		/** Shadow information for all the nodes */ \
+		ShadowInfo*				nodeShadowInfo;	\
+		\
+		MPI_Request**				syncRequestTbl; \
+		Element**				syncElementTbl; \
+		Coord**					syncNodeCoordTbl; \
+		Node**					syncNodeTbl; \
+		\
+		Element*				syncElementSendTbl; \
+		Coord*					syncNodeCoordSendTbl; \
+		Node*					syncNodeSendTbl;
+		
+
+	struct _Mesh { __Mesh };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a Mesh */
+	Mesh* Mesh_DefaultNew( Name name );
+	
+	Mesh* Mesh_New( 
+		Name						name,
+		void*						layout,
+		SizeT						_nodeSize,
+		SizeT						_elementSize,
+		void*						extension_Register,
+		Dictionary*					dictionary );
+
+	/* Initialise a Mesh */
+	void Mesh_Init(
+		Mesh*						self,
+		Name						name,
+		void*						layout,
+		SizeT						_nodeSize,
+		SizeT						_elementSize,
+		void*						extension_Register,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	Mesh* _Mesh_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 _Mesh_LoadFromDict( void* mesh, Dictionary* subDict, Dictionary* dictionary, Stg_ObjectList* objList);
+
+	/* Initialisation implementation functions */
+	void _Mesh_Init(
+		Mesh*						self,
+		void*						layout,
+		SizeT						_nodeSize,
+		SizeT						_elementSize,
+		void*						extension_Register );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete mesh implementation */
+	void _Mesh_Delete( void* mesh );
+	
+	void Mesh_DestroyTables( void* mesh );
+	
+	/* Print mesh implementation */
+	void _Mesh_Print( void* mesh, Stream* stream );
+	
+	void _Mesh_PrintCoords( Mesh* self, Stream* meshStream );
+
+	void _Mesh_PrintTable( Stream* meshStream, Index* table, const Name tableName, Index itemCount );
+	
+	void _Mesh_Print2DTable( Stream* meshStream, Index** table, Index* tableEntryCounts, const Name tableName, Index entryCount );
+	
+	/* Copy */
+	#define Mesh_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Mesh_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Mesh_Copy( void* mesh, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/* Build implementation */
+	void _Mesh_Build( void* mesh, void* data );
+	
+	/* Construct implementation */
+	void _Mesh_Construct( void* mesh, Stg_ComponentFactory* cf, void* data );
+	
+	/* Initialisation implementation */
+	void _Mesh_Initialise( void* mesh, void* data );
+	
+	/* Execution implementation */
+	void _Mesh_Execute( void* mesh, void* data );
+	
+	/* Destruct implementation */
+	void _Mesh_Destroy( void* mesh, void* data );
+	
+	Bool _Mesh_Node_IsLocal1D( void* mesh, Node_LocalIndex localIndex );
+	
+	Bool _Mesh_Node_IsShadow1D( void* mesh, Node_ShadowIndex shadowIndex );
+	
+	Bool _Mesh_Element_IsLocal1D( void* mesh, Element_LocalIndex localIndex );
+	
+	Bool _Mesh_Element_IsShadow1D( void* mesh, Element_ShadowIndex shadowIndex );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+	
+	Node_GlobalIndex Mesh_NodeMapLocalToGlobal( void* mesh, Node_LocalIndex localIndex );
+	
+	Node_GlobalIndex Mesh_NodeMapShadowToGlobal( void* mesh, Node_ShadowIndex shadowIndex );
+
+	Node_GlobalIndex Mesh_NodeMapDomainToGlobal( void* mesh, Node_DomainIndex domainIndex );
+
+	Node_LocalIndex Mesh_NodeMapGlobalToLocal( void* mesh, Node_GlobalIndex globalIndex );
+
+	Node_DomainIndex Mesh_NodeMapGlobalToDomain( void* mesh, Node_GlobalIndex globalIndex );
+
+	Node_ShadowIndex Mesh_NodeMapGlobalToShadow( void* mesh, Node_GlobalIndex globalIndex );
+
+	Element_GlobalIndex Mesh_ElementMapLocalToGlobal( void* mesh, Element_LocalIndex localIndex );
+	
+	Element_GlobalIndex Mesh_ElementMapShadowToGlobal( void* mesh, Element_ShadowIndex shadowIndex );
+
+	Element_GlobalIndex Mesh_ElementMapDomainToGlobal( void* mesh, Element_DomainIndex domainIndex );
+
+	Element_LocalIndex Mesh_ElementMapGlobalToLocal( void* mesh, Element_GlobalIndex globalIndex );
+
+	Element_DomainIndex Mesh_ElementMapGlobalToDomain( void* mesh, Element_GlobalIndex globalIndex );
+
+	Element_ShadowIndex Mesh_ElementMapGlobalToShadow( void* mesh, Element_GlobalIndex globalIndex );
+
+	#define Mesh_Node_Invalid( self ) \
+		(self)->nodeGlobalCount
+
+	#define Mesh_Element_Invalid( self ) \
+		(self)->elementGlobalCount
+	
+	#define Mesh_CoordAtMacro( self, node_I ) \
+		((self)->nodeCoord[(node_I)] )
+	double* Mesh_CoordAtFunc( Mesh* self, Node_DomainIndex node_dI );
+	#ifdef MACRO_AS_FUNC
+		#define Mesh_CoordAt Mesh_CoordAtFunc
+	#else
+		#define Mesh_CoordAt Mesh_CoordAtMacro
+	#endif
+	
+	#define Mesh_NodeAtMacro( self, node_I ) \
+		((Node*)((ArithPointer)(self)->node + ((node_I) * (self)->nodeExtensionMgr->finalSize)))
+	Node* Mesh_NodeAtFunc( Mesh* self, Node_DomainIndex node_dI );
+	#ifdef MACRO_AS_FUNC
+		#define Mesh_NodeAt Mesh_NodeAtFunc
+	#else
+		#define Mesh_NodeAt Mesh_NodeAtMacro
+	#endif
+	
+	#define Mesh_ElementAtMacro( self, element_I ) \
+		((Element*)((ArithPointer)(self)->element + ((element_I) * (self)->elementExtensionMgr->finalSize)))
+	Element* Mesh_ElementAtFunc( Mesh* self, Element_DomainIndex element_dI );
+	#ifdef MACRO_AS_FUNC
+		#define Mesh_ElementAt Mesh_ElementAtFunc
+	#else
+		#define Mesh_ElementAt Mesh_ElementAtMacro
+	#endif
+	
+	/** Places into the input argument nodeCoordPtrs the pointers to the Coord value of each node in the
+	given element (often needed in F.E. stuff) */
+	void Mesh_GetNodeCoordPtrsOfElement( void* mesh, Element_DomainIndex element_dI, Coord** nodeCoordPtrs );
+
+	/** Prints the coordinates of every node in the current element */
+	void Mesh_PrintNodeCoordsOfElement( void* mesh, Element_DomainIndex element_dI, Stream* stream );
+
+	unsigned Mesh_ClosestNode( void* _self, Coord crd );
+
+	double Mesh_NodeSeparation( Mesh* self );
+
+	unsigned Mesh_ElementWithPoint( void* mesh, Coord pnt, PartitionBoundaryStatus bndStat );
+
+	void Mesh_Sync( void* mesh );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+		
+	/* Build nodes list */
+	void _Mesh_BuildNodes( void* mesh );
+	
+	/* Build node mappings */
+	void _Mesh_BuildNodeMaps( void* mesh );
+	
+	/* Build element list */
+	void _Mesh_BuildElements( void* mesh );
+	
+	/* Build node mappings */
+	void _Mesh_BuildElementMaps( void* mesh );
+	
+	#define Mesh_ActivateNodeLocalToGlobalMap( mesh ) \
+		_Mesh_ActivateMap( mesh, buildNodeLocalToGlobalMap, nodeL2G, MeshDecomp_BuildNodeLocalToGlobalMap ) 
+	#define Mesh_ActivateNodeDomainToGlobalMap( mesh ) \
+		_Mesh_ActivateMap( mesh, buildNodeDomainToGlobalMap, nodeD2G, MeshDecomp_BuildNodeDomainToGlobalMap ) 
+	#define Mesh_ActivateNodeGlobalToLocalMap( mesh ) \
+		_Mesh_ActivateMap( mesh, NodeGlobalToLocalMap, nodeG2L, MeshDecomp_BuildNodeGlobalToLocalMap ) 
+	#define Mesh_ActivateNodeGlobalToDomainMap( mesh ) \
+		_Mesh_ActivateMap( mesh, NodeGlobalToDomainMap, nodeG2D, MeshDecomp_BuildNodeGlobalToDomainMap ) 
+
+	#define Mesh_ActivateNodeNeighbourTbl( mesh ) \
+		_Mesh_ActivateTable( mesh, buildNodeNeighbourTbl, _Mesh_BuildNodeNeighbours ) 
+	#define Mesh_ActivateNodeElementTbl( mesh ) \
+		_Mesh_ActivateTable( mesh, buildNodeElementTbl, _Mesh_BuildNodeElements ) 
+
+	#define Mesh_ActivateElementLocalToGlobalMap( mesh ) \
+		_Mesh_ActivateMap( mesh, buildElementLocalToGlobalMap, nodeL2G, MeshDecomp_BuildElementLocalToGlobalMap ) 
+	#define Mesh_ActivateElementDomainToGlobalMap( mesh ) \
+		_Mesh_ActivateMap( mesh, buildElementDomainToGlobalMap, nodeD2G, MeshDecomp_BuildElementDomainToGlobalMap ) 
+	#define Mesh_ActivateElementGlobalToLocalMap( mesh ) \
+		_Mesh_ActivateMap( mesh, buildElementGlobalToLocalMap, nodeG2L, MeshDecomp_BuildElementGlobalToLocalMap ) 
+	#define Mesh_ActivateElementGlobalToDomainMap( mesh ) \
+		_Mesh_ActivateMap( mesh, buildElementGlobalToDomainMap, nodeG2D, MeshDecomp_BuildElementGlobalToDomainMap ) 
+	
+	#define Mesh_ActivateElementNeighbourTbl( mesh ) \
+		_Mesh_ActivateTable( mesh, buildElementNeighbourTbl, _Mesh_BuildElementNeighbours ) 
+	#define Mesh_ActivateElementNodeTbl( mesh ) \
+		_Mesh_ActivateTable( mesh, buildElementNodeTbl, _Mesh_BuildElementNodes ) 
+
+	#define _Mesh_ActivateMap( mesh, mapBuildOption, mapName, mapBuildFunction ) \
+		do { \
+			(mesh)->mapBuildOption = True; \
+			Dictionary_Set( (mesh)->dictionary, #mapBuildOption, Dictionary_Entry_Value_FromBool( True ) ); \
+			if ( True == (mesh)->isBuilt ) { \
+				(mesh)->mapName = mapBuildFunction( (mesh)->layout->decomp ); \
+			} \
+		} while (0)
+
+	
+	#define _Mesh_ActivateTable( mesh, tableBuildOption, tableBuildFunction ) \
+		do { \
+			(mesh)->tableBuildOption = True; \
+			Dictionary_Set( (mesh)->dictionary, #tableBuildOption, Dictionary_Entry_Value_FromBool( True ) ); \
+			if ( True == (mesh)->isBuilt ) { \
+				tableBuildFunction( mesh ); \
+			} \
+		} while (0)
+
+	/* Build node neighbours list */
+	void _Mesh_BuildNodeNeighbours( void* mesh );
+	
+	/* Build node elements list */
+	void _Mesh_BuildNodeElements( void* mesh );
+	
+	/* Build element neighbours list */
+	void _Mesh_BuildElementNeighbours( void* mesh );
+	
+	/* Build element nodes list */
+	void _Mesh_BuildElementNodes( void* mesh );
+	
+	/* Set the initial Node Geometries */
+	void _Mesh_InitialNodeGeometries( void* mesh );
+	
+	void _Mesh_BuildSyncTables( void* mesh );
+
+	IndexSet* Mesh_CreateIndexSetFromShape( void* mesh, void* _shape );
+	
+#endif /* __Discretisaton_Mesh_MeshClass_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,38 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1071 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MeshDecomp.c 3574 2006-05-15 11:30:33Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "MeshDecomp.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type MeshDecomp_Type = "MeshDecomp";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshDecomp* _MeshDecomp_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*            shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*           shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*            procWithElement,
+		Dictionary*                                     dictionary,
+		MPI_Comm                                        communicator,
+		ElementLayout*                                  elementLayout,
+		NodeLayout*                                     nodeLayout )
+{
+	MeshDecomp* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(MeshDecomp) );
+	self = (MeshDecomp*)_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->nodeMapLocalToGlobal = nodeMapLocalToGlobal;
+	self->nodeMapDomainToGlobal = nodeMapDomainToGlobal;
+	self->nodeMapShadowToGlobal = nodeMapShadowToGlobal;
+	self->nodeMapGlobalToLocal = nodeMapGlobalToLocal;
+	self->nodeMapGlobalToDomain = nodeMapGlobalToDomain;
+	self->nodeMapGlobalToShadow = nodeMapGlobalToShadow;
+	self->elementMapLocalToGlobal = elementMapLocalToGlobal;
+	self->elementMapDomainToGlobal = elementMapDomainToGlobal;
+	self->elementMapShadowToGlobal = elementMapShadowToGlobal;
+	self->elementMapGlobalToLocal = elementMapGlobalToLocal;
+	self->elementMapGlobalToDomain = elementMapGlobalToDomain;
+	self->elementMapGlobalToShadow = elementMapGlobalToShadow;
+	self->shadowProcCount = shadowProcCount;
+	self->shadowBuildProcs = shadowBuildProcs;
+	self->shadowProcElementCount = shadowProcElementCount;
+	self->procWithElement = procWithElement;
+
+	if( initFlag ){
+		_MeshDecomp_Init( self, communicator, elementLayout, nodeLayout, NULL );
+	}
+	
+	return self;
+}
+
+void _MeshDecomp_Init(
+		MeshDecomp*					self,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		Stg_ObjectList*             pointer_Register )
+{
+	/* General and Virtual info should already be set */
+	
+	/* MeshDecomp info */
+	char*   storageStr;
+	
+	self->isConstructed = True;
+	self->communicator = communicator;
+	
+	MPI_Comm_rank( self->communicator, (int*)&self->rank );
+	MPI_Comm_size( self->communicator, (int*)&self->nproc );
+	self->procsInUse = 0;
+	
+	self->allowUnusedCPUs = Dictionary_GetBool_WithDefault( self->dictionary, "allowUnusedCPUs", False ) ;
+	self->allowPartitionOnNode = Dictionary_GetBool_WithDefault( self->dictionary, "allowPartitionOnNode", True );
+	self->allowPartitionOnElement = Dictionary_GetBool_WithDefault( self->dictionary, "allowPartitionOnElement", False );
+
+	assert( self->allowPartitionOnNode || self->allowPartitionOnElement );
+
+	self->allowUnbalancing = Dictionary_GetBool_WithDefault( self->dictionary, "allowUnbalancing", False );
+
+	self->procTopology = NULL;
+	
+	/* Determine IndexSet storage type */
+	storageStr = Dictionary_GetString_WithDefault( self->dictionary, "selfStorage", "storeNeighbours" );
+	if( !strcmp( storageStr, "storeAll" ) ) {
+		self->storage = StoreAll;
+	}
+	else if( !strcmp( storageStr, "storeSelf" ) ) {
+		self->storage = StoreSelf;
+	}
+	else { /* !strcmp( storageStr, "storeNeighbours" ) */
+		self->storage = StoreNeighbours;
+	}
+	
+	self->elementLayout = elementLayout;
+	self->nodeLayout = nodeLayout;
+	self->localElementSets = NULL;
+	self->shadowElementSets = NULL;
+	self->localNodeSets = NULL;
+	self->shadowNodeSets = NULL;
+	
+	self->nodeGlobalCount = 0;
+	self->nodeLocalCount = 0;
+	self->nodeShadowCount = 0;
+	self->nodeDomainCount = 0;
+	
+	self->elementGlobalCount = 0;
+	self->elementLocalCount = 0;
+	self->elementShadowCount = 0;
+	self->elementDomainCount = 0;
+
+	/* TODO - Hack: Registering pointer to node domain count */
+	if (pointer_Register) {
+		Name nodeDomainCountName;
+
+		Stg_asprintf( &nodeDomainCountName, "%s-nodeDomainCount", self->name );  /* Need to free memory somewhere! */
+		Stg_ObjectList_GlobalPointerAppend( pointer_Register, &self->nodeDomainCount, nodeDomainCountName );
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshDecomp_Delete( void* meshDecomp ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	
+	if( self->procTopology ) {
+		Stg_Class_Delete( self->procTopology );
+		self->procTopology = NULL;
+	}
+	
+	if( self->localElementSets ) {
+		Partition_Index proc_I;
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			if( self->localElementSets[proc_I] )
+				Stg_Class_Delete( self->localElementSets[proc_I] );
+		Memory_Free( self->localElementSets );
+		self->localElementSets = NULL;
+	}
+	
+	if( self->shadowElementSets ) {
+		Partition_Index proc_I;	
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			if( self->shadowElementSets[proc_I] )
+				Stg_Class_Delete( self->shadowElementSets[proc_I] );
+		Memory_Free( self->shadowElementSets );
+		self->shadowElementSets = NULL;
+	}
+	
+	if( self->localNodeSets ) {
+		Partition_Index proc_I;
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			if( self->localNodeSets[proc_I] )
+				Stg_Class_Delete( self->localNodeSets[proc_I] );
+		Memory_Free( self->localNodeSets );
+		self->localNodeSets = NULL;
+	}
+	
+	if( self->shadowNodeSets ) {
+		Partition_Index proc_I;
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			if( self->shadowNodeSets[proc_I] )
+				Stg_Class_Delete( self->shadowNodeSets[proc_I] );
+		Memory_Free( self->shadowNodeSets );
+		self->shadowNodeSets = NULL;
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _MeshDecomp_Print( void* meshDecomp, Stream* stream ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshDecompStream;
+	meshDecompStream = Journal_Register( InfoStream_Type, "MeshDecompStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "MeshDecomp (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* MeshDecomp info */
+}
+
+
+void* _MeshDecomp_Copy( void* meshDecomp, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	MeshDecomp*	self = (MeshDecomp*)meshDecomp;
+	MeshDecomp*	newMeshDecomp;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newMeshDecomp = (MeshDecomp*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newMeshDecomp->nodeMapLocalToGlobal = self->nodeMapLocalToGlobal;
+	newMeshDecomp->nodeMapDomainToGlobal = self->nodeMapDomainToGlobal;
+	newMeshDecomp->nodeMapShadowToGlobal = self->nodeMapShadowToGlobal;
+	newMeshDecomp->nodeMapGlobalToLocal = self->nodeMapGlobalToLocal;
+	newMeshDecomp->nodeMapGlobalToDomain = self->nodeMapGlobalToDomain;
+	newMeshDecomp->nodeMapGlobalToShadow = self->nodeMapGlobalToShadow;
+	newMeshDecomp->elementMapLocalToGlobal = self->elementMapLocalToGlobal;
+	newMeshDecomp->elementMapDomainToGlobal = self->elementMapDomainToGlobal;
+	newMeshDecomp->elementMapShadowToGlobal = self->elementMapShadowToGlobal;
+	newMeshDecomp->elementMapGlobalToLocal = self->elementMapGlobalToLocal;
+	newMeshDecomp->elementMapGlobalToDomain = self->elementMapGlobalToDomain;
+	newMeshDecomp->elementMapGlobalToShadow = self->elementMapGlobalToShadow;
+	newMeshDecomp->shadowProcCount = self->shadowProcCount;
+	newMeshDecomp->shadowBuildProcs = self->shadowBuildProcs;
+	newMeshDecomp->shadowProcElementCount = self->shadowProcElementCount;
+	newMeshDecomp->procWithElement = self->procWithElement;
+	
+	newMeshDecomp->dictionary = self->dictionary;
+	newMeshDecomp->communicator = self->communicator;
+	newMeshDecomp->rank = self->rank;
+	newMeshDecomp->nproc = self->nproc;
+	newMeshDecomp->procsInUse = self->procsInUse;
+	newMeshDecomp->allowUnusedCPUs = self->allowUnusedCPUs;
+	newMeshDecomp->allowPartitionOnNode = self->allowPartitionOnNode;
+	newMeshDecomp->allowPartitionOnElement = self->allowPartitionOnElement;
+	newMeshDecomp->allowUnbalancing = self->allowUnbalancing;
+	newMeshDecomp->storage = self->storage;
+	newMeshDecomp->shadowDepth = self->shadowDepth;
+	newMeshDecomp->nodeGlobalCount = self->nodeGlobalCount;
+	newMeshDecomp->nodeLocalCount = self->nodeLocalCount;
+	newMeshDecomp->nodeShadowCount = self->nodeShadowCount;
+	newMeshDecomp->nodeDomainCount = self->nodeDomainCount;
+	newMeshDecomp->elementGlobalCount = self->elementGlobalCount;
+	newMeshDecomp->elementLocalCount = self->elementLocalCount;
+	newMeshDecomp->elementShadowCount = self->elementShadowCount;
+	newMeshDecomp->elementDomainCount = self->elementDomainCount;
+	
+	if( deep ) {
+		newMeshDecomp->procTopology = (Topology*)Stg_Class_Copy( self->procTopology, NULL, deep, nameExt, map );
+		newMeshDecomp->elementLayout = (ElementLayout*)Stg_Class_Copy( self->elementLayout, NULL, deep, nameExt, map );
+		newMeshDecomp->nodeLayout = (NodeLayout*)Stg_Class_Copy( self->nodeLayout, NULL, deep, nameExt, map );
+		
+		if( (newMeshDecomp->localNodeSets = PtrMap_Find( map, self->localNodeSets )) == NULL && self->localNodeSets ) {
+			Partition_Index		proc_I;
+			
+			newMeshDecomp->localNodeSets = Memory_Alloc_Array( IndexSet*, newMeshDecomp->procsInUse, "MeshDecomp->localNodeSets" );
+			for( proc_I = 0; proc_I < newMeshDecomp->procsInUse; proc_I++ ) {
+				newMeshDecomp->localNodeSets[proc_I] = (IndexSet*)Stg_Class_Copy( self->localNodeSets[proc_I], NULL, deep, nameExt, map );
+			}
+		}
+		
+		if( (newMeshDecomp->shadowNodeSets = PtrMap_Find( map, self->shadowNodeSets )) == NULL && self->shadowNodeSets ) {
+			Partition_Index		proc_I;
+			
+			newMeshDecomp->shadowNodeSets = Memory_Alloc_Array( IndexSet*, newMeshDecomp->procsInUse, "MeshDecomp->shadowNodeSets" );
+			for( proc_I = 0; proc_I < newMeshDecomp->procsInUse; proc_I++ ) {
+				newMeshDecomp->shadowNodeSets[proc_I] = (IndexSet*)Stg_Class_Copy( self->shadowNodeSets[proc_I], NULL, deep, nameExt, map );
+			}
+		}
+		
+		if( (newMeshDecomp->localElementSets = PtrMap_Find( map, self->localElementSets )) == NULL && self->localElementSets ) {
+			Partition_Index		proc_I;
+			
+			newMeshDecomp->localElementSets = Memory_Alloc_Array( IndexSet*, newMeshDecomp->procsInUse, "MeshDecomp->localElementSets" );
+			for( proc_I = 0; proc_I < newMeshDecomp->procsInUse; proc_I++ ) {
+				newMeshDecomp->localElementSets[proc_I] = (IndexSet*)Stg_Class_Copy( self->localElementSets[proc_I], NULL, deep, nameExt, map );
+			}
+		}
+		
+		if( (newMeshDecomp->shadowElementSets = PtrMap_Find( map, self->shadowElementSets )) == NULL && self->shadowElementSets ) {
+			Partition_Index		proc_I;
+			
+			newMeshDecomp->shadowElementSets = Memory_Alloc_Array( IndexSet*, newMeshDecomp->procsInUse, "MeshDecomp->shadowElementSets" );
+			for( proc_I = 0; proc_I < newMeshDecomp->procsInUse; proc_I++ ) {
+				newMeshDecomp->shadowElementSets[proc_I] = (IndexSet*)Stg_Class_Copy( self->shadowElementSets[proc_I], NULL, deep, nameExt, map );
+			}
+		}
+	}
+	else {
+		newMeshDecomp->procTopology = self->procTopology;
+		newMeshDecomp->elementLayout = self->elementLayout;
+		newMeshDecomp->nodeLayout = self->nodeLayout;
+		newMeshDecomp->localNodeSets = self->localNodeSets;
+		newMeshDecomp->shadowNodeSets = self->shadowNodeSets;
+		newMeshDecomp->localElementSets = self->localElementSets;
+		newMeshDecomp->shadowElementSets = self->shadowElementSets;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newMeshDecomp;
+}
+
+
+/* Shadow virtual functions */
+
+Element_ShadowIndex _MeshDecomp_Shadow_ProcElementCount(void* meshDecomp, Partition_Index rank) {
+	assert( 0 );
+	return 0;
+}
+
+
+/* Processor virtual functions */
+Partition_Index _MeshDecomp_Proc_WithElement( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	MeshDecomp*     self = (MeshDecomp*)meshDecomp;
+	Partition_Index proc_I;
+	
+	for( proc_I = 0; proc_I < self->procsInUse; proc_I++ ) {
+		if( self->localElementSets[proc_I] && IndexSet_IsMember( self->localElementSets[proc_I], globalIndex ) )
+			return proc_I;
+	}
+	
+	return self->nproc;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+Node_GlobalIndex* MeshDecomp_BuildNodeLocalToGlobalMap( void* meshDecomp ) {
+	MeshDecomp*	self = (MeshDecomp*)meshDecomp;
+	Node_LocalIndex lNodeCnt;
+	Node_GlobalIndex* nodeL2G;
+	IndexSet* myLocalNodeSet;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+
+	myLocalNodeSet = self->localNodeSets[self->rank];
+	
+	lNodeCnt = IndexSet_UpdateMembersCount( myLocalNodeSet );
+	nodeL2G = Memory_Alloc_Array( Node_GlobalIndex, lNodeCnt, "nodeL2G" );
+	IndexSet_GetMembers2( myLocalNodeSet, nodeL2G );
+	return nodeL2G;
+}
+
+
+Node_GlobalIndex* MeshDecomp_BuildNodeDomainToGlobalMap( void* meshDecomp ) {
+	MeshDecomp*	self = (MeshDecomp*)meshDecomp;
+	Node_LocalIndex lNodeCnt;
+	Node_GlobalIndex* nodeD2G;
+	Node_ShadowIndex sNodeCnt;
+	Node_GlobalIndex* tempNodeS2G;
+	IndexSet* myLocalNodeSet;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+
+	myLocalNodeSet = self->localNodeSets[self->rank];
+	lNodeCnt = IndexSet_UpdateMembersCount( myLocalNodeSet );
+	nodeD2G = Memory_Alloc_Array( Node_GlobalIndex, lNodeCnt, "nodeD2G" );
+	IndexSet_GetMembers2( myLocalNodeSet, nodeD2G );
+
+	if ( self->nodeShadowCount > 0 ) {
+		IndexSet* myShadowNodeSet = self->shadowNodeSets[self->rank];
+		IndexSet_GetMembers( myShadowNodeSet, &sNodeCnt, &tempNodeS2G );
+		/* combine the two */
+		nodeD2G = Memory_Realloc_Array( nodeD2G, Node_GlobalIndex, lNodeCnt + sNodeCnt );
+		memcpy( &nodeD2G[lNodeCnt], tempNodeS2G, sNodeCnt * sizeof(Node_GlobalIndex) );
+		Memory_Free( tempNodeS2G );
+	}
+
+	return nodeD2G;
+}
+
+
+Node_LocalIndex* MeshDecomp_BuildNodeGlobalToLocalMap( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Node_GlobalIndex	gNode_I = 0;
+	Node_LocalIndex		lNode_I = 0;
+	Node_LocalIndex* nodeG2L;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+
+	nodeG2L = Memory_Alloc_Array( Node_LocalIndex, self->nodeGlobalCount, "nodeG2L" );
+	
+	for( gNode_I = 0; gNode_I < self->nodeGlobalCount; gNode_I++ ) {
+		if ( IndexSet_IsMember( self->localNodeSets[self->rank], gNode_I ) ) {
+			nodeG2L[gNode_I] = lNode_I++;
+		}	
+		else {
+			nodeG2L[gNode_I] = MD_N_Invalid( self );
+		}	
+	}	
+
+	return nodeG2L;
+}
+
+
+Node_DomainIndex* MeshDecomp_BuildNodeGlobalToDomainMap( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Node_GlobalIndex	gNode_I = 0;
+	Node_DomainIndex	lNode_I = 0;
+	Node_DomainIndex	sNode_I = self->nodeLocalCount;
+	IndexSet*			localSet  = NULL;
+	IndexSet*			shadowSet = NULL;
+	Node_DomainIndex*	nodeG2D;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+
+	nodeG2D = Memory_Alloc_Array( Node_DomainIndex, self->nodeGlobalCount, "nodeG2D" );
+	
+	localSet = self->localNodeSets[self->rank];
+	if ( 0 != self->nodeShadowCount ) {
+		shadowSet = self->shadowNodeSets[self->rank];
+	}
+	
+	for( gNode_I = 0; gNode_I < self->nodeGlobalCount; gNode_I++ ) {
+		if ( IndexSet_IsMember( localSet, gNode_I ) ) {
+			nodeG2D[gNode_I] = lNode_I++;
+		}	
+		else if ( (0 != self->nodeShadowCount) && IndexSet_IsMember( shadowSet, gNode_I ) ) {
+			nodeG2D[gNode_I] = sNode_I++;
+		}
+		else {
+			nodeG2D[gNode_I] = MD_N_Invalid( self );
+		}	
+	}	
+
+	return nodeG2D;
+}
+
+
+Element_GlobalIndex* MeshDecomp_BuildElementLocalToGlobalMap( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Element_LocalIndex		lElementCnt;
+	Element_GlobalIndex*	elementL2G;
+	IndexSet* myLocalElementSet;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+	myLocalElementSet = self->localElementSets[self->rank];
+	
+	lElementCnt = IndexSet_UpdateMembersCount( myLocalElementSet );
+	elementL2G = Memory_Alloc_Array( Element_GlobalIndex, lElementCnt, "elementL2G" );
+	IndexSet_GetMembers2( myLocalElementSet, elementL2G );
+	return elementL2G;
+}	
+
+
+Element_GlobalIndex* MeshDecomp_BuildElementDomainToGlobalMap( void* meshDecomp ) {
+	MeshDecomp*	self = (MeshDecomp*)meshDecomp;
+	Element_LocalIndex lElementCnt;
+	Element_ShadowIndex sElementCnt;
+	Element_DomainIndex* elementD2G;
+	Element_DomainIndex* tempElementS2G;
+	IndexSet* myLocalElementSet = self->localElementSets[self->rank];
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+	myLocalElementSet = self->localElementSets[self->rank];
+
+	lElementCnt = IndexSet_UpdateMembersCount( myLocalElementSet );
+	elementD2G = Memory_Alloc_Array( Element_GlobalIndex, lElementCnt, "elementD2G" );
+	IndexSet_GetMembers2( myLocalElementSet, elementD2G );
+
+	if ( self->elementShadowCount > 0 ) {
+		IndexSet_GetMembers( self->shadowElementSets[self->rank], &sElementCnt, &tempElementS2G );
+		/* combine the two */
+		elementD2G = Memory_Realloc_Array( elementD2G, Element_GlobalIndex, lElementCnt + sElementCnt );
+		memcpy( &elementD2G[lElementCnt], tempElementS2G, sElementCnt * sizeof(Element_GlobalIndex) );
+		Memory_Free( tempElementS2G );
+	}
+
+	return elementD2G;
+}
+
+
+Element_LocalIndex* MeshDecomp_BuildElementGlobalToLocalMap( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Element_GlobalIndex	gEl_I = 0;
+	Element_LocalIndex	lEl_I = 0;
+	Element_LocalIndex* elementG2L;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+
+	elementG2L = Memory_Alloc_Array( Element_LocalIndex, self->elementGlobalCount, "elementG2L" );
+		
+	for( gEl_I = 0; gEl_I < self->elementGlobalCount; gEl_I++ ) {
+		if( IndexSet_IsMember( self->localElementSets[self->rank], gEl_I ) ) {
+			elementG2L[gEl_I] = lEl_I++;
+		}
+		else {
+			elementG2L[gEl_I] = MD_E_Invalid( self );
+		}	
+	}	
+
+	return elementG2L;
+}
+
+
+Element_DomainIndex* MeshDecomp_BuildElementGlobalToDomainMap( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Element_GlobalIndex	gElement_I = 0;
+	Element_LocalIndex		lElement_I = 0;
+	Element_LocalIndex		sElement_I = self->elementLocalCount;
+	IndexSet*			localSet  = NULL;
+	IndexSet*			shadowSet = NULL;
+	Element_DomainIndex* elementG2D;
+	
+	if ( self->rank >= self->procsInUse ) return NULL;
+
+	elementG2D = Memory_Alloc_Array( Element_DomainIndex, self->elementGlobalCount, "elementG2D" );
+	
+	localSet = self->localElementSets[self->rank];
+	if ( 0 != self->elementShadowCount ) {
+		sElement_I = self->elementLocalCount;
+		shadowSet = self->shadowElementSets[self->rank];
+	}
+
+	for( gElement_I = 0; gElement_I < self->elementGlobalCount; gElement_I++ ) {
+		if ( IndexSet_IsMember( localSet, gElement_I ) ) {
+			elementG2D[gElement_I] = lElement_I++;
+		}	
+		else if ( ( 0 != self->elementShadowCount ) && ( IndexSet_IsMember( shadowSet, gElement_I ) ) ) {
+			elementG2D[gElement_I] = sElement_I++;
+		}
+		else {
+			elementG2D[gElement_I] = MD_E_Invalid( self );
+		}	
+	}	
+
+	return elementG2D;
+}
+
+
+/* *** On-the-fly conversion functions *** */
+
+Node_GlobalIndex _MeshDecomp_Node_LocalToGlobal1D( void* meshDecomp, Node_LocalIndex localIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	return IndexSet_GetIndexOfNthMember( self->localNodeSets[self->rank], localIndex );
+}
+
+
+Node_GlobalIndex _MeshDecomp_Node_ShadowToGlobal1D( void* meshDecomp, Node_ShadowIndex shadowIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	if (self->nodeShadowCount == 0)
+		return MD_N_Invalid(self);
+	else
+		return IndexSet_GetIndexOfNthMember( self->shadowNodeSets[self->rank], shadowIndex );
+}
+
+
+Node_GlobalIndex _MeshDecomp_Node_DomainToGlobal1D( void* meshDecomp, Node_DomainIndex domainIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	if ( domainIndex < self->nodeLocalCount ) {
+		return self->nodeMapLocalToGlobal( self, domainIndex );
+	}
+	else if ( domainIndex < self->nodeDomainCount ) {
+		return  self->nodeMapShadowToGlobal( self, domainIndex - self->nodeLocalCount );
+	}
+	else return MD_N_Invalid( self );
+}
+
+
+Node_LocalIndex _MeshDecomp_Node_GlobalToLocal1D( void* meshDecomp, Node_GlobalIndex globalIndex ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	
+	if (!IndexSet_IsMember( self->localNodeSets[self->rank], globalIndex ) ) {
+		return MD_N_Invalid( self );
+	}
+	else {
+		int		lNode_I = 0;
+		IndexSet_Index	index;
+		
+		/* since we now know this global index corresponds to a local node, just 
+		find out how many other local nodes there are before it.
+		
+		THIS IS THE SLOWEST FUNCTION IN THE WORLD YET DISCOVERED 
+		 */
+		for( index = 0; index < globalIndex; index++ ) {
+			if( IndexSet_IsMember( self->localNodeSets[self->rank], index ) ) {
+				lNode_I++;
+			}
+		}	
+		
+		return lNode_I;
+	}
+}
+
+
+Node_ShadowIndex _MeshDecomp_Node_GlobalToShadow1D( void* meshDecomp, Node_GlobalIndex globalIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	
+	if ( (self->nodeShadowCount == 0) || !IndexSet_IsMember( self->shadowNodeSets[self->rank], globalIndex ) ) 
+	{	
+		return MD_N_Invalid( self );
+	}	
+	else {
+		IndexSet_Index	index;
+		Node_ShadowIndex	sNode_I = 0;
+		
+		/* since we now know this global index corresponds to a shadow node, just 
+		find out how many other shadow nodes there are before it. */
+		for( index = 0; index < globalIndex; index++ ) {
+			if( IndexSet_IsMember( self->shadowNodeSets[self->rank], index ) ) {
+				sNode_I++;
+			}
+		}	
+		
+		return sNode_I;
+	}
+	
+	return MD_N_Invalid( self );
+}
+
+
+Node_DomainIndex _MeshDecomp_Node_GlobalToDomain1D( void* meshDecomp, Node_GlobalIndex globalIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	Node_LocalIndex lNode_I;
+	Node_ShadowIndex sNode_I;
+
+	if ( (lNode_I = self->nodeMapGlobalToLocal( self, globalIndex)) != MD_N_Invalid(self) ) {
+		return lNode_I;
+	}
+	else if ( (sNode_I = self->nodeMapGlobalToShadow( self, globalIndex)) != MD_N_Invalid(self) ) {
+		return self->nodeLocalCount + sNode_I;
+	}
+	
+	return MD_N_Invalid( self );
+}
+
+
+Element_GlobalIndex _MeshDecomp_Element_LocalToGlobal1D( void* meshDecomp, Element_LocalIndex localIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	return IndexSet_GetIndexOfNthMember( self->localElementSets[self->rank], localIndex );
+}
+
+
+Element_GlobalIndex _MeshDecomp_Element_ShadowToGlobal1D( void* meshDecomp, Element_ShadowIndex shadowIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	if (self->elementShadowCount == 0)
+		return MD_E_Invalid(self);
+	else
+		return IndexSet_GetIndexOfNthMember( self->shadowElementSets[self->rank], shadowIndex );
+}
+
+
+Element_GlobalIndex _MeshDecomp_Element_DomainToGlobal1D( void* meshDecomp, Element_DomainIndex domainIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	if ( domainIndex < self->elementLocalCount ) {
+		return self->elementMapLocalToGlobal( self, domainIndex );
+	}
+	else if ( domainIndex < self->elementDomainCount ) {
+		return  self->elementMapShadowToGlobal( self, domainIndex - self->elementLocalCount );
+	}
+	else return MD_E_Invalid( self );
+}
+
+
+Element_LocalIndex _MeshDecomp_Element_GlobalToLocal1D( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	
+	if (!IndexSet_IsMember( self->localElementSets[self->rank], globalIndex ) ) {
+		return MD_E_Invalid( self );
+	}
+	else {
+		int		lElement_I = 0;
+		IndexSet_Index	index;
+		
+		/* since we now know this global index corresponds to a local element, just 
+		find out how many other local elements there are before it. */
+		for( index = 0; index < globalIndex; index++ ) {
+			if( IndexSet_IsMember( self->localElementSets[self->rank], index ) ) {
+				lElement_I++;
+			}
+		}	
+		
+		return lElement_I;
+	}
+}
+
+
+Element_ShadowIndex _MeshDecomp_Element_GlobalToShadow1D( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	
+	if ( (self->elementShadowCount == 0) || !IndexSet_IsMember( self->shadowElementSets[self->rank], globalIndex ) ) 
+	{	
+		return MD_E_Invalid( self );
+	}	
+	else {
+		IndexSet_Index	index;
+		Element_ShadowIndex	sElement_I = 0;
+		
+		/* since we now know this global index corresponds to a shadow element, just 
+		find out how many other shadow elements there are before it. */
+		for( index = 0; index < globalIndex; index++ ) {
+			if( IndexSet_IsMember( self->shadowElementSets[self->rank], index ) ) {
+				sElement_I++;
+			}
+		}	
+		
+		return sElement_I;
+	}
+	
+	return MD_E_Invalid( self );
+}
+
+
+Element_DomainIndex _MeshDecomp_Element_GlobalToDomain1D( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	MeshDecomp* self = (MeshDecomp*)meshDecomp;
+	Element_LocalIndex lElement_I;
+	Element_ShadowIndex sElement_I;
+
+	if ( (lElement_I = self->elementMapGlobalToLocal( self, globalIndex)) != MD_E_Invalid(self) ) {
+		return lElement_I;
+	}
+	else if ( (sElement_I = self->elementMapGlobalToShadow( self, globalIndex)) != MD_E_Invalid(self) ) {
+		return self->elementLocalCount + sElement_I;
+	}
+	
+	return MD_E_Invalid( self );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+void _MeshDecomp_DecomposeNodes( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Partition_Index		procCnt;
+	Partition_Index*	procs;
+	Partition_Index		proc_I;
+	
+	self->localNodeSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "MeshDecomp->localNodeSets" );
+	for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+		self->localNodeSets[proc_I] = NULL;
+	
+	if( self->storage == StoreAll ) {
+		procCnt = self->procsInUse;
+		procs = Memory_Alloc_Array( Partition_Index, procCnt, "procs" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			procs[proc_I] = proc_I;
+	}
+	else if( self->storage == StoreSelf ) {
+		procCnt = 1;
+		procs = Memory_Alloc_Array( Partition_Index, procCnt, "procs" );
+		procs[proc_I] = self->rank;
+	}
+	else /* self->storage == StoreNeighbours */{
+		procCnt = self->shadowProcCount( self ) + 1;
+		procs = Memory_Alloc_Array( Partition_Index, procCnt, "procs" );
+		procs[0] = self->rank;
+		self->shadowBuildProcs( self, &procs[1] );
+	}
+	
+	for( proc_I = 0; proc_I < procCnt; proc_I++ ) {
+		Index*  indices = NULL;
+		Index   indexCnt;
+		
+		self->localNodeSets[procs[proc_I]] = IndexSet_New( self->nodeGlobalCount );
+		IndexSet_GetMembers( self->localElementSets[procs[proc_I]], &indexCnt, &indices );
+		
+		if( indexCnt ) {
+			Node_GlobalIndex	nodeCnt;
+			Node_GlobalIndex*       nodes;
+			Node_GlobalIndex	n_I;
+			
+			nodeCnt = NodeLayout_BuildSubset( self->nodeLayout, indexCnt, indices, &nodes );
+			
+			if( nodeCnt ) {
+				for( n_I = 0; n_I < nodeCnt; n_I++ )
+					IndexSet_Add( self->localNodeSets[procs[proc_I]], nodes[n_I] );
+				
+				Memory_Free( nodes );
+			}
+			else {
+				Stg_Class_Delete( self->localNodeSets[procs[proc_I]] );
+				self->localNodeSets[procs[proc_I]] = NULL;
+			}
+			
+			Memory_Free( indices );
+		}
+	}
+	
+	if( procs )
+		Memory_Free( procs );
+}
+
+
+/* Note this func only works for shadow depth 1 - see the firewall below */
+void _MeshDecomp_BuildShadowSets(
+		void*					meshDecomp,
+		Partition_Index				proc,
+		Element_GlobalIndex			edgeElementCount,
+		Element_GlobalIndex*			edgeElements )
+{
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	Topology*		topology = self->elementLayout->topology;
+	Index			indexCnt;
+	Index*			indices;
+	Node_ShadowIndex	nodeCnt, sNode_I;
+	Node_ShadowIndex*       nodes;
+	Element_LocalIndex      lElement_I;
+	Partition_Index		proc_I;
+	Stream*                 error = Journal_Register( Error_Type, self->type );
+	
+	Journal_Firewall( self->shadowDepth > 0, error, "Error: %s() called when shadow depth set to 0.\n",
+		__func__ );
+
+	Journal_Firewall( self->shadowDepth == 1, error, "Error: %s() called when shadow depth > 1. This function "
+		"for arbitrary mesh types uses Topology_BuildNeighbours() to calculate shadow nodes, and "
+		"thus currently only works for shadow depth 1.\n", __func__ );
+	
+	/* We can only build shadow information for procs that have local element/node info, check
+	   that 'storage' is set to an appropriate value */
+	   
+	/* If user has requested self storage only, then we can only build shadow
+	   info for the current proc. Check that the user's hasn't requested it for
+	   another proc. */
+	if ( self->storage == StoreSelf ) {
+		Journal_Firewall( proc == self->rank, error, "Error- in %s: Cannot build shadow sets "
+			"for proc %d, since you have only requested 'StoreSelf' storage - thus "
+			"cannot build info for processors other than this one's rank of %d.\n",
+			__func__, proc, self->rank );
+	}
+	
+	/* If user has requested self+neighbour storage only, then check that the given
+	   processor to build shadow info for is actually on one our neighbours */
+	if( self->storage == StoreNeighbours && proc != self->rank ) {
+		NeighbourIndex  nbrCnt = self->procTopology->neighbourCount( self->procTopology, self->rank );
+		
+		if( nbrCnt ) {
+			NeighbourIndex*		nbrs = Memory_Alloc_Array( NeighbourIndex, nbrCnt, "nbrs" );
+			
+			self->procTopology->buildNeighbours( self->procTopology, self->rank, nbrs );
+			for( proc_I = 0; proc_I < nbrCnt; proc_I++ ) {
+				if( nbrs[proc_I] == proc )
+					break;
+			}
+			
+			Memory_Free( nbrs );
+			
+			if( proc_I == nbrCnt )
+				Journal_Firewall( 0, error, "Error- in %s: Cannot build shadow sets "
+					"for proc %d, since you have requested 'StoreNeighbours' storage but "
+					"requested proc is not among the current processor %d's %d neighbours.\n",
+					__func__, proc, nbrCnt, self->rank );
+		}
+		else
+			Journal_Firewall( 0, error, "Error- in %s: Cannot build shadow sets "
+				"for proc %d, since you have requested 'StoreNeighbours' storage but "
+				"the current processor %d has no neighbours.\n",
+				__func__, proc, self->rank );
+	}
+	
+	/* If the shadow set arrays have not yet been allocated, do it now */
+	if( !self->shadowElementSets ) {
+		self->shadowElementSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "MeshDecomp->shadowElementSets" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			self->shadowElementSets[proc_I] = NULL;
+	}
+	
+	if( !self->shadowNodeSets ) {
+		self->shadowNodeSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "MeshDecomp->shadowNodeSets" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ )
+			self->shadowNodeSets[proc_I] = NULL;
+	}
+	
+	/* If the IndexSets for this proc have not been constructed, do it now */
+	if( !self->shadowElementSets[proc] )
+		self->shadowElementSets[proc] = IndexSet_New( self->elementGlobalCount );
+	
+	if( !self->shadowNodeSets[proc] )
+		self->shadowNodeSets[proc] = IndexSet_New( self->nodeGlobalCount );
+	
+	/* Build shadow elements for this proc */
+	for( lElement_I = 0; lElement_I < edgeElementCount; lElement_I++ ) {
+		Element_GlobalIndex     gElement_I = edgeElements[lElement_I];
+		Element_NeighbourIndex  eNbrCnt = topology->neighbourCount( topology, gElement_I );
+		
+		if( eNbrCnt ) {
+			Element_NeighbourIndex		eNbr_I;
+			Element_NeighbourIndex*		eNbrs = Memory_Alloc_Array( Element_NeighbourIndex, eNbrCnt, "eNbrs" );
+			
+			/* Note: using the neighbour only allows shadow depth of 1 */
+			topology->buildNeighbours( topology, gElement_I, eNbrs );
+			
+			for( eNbr_I = 0; eNbr_I < eNbrCnt; eNbr_I++ ) {
+				/* First check if this neigbour position is a real element. */
+				if ( eNbrs[eNbr_I] < topology->indexCount ) {
+					/* Now, only add the element to the shadow set if its on the Neigbour processor. */
+					if( !IndexSet_IsMember( self->localElementSets[proc], eNbrs[eNbr_I] ) )
+						IndexSet_Add( self->shadowElementSets[proc], eNbrs[eNbr_I] );
+				}		
+			}
+			
+			Memory_Free( eNbrs );
+		}
+	}
+	
+	IndexSet_GetMembers( self->shadowElementSets[proc], &indexCnt, &indices );
+	nodeCnt = NodeLayout_BuildSubset( self->nodeLayout, indexCnt, indices, &nodes );
+	
+	for( sNode_I = 0; sNode_I < nodeCnt; sNode_I++ ) {
+		if( !IndexSet_IsMember( self->localNodeSets[proc], nodes[sNode_I] ) )
+			IndexSet_Add( self->shadowNodeSets[proc], nodes[sNode_I] );
+	}
+	
+	Memory_Free( nodes );
+}
+
+/* Serial Functions - Reassign function pointers for superfast serial implementations */
+void MeshDecomp_OverrideMethodsIfSerial( void* meshDecomp ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+
+	/* if I am not a serial decomposition - then return */
+	if ( self->nproc > 1 )
+		return;
+
+	self->nodeMapLocalToGlobal = _MeshDecomp_Node_MapLocalToGlobal_Serial;
+	self->nodeMapDomainToGlobal = _MeshDecomp_Node_MapDomainToGlobal_Serial;
+	self->nodeMapShadowToGlobal = _MeshDecomp_Node_MapShadowToGlobal_Serial;
+	self->nodeMapGlobalToLocal = _MeshDecomp_Node_MapGlobalToLocal_Serial;
+	self->nodeMapGlobalToDomain = _MeshDecomp_Node_MapGlobalToDomain_Serial;
+	self->nodeMapGlobalToShadow = _MeshDecomp_Node_MapGlobalToShadow_Serial;
+
+	self->elementMapLocalToGlobal = _MeshDecomp_Element_MapLocalToGlobal_Serial;
+	self->elementMapDomainToGlobal = _MeshDecomp_Element_MapDomainToGlobal_Serial;
+	self->elementMapShadowToGlobal = _MeshDecomp_Element_MapGlobalToShadow_Serial;
+	self->elementMapGlobalToLocal = _MeshDecomp_Element_MapGlobalToLocal_Serial;
+	self->elementMapGlobalToDomain = _MeshDecomp_Element_MapGlobalToDomain_Serial;
+	self->elementMapGlobalToShadow = _MeshDecomp_Element_MapGlobalToShadow_Serial;
+
+	self->shadowProcCount = _MeshDecomp_Shadow_ProcCount_Serial;
+	self->shadowBuildProcs = _MeshDecomp_Shadow_BuildProcs_Serial;
+	self->shadowProcElementCount = _MeshDecomp_Shadow_ProcElementCount_Serial;
+	self->procWithElement = _MeshDecomp_Proc_WithElement_Serial;
+}
+
+Node_GlobalIndex _MeshDecomp_Node_MapLocalToGlobal_Serial( void* meshDecomp, Node_LocalIndex localIndex ) {
+	return localIndex;
+}
+
+Node_GlobalIndex _MeshDecomp_Node_MapDomainToGlobal_Serial( void* meshDecomp, Node_DomainIndex domainIndex ) {
+	return domainIndex;
+}
+Node_GlobalIndex _MeshDecomp_Node_MapShadowToGlobal_Serial( void* meshDecomp, Node_ShadowIndex shadowIndex ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	/* There should not be shadow nodes in serial */
+	return MD_N_Invalid( self );
+}
+
+Node_LocalIndex _MeshDecomp_Node_MapGlobalToLocal_Serial( void* meshDecomp, Node_GlobalIndex globalIndex ) {
+	return globalIndex;
+}
+
+Node_DomainIndex _MeshDecomp_Node_MapGlobalToDomain_Serial( void* meshDecomp, Node_GlobalIndex globalIndex ) {
+	return globalIndex;
+}
+
+Node_ShadowIndex _MeshDecomp_Node_MapGlobalToShadow_Serial( void* meshDecomp, Node_GlobalIndex globalIndex ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	/* There should not be shadow nodes in serial */
+	return MD_N_Invalid( self );	
+}
+
+Element_GlobalIndex _MeshDecomp_Element_MapLocalToGlobal_Serial( void* meshDecomp, Element_LocalIndex localIndex ) {
+	return localIndex;
+}
+
+Element_GlobalIndex _MeshDecomp_Element_MapDomainToGlobal_Serial( void* meshDecomp, Element_DomainIndex domainIndex ) {
+	return domainIndex;
+}
+
+Element_GlobalIndex _MeshDecomp_Element_MapShadowToGlobal_Serial( void* meshDecomp, Element_DomainIndex domainIndex ) {
+	return domainIndex;
+}
+
+Element_LocalIndex _MeshDecomp_Element_MapGlobalToLocal_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	return globalIndex;
+}
+
+Element_DomainIndex _MeshDecomp_Element_MapGlobalToDomain_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	return globalIndex;
+}
+
+Element_ShadowIndex _MeshDecomp_Element_MapGlobalToShadow_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	MeshDecomp*		self = (MeshDecomp*)meshDecomp;
+	/* There should not be shadow elements in serial */
+	return MD_E_Invalid( self );
+}
+Partition_Index _MeshDecomp_Shadow_ProcCount_Serial( void* meshDecomp ) {
+	return 0; /* I think that this is right - not sure though */
+}
+void _MeshDecomp_Shadow_BuildProcs_Serial( void* meshDecomp, Partition_Index* procs ) {}
+Element_ShadowIndex _MeshDecomp_Shadow_ProcElementCount_Serial( void* meshDecomp, Partition_Index rank ) {
+	return 0; /* There are no shadow elements in serial */
+}
+Partition_Index _MeshDecomp_Proc_WithElement_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) {
+	return 0; /* The only processor is Procesor 0 - this function is easy */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,328 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Interface class for dividing a mesh into partitions between processors, and
+**	mapping from local to global numbers.
+**
+** Assumptions:
+**
+** Comments:
+**	TODO: partition on element is currently known not to work. Have turned it off by default.
+**
+**	Note: all of the options controlling mesh building, such as MeshDecomp::allowUnbalancing, can be set through
+**	the dictionary by adding a Bool entry with the same name as the option you wish to set.
+**
+**
+** $Id: MeshDecomp.h 3574 2006-05-15 11:30:33Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshDecomp_h__
+#define __Discretisaton_Mesh_MeshDecomp_h__
+
+
+	/** determines which sets of global->local node information are stored. */
+	typedef enum {
+		/** Only store 1 set, for the current processor */
+		StoreSelf,
+		/** (DEFAULT) Store the set for the current processor, plus all processors which neighbour this one.
+		The current processor's set goes first. Makes shadow calculations faster. */
+		StoreNeighbours,		/* default */
+		/** Store the set for every processor. Potentially memory-hungry, even for IndexSets. */
+		StoreAll
+	} MDStorage;
+
+	/* Textual name of this class */
+	extern const Type MeshDecomp_Type;
+
+	/* Virtual function types */
+	typedef Node_GlobalIndex	(MeshDecomp_Node_MapLocalToGlobalFunction)      ( void* meshDecomp, Node_LocalIndex localIndex );
+	typedef Node_GlobalIndex	(MeshDecomp_Node_MapDomainToGlobalFunction)     ( void* meshDecomp, Node_DomainIndex domainIndex );
+	typedef Node_GlobalIndex	(MeshDecomp_Node_MapShadowToGlobalFunction)     ( void* meshDecomp, Node_ShadowIndex shadowIndex );
+	typedef Node_LocalIndex		(MeshDecomp_Node_MapGlobalToLocalFunction)      ( void* meshDecomp, Node_GlobalIndex globalIndex );
+	typedef Node_DomainIndex	(MeshDecomp_Node_MapGlobalToDomainFunction)     ( void* meshDecomp, Node_GlobalIndex globalIndex );
+	typedef Node_ShadowIndex	(MeshDecomp_Node_MapGlobalToShadowFunction)     ( void* meshDecomp, Node_GlobalIndex globalIndex );
+	typedef Element_GlobalIndex	(MeshDecomp_Element_MapLocalToGlobalFunction)	( void* meshDecomp, Element_LocalIndex localIndex );
+	typedef Element_GlobalIndex	(MeshDecomp_Element_MapDomainToGlobalFunction)	( void* meshDecomp, Element_DomainIndex domainIndex );
+	typedef Element_GlobalIndex	(MeshDecomp_Element_MapShadowToGlobalFunction)	( void* meshDecomp, Element_ShadowIndex shadowIndex );
+	typedef Element_LocalIndex	(MeshDecomp_Element_MapGlobalToLocalFunction)	( void* meshDecomp, Element_GlobalIndex globalIndex );
+	typedef Element_DomainIndex	(MeshDecomp_Element_MapGlobalToDomainFunction)	( void* meshDecomp, Element_GlobalIndex globalIndex );
+	typedef Element_ShadowIndex	(MeshDecomp_Element_MapGlobalToShadowFunction)	( void* meshDecomp, Element_GlobalIndex globalIndex );
+	typedef Partition_Index         (MeshDecomp_Shadow_ProcCountFunction)           ( void* meshDecomp );
+	typedef void			(MeshDecomp_Shadow_BuildProcsFunction)		( void* meshDecomp, Partition_Index* procs );
+	typedef Element_ShadowIndex	(MeshDecomp_Shadow_ProcElementCountFunction)	( void* meshDecomp, Partition_Index rank );
+	typedef Partition_Index		(MeshDecomp_Proc_WithElementFunction)		( void* meshDecomp, Element_GlobalIndex globalIndex );
+
+	/** MeshDecomp class contents. */
+	#define __MeshDecomp \
+		/* General info */ \
+		__Stg_Component \
+		Stream*				debug; \
+		Dictionary*					dictionary; \
+		\
+		/* Virtual info */ \
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal; \
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal; \
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal; \
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal; \
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain; \
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow; \
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal; \
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal; \
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal; \
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal; \
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain; \
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow; \
+		MeshDecomp_Shadow_ProcCountFunction*            shadowProcCount; \
+		MeshDecomp_Shadow_BuildProcsFunction*           shadowBuildProcs; \
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount; \
+		MeshDecomp_Proc_WithElementFunction*            procWithElement; \
+		\
+		/* MeshDecomp info ... */ \
+		/** communicator for this mesh. */ \
+		MPI_Comm                                        communicator; \
+		/** rank of current processor. */ \
+		Partition_Index                                 rank; \
+		/** total processors available - other classes should use MeshDecomp::procsInUse instead in most cases. */ \
+		Partition_Index                                 nproc; \
+		/** Processors actually in use (may be lower than nproc if MeshDecomp::allowUnusedCPUs enabled. */ \
+		Partition_Index                                 procsInUse; \
+		/** Determines whether some CPUs will sit idle if MeshDecomp::allowUnbalancing is disabled and nodes don't
+		divide evenly between processors */ \
+		Bool                                            allowUnusedCPUs; \
+		/** determines if the mesh should be decomposed so that nodes form the boundaries between partitions,
+		and thus the boundary nodes are shared between neighbour partitions. Used in preference to
+		partition by element if activated. */ \
+		Bool                                            allowPartitionOnNode; \
+		/** determines if the mesh should be decomposed so that elements form the boundaries between partitions,
+		and thus the boundary elements are shared between neighbour partitions. */ \
+		Bool						allowPartitionOnElement; \
+		/** */ \
+		Bool						allowUnbalancing; \
+		/** determines processor arrangement - and thus which processors are neighbours for shadow purposes. */ \
+		Topology*					procTopology; \
+		\
+		/** controls element layout. */ \
+		ElementLayout*					elementLayout; \
+		/** controls node layout. */ \
+		NodeLayout*					nodeLayout; \
+		/** determines which sets of global->local node information are stored - see MDStorage doc for what
+		the values mean. */ \
+		MDStorage					storage; \
+		/** Records which of the global nodes are also local nodes. Which processors these 
+		are stored for is determined by MeshDecomp::storage */ \
+		IndexSet**					localNodeSets; \
+		/** Records which of the global nodes are also local nodes. Which processors these 
+		are stored for is determined by MeshDecomp::storage */ \
+		IndexSet**					shadowNodeSets; \
+		/** Records which of the global elements are also local elements. Which processors these 
+		are stored for is determined by MeshDecomp::storage */ \
+		IndexSet**					localElementSets; \
+		/** Records which of the global elements are also shadow elements. Which processors these 
+		are stored for is determined by MeshDecomp::storage */ \
+		IndexSet**					shadowElementSets; \
+		\
+		/** determines how many nodes/elements deep shadowing should be done. */ \
+		Node_ShadowIndex				shadowDepth; \
+		/* counts */ \
+		Node_GlobalIndex				nodeGlobalCount; \
+		Node_LocalIndex					nodeLocalCount; \
+		Node_ShadowIndex				nodeShadowCount; \
+		Node_DomainIndex				nodeDomainCount; \
+		Element_GlobalIndex				elementGlobalCount; \
+		Element_LocalIndex				elementLocalCount; \
+		Element_ShadowIndex				elementShadowCount; \
+		Element_DomainIndex				elementDomainCount; 
+
+	/** Controls mesh decomposition - see MeshDecomp.h for further documentation. */
+	struct MeshDecomp { __MeshDecomp };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	/** Class_New() Creation implementation */
+
+	MeshDecomp* _MeshDecomp_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*            shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*           shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*            procWithElement,
+		Dictionary*                                     dictionary,
+		MPI_Comm                                        communicator,
+		ElementLayout*                                  elementLayout,
+		NodeLayout*                                     nodeLayout );
+
+	/** Class_Init() implementation functions. */
+	void _MeshDecomp_Init(
+		MeshDecomp*					self,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		Stg_ObjectList*             pointer_Register );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _MeshDecomp_Delete( void* meshDecomp );
+	
+	/** Stg_Class_Print() MeshDecomp implementation */
+	void _MeshDecomp_Print( void* meshDecomp, Stream* stream );
+	
+	/* Copy */
+	#define MeshDecomp_Copy( self ) \
+		(MeshDecomp*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshDecomp_DeepCopy( self ) \
+		(MeshDecomp*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _MeshDecomp_Copy( void* meshDecomp, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	Node_GlobalIndex _MeshDecomp_Node_LocalToGlobal1D( void* meshDecomp, Node_LocalIndex localIndex );
+	
+	Node_GlobalIndex _MeshDecomp_Node_ShadowToGlobal1D( void* meshDecomp, Node_ShadowIndex shadowIndex );
+	
+	Node_GlobalIndex _MeshDecomp_Node_DomainToGlobal1D( void* meshDecomp, Node_DomainIndex domainIndex );
+	
+	Node_LocalIndex _MeshDecomp_Node_GlobalToLocal1D( void* meshDecomp, Node_GlobalIndex globalIndex );
+	
+	Node_ShadowIndex _MeshDecomp_Node_GlobalToShadow1D( void* meshDecomp, Node_GlobalIndex globalIndex );
+	
+	Node_DomainIndex _MeshDecomp_Node_GlobalToDomain1D( void* meshDecomp, Node_GlobalIndex globalIndex );
+
+	Element_GlobalIndex _MeshDecomp_Element_LocalToGlobal1D( void* meshDecomp, Element_LocalIndex localIndex );
+	
+	Element_GlobalIndex _MeshDecomp_Element_ShadowToGlobal1D( void* meshDecomp, Element_ShadowIndex shadowIndex );
+	
+	Element_GlobalIndex _MeshDecomp_Element_DomainToGlobal1D( void* meshDecomp, Element_DomainIndex domainIndex );
+
+	Element_LocalIndex _MeshDecomp_Element_GlobalToLocal1D( void* meshDecomp, Element_GlobalIndex globalIndex );
+	
+	Element_ShadowIndex _MeshDecomp_Element_GlobalToShadow1D( void* meshDecomp, Element_GlobalIndex globalIndex );
+
+	Element_DomainIndex _MeshDecomp_Element_GlobalToDomain1D( void* meshDecomp, Element_GlobalIndex globalIndex );
+	
+	Element_ShadowIndex _MeshDecomp_Shadow_ProcElementCount( void* meshDecomp, Partition_Index rank );
+	
+	Partition_Index _MeshDecomp_Proc_WithElement( void* meshDecomp, Element_GlobalIndex globalIndex );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	#define MD_N_Invalid( self ) \
+		(self)->nodeGlobalCount
+
+	#define MD_E_Invalid( self ) \
+		(self)->elementGlobalCount
+
+
+	Node_GlobalIndex* MeshDecomp_BuildNodeLocalToGlobalMap( void* meshDecomp );
+	Node_GlobalIndex* MeshDecomp_BuildNodeDomainToGlobalMap( void* meshDecomp );
+	Node_LocalIndex* MeshDecomp_BuildNodeGlobalToLocalMap( void* meshDecomp );
+	Node_DomainIndex* MeshDecomp_BuildNodeGlobalToDomainMap( void* meshDecomp );
+
+	Element_GlobalIndex* MeshDecomp_BuildElementLocalToGlobalMap( void* meshDecomp );
+	Element_GlobalIndex* MeshDecomp_BuildElementDomainToGlobalMap( void* meshDecomp );
+	Element_LocalIndex* MeshDecomp_BuildElementGlobalToLocalMap( void* meshDecomp );
+	Element_DomainIndex* MeshDecomp_BuildElementGlobalToDomainMap( void* meshDecomp );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	void _MeshDecomp_DecomposeNodes( void* meshDecomp );
+	
+	/** builds shadow element and node information for a given processor relative to its neighbours.
+		NOTE: that it only works for a shadowDepth of 1, since it uses the Topology_BuildNeighbours
+		function to generate shadow nodes from those on the boundary.
+
+		\param meshDecomp self
+		\param proc the neighbour processor to build shadow information for.
+		\param edgeElementCount the number of elements on the edge of home proc's mesh section
+		\param edgeElements array of edge elements to test neighbours of.
+	*/
+	void _MeshDecomp_BuildShadowSets(
+		void*					meshDecomp,
+		Partition_Index				proc,
+		Element_GlobalIndex			edgeElementCount,
+		Element_GlobalIndex*			edgeElements );
+
+	/* Serial Functions - Reassign function pointers for superfast serial implementations */
+	void MeshDecomp_OverrideMethodsIfSerial( void* meshDecomp ) ;
+	Node_GlobalIndex _MeshDecomp_Node_MapLocalToGlobal_Serial( void* meshDecomp, Node_LocalIndex localIndex ) ;
+	Node_GlobalIndex _MeshDecomp_Node_MapDomainToGlobal_Serial( void* meshDecomp, Node_DomainIndex domainIndex ) ;
+	Node_GlobalIndex _MeshDecomp_Node_MapShadowToGlobal_Serial( void* meshDecomp, Node_ShadowIndex shadowIndex ) ;
+
+	Node_LocalIndex _MeshDecomp_Node_MapGlobalToLocal_Serial( void* meshDecomp, Node_GlobalIndex globalIndex ) ;
+	Node_DomainIndex _MeshDecomp_Node_MapGlobalToDomain_Serial( void* meshDecomp, Node_GlobalIndex globalIndex ) ;
+	Node_ShadowIndex _MeshDecomp_Node_MapGlobalToShadow_Serial( void* meshDecomp, Node_GlobalIndex globalIndex ) ;
+
+	Element_GlobalIndex _MeshDecomp_Element_MapLocalToGlobal_Serial( void* meshDecomp, Element_LocalIndex localIndex ) ;
+	Element_GlobalIndex _MeshDecomp_Element_MapDomainToGlobal_Serial( void* meshDecomp, Element_DomainIndex domainIndex ) ;
+	Element_GlobalIndex _MeshDecomp_Element_MapShadowToGlobal_Serial( void* meshDecomp, Element_DomainIndex domainIndex ) ;
+
+	Element_LocalIndex _MeshDecomp_Element_MapGlobalToLocal_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) ;
+	Element_DomainIndex _MeshDecomp_Element_MapGlobalToDomain_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) ;
+	Element_ShadowIndex _MeshDecomp_Element_MapGlobalToShadow_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) ;
+
+	Partition_Index _MeshDecomp_Shadow_ProcCount_Serial( void* meshDecomp ) ;
+	void _MeshDecomp_Shadow_BuildProcs_Serial( void* meshDecomp, Partition_Index* procs ) ;
+	Element_ShadowIndex _MeshDecomp_Shadow_ProcElementCount_Serial( void* meshDecomp, Partition_Index rank ) ;
+	Partition_Index _MeshDecomp_Proc_WithElement_Serial( void* meshDecomp, Element_GlobalIndex globalIndex ) ;
+
+#endif /* __Discretisaton_Mesh_MeshDecomp_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshDecomp</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,238 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.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->generateFunc = generateFunc;
+
+	/* MeshGenerator info */
+	_MeshGenerator_Init( self );
+
+	return self;
+}
+
+void _MeshGenerator_Init( MeshGenerator* self ) {
+	self->comm = MPI_COMM_WORLD;
+	self->nMeshes = 0;
+	self->meshes = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshGenerator_Delete( void* meshGenerator ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	FreeArray( self->meshes );
+
+	/* 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_Copy( void* meshGenerator, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+	MeshGenerator*	newMeshGenerator;
+	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;
+	}
+	
+	newMeshGenerator = (MeshGenerator*)_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*)newMeshGenerator;
+#endif
+
+	return NULL;
+}
+
+void _MeshGenerator_Construct( void* meshGenerator, Stg_ComponentFactory* cf, void* data ) {
+	MeshGenerator*		self = (MeshGenerator*)meshGenerator;
+	Dictionary*		dict;
+	Dictionary_Entry_Value*	meshList;
+	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_SetComm( 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 );
+		}
+	}
+
+	/* Add to live component register. */
+	LiveComponentRegister_Add( cf->LCRegister, (Stg_Component*)self );
+}
+
+void _MeshGenerator_Build( void* meshGenerator, void* data ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+	unsigned	m_i;
+
+	/* Sanity check. */
+	assert( self );
+	assert( !self->nMeshes || self->meshes );
+
+	/* Generate each mesh in our list. */
+	for( m_i = 0; m_i < self->nMeshes; m_i++ )
+		MeshGenerator_Generate( self, self->meshes[m_i] );
+}
+
+void _MeshGenerator_Initialise( void* meshGenerator, void* data ) {
+}
+
+void _MeshGenerator_Execute( void* meshGenerator, void* data ) {
+}
+
+void _MeshGenerator_Destroy( void* meshGenerator, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshGenerator_SetComm( void* meshGenerator, MPI_Comm comm ) {
+	MeshGenerator*	self = (MeshGenerator*)meshGenerator;
+
+	/* Sanity check. */
+	assert( self );
+
+	/* Should probably kill some stuff when I do this. Oh well. */
+	self->comm = comm;
+}
+
+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;
+}
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: MeshGenerator.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshGenerator_h__
+#define __Discretisaton_Mesh_MeshGenerator_h__
+
+	/** Textual name of this class */
+	extern const Type MeshGenerator_Type;
+
+	/** Virtual function types */
+	typedef void (MeshGenerator_GenerateFunc)( void* meshGenerator, void* _mesh );
+
+	/** MeshGenerator class contents */
+	#define __MeshGenerator					\
+		/* General info */				\
+		__Stg_Component					\
+								\
+		/* Virtual info */				\
+		MeshGenerator_GenerateFunc*	generateFunc;	\
+								\
+		/* MeshGenerator info */			\
+		MPI_Comm			comm;		\
+		unsigned			nMeshes;	\
+		Mesh**				meshes;
+
+	struct MeshGenerator { __MeshGenerator };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESHGENERATOR_DEFARGS				\
+		STG_COMPONENT_DEFARGS,				\
+		MeshGenerator_GenerateFunc*	generateFunc
+
+	#define MESHGENERATOR_PASSARGS			\
+		STG_COMPONENT_PASSARGS, 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 );
+
+#ifndef NDEBUG
+	#define MeshGenerator_Generate( self, mesh )			\
+		(assert( self ), (self)->generateFunc( self, mesh ))
+#else
+	#define MeshGenerator_Generate( self, mesh )	\
+		(self)->generateFunc( self, mesh )
+#endif
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void MeshGenerator_SetComm( void* meshGenerator, MPI_Comm comm );
+	void MeshGenerator_AddMesh( void* meshGenerator, void* mesh );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+#endif /* __Discretisaton_Mesh_MeshGenerator_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshGenerator</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,298 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: /local/local/Discretisation/Geometry/src/MeshGeometry.c 4177 2006-02-23T02:16:21.399539Z boo  $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "MeshDecomp.h"
+#include "MeshClass.h"
+#include "MeshGeometry.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type MeshGeometry_Type = "MeshGeometry";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshGeometry* MeshGeometry_DefaultNew( Name name )
+{
+	return (MeshGeometry*)_MeshGeometry_New(
+		sizeof(MeshGeometry), 
+		MeshGeometry_Type, 
+		_MeshGeometry_Delete, 
+		_MeshGeometry_Print,
+		_MeshGeometry_Copy,
+		(Stg_Component_DefaultConstructorFunction*)MeshGeometry_DefaultNew,
+		_MeshGeometry_Construct,
+		_MeshGeometry_Build,
+		_MeshGeometry_Initialise,
+		_MeshGeometry_Execute,
+		_MeshGeometry_Destroy,
+		name,
+		False,
+		_BlockGeometry_BuildPoints,
+		_MeshGeometry_PointAt,
+		NULL );
+}
+
+MeshGeometry* MeshGeometry_New(
+		Name name,
+		Dictionary*					dictionary )
+{
+	return _MeshGeometry_New( 
+		sizeof(MeshGeometry), 
+		MeshGeometry_Type, 
+		_MeshGeometry_Delete, 
+		_MeshGeometry_Print,
+		_MeshGeometry_Copy,
+		(Stg_Component_DefaultConstructorFunction*)MeshGeometry_DefaultNew,
+		_MeshGeometry_Construct,
+		_MeshGeometry_Build,
+		_MeshGeometry_Initialise,
+		_MeshGeometry_Execute,
+		_MeshGeometry_Destroy,
+		name,
+		True,
+		_BlockGeometry_BuildPoints,
+		_MeshGeometry_PointAt,
+		dictionary );
+}
+
+
+void MeshGeometry_Init(
+		MeshGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = MeshGeometry_Type;
+	self->_sizeOfSelf = sizeof(MeshGeometry);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _MeshGeometry_Delete;
+	self->_print = _MeshGeometry_Print;
+	self->_copy = _MeshGeometry_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)MeshGeometry_DefaultNew;
+	self->_construct = _MeshGeometry_Construct;
+	self->_build = _MeshGeometry_Build;
+	self->_initialise = _MeshGeometry_Initialise;
+	self->_execute = _MeshGeometry_Execute;
+	self->_destroy = _MeshGeometry_Destroy;
+	self->buildPoints = _BlockGeometry_BuildPoints;
+	self->pointAt = _MeshGeometry_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_Init( (BlockGeometry*)self, NULL );
+	
+	/* MeshGeometry info */
+	_MeshGeometry_Init( self );
+}
+
+
+MeshGeometry* _MeshGeometry_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 )
+{
+	MeshGeometry* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(MeshGeometry) );
+	self = (MeshGeometry*)_BlockGeometry_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		buildPoints,
+		pointAt,
+		dictionary );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* MeshGeometry info */
+	if( initFlag ){
+		_MeshGeometry_Init( self );
+	}
+	
+	return self;
+}
+
+void _MeshGeometry_Init( MeshGeometry* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* MeshGeometry info */
+        self->useMesh = False;
+        self->mesh = NULL;
+	self->decomp = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshGeometry_Delete( void* meshGeometry ) {
+	MeshGeometry* self = (MeshGeometry*)meshGeometry;
+	
+	/* Stg_Class_Delete parent */
+	_BlockGeometry_Delete( self );
+}
+
+
+void _MeshGeometry_Print( void* meshGeometry, Stream* stream ) {
+	MeshGeometry* self = (MeshGeometry*)meshGeometry;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshGeometryStream;
+	meshGeometryStream = Journal_Register( InfoStream_Type, "MeshGeometryStream" );
+
+	/* Print parent */
+	_BlockGeometry_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "MeshGeometry (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* MeshGeometry info */
+}
+
+void _MeshGeometry_Construct( void* meshGeometry, Stg_ComponentFactory *cf, void* data ){
+	MeshGeometry*	self = (MeshGeometry*)meshGeometry;
+        Dictionary*	dict;
+
+        _BlockGeometry_Construct( self, cf, data );
+
+	/* Get Size from Dictionary */
+	self->cf = cf;
+        dict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( cf->componentDict, self->name ) );
+        self->meshName = StG_Strdup( Dictionary_GetString( dict, "mesh" ) );
+	self->decompName = StG_Strdup( Dictionary_GetString( dict, "decomp" ) );
+}
+
+void _MeshGeometry_Build( void* meshGeometry, void *data ){
+	MeshGeometry*	self = (MeshGeometry*)meshGeometry;
+
+	self->mesh = Stg_ComponentFactory_ConstructByName( self->cf, self->meshName, Mesh, True, data );
+	self->decomp = Stg_ComponentFactory_ConstructByName( self->cf, self->decompName, MeshDecomp, True, data );
+}
+	
+void _MeshGeometry_Initialise( void* meshGeometry, void *data ){
+}
+	
+void _MeshGeometry_Execute( void* meshGeometry, void *data ){
+	
+}
+	
+void _MeshGeometry_Destroy( void* meshGeometry, void *data ){
+	
+}
+
+void* _MeshGeometry_Copy( void* meshGeometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+        assert( 0 );
+
+	return NULL;
+}
+
+
+void _MeshGeometry_PointAt( void* meshGeometry, Index index, Coord point ) {
+	MeshGeometry*	self = (MeshGeometry*)meshGeometry;
+	unsigned	mapped;
+
+        if( !self->useMesh ) {
+                _BlockGeometry_PointAt( self, index, point );
+                return;
+        }
+
+	assert( self->mesh );
+
+	if( self->mesh->nodeG2D )
+		mapped = Mesh_NodeMapGlobalToDomain( self->mesh, index );
+	else
+		mapped = self->decomp->nodeMapGlobalToDomain( self->decomp, index );
+	assert( mapped < self->decomp->nodeDomainCount );
+	point[0] = self->mesh->nodeCoord[mapped][0];
+	point[1] = self->mesh->nodeCoord[mapped][1];
+	point[2] = self->mesh->nodeCoord[mapped][2];
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: /local/local/Discretisation/Geometry/src/BlockGeometry.h 4177 2006-02-23T02:16:21.399539Z boo  $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_MeshGeometry_h__
+#define __Discretisation_Geometry_MeshGeometry_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type MeshGeometry_Type;
+
+	/* MeshGeometry information */
+	#define __MeshGeometry \
+		/* General info */ \
+		__BlockGeometry \
+		\
+		/* Virtual info */ \
+		\
+		/* MeshGeometry info ... */ \
+		Stg_ComponentFactory*		cf; \
+		char*				meshName; \
+		char*				decompName; \
+		Bool				useMesh; \
+		Mesh*				mesh; \
+		MeshDecomp*			decomp;
+
+	struct MeshGeometry { __MeshGeometry };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a MeshGeometry */
+	MeshGeometry* MeshGeometry_DefaultNew( Name name );
+	
+	MeshGeometry* MeshGeometry_New(
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Initialise a MeshGeometry */
+	void MeshGeometry_Init(
+		MeshGeometry*					self,
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	MeshGeometry* _MeshGeometry_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 _MeshGeometry_Init( MeshGeometry* self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete MeshGeometry implementation */
+	void _MeshGeometry_Delete( void* blockGeometry );
+	
+	/* Print MeshGeometry implementation */
+	void _MeshGeometry_Print( void* blockGeometry, Stream* stream );
+	
+	void _MeshGeometry_Construct( void* blockGeometry, Stg_ComponentFactory *cf, void* data );
+	
+	void _MeshGeometry_Build( void* blockGeometry, void *data );
+	
+	void _MeshGeometry_Initialise( void* blockGeometry, void *data );
+	
+	void _MeshGeometry_Execute( void* blockGeometry, void *data );
+	
+	void _MeshGeometry_Destroy( void* blockGeometry, void *data );
+	
+	/* Copy */
+	#define MeshGeometry_Copy( self ) \
+		(MeshGeometry*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshGeometry_DeepCopy( self ) \
+		(MeshGeometry*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _MeshGeometry_Copy( void* geometry, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _MeshGeometry_PointAt( void* blockGeometry, Index index, Coord point );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisation_Geometry_MeshGeometry_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">MeshGeometry</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,289 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MeshLayout.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "MeshDecomp.h"
+#include "MeshLayout.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type MeshLayout_Type = "MeshLayout";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshLayout* MeshLayout_DefaultNew( Name name )
+{
+	return _MeshLayout_New( 
+		sizeof(MeshLayout), 
+		MeshLayout_Type, 
+		_MeshLayout_Delete, 
+		_MeshLayout_Print,
+		_MeshLayout_Copy,
+		(Stg_Component_DefaultConstructorFunction*)MeshLayout_DefaultNew,
+		_MeshLayout_Construct,
+		_MeshLayout_Build,
+		_MeshLayout_Initialise,
+		_MeshLayout_Execute,
+		_MeshLayout_Destroy,
+		name,
+		False,
+		NULL,
+		NULL,
+		NULL );
+}
+
+MeshLayout* MeshLayout_New(
+		Name						name,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp )
+{
+	return _MeshLayout_New( 
+		sizeof(MeshLayout), 
+		MeshLayout_Type, 
+		_MeshLayout_Delete, 
+		_MeshLayout_Print,
+		_MeshLayout_Copy,
+		(Stg_Component_DefaultConstructorFunction*)MeshLayout_DefaultNew,
+		_MeshLayout_Construct,
+		_MeshLayout_Build,
+		_MeshLayout_Initialise,
+		_MeshLayout_Execute,
+		_MeshLayout_Destroy,
+		name,
+		True,
+		elementLayout,
+		nodeLayout,
+		decomp );
+}
+
+void MeshLayout_Init(
+		MeshLayout*					self,
+		Name						name,
+		ElementLayout*				elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp )
+{
+	/* General info */
+	self->type = MeshLayout_Type;
+	self->_sizeOfSelf = sizeof(MeshLayout);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _MeshLayout_Delete;
+	self->_print = _MeshLayout_Print;
+	self->_copy = _MeshLayout_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)MeshLayout_DefaultNew;
+	self->_construct = _MeshLayout_Construct;
+	self->_build = _MeshLayout_Build;
+	self->_initialise = _MeshLayout_Initialise;
+	self->_execute = _MeshLayout_Execute;
+	self->_destroy = _MeshLayout_Destroy;
+	
+	/* MeshLayout info */
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_MeshLayout_Init( self, elementLayout, nodeLayout, decomp );
+}
+
+MeshLayout* _MeshLayout_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,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp )
+{
+	MeshLayout* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(MeshLayout) );
+	self = (MeshLayout*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor, _construct, _build, 
+			_initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* MeshLayout info */
+	if( initFlag ){
+		_MeshLayout_Init( self, elementLayout, nodeLayout, decomp );
+	}
+	
+	return self;
+}
+
+void _MeshLayout_Init(
+		MeshLayout*					self,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp )
+{
+	/* General and Virtual info should already be set */
+	
+	/* MeshLayout info */
+	self->isConstructed = True;
+	self->elementLayout = elementLayout;
+	self->nodeLayout = nodeLayout;
+	self->decomp = decomp;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshLayout_Delete( void* meshLayout ) {
+	MeshLayout* self = (MeshLayout*)meshLayout;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _MeshLayout_Print( void* meshLayout, Stream* stream ) {
+	MeshLayout* self = (MeshLayout*)meshLayout;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshLayoutStream;
+	meshLayoutStream = Journal_Register( InfoStream_Type, "MeshLayoutStream" );
+
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "MeshLayout (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* MeshLayout info */
+}
+
+void* _MeshLayout_Copy( void* meshLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	MeshLayout*	self = (MeshLayout*)meshLayout;
+	MeshLayout*	newMeshLayout;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newMeshLayout = (MeshLayout*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	if( deep ) {
+		newMeshLayout->nodeLayout = (NodeLayout*)Stg_Class_Copy( self->nodeLayout, NULL, deep, nameExt, map );
+		newMeshLayout->elementLayout = (ElementLayout*)Stg_Class_Copy( self->elementLayout, NULL, deep, nameExt, map );
+		newMeshLayout->decomp = (MeshDecomp*)Stg_Class_Copy( self->decomp, NULL, deep, nameExt, map );
+	}
+	else {
+		newMeshLayout->nodeLayout = self->nodeLayout;
+		newMeshLayout->elementLayout = self->elementLayout;
+		newMeshLayout->decomp = self->decomp;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newMeshLayout;
+}
+
+void _MeshLayout_Construct( void* meshLayout, Stg_ComponentFactory *cf, void* data ){
+	MeshLayout *self = (MeshLayout*)meshLayout;
+	ElementLayout *elementLayout = NULL;
+	NodeLayout *nodeLayout = NULL;
+	MeshDecomp *meshDecomp = NULL;
+
+	elementLayout =  Stg_ComponentFactory_ConstructByKey( cf, self->name, ElementLayout_Type, ElementLayout, True, data );
+	nodeLayout =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  NodeLayout_Type, NodeLayout,  True, data ) ;
+	meshDecomp =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  MeshDecomp_Type, MeshDecomp,  True, data ) ;
+	
+	_MeshLayout_Init( self, elementLayout, nodeLayout, meshDecomp );
+}
+	
+void _MeshLayout_Build( void* meshLayout, void *data ){
+	MeshLayout *self = (MeshLayout*)meshLayout;
+
+	/* Decomp needs to be built first */
+	Build( self->decomp, data, False );
+	Build( self->nodeLayout, data, False );
+	Build( self->elementLayout, data, False );
+	
+}
+	
+void _MeshLayout_Initialise( void* meshLayout, void *data ){
+	
+}
+	
+void _MeshLayout_Execute( void* meshLayout, void *data ){
+	
+}
+	
+void _MeshLayout_Destroy( void* meshLayout, void *data ){
+	
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,152 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MeshLayout.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshLayout_h__
+#define __Discretisaton_Mesh_MeshLayout_h__
+
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type MeshLayout_Type;
+
+	/* MeshLayout information */
+	#define __MeshLayout \
+		/* General info */ \
+		__Stg_Component \
+		Stream*				debug; \
+		\
+		/* Virtual info */ \
+		\
+		/* MeshLayout info ... */ \
+		ElementLayout*			elementLayout; \
+		NodeLayout*			nodeLayout; \
+		MeshDecomp*			decomp;
+	struct _MeshLayout { __MeshLayout };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a MeshLayout */
+	MeshLayout* MeshLayout_DefaultNew( Name name );
+
+	MeshLayout* MeshLayout_New(
+		Name						name,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp );
+
+	void MeshLayout_LoadFromDict( void* meshLayout, Dictionary* subDict, Dictionary* dictionary, Stg_ObjectList* objList);
+	
+	/* Initialise a MeshLayout */
+	void MeshLayout_Init(
+		MeshLayout*					self,
+		Name						name,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp );
+	
+	/* Creation implementation */
+	MeshLayout* _MeshLayout_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,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp );
+
+	/* Initialisation implementation functions */
+	void _MeshLayout_Init(
+		MeshLayout*					self,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshDecomp*					decomp );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete MeshLayout implementation */
+	void _MeshLayout_Delete( void* meshLayout );
+	
+	/* Print MeshLayout implementation */
+	void _MeshLayout_Print( void* meshLayout, Stream* stream );
+	
+	void _MeshLayout_Construct( void* meshLayout, Stg_ComponentFactory *cf, void* data );
+	
+	void _MeshLayout_Build( void* meshLayout, void *data );
+	
+	void _MeshLayout_Initialise( void* meshLayout, void *data );
+	
+	void _MeshLayout_Execute( void* meshLayout, void *data );
+	
+	void _MeshLayout_Destroy( void* meshLayout, void *data );
+	
+	/* Copy */
+	#define MeshLayout_Copy( self ) \
+		(MeshLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshLayout_DeepCopy( self ) \
+		(MeshLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _MeshLayout_Copy( void* meshLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_MeshLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshLayout</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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">ElementLayout</param>
+		<param name="Type">ElementLayout</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 246 of the c file and then remove this comment afterwards -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">NodeLayout</param>
+		<param name="Type">NodeLayout</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 -->
+
+	<struct>
+		<param name="Essential">True</param>
+		<param name="Name">MeshDecomp</param>
+		<param name="Type">MeshDecomp</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 248 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1013 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3584 2006-05-16 11:11:07Z 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/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CommTopology.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "MeshTopology.h"
+
+
+/* Textual name of this class */
+const Type MeshTopology_Type = "MeshTopology";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshTopology* MeshTopology_New( Name name ) {
+	return _MeshTopology_New( sizeof(MeshTopology), 
+				  MeshTopology_Type, 
+				  _MeshTopology_Delete, 
+				  _MeshTopology_Print, 
+				  _MeshTopology_Copy, 
+				  (void* (*)(Name))_MeshTopology_New, 
+				  _MeshTopology_Construct, 
+				  _MeshTopology_Build, 
+				  _MeshTopology_Initialise, 
+				  _MeshTopology_Execute, 
+				  _MeshTopology_Destroy, 
+				  name, 
+				  NON_GLOBAL );
+}
+
+MeshTopology* _MeshTopology_New( MESHTOPOLOGY_DEFARGS ) {
+	MeshTopology* self;
+	
+	/* Allocate memory */
+	assert( sizeOfSelf >= sizeof(MeshTopology) );
+	self = (MeshTopology*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
+
+	/* Virtual info */
+
+	/* MeshTopology info */
+	_MeshTopology_Init( self );
+
+	return self;
+}
+
+void _MeshTopology_Init( MeshTopology* self ) {
+	self->nDims = 0;
+	self->nTDims = 0;
+
+	self->domains = NULL;
+	self->nRentals = NULL;
+	self->rentals = NULL;
+	self->nDomainEls = NULL;
+	self->shadowDepth = 0;
+
+	self->nIncEls = NULL;
+	self->incEls = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshTopology_Delete( void* topo ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+
+	MeshTopology_Destruct( self );
+
+	/* Delete the parent. */
+	_Stg_Component_Delete( self );
+}
+
+void _MeshTopology_Print( void* topo, Stream* stream ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+	
+	/* Set the Journal for printing informations */
+	Stream* topoStream;
+	topoStream = Journal_Register( InfoStream_Type, "MeshTopologyStream" );
+
+	/* Print parent */
+	Journal_Printf( stream, "MeshTopology (ptr): (%p)\n", self );
+	_Stg_Component_Print( self, stream );
+}
+
+void* _MeshTopology_Copy( void* topo, void* destProc_I, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+#if 0
+	MeshTopology*	self = (MeshTopology*)topo;
+	MeshTopology*	newMeshTopology;
+	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;
+	}
+	
+	newMeshTopology = (MeshTopology*)_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*)newMeshTopology;
+#endif
+
+	return NULL;
+}
+
+void _MeshTopology_Construct( void* topo, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _MeshTopology_Build( void* topo, void* data ) {
+}
+
+void _MeshTopology_Initialise( void* topo, void* data ) {
+}
+
+void _MeshTopology_Execute( void* topo, void* data ) {
+}
+
+void _MeshTopology_Destroy( void* topo, void* data ) {
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshTopology_SetNDims( void* topo, unsigned nDims ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+
+	assert( self );
+	assert( nDims > 0 );
+
+	/* If we're changing dimensions, kill everything and begin again. */
+	MeshTopology_Destruct( self );
+
+	/* Set and allocate. */
+	self->nDims = nDims;
+	self->nTDims = nDims + 1;
+	if( nDims ) {
+		unsigned	 d_i;
+
+		self->domains = Memory_Alloc_Array( Decomp_Sync*, self->nTDims, "MeshTopology::domains" );
+		self->nDomainEls = Memory_Alloc_Array( unsigned, self->nTDims, "MeshTopology::nDomainEls" );
+		self->nIncEls = Memory_Alloc_2DArray( unsigned*, self->nTDims, self->nTDims, "MeshTopology::nIncEls" );
+		self->incEls = Memory_Alloc_2DArray( unsigned**, self->nTDims, self->nTDims, "MeshTopology::incEls" );
+		for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+			unsigned	d_j;
+
+			self->domains[d_i] = Decomp_Sync_New( "" );
+			self->nDomainEls[d_i] = 0;
+			Decomp_Sync_SetDecomp( self->domains[d_i], Decomp_New( "" ) );
+
+			for( d_j = 0; d_j < self->nTDims; d_j++ ) {
+				self->nIncEls[d_i][d_j] = NULL;
+				self->incEls[d_i][d_j] = NULL;
+			}
+		}
+	}
+}
+
+void MeshTopology_SetElements( void* topo, MeshTopology_Dim dim, unsigned nEls, unsigned* els ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( !nEls || els );
+
+	/* Decompose elements. */
+	Decomp_Sync_Decompose( self->domains[dim], nEls, els );
+
+	/* Set the number of domain elements. */	
+	self->nDomainEls[dim] = self->domains[dim]->decomp->nLocals + self->domains[dim]->nRemotes;
+}
+
+void MeshTopology_SetIncidence( void* topo, MeshTopology_Dim fromDim, MeshTopology_Dim toDim, 
+				unsigned* nIncEls, unsigned** incEls )
+{
+	MeshTopology*	self = (MeshTopology*)topo;
+	unsigned	size;
+	unsigned	e_i;
+
+	assert( self );
+	assert( fromDim < self->nTDims );
+	assert( toDim < self->nTDims );
+	assert( nIncEls );
+	assert( incEls );
+	assert( Decomp_Sync_GetDomainSize( self->domains[fromDim] ) );
+	assert( Decomp_Sync_GetDomainSize( self->domains[toDim] ) );
+
+	/* Clear existing incidence. */
+	KillArray( self->incEls[fromDim][toDim] );
+	KillArray( self->nIncEls[fromDim][toDim] );
+
+	/* Allocate for incoming data. */
+	size = Decomp_Sync_GetDomainSize( self->domains[fromDim] );
+	self->nIncEls[fromDim][toDim] = Memory_Alloc_Array( unsigned, size, "MeshTopology::nIncEls[][]" );
+	self->incEls[fromDim][toDim] = Memory_Alloc_2DComplex( unsigned, size, nIncEls, "MeshTopology::incEls[][]" );
+
+	/* Copy the lot. */
+	memcpy( self->nIncEls[fromDim][toDim], nIncEls, size * sizeof(unsigned) );
+	for( e_i = 0; e_i < size; e_i++ ) {
+		memcpy( self->incEls[fromDim][toDim][e_i], incEls[e_i], 
+			self->nIncEls[fromDim][toDim][e_i] * sizeof(unsigned) );
+	}
+}
+
+void MeshTopology_Complete( void* topo ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+	unsigned	d_i, d_j;
+
+	assert( self );
+
+	/* Complete downwards. */
+	for( d_i = 0; d_i < self->nTDims - 1; d_i++ ) {
+		for( d_j = d_i + 2; d_j < self->nTDims; d_j++ ) {
+			if( !self->nIncEls[d_j][d_i] )
+				MeshTopology_Cascade( self, d_j, d_i );
+		}
+	}
+
+	/* Invert missing up relations. */
+	for( d_i = 0; d_i < self->nTDims - 1; d_i++ ) {
+		for( d_j = d_i + 1; d_j < self->nTDims; d_j++ ) {
+			if( !self->nIncEls[d_i][d_j] )
+				MeshTopology_Invert( self, d_i, d_j );
+		}
+	}
+
+	/* Build neighbourhoods. */
+	for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+		if( !self->nIncEls[d_i][d_i] )
+			MeshTopology_Neighbourhood( self, d_i );
+	}
+}
+
+void MeshTopology_SetShadowDepth( void* topo, unsigned depth ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+	RangeSet***	shadows;
+	unsigned**	incSizes;
+	unsigned***	shadowInc;
+
+	assert( self );
+	assert( depth );
+
+	/* Need to store shadow information for each processor in each topological dimension. */
+	self->shadowDepth = depth;
+
+	/* If there are no neighbouring processors, forget about it. */
+	if( !self->domains[MT_VERTEX]->commTopo->nInc )
+		return;
+
+	shadows = (RangeSet***)Memory_Alloc_2DArray_Unnamed( RangeSet**, self->nTDims, 
+							     self->domains[MT_VERTEX]->commTopo->nInc );
+	MeshTopology_BuildTopShadows( self, shadows + self->nDims );
+	MeshTopology_BuildAllShadows( self, shadows );
+	MeshTopology_BuildShadowInc( self, shadows, &incSizes, &shadowInc );
+
+	/* Send to neighbours. */
+	MeshTopology_SendRecvShadows( self, shadows, incSizes, shadowInc );
+}
+
+void MeshTopology_Invert( void* topo, MeshTopology_Dim fromDim, MeshTopology_Dim toDim ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+	unsigned	fromSize, toSize;
+	unsigned*	invNIncEls;
+	unsigned**	invIncEls;
+	unsigned*	nIncEls;
+	unsigned**	incEls;
+	unsigned	e_i;
+
+	/* Sanity check. */
+	assert( self );
+	assert( fromDim < self->nTDims );
+	assert( toDim < self->nTDims );
+	assert( Decomp_Sync_GetDomainSize( self->domains[fromDim] ) );
+	assert( Decomp_Sync_GetDomainSize( self->domains[toDim] ) );
+	assert( !self->nIncEls[fromDim][toDim] && !self->incEls[fromDim][toDim] );
+	assert( self->nIncEls[toDim][fromDim] && self->incEls[toDim][fromDim] );
+
+	/* Shortcuts. */
+	fromSize = Decomp_Sync_GetDomainSize( self->domains[fromDim] );
+	toSize = Decomp_Sync_GetDomainSize( self->domains[toDim] );
+	invNIncEls = self->nIncEls[toDim][fromDim];
+	invIncEls = self->incEls[toDim][fromDim];
+
+	/* Allocate some tables. */
+	nIncEls = Memory_Alloc_Array( unsigned, fromSize, "MeshTopology::nIncEls[][]" );
+	memset( nIncEls, 0, fromSize * sizeof(unsigned) );
+
+	/* Two phase process: count the numbers then allocate and do it again. */
+	for( e_i = 0; e_i < toSize; e_i++ ) {
+		unsigned	inc_i;
+
+		for( inc_i = 0; inc_i < invNIncEls[e_i]; inc_i++ ) {
+			unsigned	elInd = invIncEls[e_i][inc_i];
+
+			nIncEls[elInd]++;
+		}
+	}
+
+	/* Build up the tables. */
+	incEls = Memory_Alloc_2DComplex( unsigned, fromSize, nIncEls, "MeshTopology::incEls[][]" );
+	memset( nIncEls, 0, fromSize * sizeof(unsigned) );
+	for( e_i = 0; e_i < toSize; e_i++ ) {
+		unsigned	inc_i;
+
+		for( inc_i = 0; inc_i < invNIncEls[e_i]; inc_i++ ) {
+			unsigned	elInd = invIncEls[e_i][inc_i];
+
+			incEls[elInd][nIncEls[elInd]++] = e_i;
+		}
+	}
+
+	/* Transfer to permanent storage. */
+	self->nIncEls[fromDim][toDim] = nIncEls;
+	self->incEls[fromDim][toDim] = incEls;
+}
+
+void MeshTopology_Cascade( void* topo, MeshTopology_Dim fromDim, MeshTopology_Dim toDim ) {
+	MeshTopology*	self = (MeshTopology*)topo;
+	unsigned	maxInc = 0;
+	unsigned*	nIncEls;
+	unsigned**	incEls;
+	unsigned	e_i;
+
+	assert( self );
+	assert( fromDim < self->nTDims );
+	assert( toDim < self->nTDims );
+	assert( fromDim > toDim + 1 );
+
+	/* Determine maximum incidence for any element. */
+	for( e_i = 0; e_i < self->nDomainEls[fromDim]; e_i++ ) {
+		unsigned	curInc = 0;
+		unsigned	inc_i;
+
+		for( inc_i = 0; inc_i < self->nIncEls[fromDim][fromDim - 1][e_i]; inc_i++ ) {
+			unsigned	incEl = self->incEls[fromDim][fromDim - 1][e_i][inc_i];
+
+			curInc += self->nIncEls[fromDim - 1][toDim][incEl];
+		}
+
+		if( curInc > maxInc )
+			maxInc = curInc;
+	}
+
+	/* Allocate. */
+	nIncEls = Memory_Alloc_Array_Unnamed( unsigned, self->nDomainEls[fromDim] );
+	incEls = Memory_Alloc_2DArray_Unnamed( unsigned, self->nDomainEls[fromDim], maxInc );
+	memset( nIncEls, 0, self->nDomainEls[fromDim] * sizeof(unsigned) );
+
+	/* Determine actual incidence. */
+	for( e_i = 0; e_i < self->nDomainEls[fromDim]; e_i++ ) {
+		unsigned	inc_i;
+
+		for( inc_i = 0; inc_i < self->nIncEls[fromDim][fromDim - 1][e_i]; inc_i++ ) {
+			unsigned	incEl = self->incEls[fromDim][fromDim - 1][e_i][inc_i];
+			unsigned	inc_j;
+
+			for( inc_j = 0; inc_j < self->nIncEls[fromDim - 1][toDim][incEl]; inc_j++ ) {
+				unsigned	target = self->incEls[fromDim - 1][toDim][incEl][inc_j];
+				unsigned	e_j;
+
+				for( e_j = 0; e_j < nIncEls[e_i]; e_j++ ) {
+					if( incEls[e_i][e_j] == target )
+						break;
+				}
+				if( e_j == nIncEls[e_i] )
+					incEls[e_i][nIncEls[e_i]++] = target;
+			}
+		}
+	}
+
+	/* Set incidence and kill temporary arrays. */
+	MeshTopology_SetIncidence( self, fromDim, toDim, nIncEls, incEls );
+	FreeArray( nIncEls );
+	FreeArray( incEls );
+}
+
+void MeshTopology_Neighbourhood( void* topo, MeshTopology_Dim dim ) {
+	MeshTopology*		self = (MeshTopology*)topo;
+	unsigned		size;
+	MeshTopology_Dim	toDim;
+	unsigned*		nNbrs;
+	unsigned**		nbrs;
+	unsigned		e_i;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( Decomp_Sync_GetDomainSize( self->domains[dim] ) );
+
+	/* Vertex neighbours search upwards, all others search downwards. */
+	size = Decomp_Sync_GetDomainSize( self->domains[dim] );
+	toDim = (dim == MT_VERTEX) ? MT_EDGE : MT_VERTEX;
+
+	/* Allocate some space for neighbour counts. */
+	nNbrs = Memory_Alloc_Array_Unnamed( unsigned, size ); 
+
+	/* Calculate maximum neighbours for each element. */
+	for( e_i = 0; e_i < size; e_i++ ) {
+		unsigned	nNodes = self->nIncEls[dim][toDim][e_i];
+		unsigned*	nodes = self->incEls[dim][toDim][e_i];
+		unsigned	n_i;
+
+		nNbrs[e_i] = 0;
+		for( n_i = 0; n_i < nNodes; n_i++ ) {
+			unsigned	nCurNbrs = self->nIncEls[toDim][dim][nodes[n_i]];
+
+			nNbrs[e_i] += nCurNbrs - 1;
+		}
+	}
+
+	/* Allocate for maximum neighbours and clear neighbour counts. */
+	nbrs = Memory_Alloc_2DComplex_Unnamed( unsigned, size, nNbrs );
+	memset( nNbrs, 0, size * sizeof(unsigned) );
+
+	/* Build neighbours for each element of dimension 'dim'. */
+	for( e_i = 0; e_i < size; e_i++ ) {
+		unsigned	nNodes = self->nIncEls[dim][toDim][e_i];
+		unsigned*	nodes = self->incEls[dim][toDim][e_i];
+		unsigned	n_i;
+
+		/* Build a set of unique element nodes' elements. */
+		for( n_i = 0; n_i < nNodes; n_i++ ) {
+			unsigned	nCurNbrs = self->nIncEls[toDim][dim][nodes[n_i]];
+			unsigned	e_j;
+
+			for( e_j = 0; e_j < nCurNbrs; e_j++ ) {
+				unsigned	curNbr = self->incEls[toDim][dim][nodes[n_i]][e_j];
+				unsigned	nbr_i;
+
+				/* Don't add current element. */
+				if( curNbr == e_i )
+					continue;
+
+				/* Ensure is unique. */
+				for( nbr_i = 0; nbr_i < nNbrs[e_i]; nbr_i++ ) {
+					if( nbrs[e_i][nbr_i] == curNbr )
+						break;
+				}
+				if( nbr_i == nNbrs[e_i] )
+					nbrs[e_i][nNbrs[e_i]++] = curNbr;
+			}
+		}
+	}
+
+	/* Transfer. */
+	MeshTopology_SetIncidence( self, dim, dim, nNbrs, nbrs );
+	FreeArray( nNbrs );
+	FreeArray( nbrs );
+}
+
+unsigned MeshTopology_GetLocalSize( void* meshTopology, MeshTopology_Dim dim ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( self->domains );
+	assert( self->domains[dim] );
+	assert( self->domains[dim]->decomp );
+
+	return self->domains[dim]->decomp->nLocals;
+}
+
+unsigned MeshTopology_GetShadowSize( void* meshTopology, MeshTopology_Dim dim ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( self->domains );
+	assert( self->domains[dim] );
+
+	return self->domains[dim]->nRemotes;
+}
+
+unsigned MeshTopology_GetDomainSize( void* meshTopology, MeshTopology_Dim dim ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( self->nDomainEls );
+
+	return self->nDomainEls[dim];
+}
+
+unsigned MeshTopology_DomainToGlobal( void* meshTopology, MeshTopology_Dim dim, unsigned domain ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( self->domains );
+	assert( self->domains[dim] );
+
+	return Decomp_Sync_DomainToGlobal( self->domains[dim], domain );
+}
+
+unsigned MeshTopology_GlobalToDomain( void* meshTopology, MeshTopology_Dim dim, unsigned global ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+
+	assert( self );
+	assert( dim < self->nTDims );
+	assert( self->domains );
+	assert( self->domains[dim] );
+
+	return Decomp_Sync_GlobalToDomain( self->domains[dim], global );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void MeshTopology_BuildTopShadows( void* meshTopology, RangeSet*** shadows ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+	CommTopology*	commTopo;
+	unsigned	nIncRanks;
+	unsigned*	incRanks;
+	void**		shdSets;
+	Decomp_Sync*	sync;
+	unsigned	p_i, s_i;
+
+	assert( self );
+	assert( shadows );
+
+	/* Extract communicator incidence. */
+	commTopo = self->domains[MT_VERTEX]->commTopo;
+	CommTopology_GetIncidence( commTopo, commTopo->rank, &nIncRanks, &incRanks );
+
+	/* Build some sets, initially index sets. */
+	shdSets = (void**)Memory_Alloc_Array_Unnamed( IndexSet*, nIncRanks );
+	for( p_i = 0; p_i < nIncRanks; p_i++ )
+		shdSets[p_i] = (void*)IndexSet_New( Decomp_Sync_GetDomainSize( self->domains[MT_VERTEX] ) );
+
+	/* Store shared vertices. */
+	sync = self->domains[0];
+	for( s_i = 0; s_i < sync->nShared; s_i++ ) {
+		for( p_i = 0; p_i < sync->nSharers[s_i]; p_i++ )
+			IndexSet_Add( shdSets[sync->sharers[s_i][p_i]], sync->shared[s_i] );
+	}
+
+	/* Build range sets of shadowed elements. */
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		unsigned	nEdges;
+		unsigned*	edges;
+		unsigned	nShdEls;
+		unsigned*	shdEls;
+		unsigned	e_i;
+
+		IndexSet_GetMembers( shdSets[p_i], &nEdges, &edges );
+		FreeObject( shdSets[p_i] );
+		shdSets[p_i] = (void*)IndexSet_New( MeshTopology_GetLocalSize( self, self->nDims ) );
+
+		/* Build initial set of elements. */
+		for( e_i = 0; e_i < nEdges; e_i++ ) {
+			unsigned	nIncEls = self->nIncEls[MT_VERTEX][self->nDims][edges[e_i]];
+			unsigned*	incEls = self->incEls[MT_VERTEX][self->nDims][edges[e_i]];
+			unsigned	inc_i;
+
+			for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+				if( incEls[inc_i] >= MeshTopology_GetLocalSize( self, self->nDims ) )
+					continue;
+				IndexSet_Add( shdSets[p_i], incEls[inc_i] );
+			}
+		}
+
+		/* Free edge set. */
+		FreeArray( edges );
+
+		/* Expand the elements to satisfy shadow depth. */
+		if( self->shadowDepth > 1 ) {
+			IndexSet*	bndSet;
+			unsigned	d_i;
+
+			bndSet = IndexSet_DeepCopy( shdSets[p_i] );
+
+			for( d_i = 1; d_i < self->shadowDepth; d_i++ )
+				MeshTopology_ExpandShadows( self, (IndexSet*)shdSets[p_i], bndSet );
+
+			FreeObject( bndSet );
+		}
+
+		/* Get members and convert to global indices. */
+		IndexSet_GetMembers( shdSets[p_i], &nShdEls, &shdEls );
+		FreeObject( shdSets[p_i] );
+		for( e_i = 0; e_i < nShdEls; e_i++ )
+			shdEls[e_i] = Decomp_Sync_DomainToGlobal( self->domains[self->nDims], shdEls[e_i] );
+
+		/* Create range set. */
+		shdSets[p_i] = (void*)RangeSet_New();
+		RangeSet_SetIndices( shdSets[p_i], nShdEls, shdEls );
+		FreeArray( shdEls );
+	}
+
+	/* Store result. */
+	*shadows = (RangeSet**)shdSets;
+}
+
+void MeshTopology_ExpandShadows( void* meshTopology, IndexSet* shadows, IndexSet* boundary ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+	unsigned	nLocals = MeshTopology_GetLocalSize( self, self->nDims );
+	unsigned	nBndEls;
+	unsigned*	bndEls;
+	unsigned	b_i;
+
+	assert( self );
+	assert( shadows );
+	assert( boundary );
+
+	IndexSet_GetMembers( boundary, &nBndEls, &bndEls );
+	FreeObject( boundary );
+	boundary = IndexSet_New( nLocals );
+
+	for( b_i = 0; b_i < nBndEls; b_i++ ) {
+		unsigned	nNbrs = self->nIncEls[self->nDims][self->nDims][bndEls[b_i]];
+		unsigned*	nbrs = self->incEls[self->nDims][self->nDims][bndEls[b_i]];
+		unsigned	n_i;
+
+		for( n_i = 0; n_i < nNbrs; n_i++ ) {
+			if( nbrs[n_i] >= nLocals || IndexSet_IsMember( shadows, nbrs[n_i] ) )
+				continue;
+			IndexSet_Add( boundary, nbrs[n_i] );
+		}
+	}
+	FreeArray( bndEls );
+
+	IndexSet_GetMembers( boundary, &nBndEls, &bndEls );
+	for( b_i = 0; b_i < nBndEls; b_i++ )
+		IndexSet_Add( shadows, bndEls[b_i] );
+	FreeArray( bndEls );
+}
+
+void MeshTopology_BuildAllShadows( void* meshTopology, RangeSet*** shadows ) {
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+	CommTopology*	commTopo;
+	unsigned	nIncRanks;
+	unsigned*	incRanks;
+	unsigned	p_i;
+
+	assert( self );
+	assert( shadows );
+
+	/* Extract communicator incidence. */
+	commTopo = self->domains[MT_VERTEX]->commTopo;
+	CommTopology_GetIncidence( commTopo, commTopo->rank, &nIncRanks, &incRanks );
+
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		unsigned	nElInds;
+		unsigned*	elInds;
+		unsigned	d_i, e_i;
+
+		/* Convert range set of top level to indices. */
+		RangeSet_GetIndices( shadows[self->nDims][p_i], &nElInds, &elInds );
+		for( e_i = 0; e_i < nElInds; e_i++ )
+			elInds[e_i] = Decomp_Sync_GlobalToDomain( self->domains[self->nDims], elInds[e_i] );
+
+		/* */
+		for( d_i = 0; d_i < self->nDims; d_i++ ) {
+			IndexSet*	iSet;
+			unsigned	nInds;
+			unsigned*	inds;
+
+			/* If there are no elements in this dimension or we have no incidence relations between
+			   these levels, skip it. */
+			if( MeshTopology_GetLocalSize( self, d_i ) == 0 || 
+			    !self->nIncEls[self->nDims][d_i] || !self->incEls[self->nDims][d_i] )
+			{
+				shadows[d_i][p_i] = NULL;
+				continue;
+			}
+
+			iSet = IndexSet_New( MeshTopology_GetLocalSize( self, d_i ) );
+
+			for( e_i = 0; e_i < nElInds; e_i++ ) {
+				unsigned	nIncEls;
+				unsigned*	incEls;
+				unsigned	inc_i;
+
+				nIncEls = self->nIncEls[self->nDims][d_i][elInds[e_i]];
+				incEls = self->incEls[self->nDims][d_i][elInds[e_i]];
+				for( inc_i = 0; inc_i < nIncEls; inc_i++ ) {
+					if( incEls[inc_i] >= MeshTopology_GetLocalSize( self, d_i ) )
+						continue;
+					IndexSet_Add( iSet, incEls[inc_i] );
+				}
+			}
+
+			/* Get members and convert to global indices. */
+			IndexSet_GetMembers( iSet, &nInds, &inds );
+			FreeObject( iSet );
+			for( e_i = 0; e_i < nInds; e_i++ )
+				inds[e_i] = Decomp_Sync_DomainToGlobal( self->domains[d_i], inds[e_i] );
+
+			/* Create shadow set. */
+			shadows[d_i][p_i] = RangeSet_New();
+			RangeSet_SetIndices( shadows[d_i][p_i], nInds, inds );
+			FreeArray( inds );
+		}
+	}
+}
+
+void MeshTopology_BuildShadowInc( void* meshTopology, RangeSet*** shadows, 
+				  unsigned*** incDataSizes, unsigned**** incData )
+{
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+	CommTopology*	commTopo;
+	unsigned	nIncRanks;
+	unsigned*	incRanks;
+	unsigned	p_i;
+
+	assert( self );
+	assert( shadows );
+	assert( incDataSizes );
+	assert( incData );
+
+	/* Extract communicator incidence. */
+	commTopo = self->domains[MT_VERTEX]->commTopo;
+	CommTopology_GetIncidence( commTopo, commTopo->rank, &nIncRanks, &incRanks );
+
+	/* Allocate for the incidence data sizes. */
+	*incDataSizes = Memory_Alloc_2DArray_Unnamed( unsigned, self->nTDims, nIncRanks );
+	*incData = Memory_Alloc_2DArray_Unnamed( unsigned*, self->nTDims, nIncRanks );
+
+	for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+		unsigned	d_i;
+
+		for( d_i = 1; d_i < self->nTDims; d_i++ ) {
+			unsigned	nEls;
+			unsigned*	els;
+			unsigned	offs = 0;
+			unsigned	e_i;
+
+			/* If we have no shadows for this dimension, skip. */
+			if( !shadows[d_i][p_i] ) {
+				(*incDataSizes)[d_i][p_i] = 0;
+				(*incData)[d_i][p_i] = NULL;
+				continue;
+			}
+
+			/* Extract the indices. */
+			RangeSet_GetIndices( shadows[d_i][p_i], &nEls, &els );
+			for( e_i = 0; e_i < nEls; e_i++ )
+				els[e_i] = Decomp_Sync_GlobalToDomain( self->domains[d_i], els[e_i] );
+
+			/* Sum the data size for this dimension. */
+			(*incDataSizes)[d_i][p_i] = 1;
+			for( e_i = 0; e_i < nEls; e_i++ )
+				(*incDataSizes)[d_i][p_i] += self->nIncEls[d_i][d_i - 1][els[e_i]] + 2;
+
+			/* Allocate for incidence data. */
+			(*incData)[d_i][p_i] = Memory_Alloc_Array_Unnamed( unsigned, (*incDataSizes)[d_i][p_i] );
+
+			/* Store data. */
+			(*incData)[d_i][p_i][offs++] = nEls;
+			for( e_i = 0; e_i < nEls; e_i++ ) {
+				unsigned	nIncEls = self->nIncEls[d_i][d_i - 1][els[e_i]];
+				unsigned*	incEls = self->incEls[d_i][d_i - 1][els[e_i]];
+				unsigned	gElInd = Decomp_Sync_DomainToGlobal( self->domains[d_i], els[e_i] );
+				unsigned	inc_i;
+
+				(*incData)[d_i][p_i][offs++] = gElInd;
+				(*incData)[d_i][p_i][offs++] = nIncEls;
+				for( inc_i = 0; inc_i < nIncEls; inc_i++ )
+					(*incData)[d_i][p_i][offs++] = Decomp_Sync_DomainToGlobal( self->domains[d_i - 1], 
+												   incEls[inc_i] );
+			}
+
+			/* Free the indices. */
+			FreeArray( els );
+		}
+	}
+}
+
+void MeshTopology_SendRecvShadows( void* meshTopology, RangeSet*** shadows, 
+				   unsigned** incDataSizes, unsigned*** incData )
+{
+	MeshTopology*	self = (MeshTopology*)meshTopology;
+	CommTopology*	commTopo;
+	unsigned	nIncRanks;
+	unsigned*	nSrcBytes;
+	Stg_Byte**	srcBytes;
+	unsigned*	nDstBytes;
+	Stg_Byte**	dstBytes;
+	unsigned**	dataSize;
+	unsigned***	data;
+	unsigned	p_i, d_i;
+
+	assert( self );
+	assert( shadows );
+	assert( incDataSizes );
+	assert( incData );
+
+	/* Shortcuts. */
+	commTopo = self->domains[MT_VERTEX]->commTopo;
+	nIncRanks = commTopo->nInc;
+
+	/* Convert downward incidence relations to global indices. */
+	for( d_i = 1; d_i < self->nTDims; d_i++ ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < self->nDomainEls[d_i]; e_i++ ) {
+			unsigned	nIncEls = self->nIncEls[d_i][d_i - 1][e_i];
+			unsigned*	incEls = self->incEls[d_i][d_i - 1][e_i];
+			unsigned	inc_i;
+
+			for( inc_i = 0; inc_i < nIncEls; inc_i++ )
+				incEls[inc_i] = Decomp_Sync_DomainToGlobal( self->domains[d_i - 1], incEls[inc_i] );
+		}
+	}
+
+	/* Pickle all the range sets and pipe them off to our neighbours. */
+	nSrcBytes = Memory_Alloc_Array_Unnamed( unsigned, nIncRanks );
+	srcBytes = Memory_Alloc_Array_Unnamed( Stg_Byte*, nIncRanks );
+	for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+		for( p_i = 0; p_i < nIncRanks; p_i++ )
+			RangeSet_Pickle( shadows[d_i][p_i], nSrcBytes + p_i, srcBytes + p_i );
+		CommTopology_Alltoall( commTopo, nSrcBytes, (void**)srcBytes, 
+				       &nDstBytes, (void***)&dstBytes, sizeof(Stg_Byte) );
+		for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+			FreeArray( srcBytes[p_i] );
+			RangeSet_Unpickle( shadows[d_i][p_i], nDstBytes[p_i], dstBytes[p_i] );
+		}
+		FreeArray( nDstBytes );
+		FreeArray( dstBytes );
+
+		/* Take the union of all other procs' shadow elements. */
+		for( p_i = 1; p_i < nIncRanks; p_i++ ) {
+			RangeSet_Union( shadows[d_i][0], shadows[d_i][p_i] );
+			FreeObject( shadows[d_i][p_i] );
+		}
+	}
+
+	/* Send and recieve all the incidence relations. */
+	dataSize = Memory_Alloc_Array_Unnamed( unsigned*, self->nTDims );
+	data = Memory_Alloc_Array_Unnamed( unsigned**, self->nTDims );
+	for( d_i = 1; d_i < self->nTDims; d_i++ ) {
+		/* Communicate. */
+		CommTopology_Alltoall( commTopo, incDataSizes[d_i], (void**)incData[d_i], 
+				       dataSize + d_i, (void***)(data + d_i), sizeof(unsigned) );
+
+		/* Free old incidence relations. */
+		for( p_i = 0; p_i < nIncRanks; p_i++ )
+			FreeArray( incData[d_i][p_i] );
+	}
+	FreeArray( incData );
+	FreeArray( incDataSizes );
+
+	/* Update remote elements. */
+	for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+		unsigned	nRemotes;
+		unsigned*	remotes;
+
+		/* Set the remote elements. */
+		RangeSet_GetIndices( shadows[d_i][0], &nRemotes, &remotes );
+		Decomp_Sync_SetRemotes( self->domains[d_i], nRemotes, remotes );
+		self->nDomainEls[d_i] = self->domains[d_i]->decomp->nLocals + nRemotes;
+		FreeArray( remotes );
+
+		/* Free range set. */
+		FreeObject( shadows[d_i][0] );
+	}
+	FreeArray( nSrcBytes );
+	FreeArray( srcBytes );
+	FreeArray( shadows );
+
+	/* Update incidence. */
+	for( d_i = 1; d_i < self->nTDims; d_i++ ) {
+		unsigned**	oldInc;
+		unsigned	e_i;
+
+		/* Resize old incidence relations to include new remote sizes. */
+		self->nIncEls[d_i][d_i - 1] = Memory_Realloc_Array( self->nIncEls[d_i][d_i - 1], 
+								    unsigned, self->nDomainEls[d_i] );
+
+		/* Insert each other procs' incidence relations. */
+		for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+			unsigned*	curData = data[d_i][p_i];
+			unsigned	nEls = curData[0];
+
+			curData++;
+			for( e_i = 0; e_i < nEls; e_i++ ) {
+				unsigned	dInd = Decomp_Sync_GlobalToDomain( self->domains[d_i], curData[0] );
+
+				self->nIncEls[d_i][d_i - 1][dInd] = curData[1];
+				curData += curData[1] + 2;
+			}
+		}
+
+		/* Resize incidence relations. */
+		oldInc = self->incEls[d_i][d_i - 1];
+		self->incEls[d_i][d_i - 1] = Memory_Alloc_2DComplex( unsigned, self->nDomainEls[d_i], self->nIncEls[d_i][d_i - 1], 
+								     "MeshTopology::incEls[][]" );
+		for( e_i = 0; e_i < MeshTopology_GetLocalSize( self, d_i ); e_i++ ) {
+			memcpy( self->incEls[d_i][d_i - 1][e_i], oldInc[e_i], 
+				self->nIncEls[d_i][d_i - 1][e_i] * sizeof(unsigned) );
+		}
+		FreeArray( oldInc );
+
+		/* Copy new relations. */
+		for( p_i = 0; p_i < nIncRanks; p_i++ ) {
+			unsigned*	curData = data[d_i][p_i];
+			unsigned	nEls = curData[0];
+
+			curData++;
+			for( e_i = 0; e_i < nEls; e_i++ ) {
+				unsigned	dInd = Decomp_Sync_GlobalToDomain( self->domains[d_i], curData[0] );
+				unsigned	inc_i;
+
+				for( inc_i = 0; inc_i < curData[1]; inc_i++ )
+					self->incEls[d_i][d_i - 1][dInd][inc_i] = curData[2 + inc_i];
+				curData += curData[1] + 2;
+			}
+		}
+
+		/* Free data and sizes. */
+		FreeArray( data[d_i] );
+		FreeArray( dataSize[d_i] );
+	}
+	FreeArray( data );
+	FreeArray( dataSize );
+
+	/* Convert downward incidence relations to back to domain indices. */
+	for( d_i = 1; d_i < self->nTDims; d_i++ ) {
+		unsigned	e_i;
+
+		for( e_i = 0; e_i < self->nDomainEls[d_i]; e_i++ ) {
+			unsigned	nIncEls = self->nIncEls[d_i][d_i - 1][e_i];
+			unsigned*	incEls = self->incEls[d_i][d_i - 1][e_i];
+			unsigned	inc_i;
+
+			for( inc_i = 0; inc_i < nIncEls; inc_i++ )
+				incEls[inc_i] = Decomp_Sync_GlobalToDomain( self->domains[d_i - 1], incEls[inc_i] );
+		}
+	}
+}
+
+void MeshTopology_Destruct( MeshTopology* self ) {
+	unsigned	d_i;
+
+	assert( self );
+
+	KillArray( self->nRentals );
+	KillArray( self->rentals );
+	KillArray( self->nDomainEls );
+	self->shadowDepth = 0;
+
+	for( d_i = 0; d_i < self->nTDims; d_i++ ) {
+		unsigned	d_j;
+
+		FreeObject( self->domains[d_i]->decomp );
+		FreeObject( self->domains[d_i] );
+
+		for( d_j = 0; d_j < self->nTDims; d_j++ ) {
+			KillArray( self->incEls[d_i][d_j] );
+			KillArray( self->nIncEls[d_i][d_j] );
+		}
+	}
+	KillArray( self->incEls );
+	KillArray( self->nIncEls );
+	KillArray( self->domains );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: MeshTopology.h 3584 2006-05-16 11:11:07Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshTopology_h__
+#define __Discretisaton_Mesh_MeshTopology_h__
+
+	/** Textual name of this class */
+	extern const Type MeshTopology_Type;
+
+	/** Virtual function types */
+
+	/** MeshTopology class contents */
+	typedef enum {
+		MT_VERTEX = 0, 
+		MT_EDGE = 1, 
+		MT_FACE = 2, 
+		MT_VOLUME = 3
+	} MeshTopology_Dim;
+
+	#define __MeshTopology				\
+		/* General info */			\
+		__Stg_Component				\
+							\
+		/* Virtual info */			\
+							\
+		/* MeshTopology info */			\
+		unsigned		nDims;		\
+		unsigned		nTDims;		\
+							\
+		Decomp_Sync**		domains;	\
+		unsigned*		nRentals;	\
+		unsigned**		rentals;	\
+		unsigned*		nDomainEls;	\
+		unsigned		shadowDepth;	\
+							\
+		unsigned***		nIncEls;	\
+		unsigned****		incEls;
+
+	struct MeshTopology { __MeshTopology };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+
+	#define MESHTOPOLOGY_DEFARGS	\
+		STG_COMPONENT_DEFARGS
+
+	#define MESHTOPOLOGY_PASSARGS	\
+		STG_COMPONENT_PASSARGS
+
+	MeshTopology* MeshTopology_New( Name name );
+	MeshTopology* _MeshTopology_New( MESHTOPOLOGY_DEFARGS );
+	void _MeshTopology_Init( MeshTopology* self );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _MeshTopology_Delete( void* topo );
+	void _MeshTopology_Print( void* topo, Stream* stream );
+
+	#define MeshTopology_Copy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define MeshTopology_DeepCopy( self ) \
+		(Mesh*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	void* _MeshTopology_Copy( void* topo, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+	void _MeshTopology_Construct( void* topo, Stg_ComponentFactory* cf, void* data );
+	void _MeshTopology_Build( void* topo, void* data );
+	void _MeshTopology_Initialise( void* topo, void* data );
+	void _MeshTopology_Execute( void* topo, void* data );
+	void _MeshTopology_Destroy( void* topo, void* data );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public functions
+	*/
+
+	void MeshTopology_SetNDims( void* topo, unsigned nDims );
+	void MeshTopology_SetElements( void* topo, MeshTopology_Dim dim, unsigned nEls, unsigned* els );
+	void MeshTopology_SetIncidence( void* topo, MeshTopology_Dim fromDim, MeshTopology_Dim toDim, 
+					unsigned* nIncEls, unsigned** incEls );
+	void MeshTopology_Complete( void* topo );
+	void MeshTopology_SetShadowDepth( void* topo, unsigned depth );
+	void MeshTopology_Invert( void* topo, MeshTopology_Dim fromDim, MeshTopology_Dim toDim );
+	void MeshTopology_Cascade( void* topo, MeshTopology_Dim fromDim, MeshTopology_Dim toDim );
+	void MeshTopology_Neighbourhood( void* topo, MeshTopology_Dim dim );
+
+	unsigned MeshTopology_GetLocalSize( void* meshTopology, MeshTopology_Dim dim );
+	unsigned MeshTopology_GetShadowSize( void* meshTopology, MeshTopology_Dim dim );
+	unsigned MeshTopology_GetDomainSize( void* meshTopology, MeshTopology_Dim dim );
+	unsigned MeshTopology_DomainToGlobal( void* meshTopology, MeshTopology_Dim dim, unsigned domain );
+	unsigned MeshTopology_GlobalToDomain( void* meshTopology, MeshTopology_Dim dim, unsigned global );
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+
+	void MeshTopology_BuildTopShadows( void* meshTopology, RangeSet*** shadows );
+	void MeshTopology_ExpandShadows( void* meshTopology, IndexSet* shadows, IndexSet* boundary );
+	void MeshTopology_BuildAllShadows( void* meshTopology, RangeSet*** shadows );
+	void MeshTopology_BuildShadowInc( void* meshTopology, RangeSet*** shadows, 
+					  unsigned*** incSizes, unsigned**** shadowInc );
+	void MeshTopology_SendRecvShadows( void* meshTopology, RangeSet*** shadows, 
+					   unsigned** incSizes, unsigned*** shadowInc );
+	void MeshTopology_Destruct( MeshTopology* self );
+
+#endif /* __Discretisaton_Mesh_MeshTopology_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshTopology</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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,248 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: NodeLayout.c 3574 2006-05-15 11:30:33Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type NodeLayout_Type = "NodeLayout";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+NodeLayout* _NodeLayout_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,
+		NodeLayout_NodeCoordAtFunction*			        nodeCoordAt,
+		NodeLayout_BuildNodeCoordsFunction*		        buildNodeCoords,
+		NodeLayout_ElementNodeCountFunction*		        elementNodeCount,
+		NodeLayout_BuildElementNodesFunction*		        buildElementNodes,
+		NodeLayout_NodeElementCountFunction*		        nodeElementCount,
+		NodeLayout_BuildNodeElementsFunction*		        buildNodeElements,
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction*  calcNodeCountInDimFromElementCount,
+		Dictionary*					        dictionary,
+		ElementLayout*					        elementLayout,
+		Topology*					        topology )
+{
+	NodeLayout* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(NodeLayout) );
+	
+	self = (NodeLayout*)_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->nodeCoordAt = nodeCoordAt;
+	self->buildNodeCoords = buildNodeCoords;
+	self->elementNodeCount = elementNodeCount;
+	self->buildElementNodes = buildElementNodes;
+	self->nodeElementCount = nodeElementCount;
+	self->buildNodeElements = buildNodeElements;
+	self->calcNodeCountInDimFromElementCount = calcNodeCountInDimFromElementCount;
+	
+	/* NodeLayout info */
+	if( initFlag ){
+		_NodeLayout_Init( self, elementLayout, topology );
+	}
+	
+	return self;
+}
+
+void _NodeLayout_Init(
+		NodeLayout*					self,
+		ElementLayout*					elementLayout,
+		Topology*					topology )
+{
+	/* General and Virtual info should already be set */
+	
+	/* NodeLayout info */
+	self->isConstructed = True;
+	self->elementLayout = elementLayout;
+	self->topology = topology;
+	self->nodeCount = 0;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _NodeLayout_Delete( void* nodeLayout ) {
+	NodeLayout* self = (NodeLayout*)nodeLayout;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _NodeLayout_Print( void* nodeLayout, Stream* stream ) {
+	NodeLayout* self = (NodeLayout*)nodeLayout;
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "NodeLayout (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* NodeLayout info */
+}
+
+
+void* _NodeLayout_Copy( void* nodeLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	NodeLayout*	self = (NodeLayout*)nodeLayout;
+	NodeLayout*	newNodeLayout;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newNodeLayout = (NodeLayout*)_Stg_Class_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newNodeLayout->nodeCoordAt = self->nodeCoordAt;
+	newNodeLayout->buildNodeCoords = self->buildNodeCoords;
+	newNodeLayout->elementNodeCount = self->elementNodeCount;
+	newNodeLayout->buildElementNodes = self->buildElementNodes;
+	newNodeLayout->nodeElementCount = self->nodeElementCount;
+	newNodeLayout->buildNodeElements = self->buildNodeElements;
+	newNodeLayout->calcNodeCountInDimFromElementCount = self->calcNodeCountInDimFromElementCount;
+	
+	newNodeLayout->dictionary = self->dictionary;
+	newNodeLayout->nodeCount = self->nodeCount;
+	
+	if( deep ) {
+		newNodeLayout->elementLayout = (ElementLayout*)Stg_Class_Copy( self->elementLayout, NULL, deep, nameExt, map );
+		newNodeLayout->topology = (Topology*)Stg_Class_Copy( self->topology, NULL, deep, nameExt, map );
+	}
+	else {
+		newNodeLayout->elementLayout = self->elementLayout;
+		newNodeLayout->topology = self->topology;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newNodeLayout;
+}
+
+
+Node_GlobalIndex NodeLayout_CalcNodeCountInDimFromElementCount( void* nodeLayout, Element_GlobalIndex elementCountInDim )
+{
+	NodeLayout* self = (NodeLayout*)nodeLayout;
+	
+	return self->calcNodeCountInDimFromElementCount( nodeLayout, elementCountInDim );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+/* Note that I've tried to cut down on amount of memory allocing/reallocing in the case where each element has same
+ * number of nodes. Main.PatrickSunter - 30 AUgust 2004 */
+Node_GlobalIndex NodeLayout_BuildSubset( void* nodeLayout, Index elementCount, Index* elements, Node_GlobalIndex** nodes ) {
+	NodeLayout*		self = (NodeLayout*)nodeLayout;
+	Node_GlobalIndex	nodeCnt = 0;
+	Node_GlobalIndex	prevENodeCnt = 0;
+	Element_GlobalIndex     e_I;
+	IndexSet*		set;
+	Element_Nodes		eNodes;
+	Element_GlobalIndex	eNodeCnt;
+	
+	set = IndexSet_New( self->nodeCount );
+	eNodeCnt = self->elementNodeCount( self, elements[0] );
+	eNodes = Memory_Alloc_Array_Unnamed( Node_GlobalIndex, eNodeCnt );
+	prevENodeCnt = eNodeCnt;
+	
+	for( e_I = 0; e_I < elementCount; e_I++ ) {
+		Element_GlobalIndex eNodeCnt = self->elementNodeCount( self, elements[e_I] );
+		
+		if( eNodeCnt ) {
+			Node_GlobalIndex	n_I;
+
+			if ( eNodeCnt > prevENodeCnt ) {
+				eNodes = Memory_Realloc_Array( eNodes, Node_GlobalIndex, eNodeCnt );
+			}
+			
+			self->buildElementNodes( self, elements[e_I], eNodes );
+			for( n_I = 0; n_I < eNodeCnt; n_I++ )
+				IndexSet_Add( set, eNodes[n_I] );
+			
+			prevENodeCnt = nodeCnt;
+		}
+	}
+	
+	Memory_Free( eNodes );
+	IndexSet_GetMembers( set, &nodeCnt, nodes );
+	Stg_Class_Delete( set );
+	
+	return nodeCnt;
+}
+
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Lays out the nodes relative to a given ElementLayout (eg 1 node in centre of each element, 1 node in corner of
+**	each.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: NodeLayout.h 3574 2006-05-15 11:30:33Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_NodeLayout_h__
+#define __Discretisaton_Mesh_NodeLayout_h__
+
+
+	/* Virtual function types */
+	typedef void			(NodeLayout_NodeCoordAtFunction)	( void* nodeLayout, Node_Index index, Coord coord );
+	typedef void			(NodeLayout_BuildNodeCoordsFunction)    ( void* nodeLayout, Coord_List coords );
+	typedef Node_GlobalIndex	(NodeLayout_ElementNodeCountFunction)   ( void* nodeLayout, Element_GlobalIndex globalIndex );
+	typedef void			(NodeLayout_BuildElementNodesFunction)  ( void* nodeLayout, Element_GlobalIndex globalIndex, Element_Nodes nodes );
+	typedef Element_GlobalIndex     (NodeLayout_NodeElementCountFunction)   ( void* nodeLayout, Node_GlobalIndex globalIndex );
+	typedef void			(NodeLayout_BuildNodeElementsFunction)  ( void* nodeLayout, Node_GlobalIndex globalIndex, Node_Elements elements );
+	typedef Node_GlobalIndex	(NodeLayout_CalcNodeCountInDimFromElementCountFunction) ( void* nodeLayout, Element_GlobalIndex globalIndex );
+	
+	/* Textual name of this class */
+	extern const Type NodeLayout_Type;
+
+	/* NodeLayout information */
+	#define __NodeLayout \
+		/* General info */ \
+		__Stg_Component \
+		Stream*                                                debug; \
+		Dictionary*			                       dictionary; \
+		\
+		/* Virtual info */ \
+		NodeLayout_NodeCoordAtFunction*		               nodeCoordAt; \
+		NodeLayout_BuildNodeCoordsFunction*                    buildNodeCoords; \
+		NodeLayout_ElementNodeCountFunction*                   elementNodeCount; \
+		NodeLayout_BuildElementNodesFunction*                  buildElementNodes; \
+		NodeLayout_NodeElementCountFunction*                   nodeElementCount; \
+		NodeLayout_BuildNodeElementsFunction*                  buildNodeElements; \
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction* calcNodeCountInDimFromElementCount; \
+		\
+		/* NodeLayout info ... */ \
+		ElementLayout*                                 elementLayout; \
+		Topology*                                      topology; \
+		Node_Index                                     nodeCount;
+	struct _NodeLayout { __NodeLayout };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Creation implementation */
+	NodeLayout* _NodeLayout_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,
+		NodeLayout_NodeCoordAtFunction*		        	nodeCoordAt,
+		NodeLayout_BuildNodeCoordsFunction*	        	buildNodeCoords,
+		NodeLayout_ElementNodeCountFunction*		        elementNodeCount,
+		NodeLayout_BuildElementNodesFunction*		        buildElementNodes,
+		NodeLayout_NodeElementCountFunction*		        nodeElementCount,
+		NodeLayout_BuildNodeElementsFunction*		        buildNodeElements,
+		NodeLayout_CalcNodeCountInDimFromElementCountFunction*  calcNodeCountInDimFromElementCount,
+		Dictionary*					dictionary,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+
+	void _NodeLayout_LoadFromDict( void* nodeLayout, Dictionary* subDict, Dictionary* dictionary, Stg_ObjectList* objList);
+
+	/* Initialisation implementation functions */
+	void _NodeLayout_Init(
+		NodeLayout*					self,
+		ElementLayout*					elementLayout,
+		Topology*					topology );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete nodeLayout implementation */
+	void _NodeLayout_Delete( void* nodeLayout );
+	
+	/* Print nodeLayout implementation */
+	void _NodeLayout_Print( void* nodeLayout, Stream* stream );
+	
+	/* Copy */
+	#define NodeLayout_Copy( self ) \
+		(NodeLayout*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define NodeLayout_DeepCopy( self ) \
+		(NodeLayout*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _NodeLayout_Copy( void* nodeLayout, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Calculates how many nodes are present in a given dimension if a given number of elements are present.
+		Note this onyl worth with the regular element layouts. */
+	Node_GlobalIndex NodeLayout_CalcNodeCountInDimFromElementCount( void* nodeLayout, Element_GlobalIndex elementCountInDim );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	Node_GlobalIndex NodeLayout_BuildSubset( void* nodeLayout, Index elementCount, Index* elements, Node_GlobalIndex** nodes );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_NodeLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">NodeLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,777 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ParallelPipedHexaEL.c 3883 2006-10-26 05:00:23Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "HexaEL.h"
+#include "ParallelPipedHexaEL.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "MeshDecomp.h"
+#include "HexaMD.h"
+
+
+/* Textual name of this class */
+const Type ParallelPipedHexaEL_Type = "ParallelPipedHexaEL";
+const Name PPHexaEL_IJK26TopologyName = "defaultIJK26Topology";
+const Name PPHexaEL_BlockGeometryName = "defaultBlockGeometry";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+ParallelPipedHexaEL* ParallelPipedHexaEL_DefaultNew( Name name )
+{
+	return (ParallelPipedHexaEL*)_ParallelPipedHexaEL_New(
+		sizeof(ParallelPipedHexaEL), 
+		ParallelPipedHexaEL_Type, 
+		_ParallelPipedHexaEL_Delete, 
+		_ParallelPipedHexaEL_Print,
+		_ParallelPipedHexaEL_Copy,
+		(Stg_Component_DefaultConstructorFunction*)ParallelPipedHexaEL_DefaultNew,
+		_ParallelPipedHexaEL_Construct,
+		_ParallelPipedHexaEL_Build,
+		_ParallelPipedHexaEL_Initialise,
+		_ParallelPipedHexaEL_Execute,
+		_ParallelPipedHexaEL_Destroy,
+		name,
+		False,
+		_ParallelPipedHexaEL_Build,
+		_HexaEL_BuildCornerIndices,
+		_HexaEL_CornerElementCount,
+		_HexaEL_BuildCornerElements,
+		_HexaEL_BuildEdgeIndices,
+		_HexaEL_EdgeElementCount,
+		_HexaEL_BuildEdgeElements,
+		_HexaEL_EdgeAt,
+		_ParallelPipedHexaEL_GetStaticMinAndMaxLocalCoords,
+		_ParallelPipedHexaEL_GetStaticMinAndMaxGlobalCoords,
+		_ParallelPipedHexaEL_ElementWithPoint,
+		0,
+		NULL );
+}
+
+ParallelPipedHexaEL* ParallelPipedHexaEL_New(
+		Name						name,
+		Dimension_Index             dim,
+		Dictionary*					dictionary )
+{
+	return _ParallelPipedHexaEL_New( 
+		sizeof(ParallelPipedHexaEL), 
+		ParallelPipedHexaEL_Type, 
+		_ParallelPipedHexaEL_Delete, 
+		_ParallelPipedHexaEL_Print,
+		_ParallelPipedHexaEL_Copy,
+		(Stg_Component_DefaultConstructorFunction*)ParallelPipedHexaEL_DefaultNew,
+		_ParallelPipedHexaEL_Construct,
+		_ParallelPipedHexaEL_Build,
+		_ParallelPipedHexaEL_Initialise,
+		_ParallelPipedHexaEL_Execute,
+		_ParallelPipedHexaEL_Destroy,
+		name,
+		True,
+		_ParallelPipedHexaEL_Build,
+		_HexaEL_BuildCornerIndices,
+		_HexaEL_CornerElementCount,
+		_HexaEL_BuildCornerElements,
+		_HexaEL_BuildEdgeIndices,
+		_HexaEL_EdgeElementCount,
+		_HexaEL_BuildEdgeElements,
+		_HexaEL_EdgeAt,
+		_ParallelPipedHexaEL_GetStaticMinAndMaxLocalCoords,
+		_ParallelPipedHexaEL_GetStaticMinAndMaxGlobalCoords,
+		_ParallelPipedHexaEL_ElementWithPoint,
+		dim,
+		dictionary );
+}
+
+void ParallelPipedHexaEL_Init(
+		ParallelPipedHexaEL*				self,
+		Name						name,
+		Dimension_Index             dim,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = ParallelPipedHexaEL_Type;
+	self->_sizeOfSelf = sizeof(ParallelPipedHexaEL);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _ParallelPipedHexaEL_Delete;
+	self->_print = _ParallelPipedHexaEL_Print;
+	self->_copy = _ParallelPipedHexaEL_Copy;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*)ParallelPipedHexaEL_DefaultNew;
+	self->_construct = _ParallelPipedHexaEL_Construct;
+	self->_build = _ParallelPipedHexaEL_Stg_ComponentBuild;
+	self->_initialise = _ParallelPipedHexaEL_Initialise;
+	self->_execute = _ParallelPipedHexaEL_Execute;
+	self->_destroy = _ParallelPipedHexaEL_Destroy;
+	self->build = _ParallelPipedHexaEL_Build;
+	self->buildCornerIndices = _HexaEL_BuildCornerIndices;
+	self->cornerElementCount = _HexaEL_CornerElementCount;
+	self->buildCornerElements = _HexaEL_BuildCornerElements;
+	self->buildEdgeIndices = _HexaEL_BuildEdgeIndices;
+	self->edgeElementCount = _HexaEL_EdgeElementCount;
+	self->buildEdgeElements = _HexaEL_BuildEdgeElements;
+	self->edgeAt = _HexaEL_EdgeAt;
+	self->getStaticMinAndMaxLocalCoords = _ParallelPipedHexaEL_GetStaticMinAndMaxLocalCoords;
+	self->getStaticMinAndMaxGlobalCoords = _ParallelPipedHexaEL_GetStaticMinAndMaxGlobalCoords;
+	self->elementWithPoint = _ParallelPipedHexaEL_ElementWithPoint;
+
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+
+	_ElementLayout_Init(
+		(ElementLayout*)self,
+		(Geometry*)BlockGeometry_New( PPHexaEL_BlockGeometryName, dictionary ),
+		(Topology*)IJK26Topology_New( PPHexaEL_IJK26TopologyName, dictionary ) );
+	self->topologyWasCreatedInternally = True;
+	self->geometryWasCreatedInternally = True;
+	_HexaEL_Init( (HexaEL*)self, dim, NULL, NULL );
+	
+	/* ParallelPipedHexaEL info */
+	_ParallelPipedHexaEL_Init( self );
+}
+
+ParallelPipedHexaEL* _ParallelPipedHexaEL_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,
+		ElementLayout_BuildFunction*                            build,		
+		ElementLayout_BuildCornerIndicesFunction*               buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*               cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*              buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*                 buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*                 edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*                buildEdgeElements,
+		ElementLayout_EdgeAtFunction*                           edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*    getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*   getStaticMinAndMaxGlobalCoords,				
+		ElementLayout_ElementWithPointFunction*                 elementWithPoint,
+		Dimension_Index                                         dim,
+		Dictionary*                                             dictionary )
+{
+	ParallelPipedHexaEL* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ParallelPipedHexaEL) );
+	self = (ParallelPipedHexaEL*)_HexaEL_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		build,
+		buildCornerIndices,
+		cornerElementCount,
+		buildCornerElements,
+		buildEdgeIndices,
+		edgeElementCount,
+		buildEdgeElements,
+		edgeAt,
+		getStaticMinAndMaxLocalCoords,
+		getStaticMinAndMaxGlobalCoords,
+		elementWithPoint,
+		dim,
+		dictionary,
+		(initFlag)?(Geometry*)BlockGeometry_New( PPHexaEL_BlockGeometryName, dictionary ):NULL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* ParallelPipedHexaEL info */
+	if( initFlag ){
+		
+		self->geometryWasCreatedInternally = True;
+		_ParallelPipedHexaEL_Init( self );
+	}
+	
+	return self;
+}
+
+void _ParallelPipedHexaEL_Init( ParallelPipedHexaEL* self )
+{
+	Dimension_Index	  dim_I = 0;
+	Index             topSizeInDim = 0;
+	double            geomSizeInDim = 0;
+
+	/* General and Virtual info should already be set */
+	
+	/* Since we are using a block geometry, check that the width's are sane for
+	the given dimensionality of the Topology */
+	for ( dim_I = 0; dim_I < 3 ; dim_I++ ) {
+		topSizeInDim = ((IJK26Topology*)self->topology)->size[dim_I];
+		geomSizeInDim = ((BlockGeometry*)self->geometry)->max[dim_I] - ((BlockGeometry*)self->geometry)->min[dim_I]; 
+
+		/* for 2D we don't need to check the 3rd axis, which by convention is K */
+		if ( (dim_I == K_AXIS) && (self->dim == 2) ) continue;
+		
+		if ( (geomSizeInDim < 1e-99) ) {
+			Stream*      errorStream = Journal_Register( Error_Type, self->type );
+			Journal_Printf( errorStream, "Error - in %s(), for %s \"%s\": number of elements requested "
+				"in %c direction using IJK26Topology \"%s\" is %u, but the width of "
+				"that dimension in provided BlockGeometry \"%s\" is %.2f - %.2f = 0, "
+				"thus the element search & location functions will fail.",
+				__func__, self->type, self->name,
+				IJKTopology_DimNumToDimLetter[dim_I], self->topology->name, topSizeInDim,
+				self->geometry->name, ((BlockGeometry*)self->geometry)->max[dim_I],
+				((BlockGeometry*)self->geometry)->min[dim_I] );
+			Journal_Firewall( 0, errorStream, "Exiting.\n" );	
+		}
+	}
+	
+	/* ParallelPipedHexaEL info */
+	self->isConstructed = True;
+
+	/* Initialise everything else to zero, until build phase */
+	for ( dim_I = 0; dim_I < 3 ; dim_I++ ) {
+		self->minLocalThisPartition[dim_I] = 0;
+		self->maxLocalThisPartition[dim_I] = 0;
+		self->minDomainThisPartition[dim_I] = 0;
+		self->maxDomainThisPartition[dim_I] = 0;
+		self->elementLengthEachDim[dim_I] = 0;
+	} 
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _ParallelPipedHexaEL_Delete( void* parallelPipedHexaEL ) {
+	ParallelPipedHexaEL* self = (ParallelPipedHexaEL*)parallelPipedHexaEL;
+	
+	/* Only delete our geometry ptr if it's a default one created using the old init method,
+		not the XML componentFactory way : otherwise we may double-delete memory */
+	if( ( True == self->geometryWasCreatedInternally ) ) {
+		Stg_Class_Delete( self->geometry );
+		self->geometry = NULL;
+	}
+	
+	/* The parent will check about deleting the topology */
+	
+	/* Stg_Class_Delete parent */
+	_HexaEL_Delete( self );
+}
+
+
+void _ParallelPipedHexaEL_Print( void* parallelPipedHexaEL, Stream* stream ) {
+	ParallelPipedHexaEL* self = (ParallelPipedHexaEL*)parallelPipedHexaEL;
+	
+	/* Set the Journal for printing informations */
+	Stream* parallelPipedHexaELStream;
+	parallelPipedHexaELStream = Journal_Register( InfoStream_Type, "ParallelPipedHexaELStream" );
+
+	/* Print parent */
+	_HexaEL_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "ParallelPipedHexaEL (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* ParallelPipedHexaEL info */
+}
+
+
+void* _ParallelPipedHexaEL_Copy( void* ppHexaEL, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ParallelPipedHexaEL*	self = (ParallelPipedHexaEL*)ppHexaEL;
+	ParallelPipedHexaEL*	newParallelPipedHexaEL;
+	Index			idx_I;
+	
+	newParallelPipedHexaEL = (ParallelPipedHexaEL*)_HexaEL_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	for( idx_I = 0; idx_I < 3; idx_I++ ) {
+		newParallelPipedHexaEL->minLocalThisPartition[idx_I] = self->minLocalThisPartition[idx_I];
+		newParallelPipedHexaEL->maxLocalThisPartition[idx_I] = self->maxLocalThisPartition[idx_I];
+		newParallelPipedHexaEL->minDomainThisPartition[idx_I] = self->minDomainThisPartition[idx_I];
+		newParallelPipedHexaEL->maxDomainThisPartition[idx_I] = self->maxDomainThisPartition[idx_I];
+		newParallelPipedHexaEL->elementLengthEachDim[idx_I] = self->elementLengthEachDim[idx_I];
+	}
+	newParallelPipedHexaEL->dim = self->dim;
+	
+	return (void*)newParallelPipedHexaEL;
+}
+
+void _ParallelPipedHexaEL_Construct( void* ppHexaEL, Stg_ComponentFactory* cf, void* data ){
+	ParallelPipedHexaEL *self = (ParallelPipedHexaEL*)ppHexaEL;
+	IJK26Topology *topology = NULL;
+	BlockGeometry *geometry = NULL;
+	Dimension_Index dim;
+
+	/* Note: we can't just use the HexaEL parent construct since we want to assert that the input geometry
+	is a block geometry this time */
+
+	self->dictionary = cf->rootDict;
+	
+	topology =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name, Topology_Type, IJK26Topology,  True, data  ) ;
+	geometry =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name, Geometry_Type, BlockGeometry,  True, data  ) ;
+
+	dim = Dictionary_GetUnsignedInt( self->dictionary, "dim" );
+	
+	_ElementLayout_Init( (ElementLayout*)self, (Geometry*)geometry, (Topology*)topology );
+	_HexaEL_Init( (HexaEL*)self, dim, geometry->size, topology->size );
+	_ParallelPipedHexaEL_Init( self );
+}
+	
+void _ParallelPipedHexaEL_Stg_ComponentBuild( void* ppHexaEL, void* data ){
+	
+}
+	
+void _ParallelPipedHexaEL_Initialise( void* ppHexaEL, void* data ){
+	
+}
+	
+void _ParallelPipedHexaEL_Execute( void* ppHexaEL, void* data ){
+	
+}
+	
+void _ParallelPipedHexaEL_Destroy( void* ppHexaEL, void* data ){
+	
+}
+
+void _ParallelPipedHexaEL_Build( void* parallelPipedHexaEL, void* decomp ) {
+	ParallelPipedHexaEL_UpdateGeometryPartitionInfo( parallelPipedHexaEL, decomp );
+}
+
+
+void ParallelPipedHexaEL_UpdateGeometryPartitionInfo( void* parallelPipedHexaEL, void* decomp ) {
+	ParallelPipedHexaEL*	self = (ParallelPipedHexaEL*)parallelPipedHexaEL;
+	BlockGeometry*		geometry = (BlockGeometry*)self->geometry;
+	HexaMD*			hexaDecomp = (HexaMD*) decomp;
+	Dimension_Index		dim_I;
+	Partition_Index		myRank = hexaDecomp->rank;
+	Element_Index*		elementLocal3DCounts = hexaDecomp->elementLocal3DCounts[myRank];
+
+	Journal_Firewall( 
+			Stg_Class_IsInstance( hexaDecomp, HexaMD_Type ), 
+			Journal_Register( Error_Type, self->type ),
+			"Error in func %s: hexaDecomp %s '%s' passed in, is not an instance of type '%s'.\n", 
+			__func__, hexaDecomp->type, hexaDecomp->name, HexaMD_Type );
+
+	/* Calculate dimensions of each element */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		self->elementLengthEachDim[dim_I] = (geometry->max[dim_I] - geometry->min[dim_I]) / self->elementSize[dim_I];
+	}	
+
+	/* calculate bounds of local geometry */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		self->minLocalThisPartition[dim_I] = geometry->min[dim_I]
+			+ hexaDecomp->_elementOffsets[myRank][dim_I] * self->elementLengthEachDim[dim_I];
+
+		self->maxLocalThisPartition[dim_I] = self->minLocalThisPartition[dim_I]
+			+ elementLocal3DCounts[dim_I] * self->elementLengthEachDim[dim_I];
+	}	
+
+	/* calculate bounds of domain geometry */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		self->minDomainThisPartition[dim_I] = self->minLocalThisPartition[dim_I];
+		if ( hexaDecomp->_elementOffsets[myRank][dim_I] != 0) {	
+			self->minDomainThisPartition[dim_I] -= hexaDecomp->shadowDepth * self->elementLengthEachDim[dim_I];
+		}		
+		self->maxDomainThisPartition[dim_I] = self->maxLocalThisPartition[dim_I];
+		if ( hexaDecomp->_elementOffsets[myRank][dim_I] + elementLocal3DCounts[dim_I] != hexaDecomp->elementGlobal3DCounts[dim_I] )
+		{	
+			self->maxDomainThisPartition[dim_I] += hexaDecomp->shadowDepth * self->elementLengthEachDim[dim_I];
+		}
+	}	
+}
+
+
+Bool _ParallelPipedHexaEL_GetStaticMinAndMaxLocalCoords( void* parallelPipedHexaEL, Coord min, Coord max ) {
+	ParallelPipedHexaEL*	self = (ParallelPipedHexaEL*)parallelPipedHexaEL;
+	Dimension_Index		dim_I = 0;
+
+	memset( min, 0, sizeof( Coord ) );
+	memset( max, 0, sizeof( Coord ) );
+	for ( dim_I=0; dim_I < self->dim ; dim_I++ ) {
+		min[dim_I] = self->minLocalThisPartition[dim_I];
+		max[dim_I] = self->maxLocalThisPartition[dim_I];
+	}	
+
+	return True;
+}
+
+
+Bool _ParallelPipedHexaEL_GetStaticMinAndMaxGlobalCoords( void* parallelPipedHexaEL, Coord min, Coord max ) {
+	ParallelPipedHexaEL*	self = (ParallelPipedHexaEL*)parallelPipedHexaEL;
+	BlockGeometry*		bGeometry = (BlockGeometry*)self->geometry;
+	Dimension_Index		dim_I = 0;
+	
+	memset( min, 0, sizeof( Coord ) );
+	memset( max, 0, sizeof( Coord ) );
+	for ( dim_I=0; dim_I < self->dim ; dim_I++ ) {
+		min[dim_I] = bGeometry->min[dim_I];
+		max[dim_I] = bGeometry->max[dim_I];
+	}
+
+	return True;
+}
+
+
+Element_DomainIndex _ParallelPipedHexaEL_ElementWithPoint( void* parallelPipedHexaEL, void* decomp, Coord point, void* mesh, 
+							   PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints )
+{
+	ParallelPipedHexaEL*	self = (ParallelPipedHexaEL*)parallelPipedHexaEL;
+	BlockGeometry*		geometry = (BlockGeometry*)self->geometry;
+	HexaMD*			hexaDecomp = (HexaMD*)decomp;
+	int			localElementIJK[3] = { 0, 0, 0 }; /* Note: has to be int for shadow calculations */
+	Dimension_Index		dim_I;
+	Coord			adjPoint;
+	Coord			normalisedLocalCoord;
+	Coord			normalisedDomainCoord;
+	Element_DomainIndex	elementWithPoint;
+	Bool			withinLocalGeometry = True;
+	Partition_Index		myRank = hexaDecomp->rank;
+	Element_Index*		elementLocal3DCounts = hexaDecomp->elementLocal3DCounts[myRank];
+
+	Journal_DFirewall( (hexaDecomp->type == HexaMD_Type ), Mesh_Error, "Error: %s doesn't know how to "
+			"handle decomps other than %s type.\n", __func__, HexaMD_Type );
+	
+
+	
+	/* see if the element is within the global geometry */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		if ( ( point[dim_I] < ((BlockGeometry*)self->geometry)->min[dim_I] )
+			|| ( point[dim_I] > ((BlockGeometry*)self->geometry)->max[dim_I] ) )
+		{
+			return hexaDecomp->elementDomainCount;
+		}	
+	}
+
+	/* see if the element is within the local geometry */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		if ( ( point[dim_I] < self->minLocalThisPartition[dim_I] ) 
+			|| ( point[dim_I] >= self->maxLocalThisPartition[dim_I] ) )
+		{
+			/* Testing the upper boundary */
+			if ( ( boundaryStatus == INCLUSIVE_UPPER_BOUNDARY ) &&
+				( point[dim_I] == self->maxLocalThisPartition[dim_I] ) )
+			{ 	
+				/* Inclusive upper boundaries: consider upper boundary as owned by last row
+				of elements on local processor */
+				continue; 
+			}	
+			else if ( ( self->maxLocalThisPartition[dim_I] == ((BlockGeometry*)self->geometry)->max[dim_I] ) &&
+				( point[dim_I] == ((BlockGeometry*)self->geometry)->max[dim_I] ) )
+			{
+				/* Exception for the last processor: the right hand boundary _is_ owned by
+				the last processor */
+				continue;
+			}
+			else {
+				withinLocalGeometry = False;
+				break;
+			}
+		}	
+	}
+
+	if ( False == withinLocalGeometry ) {
+		if ( hexaDecomp->elementShadowCount > 0 ) {
+			/* Test if the element is still within the full domain geometry */
+			for (; dim_I < self->dim; dim_I++ ) {
+				if ( ( point[dim_I] < self->minDomainThisPartition[dim_I] ) ||
+					( point[dim_I] >= self->maxDomainThisPartition[dim_I] ))
+				{
+					if ( ( boundaryStatus == INCLUSIVE_UPPER_BOUNDARY )
+						&& ( point[dim_I] == self->maxDomainThisPartition[dim_I] ) )
+					{
+						/* Allow boundary shadow elements if inclusive upper boundary */
+						continue;
+					}
+					else if ( ( self->maxDomainThisPartition[dim_I] == ((BlockGeometry*)self->geometry)->max[dim_I] ) &&
+						( point[dim_I] == ((BlockGeometry*)self->geometry)->max[dim_I] ) )
+					{
+						/* Exception for the last processor: the right hand boundary _is_ owned by
+						the last processor */
+						continue;
+					}
+
+					/* We now know element is outside domain, so last chance is if its in periodic space */
+					if ( ( True == ((IJKTopology*)self->topology)->isPeriodic[dim_I] ) && ( hexaDecomp->shadowDepth > 0 ) )
+					{
+						/* Tests for if the point is within the periodic shadow elements */
+						/* Lower -> upper periodic test */
+						if ( ( hexaDecomp->_elementOffsets[myRank][dim_I] == 0 ) &&
+							( point[dim_I] >= ((BlockGeometry*)self->geometry)->max[dim_I] -
+								(self->elementLengthEachDim[dim_I] * hexaDecomp->shadowDepth ) ) ) 
+						{
+							continue;
+						}
+						/* Upper -> lower periodic test */
+						else if ( ( (hexaDecomp->_elementOffsets[myRank][dim_I] + hexaDecomp->elementLocal3DCounts[myRank][dim_I]) ==
+								hexaDecomp->elementGlobal3DCounts[dim_I] ) )
+						{
+							if ( point[dim_I] < ((BlockGeometry*)self->geometry)->min[dim_I] +
+								(self->elementLengthEachDim[dim_I] * hexaDecomp->shadowDepth ) )
+							{
+								continue;
+							}
+							else if ( ( boundaryStatus == INCLUSIVE_UPPER_BOUNDARY )
+								&& ( point[dim_I] == ((BlockGeometry*)self->geometry)->min[dim_I] +
+									(self->elementLengthEachDim[dim_I] * hexaDecomp->shadowDepth ) ) )
+							{
+								continue;
+							}	
+							else {
+								return hexaDecomp->elementDomainCount;
+							}	
+						}	
+						else {
+							/* Element isn't even within full domain, or periodic part 
+							-> return and notify of this */
+							return hexaDecomp->elementDomainCount;
+						}
+					}	
+					else {	
+						/* Element isn't even within full domain, or periodic part 
+						-> return and notify of this */
+						return hexaDecomp->elementDomainCount;
+					}	
+				}
+			}
+		}
+		else {
+			return hexaDecomp->elementDomainCount;
+		}
+	}
+
+	/* So now know point is either within local or shadow space */
+
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		adjPoint[dim_I] = point[dim_I];
+	}
+
+	/* Check if the point is in periodic shadow space. If so, adjust it to its non-periodic corresponding
+	point, so the rest of the algorithm works as usual */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		if ( point[dim_I] > self->maxDomainThisPartition[dim_I] ) {	
+			adjPoint[dim_I] = self->maxDomainThisPartition[dim_I] + ( geometry->max[dim_I] - point[dim_I] );
+		}	
+		else if ( point[dim_I] < self->minDomainThisPartition[dim_I] ) {	
+			adjPoint[dim_I] = self->minDomainThisPartition[dim_I] - ( point[dim_I] - geometry->min[dim_I] ) ;
+		}	
+	}	
+
+	/* Now normalise the search point relative to the bottom corner of the local processor's mesh */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		normalisedLocalCoord[dim_I] = adjPoint[dim_I] - self->minLocalThisPartition[dim_I];
+	}
+
+	/* Calculate 3D tuple of local element number based on dividing points in each dim */
+	for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+		localElementIJK[dim_I] = floor( normalisedLocalCoord[dim_I] / self->elementLengthEachDim[dim_I] ); 
+		if ( adjPoint[dim_I] == geometry->max[dim_I] ) {
+			/* special case: on the very upper end of the domain, set equal to last element (regardless if 
+			shadow or normal) */
+			localElementIJK[dim_I]--;
+		}
+		else if ( (True == withinLocalGeometry) && ( localElementIJK[dim_I] == elementLocal3DCounts[dim_I] ) ) {
+			/* This case following is to handle 2 special situations:
+			1) When INCLUSIVE_UPPER_BOUNDARY chosen, deals with points that are exactly on the upper end of the
+			local space (other than those on max geometry considered above). 
+			2) points just below the edge of the local space border sometimes get calculated as above due to
+			floating-point rounding in the above calculation. So, we need to manually adjust this. */
+			localElementIJK[dim_I]--;
+		}	
+	}
+	
+	if ( True == withinLocalGeometry ) {
+		/* local elements: just convert element 3D tuple -> 1D index */
+		Dimension_3DTo1D( localElementIJK, elementLocal3DCounts, &elementWithPoint );
+	}
+	else {
+		Index			adjustment = 0;
+		Element_DomainIJK	domainElementIJK = {0,0,0};
+		Index			domainElementWithPoint = 0;
+		Coord			normalisationPoint;
+		
+		/* shadow elements: more work to do */
+		/* Now normalise the search point relative to the bottom corner of the local processor's mesh */
+		for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+			normalisationPoint[dim_I] = self->minDomainThisPartition[dim_I];
+			/* Test for periodic and renormalise */
+			if ( ( True == ((IJKTopology*)self->topology)->isPeriodic[dim_I] ) && ( hexaDecomp->shadowDepth > 0 ) 
+				&& ( (hexaDecomp->_elementOffsets[myRank][dim_I] + hexaDecomp->elementLocal3DCounts[myRank][dim_I]) ==
+								hexaDecomp->elementGlobal3DCounts[dim_I] ) )
+			{	
+				normalisationPoint[dim_I] -= hexaDecomp->shadowDepth * self->elementLengthEachDim[dim_I];
+			}
+
+			normalisedDomainCoord[dim_I] = adjPoint[dim_I] - normalisationPoint[dim_I];
+		}
+		/* Find 3D tuple of shadow element */
+		for ( dim_I = 0; dim_I < self->dim; dim_I++ ) {
+			domainElementIJK[dim_I] = floor( normalisedDomainCoord[dim_I] / self->elementLengthEachDim[dim_I] ); 
+
+			if ( ( True == ((IJKTopology*)self->topology)->isPeriodic[dim_I] ) && ( hexaDecomp->shadowDepth > 0 ) ) 
+			{	/* Periodic special cases */	
+				if ( ( (hexaDecomp->_elementOffsets[myRank][dim_I] + hexaDecomp->elementLocal3DCounts[myRank][dim_I]) ==
+								hexaDecomp->elementGlobal3DCounts[dim_I] ) 
+					&& ( point[dim_I] == geometry->min[dim_I] ) ) 
+				{
+					/* A special case for points on lower boundary of periodic shadow space: the adjPoint system
+					 * doesn't really work for them since they get confused with the lower shadow space section,
+					 * so we need to manually adjust here. */
+					domainElementIJK[dim_I]--;
+				}
+				else if ( ( hexaDecomp->_elementOffsets[myRank][dim_I] == 0 )
+					&& ( point[dim_I] == self->maxDomainThisPartition[dim_I] ) )
+				{
+					/* When periodicity is enabled, for the lowest processor, points on the max domain don't get
+					adjusted by the case below, because of the shadow elements at the "top" influencing the
+					domainElementIJK calculation. Adjust here. */
+					domainElementIJK[dim_I]--;
+				}
+			}
+
+			if ( domainElementIJK[dim_I] == hexaDecomp->elementDomain3DCounts[dim_I] ) {
+				/* The following is to handle 3 special cases:
+				1) When the point is on the upper boundary of the entire domain.
+				2) When INCLUSIVE_UPPER_BOUNDARY chosen, deals with points that are exactly on the upper end of the
+				domain space.
+				3) points just below the edge of the domain space border sometimes get calculated as above due to
+				floating-point rounding in the above calculation. So, we need to manually adjust this. */
+				domainElementIJK[dim_I]--;
+			}	
+		}	
+		/* Convert 3D tuple -> 1D index */
+		Dimension_3DTo1D( domainElementIJK, hexaDecomp->elementDomain3DCounts, &domainElementWithPoint );
+
+		/* Now: calculate how many "holes" for local elements we will subtract */
+		if ( self->dim == 2 ) {
+			if ( localElementIJK[J_AXIS] < 0 ) {
+				adjustment = 0;
+			}
+			else if ( domainElementIJK[J_AXIS] > localElementIJK[J_AXIS] ) {
+				adjustment = hexaDecomp->elementLocalCount;
+			}
+			else {
+				Index adjustRows = localElementIJK[J_AXIS];
+				if ( adjPoint[I_AXIS] >= self->maxLocalThisPartition[I_AXIS] ) {
+					adjustRows++;
+				}
+				adjustment = adjustRows * hexaDecomp->elementLocal3DCounts[myRank][I_AXIS];
+			}
+		}
+		else {
+
+			/* First consider the Z plane */
+			if ( localElementIJK[K_AXIS] < 0 ) {
+				/* If we are below the lowest I-J plane of the local block, no adjustments */
+				adjustment = 0;
+			}
+			else if ( domainElementIJK[K_AXIS] > localElementIJK[K_AXIS] ) {
+				/* If we are above the max I-J plane of the local block, adjust by the entire local block */
+				adjustment = hexaDecomp->elementLocalCount;
+			}
+			else {
+				Index	adjustZSlices;
+				Index	localIJ_SliceCount;
+
+				/* Ok, we are in one of the I-J planes of the local block */
+
+				/* First, adjust for any complete blocks below us */
+				adjustZSlices = localElementIJK[K_AXIS];
+				localIJ_SliceCount = ( elementLocal3DCounts[I_AXIS] * elementLocal3DCounts[J_AXIS] );
+				adjustment = adjustZSlices * localIJ_SliceCount;
+				
+				/* Ok, now adjust for any local elements within the current slice */
+				if ( localElementIJK[J_AXIS] < 0 ) {
+					/* We are below the lowest J row: nothing more to adjust */
+					adjustment += 0;
+				}
+				else if ( domainElementIJK[J_AXIS] > localElementIJK[J_AXIS] ) {
+					/* We are above the last K row: add another full slice to adjust by */
+					adjustment += localIJ_SliceCount;
+				}
+				else {
+					Index adjustRows;
+
+					/* We are somewhere next to a K Row: calculate how many to add on */
+					adjustRows = localElementIJK[J_AXIS];
+
+					/* If we're on the RHS of one, need to add one more row */
+					if ( adjPoint[I_AXIS] >= self->maxLocalThisPartition[I_AXIS] ) {
+						adjustRows++;
+					}
+					adjustment += adjustRows * elementLocal3DCounts[I_AXIS];
+				}
+			}	
+		}
+
+		/* OK: calculate proper domain index: local index, plus the "raw" domain index, then subtract
+		  adjustment for local element positions */
+		elementWithPoint = hexaDecomp->elementLocalCount + domainElementWithPoint - adjustment;
+	}
+	
+	return elementWithPoint;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Manages the layout of elements in a mesh, where the user wishes to have regular
+**	"box" elements. Automatically creates a "Block" Geometry, and an IJK26Topology.
+**
+** Assumptions:
+**	At the moment, the calculation of minLocalThisPartition, maxLocalThisPartition
+**	etc, and also the elementWithPoint() function, assumes the decomposition used
+**	is a HexaMD. Would need to generalise them if this wasn't the case.
+**
+** Comments:
+**
+** $Id: ParallelPipedHexaEL.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_ParallelPipedHexaEL_h__
+#define __Discretisaton_Mesh_ParallelPipedHexaEL_h__
+
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type ParallelPipedHexaEL_Type;
+
+	/* ParallelPipedHexaEL information */
+	#define __ParallelPipedHexaEL \
+		/* General info */ \
+		__HexaEL \
+		\
+		/* Virtual info */ \
+		\
+		/* ParallelPipedHexaEL info ... */ \
+		Coord			minLocalThisPartition; /** Bottom corner of local nodes */\
+		Coord			maxLocalThisPartition; /** Top corner of local nodes */\
+		Coord			minDomainThisPartition; /** Bottom corner of domain (inc shadow) nodes */\
+		Coord			maxDomainThisPartition; /** Top corner of domain (inc shadow) nodes */\
+		double			elementLengthEachDim[3]; /** Dimensions (l*w*h) of any given element */\
+		Bool                    geometryWasCreatedInternally; /** Necessary due to component register */
+		
+	struct _ParallelPipedHexaEL { __ParallelPipedHexaEL };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a ParallelPipedHexaEL */
+	ParallelPipedHexaEL* ParallelPipedHexaEL_DefaultNew( Name name );
+	
+	ParallelPipedHexaEL* ParallelPipedHexaEL_New(
+		Name						name,
+		Dimension_Index             dim,
+		Dictionary*					dictionary );
+
+	/* Initialise a ParallelPipedHexaEL */
+	void ParallelPipedHexaEL_Init(
+		ParallelPipedHexaEL*				self,
+		Name						name,
+		Dimension_Index             dim,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	ParallelPipedHexaEL* _ParallelPipedHexaEL_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,
+		ElementLayout_BuildFunction*                            build,		
+		ElementLayout_BuildCornerIndicesFunction*               buildCornerIndices,
+		ElementLayout_CornerElementCountFunction*               cornerElementCount,
+		ElementLayout_BuildCornerElementsFunction*              buildCornerElements,
+		ElementLayout_BuildEdgeIndicesFunction*                 buildEdgeIndices,
+		ElementLayout_EdgeElementCountFunction*                 edgeElementCount,
+		ElementLayout_BuildEdgeElementsFunction*                buildEdgeElements,
+		ElementLayout_EdgeAtFunction*                           edgeAt,
+		ElementLayout_GetStaticMinAndMaxLocalCoordsFunction*    getStaticMinAndMaxLocalCoords,
+		ElementLayout_GetStaticMinAndMaxGlobalCoordsFunction*   getStaticMinAndMaxGlobalCoords,				
+		ElementLayout_ElementWithPointFunction*                 elementWithPoint,
+		Dimension_Index                                         dim,
+		Dictionary*                                             dictionary );
+
+	/* Initialisation implementation functions */
+	void _ParallelPipedHexaEL_Init(
+		ParallelPipedHexaEL*				self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete ParallelPipedHexaEL implementation */
+	void _ParallelPipedHexaEL_Delete( void* parallelPipedHexaEL );
+	
+	/* Print ParallelPipedHexaEL implementation */
+	void _ParallelPipedHexaEL_Print( void* parallelPipedHexaEL, Stream* stream );
+	
+	/* Copy */
+	#define ParallelPipedHexaEL_Copy( self ) \
+		(ParallelPipedHexaEL*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ParallelPipedHexaEL_DeepCopy( self ) \
+		(ParallelPipedHexaEL*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _ParallelPipedHexaEL_Copy( void* ppHexaEL, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	void _ParallelPipedHexaEL_Construct( void* ppHexaEL, Stg_ComponentFactory* cf, void* data );
+	
+	void _ParallelPipedHexaEL_Stg_ComponentBuild( void* ppHexaEL, void* data );
+	
+	void _ParallelPipedHexaEL_Initialise( void* ppHexaEL, void* data );
+	
+	void _ParallelPipedHexaEL_Execute( void* ppHexaEL, void* data );
+	
+	void _ParallelPipedHexaEL_Destroy( void* ppHexaEL, void* data );
+	
+	void _ParallelPipedHexaEL_Build( void* parallelPipedHexaEL, void* decomp );
+	
+	Bool _ParallelPipedHexaEL_GetStaticMinAndMaxLocalCoords( void* parallelPipedHexaEL, Coord min, Coord max );
+	
+	Bool _ParallelPipedHexaEL_GetStaticMinAndMaxGlobalCoords( void* parallelPipedHexaEL, Coord min, Coord max );
+
+	Element_GlobalIndex _ParallelPipedHexaEL_ElementWithPoint( void* parallelPipedHexaEL, void* decomp, Coord point, void* mesh, 
+								   PartitionBoundaryStatus boundaryStatus, unsigned nHints, unsigned* hints );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	void ParallelPipedHexaEL_UpdateGeometryPartitionInfo( void* parallelPipedHexaEL, void* decomp );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_ParallelPipedHexaEL_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ParallelPipedHexaEL</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">HexaEL</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ShadowInfo.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ShadowInfo.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ShadowInfo.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_ShadowInfo_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_ShadowInfo_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: StencilMD.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ElementLayout.h"
+#include "NodeLayout.h"
+#include "MeshDecomp.h"
+#include "MeshLayout.h"
+#include "StencilMD.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type StencilMD_Type = "StencilMD";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+StencilMD* StencilMD_DefaultNew( )
+{
+	
+}
+
+StencilMD* StencilMD_New(
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*			 		elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshLayout*					stencilLayout )
+{
+	return _StencilMD_New( 
+		sizeof(StencilMD), 
+		StencilMD_Type, 
+		_StencilMD_Delete, 
+		_StencilMD_Print,
+		_MeshDecomp_Node_LocalToGlobal1D,
+		_MeshDecomp_Node_DomainToGlobal1D,
+		_MeshDecomp_Node_ShadowToGlobal1D, 
+		_MeshDecomp_Node_GlobalToLocal1D, 
+		_MeshDecomp_Node_GlobalToDomain1D, 
+		_MeshDecomp_Node_GlobalToShadow1D,
+		_MeshDecomp_Element_LocalToGlobal1D,
+		_MeshDecomp_Element_DomainToGlobal1D,
+		_MeshDecomp_Element_ShadowToGlobal1D, 
+		_MeshDecomp_Element_GlobalToLocal1D, 
+		_MeshDecomp_Element_GlobalToDomain1D, 
+		_MeshDecomp_Element_GlobalToShadow1D,
+		stencilLayout->decomp->shadowProcCount,
+		stencilLayout->decomp->shadowBuildProcs, 
+		_MeshDecomp_Shadow_ProcElementCount,
+		_MeshDecomp_Proc_WithElement,
+		dictionary,
+		communicator,
+		elementLayout,
+		nodeLayout,
+		stencilLayout );
+}
+
+
+void StencilMD_Init(
+		StencilMD*					self,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshLayout*				 	stencilLayout )
+{
+	/* General info */
+	self->type = StencilMD_Type;
+	self->_sizeOfSelf = sizeof(StencilMD);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _StencilMD_Delete;
+	self->_print = _StencilMD_Print;
+	self->nodeMapLocalToGlobal = _MeshDecomp_Node_LocalToGlobal1D;
+	self->nodeMapDomainToGlobal = _MeshDecomp_Node_DomainToGlobal1D;
+	self->nodeMapShadowToGlobal = _MeshDecomp_Node_ShadowToGlobal1D;
+	self->nodeMapGlobalToLocal = _MeshDecomp_Node_GlobalToLocal1D;
+	self->nodeMapGlobalToDomain = _MeshDecomp_Node_GlobalToDomain1D;
+	self->nodeMapGlobalToShadow = _MeshDecomp_Node_GlobalToShadow1D;
+	self->elementMapLocalToGlobal = _MeshDecomp_Element_LocalToGlobal1D;
+	self->elementMapDomainToGlobal = _MeshDecomp_Element_DomainToGlobal1D;
+	self->elementMapShadowToGlobal = _MeshDecomp_Element_ShadowToGlobal1D;
+	self->elementMapGlobalToLocal = _MeshDecomp_Element_GlobalToLocal1D;
+	self->elementMapGlobalToDomain = _MeshDecomp_Element_GlobalToDomain1D;
+	self->elementMapGlobalToShadow = _MeshDecomp_Element_GlobalToShadow1D;
+	self->shadowProcCount = stencilLayout->decomp->shadowProcCount;
+	self->shadowBuildProcs = stencilLayout->decomp->shadowBuildProcs;
+	self->shadowProcElementCount = _MeshDecomp_Shadow_ProcElementCount;
+	self->procWithElement = _MeshDecomp_Proc_WithElement;
+	_MeshDecomp_Init( (MeshDecomp*)self, communicator, elementLayout, nodeLayout );
+	
+	/* StencilMD info */
+	_StencilMD_Init( self, stencilLayout );
+}
+
+
+StencilMD* _StencilMD_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,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*		shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*		shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*		procWithElement,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshLayout*					stencilLayout )
+{
+	StencilMD* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(StencilMD) );
+	self = (StencilMD*)_MeshDecomp_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		nodeMapLocalToGlobal, 
+		nodeMapDomainToGlobal,
+		nodeMapShadowToGlobal,
+		nodeMapGlobalToLocal,
+		nodeMapGlobalToDomain,
+		nodeMapGlobalToShadow, 
+		elementMapLocalToGlobal,
+		elementMapDomainToGlobal,
+		elementMapShadowToGlobal, 
+		elementMapGlobalToLocal,
+		elementMapGlobalToDomain, 
+		elementMapGlobalToShadow,
+		shadowProcCount,
+		shadowBuildProcs,
+		shadowProcElementCount,
+		procWithElement,
+		dictionary, 
+		communicator,
+		elementLayout,
+		nodeLayout );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* StencilMD info */
+	_StencilMD_Init( self, stencilLayout );
+	
+	return self;
+}
+
+void _StencilMD_Init(
+		StencilMD*					self,
+		MeshLayout*					stencilLayout )
+{
+	/* General and Virtual info should already be set */
+	
+	/* StencilMD info */
+	self->stencilLayout = stencilLayout;
+	
+	if( self->rank < self->stencilLayout->decomp->procsInUse ) {
+		ElementLayout*		eLayout = self->elementLayout;
+		NodeLayout*		nLayout = self->nodeLayout;
+		Index*			corners;
+		Partition_Index		proc_I;
+		Partition_Index*	procs;
+		Index*			indices;
+		Element_GlobalIndex     e_I;
+		
+		self->procsInUse = stencilLayout->decomp->procsInUse;
+		self->storage = stencilLayout->decomp->storage;
+		self->elementGlobalCount = eLayout->elementCount;
+		self->nodeGlobalCount = nLayout->nodeCount;
+		
+		self->localElementSets = Memory_Alloc_Array( IndexSet*, self->procsInUse, "StencilMD->localElementSets" );
+		for( proc_I = 0; proc_I < self->procsInUse; proc_I++ ) {
+			if( stencilLayout->decomp->localElementSets[proc_I] )
+				self->localElementSets[proc_I] = IndexSet_New( eLayout->elementCount );
+			else
+				self->localElementSets[proc_I] = NULL;
+		}
+		
+		corners = Memory_Alloc_Array( Index, eLayout->elementCornerCount, "corners" );
+		procs = Memory_Alloc_Array( Partition_Index, eLayout->elementCornerCount, "procs" );
+		
+		for( e_I = 0; e_I < eLayout->elementCount; e_I++ ) {
+			Index p_I;
+			
+			eLayout->buildCornerIndices( eLayout, e_I, corners );
+			
+			for( p_I = 0; p_I < eLayout->elementCornerCount; p_I++ ) {
+				Coord			point;
+				Element_GlobalIndex     element;
+				
+				eLayout->geometry->pointAt( eLayout->geometry, corners[p_I], point );
+				element = stencilLayout->elementLayout->elementWithPoint( stencilLayout->elementLayout, point );
+				if( element >= stencilLayout->elementLayout->elementCount )
+					break;
+				
+				procs[p_I] = stencilLayout->decomp->procWithElement( stencilLayout->decomp, element );
+				if( procs[p_I] >= stencilLayout->decomp->procsInUse )
+					break;
+			}
+			
+			if( p_I < eLayout->elementCornerCount )
+				continue;
+			
+			for( p_I = 1; p_I < eLayout->elementCornerCount; p_I++ )
+				if( procs[p_I] != procs[p_I - 1] )
+					break;
+			
+			if( p_I < eLayout->elementCornerCount )
+				continue;
+			
+			IndexSet_Add( self->localElementSets[procs[p_I]], e_I );
+		}
+		
+		_MeshDecomp_DecomposeNodes( self );
+		
+		IndexSet_GetMembers( self->localElementSets[self->rank], &self->elementLocalCount, &indices );
+		Memory_Free( indices );
+		self->elementShadowCount = 0;
+		self->elementDomainCount = self->elementLocalCount + self->elementShadowCount;
+		
+		IndexSet_GetMembers( self->localNodeSets[self->rank], &self->nodeLocalCount, &indices );
+		Memory_Free( indices );
+		self->nodeShadowCount = 0;
+		self->nodeDomainCount = self->nodeLocalCount + self->nodeShadowCount;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _StencilMD_Delete( void* stencilMD ) {
+	StencilMD* self = (StencilMD*)stencilMD;
+	
+	/* Stg_Class_Delete parent */
+	_MeshDecomp_Delete( self );
+}
+
+
+void _StencilMD_Print( void* stencilMD, Stream* stream ) {
+	StencilMD* self = (StencilMD*)stencilMD;
+	
+	/* Set the Journal for printing informations */
+	Stream* stencilMDStream;
+	stencilMDStream = Journal_Register( InfoStream_Type, "StencilMDStream" );
+
+	/* Print parent */
+	_MeshDecomp_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "StencilMD (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* StencilMD info */
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,136 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: StencilMD.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_StencilMD_h__
+#define __Discretisaton_Mesh_StencilMD_h__
+
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type StencilMD_Type;
+
+	/* StencilMD information */
+	#define __StencilMD \
+		/* General info */ \
+		__MeshDecomp \
+		\
+		/* Virtual info */ \
+		\
+		/* StencilMD info ... */ \
+		MeshLayout*			stencilLayout;
+	struct _StencilMD { __StencilMD };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a StencilMD */
+	StencilMD* StencilMD_New(
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshLayout*					stencilLayout );
+	
+	/* Initialise a StencilMD */
+	void StencilMD_Init(
+		StencilMD*					self,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshLayout*					stencilLayout );
+	
+	/* Creation implementation */
+	StencilMD* _StencilMD_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		MeshDecomp_Node_MapLocalToGlobalFunction*       nodeMapLocalToGlobal,
+		MeshDecomp_Node_MapDomainToGlobalFunction*      nodeMapDomainToGlobal,
+		MeshDecomp_Node_MapShadowToGlobalFunction*      nodeMapShadowToGlobal,
+		MeshDecomp_Node_MapGlobalToLocalFunction*       nodeMapGlobalToLocal,
+		MeshDecomp_Node_MapGlobalToDomainFunction*      nodeMapGlobalToDomain,
+		MeshDecomp_Node_MapGlobalToShadowFunction*      nodeMapGlobalToShadow,
+		MeshDecomp_Element_MapLocalToGlobalFunction*	elementMapLocalToGlobal,
+		MeshDecomp_Element_MapDomainToGlobalFunction*	elementMapDomainToGlobal,
+		MeshDecomp_Element_MapShadowToGlobalFunction*	elementMapShadowToGlobal,
+		MeshDecomp_Element_MapGlobalToLocalFunction*	elementMapGlobalToLocal,
+		MeshDecomp_Element_MapGlobalToDomainFunction*	elementMapGlobalToDomain,
+		MeshDecomp_Element_MapGlobalToShadowFunction*	elementMapGlobalToShadow,
+		MeshDecomp_Shadow_ProcCountFunction*		shadowProcCount,
+		MeshDecomp_Shadow_BuildProcsFunction*		shadowBuildProcs,
+		MeshDecomp_Shadow_ProcElementCountFunction*     shadowProcElementCount,
+		MeshDecomp_Proc_WithElementFunction*		procWithElement,
+		Dictionary*					dictionary,
+		MPI_Comm					communicator,
+		ElementLayout*					elementLayout,
+		NodeLayout*					nodeLayout,
+		MeshLayout*					stencilLayout );
+	
+	/* Initialisation implementation functions */
+	void _StencilMD_Init(
+		StencilMD*					self,
+		MeshLayout*					stencilLayout );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete StencilMD implementation */
+	void _StencilMD_Delete( void* stencilMD );
+	
+	/* Print StencilMD implementation */
+	void _StencilMD_Print( void* stencilMD, Stream* stream );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	
+#endif /* __Discretisaton_Mesh_StencilMD_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">StencilMD</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">MeshDecomp</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,309 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Grid.h"
+#include "Decomp.h"
+#include "Decomp_Sync.h"
+#include "MeshTopology.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, 
+				    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;
+	SurfaceAdaptor_DeformFunc*	deformFunc;
+	unsigned*			gSize;
+	Grid*				grid;
+	unsigned*			inds;
+	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;
+
+	/* 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. */
+	gSize = (unsigned*)ExtensionManager_Get( mesh->info, mesh, 
+						 ExtensionManager_GetHandle( mesh->info, "cartesianGlobalSize" ) );
+
+	/* Build grid and space for indices. */
+	grid = Grid_New();
+	Grid_SetNDims( grid, mesh->topo->nDims );
+	for( d_i = 0; d_i < mesh->topo->nDims; d_i++ )
+		gSize[d_i]++;
+	Grid_SetSizes( grid, gSize );
+	for( d_i = 0; d_i < mesh->topo->nDims; d_i++ )
+		gSize[d_i]--;
+	inds = Memory_Alloc_Array_Unnamed( unsigned, mesh->topo->nDims );
+
+	/* Loop over domain nodes. */
+	for( n_i = 0; n_i < MeshTopology_GetDomainSize( mesh->topo, MT_VERTEX ); n_i++ ) {
+		unsigned	gNode;
+		double		height;
+
+		gNode = MeshTopology_DomainToGlobal( mesh->topo, MT_VERTEX, n_i );
+		Grid_Lift( grid, gNode, inds );
+
+		/* Calculate a height percentage. */
+		height = (double)inds[1] / (double)(gSize[1] - 1);
+
+		/* Deform this node. */
+		mesh->nodeCoord[n_i][1] += height * deformFunc( self, mesh, gSize, n_i, inds );
+	}
+
+	/* Free resources. */
+	FreeArray( inds );
+	FreeObject( grid );
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+double SurfaceAdaptor_Wedge( SurfaceAdaptor* self, Mesh* mesh, 
+			     unsigned* globalSize, unsigned vertex, unsigned* vertexInds )
+{
+	if( mesh->nodeCoord[vertex][0] >= self->info.wedge.offs )
+		return (mesh->nodeCoord[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->nodeCoord[vertex][0] - self->info.trig.origin[0];
+	rad = dx * dx;
+	if( mesh->topo->nDims == 3 ) {
+		dy = mesh->nodeCoord[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->nodeCoord[vertex][0] - self->info.trig.origin[0];
+	rad = dx * dx;
+	if( mesh->topo->nDims == 3 ) {
+		dy = mesh->nodeCoord[vertex][1] - self->info.trig.origin[1];
+		rad += dy * dy;
+	}
+	rad = sqrt( rad );
+
+	return self->info.trig.amp * cos( self->info.trig.freq * rad );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_SurfaceAdaptor_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_SurfaceAdaptor_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">SurfaceAdaptor</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationShape -lStGermainDiscretisationGeometry ${RPATH_LFLAGS}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisaton_Mesh_shortcuts_h__
+#define __Discretisaton_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 /* __Discretisaton_Mesh_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3860 2006-10-14 18:12:14Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_types_h__
+#define __Discretisaton_Mesh_types_h__
+	
+	/* Types user needs to define */
+	typedef struct _Node			Node;
+	typedef struct _Element			Element;
+
+	/** Enum for functions that need to know type of mesh item they are operating on */
+	typedef enum MeshItemType { ELEMENT_ITEM_TYPE, NODE_ITEM_TYPE } MeshItemType;
+
+	/* 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*				Node_List;			/* array of Nodes */
+	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*			Element_List;			/* array of Elements */
+	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" */
+	
+	typedef enum PartitionBoundaryStatus {
+		EXCLUSIVE_UPPER_BOUNDARY,	/** The upper boundary of a processor's domain is not considered
+						  * to be owned by that processor -except in the special case
+						  * of the upper boundary of the entire mesh */
+		INCLUSIVE_UPPER_BOUNDARY	/** The upper boundary of a processor's domain is always
+						  * considered to be owned by the local processor. */
+	} PartitionBoundaryStatus;
+	
+	/* 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 Grid				Grid;
+	typedef struct CommTopology			CommTopology;
+	typedef struct Decomp				Decomp;
+	typedef struct Decomp_Sync			Decomp_Sync;
+	typedef struct Decomp_Sync_Claim		Decomp_Sync_Claim;
+	typedef struct Decomp_Sync_Negotiate		Decomp_Sync_Negotiate;
+	typedef struct DecompTransfer			DecompTransfer;
+	typedef struct MeshTopology			MeshTopology;
+	typedef struct MeshGenerator			MeshGenerator;
+	typedef struct CartesianGenerator		CartesianGenerator;
+	typedef struct MeshAdaptor			MeshAdaptor;
+	typedef struct SurfaceAdaptor			SurfaceAdaptor;
+
+	typedef struct ProcNbrInfo			ProcNbrInfo;
+	typedef struct ShadowInfo			ShadowInfo;
+	typedef struct _ElementLayout			ElementLayout;
+	typedef struct _HexaEL				HexaEL;
+	typedef struct _ParallelPipedHexaEL		ParallelPipedHexaEL;
+	typedef struct _IrregEL				IrregEL;
+	typedef struct _NodeLayout			NodeLayout;
+	typedef struct _CornerNL			CornerNL;
+	typedef struct _BodyNL				BodyNL;
+	typedef struct MeshDecomp			MeshDecomp;
+	typedef struct _HexaMD				HexaMD;
+	typedef struct _StencilMD			StencilMD;
+	typedef struct _DummyMD				DummyMD;
+	typedef struct MeshGeometry			MeshGeometry;
+	typedef struct _MeshLayout			MeshLayout;
+	typedef struct _Mesh				Mesh;
+	typedef struct _HMesh				HMesh;
+	typedef struct _MeshCoarsener_Hexa		MeshCoarsener_Hexa;
+
+	/* Streams */
+	extern Stream*	Mesh_VerboseConfig;
+	extern Stream*	Mesh_Debug; 	
+	extern Stream*	Mesh_Warning; 
+	extern Stream*	Mesh_Error;
+	
+#endif /* __Discretisaton_Mesh_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 3861 2006-10-14 18:13:25Z LukeHodkinson $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainDiscretisationMesh
+
+def_srcs = \
+	testCommTopology.c \
+	testDecomp.c \
+	testDecomp_Sync.c \
+	testDecompTransfer.c \
+	testMeshTopology.c \
+	testCartesianGenerator.c \
+	testQuadEL.c \
+	testParallelPipedQuadEL.c \
+	testHexaEL.c \
+	testParallelPipedHexaEL.c \
+	testIrregEL.c \
+	testHexaMD.c \
+	testMesh.c \
+	testMesh-large.c \
+	testMeshSync.c \
+	testMeshSync-2D.c \
+	testMeshSync-large.c \
+
+def_checks = \
+	testDecomp.0of1.sh \
+	testDecomp.0of2.sh \
+	testDecomp.1of2.sh \
+	testDecomp.0of3.sh \
+	testDecomp.1of3.sh \
+	testDecomp.2of3.sh \
+	testDecomp.0of4.sh \
+	testDecomp.1of4.sh \
+	testDecomp.2of4.sh \
+	testDecomp.3of4.sh \
+	testQuadEL.0of1.sh \
+	testParallelPipedQuadEL.0of1.sh \
+	testParallelPipedQuadEL.0of2.sh \
+	testParallelPipedQuadEL.1of2.sh \
+	testParallelPipedQuadEL.0of3.sh \
+	testParallelPipedQuadEL.1of3.sh \
+	testParallelPipedQuadEL.2of3.sh \
+	testHexaEL.0of1.sh \
+	testParallelPipedHexaEL.0of1.sh \
+	testParallelPipedHexaEL.0of2.sh \
+	testParallelPipedHexaEL.1of2.sh \
+	testParallelPipedHexaEL.0of3.sh \
+	testParallelPipedHexaEL.1of3.sh \
+	testParallelPipedHexaEL.2of3.sh \
+	testIrregEL.0of1.sh \
+	testHexaMD.0of1.sh \
+	testHexaMD.0of2.sh \
+	testHexaMD.1of2.sh \
+	testHexaMD.0of3.sh \
+	testHexaMD.1of3.sh \
+	testHexaMD.2of3.sh \
+	testHexaMD-shadowDepth2.0of2.sh \
+	testHexaMD-shadowDepth2.1of2.sh \
+	testHexaMD-shadowDepth2.0of3.sh \
+	testHexaMD-shadowDepth2.1of3.sh \
+	testHexaMD-2D_Decomp.0of4.sh \
+	testHexaMD-2D_Decomp.1of4.sh \
+	testHexaMD-2D_Decomp.2of4.sh \
+	testHexaMD-2D_Decomp.3of4.sh \
+	testHexaMD-3D_Decomp.0of8.sh \
+	testHexaMD-3D_Decomp.7of8.sh \
+	testHexaMD-2D_Decomp-shadowDepth2.0of4.sh \
+	testHexaMD-2D_Decomp-shadowDepth2.1of4.sh \
+	testHexaMD-2D_Decomp-shadowDepth2.2of4.sh \
+	testHexaMD-2D_Decomp-shadowDepth2.3of4.sh \
+	testHexaMD-3D_Decomp-shadowDepth2.0of8.sh \
+	testHexaMD-3D_Decomp-shadowDepth2.7of8.sh \
+	testHexaMD-unbalanced.0of4.sh \
+	testHexaMD-unbalanced.1of4.sh \
+	testHexaMD-unbalanced.2of4.sh \
+	testHexaMD-unbalanced.3of4.sh \
+	testHexaMD-unbalanced-shadowDepth2.0of4.sh \
+	testHexaMD-unbalanced-shadowDepth2.1of4.sh \
+	testHexaMD-unbalanced-shadowDepth2.2of4.sh \
+	testHexaMD-unbalanced-shadowDepth2.3of4.sh \
+	testHexaMD-periodic.0of2.sh \
+	testHexaMD-periodic.1of2.sh \
+	testHexaMD-periodic-shadowDepth2.0of2.sh \
+	testHexaMD-periodic-shadowDepth2.1of2.sh \
+	testMesh.0of1.sh \
+	testMesh.0of2.sh \
+	testMesh.1of2.sh \
+	testMesh.0of3.sh \
+	testMesh.1of3.sh \
+	testMesh.2of3.sh \
+	testMesh-large.0of1.sh \
+	testMesh-large.0of4.sh \
+	testMeshSync.0of3.sh \
+	testMeshSync.1of3.sh \
+	testMeshSync.2of3.sh \
+	testMeshSync-2D.0of4.sh \
+	testMeshSync-2D.1of4.sh \
+	testMeshSync-2D.2of4.sh \
+	testMeshSync-2D.3of4.sh \
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/trisurf.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/trisurf.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/trisurf.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationMesh -lStGermainDiscretisationShape -lStGermainDiscretisationGeometry -lStGermainBase ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCartesianGenerator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCartesianGenerator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCartesianGenerator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testMeshTopology.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 testSetParams( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CartesianGenerator*	gen;
+	unsigned		sizes[3];
+
+	sizes[0] = 5;
+	sizes[1] = 2;
+	sizes[2] = 2;
+
+	gen = CartesianGenerator_New( "" );
+	CartesianGenerator_SetTopologyParams( gen, 3, sizes, 0, NULL, NULL );
+
+	FreeObject( gen );
+
+	return True;
+}
+
+Bool testGen( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CartesianGenerator*	gen;
+	Mesh*			mesh;
+	unsigned		sizes[3];
+	double			min[3] = {0, 0, 0};
+	double			max[3] = {1, 1, 1};
+
+	sizes[0] = 12;
+	sizes[1] = 12;
+	sizes[2] = 12;
+
+	gen = CartesianGenerator_New( "" );
+	mesh = Mesh_DefaultNew( "" );
+	mesh->topo = MeshTopology_New( "" );
+	mesh->info = ExtensionManager_New_OfExistingObject( "mesh_info", mesh );
+	CartesianGenerator_SetTopologyParams( gen, 3, sizes, 0, NULL, NULL );
+	CartesianGenerator_SetGeometryParams( gen, min, max );
+	CartesianGenerator_Generate( gen, mesh );
+
+	FreeObject( gen );
+
+	return True;
+}
+
+
+#define nTests	2
+
+TestSuite_Test	tests[nTests] = {{"set parameters", testSetParams, 0}, 
+				 {"generate mesh", testGen, 1}};
+
+
+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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCommTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCommTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCommTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testCommTopology.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"
+
+
+CommTopology* buildCompleteIncidence( unsigned rank, unsigned nProcs, 
+				      unsigned* nInc, unsigned** inc )
+{
+	CommTopology*	commTopo;
+	unsigned	inc_i;
+
+	commTopo = CommTopology_New( "" );
+
+	*nInc = nProcs - 1;
+	if( nProcs > 1 ) {
+		*inc = Memory_Alloc_Array_Unnamed( unsigned, *nInc );
+
+		for( inc_i = 0; inc_i < *nInc; inc_i++ )
+			(*inc)[inc_i] = (rank + 1) % nProcs;
+
+		CommTopology_SetIncidence( commTopo, *nInc, *inc );
+	}
+	else
+		*inc = NULL;
+
+	return commTopo;
+}
+
+CommTopology* buildPartialIncidence( unsigned rank, unsigned nProcs, 
+				     unsigned* nInc, unsigned** inc )
+{
+	CommTopology*	commTopo;
+
+	commTopo = CommTopology_New( "" );
+
+	if( nProcs > 1 ) {
+		*nInc = (rank == 0 || rank == nProcs - 1) ? 1 : 2;
+		*inc = Memory_Alloc_Array_Unnamed( unsigned, *nInc );
+
+		if( rank > 0 )
+			(*inc)[0] = rank - 1;
+		if( rank < nProcs - 1 )
+			(*inc)[(rank > 0) ? 1 : 0] = rank + 1;
+
+		CommTopology_SetIncidence( commTopo, *nInc, *inc );
+	}
+	else {
+		*nInc = 0;
+		*inc = NULL;
+	}
+
+	return commTopo;
+}
+
+void buildGatherArrays( unsigned rank, unsigned nProcs, 
+			unsigned* srcSize, unsigned** src )
+{
+	unsigned	p_i;
+
+	*srcSize = nProcs;
+	*src = Memory_Alloc_Array_Unnamed( unsigned, *srcSize );
+	for( p_i = 0; p_i < *srcSize; p_i++ )
+		(*src)[p_i] = rank;
+}
+
+void buildAlltoallArrays( unsigned rank, unsigned nProcs, CommTopology* commTopo, 
+			  unsigned** srcSizes, unsigned*** srcs )
+{
+	unsigned	p_i, p_j;
+
+	if( !commTopo->nInc ) {
+		*srcSizes = NULL;
+		*srcs = NULL;
+		return;
+	}
+
+	*srcSizes = Memory_Alloc_Array_Unnamed( unsigned, commTopo->nInc );
+	*srcs = Memory_Alloc_2DArray_Unnamed( unsigned, commTopo->nInc, nProcs );
+	for( p_i = 0; p_i < commTopo->nInc; p_i++ ) {
+		(*srcSizes)[p_i] = nProcs;
+		for( p_j = 0; p_j < nProcs; p_j++ )
+			(*srcs)[p_i][p_j] = rank;
+	}
+}
+
+
+Bool testConstruct( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+
+	commTopo = CommTopology_New( "" );
+	FreeObject( commTopo );
+
+	return True;
+}
+
+Bool testSetComm( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+	Bool		result = True;
+
+	commTopo = CommTopology_New( "" );
+
+	CommTopology_SetComm( commTopo, MPI_COMM_WORLD );
+	if( rank == watch ) {
+		if( commTopo->comm != MPI_COMM_WORLD || 
+		    commTopo->nInc != 0 || 
+		    commTopo->inc != NULL )
+		{
+			result = False;
+			goto done;
+		}
+	}
+
+done:
+	FreeObject( commTopo );
+
+	return result;
+}
+
+Bool testEmptyInc( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+	Bool		result = True;
+
+	commTopo = CommTopology_New( "" );
+	CommTopology_SetIncidence( commTopo, 0, NULL );
+
+	if( rank == watch ) {
+		if( commTopo->comm != MPI_COMM_WORLD || 
+		    commTopo->nInc != 0 || 
+		    commTopo->inc != NULL )
+		{
+			result = False;
+			goto done;
+		}
+	}
+
+done:
+	FreeObject( commTopo );
+
+	return result;
+}
+
+Bool testCompInc( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+	Bool		result = True;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned	inc_i;
+
+	commTopo = buildCompleteIncidence( rank, nProcs, &nInc, &inc );
+
+	if( rank == watch ) {
+		if( commTopo->comm != MPI_COMM_WORLD || 
+		    commTopo->nInc != nInc )
+		{
+			result = False;
+			goto done;
+		}
+
+		for( inc_i = 0; inc_i < nInc; inc_i++ )
+			if( commTopo->inc[inc_i] != inc[inc_i] ) break;
+		if( inc_i < nInc ) {
+			result = False;
+			goto done;
+		}
+	}
+
+done:
+	FreeArray( inc );
+	FreeObject( commTopo );
+
+	return result;
+}
+
+Bool testPartInc( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+	Bool		result = True;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned	inc_i;
+
+	commTopo = buildPartialIncidence( rank, nProcs, &nInc, &inc );
+
+	if( rank == watch ) {
+		if( commTopo->comm != MPI_COMM_WORLD || 
+		    commTopo->nInc != nInc )
+		{
+			result = False;
+			goto done;
+		}
+
+		for( inc_i = 0; inc_i < nInc; inc_i++ )
+			if( commTopo->inc[inc_i] != inc[inc_i] ) break;
+		if( inc_i < nInc ) {
+			result = False;
+			goto done;
+		}
+	}
+
+done:
+	FreeArray( inc );
+	FreeObject( commTopo );
+
+	return result;
+}
+
+Bool testAllgather( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+	Bool		result = True;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned	srcSize;
+	unsigned*	src;
+	unsigned*	dstSizes;
+	unsigned**	dst;
+	unsigned	p_i, e_i;
+
+	commTopo = buildPartialIncidence( rank, nProcs, &nInc, &inc );
+	buildGatherArrays( rank, nProcs, &srcSize, &src );
+
+	CommTopology_Allgather( commTopo, srcSize, src, &dstSizes, (void***)&dst, sizeof(unsigned) );
+
+	if( rank == watch ) {
+		for( p_i = 0; p_i < commTopo->nInc; p_i++ ) {
+			for( e_i = 0; e_i < srcSize; e_i++ ) {
+				if( dst[p_i][e_i] != commTopo->inc[p_i] ) {
+					result = False;
+					goto done;
+				}
+			}
+		}
+	}
+
+done:
+	FreeObject( commTopo );
+	FreeArray( inc );
+	FreeArray( src );
+	FreeArray( dst );
+
+	return result;
+}
+
+Bool testAlltoall( unsigned rank, unsigned nProcs, unsigned watch ) {
+	CommTopology*	commTopo;
+	Bool		result = True;
+	unsigned	nInc;
+	unsigned*	inc;
+	unsigned*	srcSizes;
+	unsigned**	srcs;
+	unsigned*	dstSizes;
+	unsigned**	dst;
+	unsigned	p_i, e_i;
+
+	commTopo = buildPartialIncidence( rank, nProcs, &nInc, &inc );
+	buildAlltoallArrays( rank, nProcs, commTopo, &srcSizes, &srcs );
+
+	CommTopology_Alltoall( commTopo, srcSizes, srcs, &dstSizes, (void***)&dst, sizeof(unsigned) );
+
+	if( rank == watch ) {
+		for( p_i = 0; p_i < commTopo->nInc; p_i++ ) {
+			for( e_i = 0; e_i < srcSizes[p_i]; e_i++ ) {
+				if( dst[p_i][e_i] != commTopo->inc[p_i] ) {
+					result = False;
+					goto done;
+				}
+			}
+		}
+	}
+
+done:
+	FreeObject( commTopo );
+	FreeArray( inc );
+	FreeArray( srcSizes );
+	FreeArray( srcs );
+	FreeArray( dst );
+
+	return result;
+}
+
+
+#define nTests	7
+
+TestSuite_Test	tests[nTests] = {{"construct", testConstruct, 10}, 
+				 {"set communicator", testSetComm, 10}, 
+				 {"empty incidence", testEmptyInc, 10 }, 
+				 {"partial incidence", testPartInc, 10}, 
+				 {"complete incidence", testCompInc, 10}, 
+				 {"all gather", testAllgather, 10}, 
+				 {"all to all", testAlltoall, 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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+   Running test 'set locals'... passed
+   Running test 'mappings'... passed

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testRangeSet.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"
+
+
+#define nTests	2
+
+
+Bool testLocals( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Decomp*		decomp = Decomp_New( "" );
+	unsigned	nLocals = 100;
+	unsigned	nGlobals = nProcs * nLocals;
+	unsigned*	locals;
+	unsigned	l_i;
+
+	locals = Memory_Alloc_Array_Unnamed( unsigned, nLocals );
+	for( l_i = 0; l_i < nLocals; l_i++ )
+		locals[l_i] = rank * nLocals + l_i;
+
+	Decomp_SetLocals( decomp, nLocals, locals );
+
+	if( decomp->nGlobals != nGlobals ) {
+		FreeArray( locals );
+		FreeObject( decomp );
+		return False;
+	}
+
+	for( l_i = 0; l_i < nLocals; l_i++ ) {
+		if( decomp->locals[l_i] != locals[l_i] ) {
+			FreeArray( locals );
+			FreeObject( decomp );
+			return False;
+		}
+	}
+
+	FreeArray( locals );
+	FreeObject( decomp );
+
+	return True;
+}
+
+Bool testMaps( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Decomp*		decomp = Decomp_New( "" );
+	unsigned	nLocals = 100;
+	unsigned	nGlobals = nProcs * nLocals;
+	unsigned*	locals;
+	unsigned	l_i, g_i;
+
+	locals = Memory_Alloc_Array_Unnamed( unsigned, nLocals );
+	for( l_i = 0; l_i < nLocals; l_i++ )
+		locals[l_i] = rank * nLocals + l_i;
+
+	Decomp_SetLocals( decomp, nLocals, locals );
+
+	for( l_i = 0; l_i < nLocals; l_i++ ) {
+		if( !Decomp_IsLocal( decomp, locals[l_i] ) || 
+		    Decomp_LocalToGlobal( decomp, l_i ) != locals[l_i] )
+		{
+			FreeObject( decomp );
+			return False;
+		}
+	}
+
+	FreeArray( locals );
+
+	for( g_i = 0; g_i < nGlobals; g_i++ ) {
+		if( !Decomp_IsLocal( decomp, g_i ) )
+			continue;
+
+		if( Decomp_GlobalToLocal( decomp, g_i ) != g_i % nLocals ) {
+			FreeObject( decomp );
+			return False;
+		}
+	}
+
+	FreeObject( decomp );
+
+	return True;
+}
+
+
+int main( int argc, char* argv[] ) {
+	TestSuite*	suite;
+	TestSuite_Test	tests[nTests] = {{"set locals", testLocals}, 
+					 {"mappings", testMaps}};
+
+	/* 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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecompTransfer.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecompTransfer.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecompTransfer.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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++ )
+		UIntMap_Insert( map, Decomp_GlobalToLocal( decomps[0], locals[0][ind_i] ), 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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp_Sync.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp_Sync.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp_Sync.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,401 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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_Sync.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 testRemotes( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testSnkSrc( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testArrays( unsigned rank, unsigned nProcs, unsigned watch );
+Bool testClaim( unsigned rank, unsigned nProcs, unsigned watch );
+
+Decomp* buildDecomp( unsigned rank, unsigned nProcs, unsigned nLocals );
+void buildRequired( unsigned rank, unsigned nProcs, 
+		    unsigned* nRequired, unsigned** required );
+
+
+#define nTests	4
+
+TestSuite*	suite;
+TestSuite_Test	tests[nTests] = {{"set remotes", testRemotes}, 
+				 {"sink/sources", testSnkSrc}, 
+				 {"arrays", testArrays}, 
+				 {"claim", testClaim}};
+
+
+Bool testRemotes( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Decomp*		decomp;
+	Decomp_Sync*	sync;
+	unsigned	nLocals = 100;
+	unsigned	remPerSide = nLocals / 10;
+	unsigned	nRemotes = remPerSide * ((rank > 0 && rank < nProcs - 1) ? 2 : 1) * ((nProcs > 1) ? 1 : 0);
+	unsigned*	remotes;
+	unsigned	r_i;
+
+	decomp = buildDecomp( rank, nProcs, nLocals );
+	sync = Decomp_Sync_New( "" );
+	Decomp_Sync_SetDecomp( sync, decomp );
+
+	if( nRemotes ) {
+		remotes = Memory_Alloc_Array_Unnamed( unsigned, nRemotes );
+		if( rank > 0 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ )
+				remotes[r_i] = rank * nLocals - remPerSide + r_i;
+		}
+		if( rank < nProcs - 1 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				unsigned	ind = r_i + ((rank > 0) ? remPerSide : 0);
+
+				remotes[ind] = (rank + 1) * nLocals + r_i;
+			}
+		}
+	}
+	else
+		remotes = NULL;
+
+	Decomp_Sync_SetRemotes( sync, nRemotes, remotes );
+
+	if( rank == watch ) {
+		if( sync->nRemotes != nRemotes ) {
+			FreeArray( remotes );
+			FreeObject( sync );
+			FreeObject( decomp );
+			return False;
+		}
+
+		if( rank > 0 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				if( sync->remotes[r_i] != remotes[r_i] ) {
+					FreeArray( remotes );
+					FreeObject( sync );
+					FreeObject( decomp );
+					return False;
+				}
+			}
+		}
+		if( rank < nProcs - 1 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				unsigned	ind = r_i + ((rank > 0) ? remPerSide : 0);
+
+				if( sync->remotes[ind] != remotes[ind] ) {
+					FreeArray( remotes );
+					FreeObject( sync );
+					FreeObject( decomp );
+					return False;
+				}
+			}
+		}
+	}
+
+	FreeArray( remotes );
+	FreeObject( sync );
+	FreeObject( decomp );
+
+	return True;
+}
+
+Bool testSnkSrc( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Decomp*		decomp;
+	Decomp_Sync*	sync;
+	unsigned	nLocals = 100;
+	unsigned	remPerSide = nLocals / 10;
+	unsigned	nRemotes = remPerSide * ((rank > 0 && rank < nProcs - 1) ? 2 : 1) * ((nProcs > 1) ? 1 : 0);
+	unsigned*	remotes;
+	unsigned	r_i;
+
+	decomp = buildDecomp( rank, nProcs, nLocals );
+	sync = Decomp_Sync_New( "" );
+	Decomp_Sync_SetDecomp( sync, decomp );
+
+	if( nRemotes ) {
+		remotes = Memory_Alloc_Array_Unnamed( unsigned, nRemotes );
+		if( rank > 0 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ )
+				remotes[r_i] = rank * nLocals - remPerSide + r_i;
+		}
+		if( rank < nProcs - 1 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				unsigned	ind = r_i + ((rank > 0) ? remPerSide : 0);
+
+				remotes[ind] = (rank + 1) * nLocals + r_i;
+			}
+		}
+	}
+	else
+		remotes = NULL;
+
+	Decomp_Sync_SetRemotes( sync, nRemotes, remotes );
+
+	if( rank == watch ) {
+		if( sync->netSnks != nRemotes || sync->netSrcs != nRemotes ) {
+			FreeArray( remotes );
+			FreeObject( sync );
+			FreeObject( decomp );
+			return False;
+		}
+	}
+
+	FreeArray( remotes );
+	FreeObject( sync );
+	FreeObject( decomp );
+
+	return True;
+}
+
+typedef struct {
+	int	one;
+	int	two;
+	int	three;
+} theStruct;
+
+Bool testArrays( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Decomp*		decomp;
+	Decomp_Sync*	sync;
+	unsigned	nLocals = 100;
+	unsigned	remPerSide = nLocals / 10;
+	unsigned	nRemotes = remPerSide * ((rank > 0 && rank < nProcs - 1) ? 2 : 1) * ((nProcs > 1) ? 1 : 0);
+	unsigned*	remotes;
+	int*		intLocals;
+	int*		intRemotes;
+	theStruct*	structLocals;
+	theStruct*	structRemotes;
+	unsigned	r_i;
+
+	decomp = buildDecomp( rank, nProcs, nLocals );
+	sync = Decomp_Sync_New( "" );
+	Decomp_Sync_SetDecomp( sync, decomp );
+
+	if( nRemotes ) {
+		remotes = Memory_Alloc_Array_Unnamed( unsigned, nRemotes );
+		if( rank > 0 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ )
+				remotes[r_i] = rank * nLocals - remPerSide + r_i;
+		}
+		if( rank < nProcs - 1 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				unsigned	ind = r_i + ((rank > 0) ? remPerSide : 0);
+
+				remotes[ind] = (rank + 1) * nLocals + r_i;
+			}
+		}
+	}
+	else
+		remotes = NULL;
+
+	if( nLocals ) {
+		intLocals = Memory_Alloc_Array_Unnamed( int, nLocals );
+		structLocals = Memory_Alloc_Array_Unnamed( theStruct, nLocals );
+	}
+	else {
+		intLocals = NULL;
+		structLocals = NULL;
+	}
+	if( nRemotes ) {
+		intRemotes = Memory_Alloc_Array_Unnamed( int, nRemotes );
+		structRemotes = Memory_Alloc_Array_Unnamed( theStruct, nRemotes );
+	}
+	else {
+		intRemotes = NULL;
+		structRemotes = NULL;
+	}
+	for( r_i = 0; r_i < nLocals; r_i++ ) {
+		intLocals[r_i] = rank;
+		structLocals[r_i].one = -rank;
+		structLocals[r_i].two = rank;
+		structLocals[r_i].three = -rank;
+	}
+	for( r_i = 0; r_i < nRemotes; r_i++ ) {
+		intRemotes[r_i] = rank;
+		structRemotes[r_i].one = -rank;
+		structRemotes[r_i].two = rank;
+		structRemotes[r_i].three = -rank;
+	}
+
+	Decomp_Sync_SetRemotes( sync, nRemotes, remotes );
+	Decomp_Sync_AddArray( sync, intLocals, intRemotes, sizeof(int), sizeof(int), sizeof(int) );
+	Decomp_Sync_AddArray( sync, &structLocals[0].two, &structRemotes[0].two, 
+			      sizeof(theStruct), sizeof(theStruct), sizeof(int) );
+	Decomp_Sync_Sync( sync );
+
+	FreeArray( remotes );
+	FreeObject( sync );
+	FreeObject( decomp );
+
+	if( rank == watch ) {
+		for( r_i = 0; r_i < nLocals; r_i++ ) {
+			if( intLocals[r_i] != rank || structLocals[r_i].two != rank || 
+			    structLocals[r_i].one != -rank || structLocals[r_i].three != -rank )
+			{
+				break;
+			}
+		}
+		if( r_i < nLocals ) {
+			FreeArray( intLocals );
+			FreeArray( intRemotes );
+			FreeArray( structLocals );
+			FreeArray( structRemotes );
+			return False;
+		}
+
+		if( rank > 0 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				if( intRemotes[r_i] != rank - 1 || structRemotes[r_i].two != rank - 1 || 
+				    structRemotes[r_i].one != -rank || structRemotes[r_i].three != -rank )
+				{
+					break;
+				}
+			}
+			if( r_i < remPerSide ) {
+				FreeArray( intLocals );
+				FreeArray( intRemotes );
+				FreeArray( structLocals );
+				FreeArray( structRemotes );
+				return False;
+			}
+		}
+		if( rank < nProcs - 1 ) {
+			for( r_i = 0; r_i < remPerSide; r_i++ ) {
+				unsigned	ind = r_i + ((rank > 0) ? remPerSide : 0);
+
+				if( intRemotes[ind] != rank + 1 || structRemotes[ind].two != rank + 1 || 
+				    structRemotes[ind].one != -rank || structRemotes[ind].three != -rank )
+				{
+					break;
+				}
+			}
+			if( r_i < remPerSide ) {
+				FreeArray( intLocals );
+				FreeArray( intRemotes );
+				FreeArray( structLocals );
+				FreeArray( structRemotes );
+				return False;
+			}
+		}
+	}
+
+	FreeArray( intLocals );
+	FreeArray( intRemotes );
+	FreeArray( structLocals );
+	FreeArray( structRemotes );
+
+	return True;
+}
+
+Bool testClaim( unsigned rank, unsigned nProcs, unsigned watch ) {
+	Decomp*		decomp;
+	Decomp_Sync*	sync;
+	unsigned	nRequired;
+	unsigned*	required;
+
+	buildRequired( rank, nProcs, &nRequired, &required );
+	decomp = Decomp_New( "" );
+	sync = Decomp_Sync_New( "" );
+	Decomp_Sync_SetDecomp( sync, decomp );
+	Decomp_Sync_Decompose( sync, nRequired, required );
+
+	if( rank == watch ) {
+	}
+
+	FreeArray( required );
+	FreeObject( sync );
+	FreeObject( decomp );
+
+	return True;
+}
+
+
+Decomp* buildDecomp( unsigned rank, unsigned nProcs, unsigned nLocals ) {
+	Decomp*		decomp = Decomp_New( "" );
+	unsigned*	locals;
+	unsigned	l_i;
+
+	locals = Memory_Alloc_Array_Unnamed( unsigned, nLocals );
+	for( l_i = 0; l_i < nLocals; l_i++ )
+		locals[l_i] = rank * nLocals + l_i;
+	Decomp_SetLocals( decomp, nLocals, locals );
+
+	FreeArray( locals );
+
+	return decomp;
+}
+
+void buildRequired( unsigned rank, unsigned nProcs, 
+		    unsigned* nRequired, unsigned** required )
+{
+	unsigned	start;
+	unsigned	r_i;
+
+	*nRequired = 100;
+	*required = Memory_Alloc_Array_Unnamed( unsigned, *nRequired );
+	start = rank * (*nRequired - 10);
+
+	for( r_i = 0; r_i < *nRequired; r_i++ )
+		(*required)[r_i] = start + r_i;
+}
+
+
+int main( int argc, char* argv[] ) {
+	/* 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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,162 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Element corner indices:
+	Element 0 : { 0, 1, 5, 4, 16, 17, 21, 20 }
+	Element 1 : { 1, 2, 6, 5, 17, 18, 22, 21 }
+	Element 2 : { 2, 3, 7, 6, 18, 19, 23, 22 }
+	Element 3 : { 4, 5, 9, 8, 20, 21, 25, 24 }
+	Element 4 : { 5, 6, 10, 9, 21, 22, 26, 25 }
+	Element 5 : { 6, 7, 11, 10, 22, 23, 27, 26 }
+	Element 6 : { 8, 9, 13, 12, 24, 25, 29, 28 }
+	Element 7 : { 9, 10, 14, 13, 25, 26, 30, 29 }
+	Element 8 : { 10, 11, 15, 14, 26, 27, 31, 30 }
+	Element 9 : { 16, 17, 21, 20, 32, 33, 37, 36 }
+	Element 10 : { 17, 18, 22, 21, 33, 34, 38, 37 }
+	Element 11 : { 18, 19, 23, 22, 34, 35, 39, 38 }
+	Element 12 : { 20, 21, 25, 24, 36, 37, 41, 40 }
+	Element 13 : { 21, 22, 26, 25, 37, 38, 42, 41 }
+	Element 14 : { 22, 23, 27, 26, 38, 39, 43, 42 }
+	Element 15 : { 24, 25, 29, 28, 40, 41, 45, 44 }
+	Element 16 : { 25, 26, 30, 29, 41, 42, 46, 45 }
+	Element 17 : { 26, 27, 31, 30, 42, 43, 47, 46 }
+	Element 18 : { 32, 33, 37, 36, 48, 49, 53, 52 }
+	Element 19 : { 33, 34, 38, 37, 49, 50, 54, 53 }
+	Element 20 : { 34, 35, 39, 38, 50, 51, 55, 54 }
+	Element 21 : { 36, 37, 41, 40, 52, 53, 57, 56 }
+	Element 22 : { 37, 38, 42, 41, 53, 54, 58, 57 }
+	Element 23 : { 38, 39, 43, 42, 54, 55, 59, 58 }
+	Element 24 : { 40, 41, 45, 44, 56, 57, 61, 60 }
+	Element 25 : { 41, 42, 46, 45, 57, 58, 62, 61 }
+	Element 26 : { 42, 43, 47, 46, 58, 59, 63, 62 }
+
+Corner element indices:
+	Corner 0 : { 27, 27, 27, 27, 27, 27, 27, 0 }
+	Corner 1 : { 27, 27, 27, 27, 27, 27, 0, 1 }
+	Corner 2 : { 27, 27, 27, 27, 27, 27, 1, 2 }
+	Corner 3 : { 27, 27, 27, 27, 27, 27, 2, 27 }
+	Corner 4 : { 27, 27, 27, 27, 27, 0, 27, 3 }
+	Corner 5 : { 27, 27, 27, 27, 0, 1, 3, 4 }
+	Corner 6 : { 27, 27, 27, 27, 1, 2, 4, 5 }
+	Corner 7 : { 27, 27, 27, 27, 2, 27, 5, 27 }
+	Corner 8 : { 27, 27, 27, 27, 27, 3, 27, 6 }
+	Corner 9 : { 27, 27, 27, 27, 3, 4, 6, 7 }
+	Corner 10 : { 27, 27, 27, 27, 4, 5, 7, 8 }
+	Corner 11 : { 27, 27, 27, 27, 5, 27, 8, 27 }
+	Corner 12 : { 27, 27, 27, 27, 27, 6, 27, 27 }
+	Corner 13 : { 27, 27, 27, 27, 6, 7, 27, 27 }
+	Corner 14 : { 27, 27, 27, 27, 7, 8, 27, 27 }
+	Corner 15 : { 27, 27, 27, 27, 8, 27, 27, 27 }
+	Corner 16 : { 27, 27, 27, 0, 27, 27, 27, 9 }
+	Corner 17 : { 27, 27, 0, 1, 27, 27, 9, 10 }
+	Corner 18 : { 27, 27, 1, 2, 27, 27, 10, 11 }
+	Corner 19 : { 27, 27, 2, 27, 27, 27, 11, 27 }
+	Corner 20 : { 27, 0, 27, 3, 27, 9, 27, 12 }
+	Corner 21 : { 0, 1, 3, 4, 9, 10, 12, 13 }
+	Corner 22 : { 1, 2, 4, 5, 10, 11, 13, 14 }
+	Corner 23 : { 2, 27, 5, 27, 11, 27, 14, 27 }
+	Corner 24 : { 27, 3, 27, 6, 27, 12, 27, 15 }
+	Corner 25 : { 3, 4, 6, 7, 12, 13, 15, 16 }
+	Corner 26 : { 4, 5, 7, 8, 13, 14, 16, 17 }
+	Corner 27 : { 5, 27, 8, 27, 14, 27, 17, 27 }
+	Corner 28 : { 27, 6, 27, 27, 27, 15, 27, 27 }
+	Corner 29 : { 6, 7, 27, 27, 15, 16, 27, 27 }
+	Corner 30 : { 7, 8, 27, 27, 16, 17, 27, 27 }
+	Corner 31 : { 8, 27, 27, 27, 17, 27, 27, 27 }
+	Corner 32 : { 27, 27, 27, 9, 27, 27, 27, 18 }
+	Corner 33 : { 27, 27, 9, 10, 27, 27, 18, 19 }
+	Corner 34 : { 27, 27, 10, 11, 27, 27, 19, 20 }
+	Corner 35 : { 27, 27, 11, 27, 27, 27, 20, 27 }
+	Corner 36 : { 27, 9, 27, 12, 27, 18, 27, 21 }
+	Corner 37 : { 9, 10, 12, 13, 18, 19, 21, 22 }
+	Corner 38 : { 10, 11, 13, 14, 19, 20, 22, 23 }
+	Corner 39 : { 11, 27, 14, 27, 20, 27, 23, 27 }
+	Corner 40 : { 27, 12, 27, 15, 27, 21, 27, 24 }
+	Corner 41 : { 12, 13, 15, 16, 21, 22, 24, 25 }
+	Corner 42 : { 13, 14, 16, 17, 22, 23, 25, 26 }
+	Corner 43 : { 14, 27, 17, 27, 23, 27, 26, 27 }
+	Corner 44 : { 27, 15, 27, 27, 27, 24, 27, 27 }
+	Corner 45 : { 15, 16, 27, 27, 24, 25, 27, 27 }
+	Corner 46 : { 16, 17, 27, 27, 25, 26, 27, 27 }
+	Corner 47 : { 17, 27, 27, 27, 26, 27, 27, 27 }
+	Corner 48 : { 27, 27, 27, 18, 27, 27, 27, 27 }
+	Corner 49 : { 27, 27, 18, 19, 27, 27, 27, 27 }
+	Corner 50 : { 27, 27, 19, 20, 27, 27, 27, 27 }
+	Corner 51 : { 27, 27, 20, 27, 27, 27, 27, 27 }
+	Corner 52 : { 27, 18, 27, 21, 27, 27, 27, 27 }
+	Corner 53 : { 18, 19, 21, 22, 27, 27, 27, 27 }
+	Corner 54 : { 19, 20, 22, 23, 27, 27, 27, 27 }
+	Corner 55 : { 20, 27, 23, 27, 27, 27, 27, 27 }
+	Corner 56 : { 27, 21, 27, 24, 27, 27, 27, 27 }
+	Corner 57 : { 21, 22, 24, 25, 27, 27, 27, 27 }
+	Corner 58 : { 22, 23, 25, 26, 27, 27, 27, 27 }
+	Corner 59 : { 23, 27, 26, 27, 27, 27, 27, 27 }
+	Corner 60 : { 27, 24, 27, 27, 27, 27, 27, 27 }
+	Corner 61 : { 24, 25, 27, 27, 27, 27, 27, 27 }
+	Corner 62 : { 25, 26, 27, 27, 27, 27, 27, 27 }
+	Corner 63 : { 26, 27, 27, 27, 27, 27, 27, 27 }
+
+Element with point:
+	Point 0 : 0
+	Point 1 : 1
+	Point 2 : 2
+	Point 3 : 27
+	Point 4 : 3
+	Point 5 : 4
+	Point 6 : 5
+	Point 7 : 27
+	Point 8 : 6
+	Point 9 : 7
+	Point 10 : 8
+	Point 11 : 27
+	Point 12 : 27
+	Point 13 : 27
+	Point 14 : 27
+	Point 15 : 27
+	Point 16 : 9
+	Point 17 : 10
+	Point 18 : 11
+	Point 19 : 27
+	Point 20 : 12
+	Point 21 : 13
+	Point 22 : 14
+	Point 23 : 27
+	Point 24 : 15
+	Point 25 : 16
+	Point 26 : 17
+	Point 27 : 27
+	Point 28 : 27
+	Point 29 : 27
+	Point 30 : 27
+	Point 31 : 27
+	Point 32 : 18
+	Point 33 : 19
+	Point 34 : 20
+	Point 35 : 27
+	Point 36 : 21
+	Point 37 : 22
+	Point 38 : 23
+	Point 39 : 27
+	Point 40 : 24
+	Point 41 : 25
+	Point 42 : 26
+	Point 43 : 27
+	Point 44 : 27
+	Point 45 : 27
+	Point 46 : 27
+	Point 47 : 27
+	Point 48 : 27
+	Point 49 : 27
+	Point 50 : 27
+	Point 51 : 27
+	Point 52 : 27
+	Point 53 : 27
+	Point 54 : 27
+	Point 55 : 27
+	Point 56 : 27
+	Point 57 : 27
+	Point 58 : 27
+	Point 59 : 27
+	Point 60 : 27
+	Point 61 : 27
+	Point 62 : 27
+	Point 63 : 27
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testHexaEL.c 3817 2006-09-27 06:55:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	Dictionary*		dictionary;
+	Geometry*		geometry;
+	ElementLayout*		eLayout;
+	Topology*		nTopology;
+	NodeLayout*		nLayout;
+	HexaMD*			meshDecomp;
+	Element_GlobalIndex	e_I;
+	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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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 );
+	eLayout = (ElementLayout*)HexaEL_New( "HexaEL", 3, dictionary, geometry );
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	meshDecomp = HexaMD_New( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout );
+	
+	ElementLayout_Build( eLayout, meshDecomp );
+	
+	printf( "Element corner indices:\n" );
+	for( e_I = 0; e_I < eLayout->elementCount; e_I++ ) {
+		Index* corners = Memory_Alloc_Array( Index, eLayout->elementCornerCount, "corners" );
+		
+		eLayout->buildCornerIndices( eLayout, e_I, corners );
+		
+		printf( "\tElement %u : { %u", e_I, corners[0] );
+		for( i = 1; i < eLayout->elementCornerCount; i++ )
+			printf( ", %u", corners[i] );
+		printf( " }\n" );
+	}
+	printf( "\n" );
+	
+	printf( "Corner element indices:\n" );
+	for( i = 0; i < eLayout->cornerCount; i++ ) {
+		Element_GlobalIndex	elementCnt = eLayout->cornerElementCount( eLayout, i );
+		Element_GlobalIndex*	elements = Memory_Alloc_Array( Element_GlobalIndex, elementCnt, "elements" );
+		
+		eLayout->buildCornerElements( eLayout, i, elements );
+		
+		printf( "\tCorner %u : { %u", i, elements[0] );
+		for( e_I = 1; e_I < elementCnt; e_I++ )
+			printf( ", %u", elements[e_I] );
+		printf( " }\n" );
+	}
+	printf( "\n" );
+	
+	printf( "Element with point:\n" );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		
+		geometry->pointAt( geometry, i, point );
+		point[0] += 0.1;
+		point[1] += 0.1;
+		point[2] += 0.1;
+		
+		printf( "\tPoint %u : %u\n", i, eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+									   EXCLUSIVE_UPPER_BOUNDARY, 0, NULL ) );
+	}
+	printf( "\n" );
+	
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( meshDecomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( geometry );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,485 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8061cb0)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 16
+Element, global: 3 - local: X - shadow: 1 - domain: 17
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 2 - domain: 18
+Element, global: 7 - local: X - shadow: 3 - domain: 19
+Element, global: 8 - local: X - shadow: 4 - domain: 20
+Element, global: 9 - local: X - shadow: 5 - domain: 21
+Element, global: 10 - local: X - shadow: 6 - domain: 22
+Element, global: 11 - local: X - shadow: 7 - domain: 23
+Element, global: 12 - local: X - shadow: 8 - domain: 24
+Element, global: 13 - local: X - shadow: 9 - domain: 25
+Element, global: 14 - local: X - shadow: 10 - domain: 26
+Element, global: 15 - local: X - shadow: 11 - domain: 27
+Element, global: 16 - local: 4 - shadow: X - domain: 4
+Element, global: 17 - local: 5 - shadow: X - domain: 5
+Element, global: 18 - local: X - shadow: 12 - domain: 28
+Element, global: 19 - local: X - shadow: 13 - domain: 29
+Element, global: 20 - local: 6 - shadow: X - domain: 6
+Element, global: 21 - local: 7 - shadow: X - domain: 7
+Element, global: 22 - local: X - shadow: 14 - domain: 30
+Element, global: 23 - local: X - shadow: 15 - domain: 31
+Element, global: 24 - local: X - shadow: 16 - domain: 32
+Element, global: 25 - local: X - shadow: 17 - domain: 33
+Element, global: 26 - local: X - shadow: 18 - domain: 34
+Element, global: 27 - local: X - shadow: 19 - domain: 35
+Element, global: 28 - local: X - shadow: 20 - domain: 36
+Element, global: 29 - local: X - shadow: 21 - domain: 37
+Element, global: 30 - local: X - shadow: 22 - domain: 38
+Element, global: 31 - local: X - shadow: 23 - domain: 39
+Element, global: 32 - local: 8 - shadow: X - domain: 8
+Element, global: 33 - local: 9 - shadow: X - domain: 9
+Element, global: 34 - local: X - shadow: 24 - domain: 40
+Element, global: 35 - local: X - shadow: 25 - domain: 41
+Element, global: 36 - local: 10 - shadow: X - domain: 10
+Element, global: 37 - local: 11 - shadow: X - domain: 11
+Element, global: 38 - local: X - shadow: 26 - domain: 42
+Element, global: 39 - local: X - shadow: 27 - domain: 43
+Element, global: 40 - local: X - shadow: 28 - domain: 44
+Element, global: 41 - local: X - shadow: 29 - domain: 45
+Element, global: 42 - local: X - shadow: 30 - domain: 46
+Element, global: 43 - local: X - shadow: 31 - domain: 47
+Element, global: 44 - local: X - shadow: 32 - domain: 48
+Element, global: 45 - local: X - shadow: 33 - domain: 49
+Element, global: 46 - local: X - shadow: 34 - domain: 50
+Element, global: 47 - local: X - shadow: 35 - domain: 51
+Element, global: 48 - local: 12 - shadow: X - domain: 12
+Element, global: 49 - local: 13 - shadow: X - domain: 13
+Element, global: 50 - local: X - shadow: 36 - domain: 52
+Element, global: 51 - local: X - shadow: 37 - domain: 53
+Element, global: 52 - local: 14 - shadow: X - domain: 14
+Element, global: 53 - local: 15 - shadow: X - domain: 15
+Element, global: 54 - local: X - shadow: 38 - domain: 54
+Element, global: 55 - local: X - shadow: 39 - domain: 55
+Element, global: 56 - local: X - shadow: 40 - domain: 56
+Element, global: 57 - local: X - shadow: 41 - domain: 57
+Element, global: 58 - local: X - shadow: 42 - domain: 58
+Element, global: 59 - local: X - shadow: 43 - domain: 59
+Element, global: 60 - local: X - shadow: 44 - domain: 60
+Element, global: 61 - local: X - shadow: 45 - domain: 61
+Element, global: 62 - local: X - shadow: 46 - domain: 62
+Element, global: 63 - local: X - shadow: 47 - domain: 63
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 16
+Element, local: 5 - global: 17
+Element, local: 6 - global: 20
+Element, local: 7 - global: 21
+Element, local: 8 - global: 32
+Element, local: 9 - global: 33
+Element, local: 10 - global: 36
+Element, local: 11 - global: 37
+Element, local: 12 - global: 48
+Element, local: 13 - global: 49
+Element, local: 14 - global: 52
+Element, local: 15 - global: 53
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 16
+Element, domain: 5 - global: 17
+Element, domain: 6 - global: 20
+Element, domain: 7 - global: 21
+Element, domain: 8 - global: 32
+Element, domain: 9 - global: 33
+Element, domain: 10 - global: 36
+Element, domain: 11 - global: 37
+Element, domain: 12 - global: 48
+Element, domain: 13 - global: 49
+Element, domain: 14 - global: 52
+Element, domain: 15 - global: 53
+Element, domain: 16 - global: 2
+Element, domain: 17 - global: 3
+Element, domain: 18 - global: 6
+Element, domain: 19 - global: 7
+Element, domain: 20 - global: 8
+Element, domain: 21 - global: 9
+Element, domain: 22 - global: 10
+Element, domain: 23 - global: 11
+Element, domain: 24 - global: 12
+Element, domain: 25 - global: 13
+Element, domain: 26 - global: 14
+Element, domain: 27 - global: 15
+Element, domain: 28 - global: 18
+Element, domain: 29 - global: 19
+Element, domain: 30 - global: 22
+Element, domain: 31 - global: 23
+Element, domain: 32 - global: 24
+Element, domain: 33 - global: 25
+Element, domain: 34 - global: 26
+Element, domain: 35 - global: 27
+Element, domain: 36 - global: 28
+Element, domain: 37 - global: 29
+Element, domain: 38 - global: 30
+Element, domain: 39 - global: 31
+Element, domain: 40 - global: 34
+Element, domain: 41 - global: 35
+Element, domain: 42 - global: 38
+Element, domain: 43 - global: 39
+Element, domain: 44 - global: 40
+Element, domain: 45 - global: 41
+Element, domain: 46 - global: 42
+Element, domain: 47 - global: 43
+Element, domain: 48 - global: 44
+Element, domain: 49 - global: 45
+Element, domain: 50 - global: 46
+Element, domain: 51 - global: 47
+Element, domain: 52 - global: 50
+Element, domain: 53 - global: 51
+Element, domain: 54 - global: 54
+Element, domain: 55 - global: 55
+Element, domain: 56 - global: 56
+Element, domain: 57 - global: 57
+Element, domain: 58 - global: 58
+Element, domain: 59 - global: 59
+Element, domain: 60 - global: 60
+Element, domain: 61 - global: 61
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 45
+Node, global: 4 - local: X - shadow: 1 - domain: 46
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 2 - domain: 47
+Node, global: 9 - local: X - shadow: 3 - domain: 48
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 4 - domain: 49
+Node, global: 14 - local: X - shadow: 5 - domain: 50
+Node, global: 15 - local: X - shadow: 6 - domain: 51
+Node, global: 16 - local: X - shadow: 7 - domain: 52
+Node, global: 17 - local: X - shadow: 8 - domain: 53
+Node, global: 18 - local: X - shadow: 9 - domain: 54
+Node, global: 19 - local: X - shadow: 10 - domain: 55
+Node, global: 20 - local: X - shadow: 11 - domain: 56
+Node, global: 21 - local: X - shadow: 12 - domain: 57
+Node, global: 22 - local: X - shadow: 13 - domain: 58
+Node, global: 23 - local: X - shadow: 14 - domain: 59
+Node, global: 24 - local: X - shadow: 15 - domain: 60
+Node, global: 25 - local: 9 - shadow: X - domain: 9
+Node, global: 26 - local: 10 - shadow: X - domain: 10
+Node, global: 27 - local: 11 - shadow: X - domain: 11
+Node, global: 28 - local: X - shadow: 16 - domain: 61
+Node, global: 29 - local: X - shadow: 17 - domain: 62
+Node, global: 30 - local: 12 - shadow: X - domain: 12
+Node, global: 31 - local: 13 - shadow: X - domain: 13
+Node, global: 32 - local: 14 - shadow: X - domain: 14
+Node, global: 33 - local: X - shadow: 18 - domain: 63
+Node, global: 34 - local: X - shadow: 19 - domain: 64
+Node, global: 35 - local: 15 - shadow: X - domain: 15
+Node, global: 36 - local: 16 - shadow: X - domain: 16
+Node, global: 37 - local: 17 - shadow: X - domain: 17
+Node, global: 38 - local: X - shadow: 20 - domain: 65
+Node, global: 39 - local: X - shadow: 21 - domain: 66
+Node, global: 40 - local: X - shadow: 22 - domain: 67
+Node, global: 41 - local: X - shadow: 23 - domain: 68
+Node, global: 42 - local: X - shadow: 24 - domain: 69
+Node, global: 43 - local: X - shadow: 25 - domain: 70
+Node, global: 44 - local: X - shadow: 26 - domain: 71
+Node, global: 45 - local: X - shadow: 27 - domain: 72
+Node, global: 46 - local: X - shadow: 28 - domain: 73
+Node, global: 47 - local: X - shadow: 29 - domain: 74
+Node, global: 48 - local: X - shadow: 30 - domain: 75
+Node, global: 49 - local: X - shadow: 31 - domain: 76
+Node, global: 50 - local: 18 - shadow: X - domain: 18
+Node, global: 51 - local: 19 - shadow: X - domain: 19
+Node, global: 52 - local: 20 - shadow: X - domain: 20
+Node, global: 53 - local: X - shadow: 32 - domain: 77
+Node, global: 54 - local: X - shadow: 33 - domain: 78
+Node, global: 55 - local: 21 - shadow: X - domain: 21
+Node, global: 56 - local: 22 - shadow: X - domain: 22
+Node, global: 57 - local: 23 - shadow: X - domain: 23
+Node, global: 58 - local: X - shadow: 34 - domain: 79
+Node, global: 59 - local: X - shadow: 35 - domain: 80
+Node, global: 60 - local: 24 - shadow: X - domain: 24
+Node, global: 61 - local: 25 - shadow: X - domain: 25
+Node, global: 62 - local: 26 - shadow: X - domain: 26
+Node, global: 63 - local: X - shadow: 36 - domain: 81
+Node, global: 64 - local: X - shadow: 37 - domain: 82
+Node, global: 65 - local: X - shadow: 38 - domain: 83
+Node, global: 66 - local: X - shadow: 39 - domain: 84
+Node, global: 67 - local: X - shadow: 40 - domain: 85
+Node, global: 68 - local: X - shadow: 41 - domain: 86
+Node, global: 69 - local: X - shadow: 42 - domain: 87
+Node, global: 70 - local: X - shadow: 43 - domain: 88
+Node, global: 71 - local: X - shadow: 44 - domain: 89
+Node, global: 72 - local: X - shadow: 45 - domain: 90
+Node, global: 73 - local: X - shadow: 46 - domain: 91
+Node, global: 74 - local: X - shadow: 47 - domain: 92
+Node, global: 75 - local: 27 - shadow: X - domain: 27
+Node, global: 76 - local: 28 - shadow: X - domain: 28
+Node, global: 77 - local: 29 - shadow: X - domain: 29
+Node, global: 78 - local: X - shadow: 48 - domain: 93
+Node, global: 79 - local: X - shadow: 49 - domain: 94
+Node, global: 80 - local: 30 - shadow: X - domain: 30
+Node, global: 81 - local: 31 - shadow: X - domain: 31
+Node, global: 82 - local: 32 - shadow: X - domain: 32
+Node, global: 83 - local: X - shadow: 50 - domain: 95
+Node, global: 84 - local: X - shadow: 51 - domain: 96
+Node, global: 85 - local: 33 - shadow: X - domain: 33
+Node, global: 86 - local: 34 - shadow: X - domain: 34
+Node, global: 87 - local: 35 - shadow: X - domain: 35
+Node, global: 88 - local: X - shadow: 52 - domain: 97
+Node, global: 89 - local: X - shadow: 53 - domain: 98
+Node, global: 90 - local: X - shadow: 54 - domain: 99
+Node, global: 91 - local: X - shadow: 55 - domain: 100
+Node, global: 92 - local: X - shadow: 56 - domain: 101
+Node, global: 93 - local: X - shadow: 57 - domain: 102
+Node, global: 94 - local: X - shadow: 58 - domain: 103
+Node, global: 95 - local: X - shadow: 59 - domain: 104
+Node, global: 96 - local: X - shadow: 60 - domain: 105
+Node, global: 97 - local: X - shadow: 61 - domain: 106
+Node, global: 98 - local: X - shadow: 62 - domain: 107
+Node, global: 99 - local: X - shadow: 63 - domain: 108
+Node, global: 100 - local: 36 - shadow: X - domain: 36
+Node, global: 101 - local: 37 - shadow: X - domain: 37
+Node, global: 102 - local: 38 - shadow: X - domain: 38
+Node, global: 103 - local: X - shadow: 64 - domain: 109
+Node, global: 104 - local: X - shadow: 65 - domain: 110
+Node, global: 105 - local: 39 - shadow: X - domain: 39
+Node, global: 106 - local: 40 - shadow: X - domain: 40
+Node, global: 107 - local: 41 - shadow: X - domain: 41
+Node, global: 108 - local: X - shadow: 66 - domain: 111
+Node, global: 109 - local: X - shadow: 67 - domain: 112
+Node, global: 110 - local: 42 - shadow: X - domain: 42
+Node, global: 111 - local: 43 - shadow: X - domain: 43
+Node, global: 112 - local: 44 - shadow: X - domain: 44
+Node, global: 113 - local: X - shadow: 68 - domain: 113
+Node, global: 114 - local: X - shadow: 69 - domain: 114
+Node, global: 115 - local: X - shadow: 70 - domain: 115
+Node, global: 116 - local: X - shadow: 71 - domain: 116
+Node, global: 117 - local: X - shadow: 72 - domain: 117
+Node, global: 118 - local: X - shadow: 73 - domain: 118
+Node, global: 119 - local: X - shadow: 74 - domain: 119
+Node, global: 120 - local: X - shadow: 75 - domain: 120
+Node, global: 121 - local: X - shadow: 76 - domain: 121
+Node, global: 122 - local: X - shadow: 77 - domain: 122
+Node, global: 123 - local: X - shadow: 78 - domain: 123
+Node, global: 124 - local: X - shadow: 79 - domain: 124
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 25
+Node, local: 10 - global: 26
+Node, local: 11 - global: 27
+Node, local: 12 - global: 30
+Node, local: 13 - global: 31
+Node, local: 14 - global: 32
+Node, local: 15 - global: 35
+Node, local: 16 - global: 36
+Node, local: 17 - global: 37
+Node, local: 18 - global: 50
+Node, local: 19 - global: 51
+Node, local: 20 - global: 52
+Node, local: 21 - global: 55
+Node, local: 22 - global: 56
+Node, local: 23 - global: 57
+Node, local: 24 - global: 60
+Node, local: 25 - global: 61
+Node, local: 26 - global: 62
+Node, local: 27 - global: 75
+Node, local: 28 - global: 76
+Node, local: 29 - global: 77
+Node, local: 30 - global: 80
+Node, local: 31 - global: 81
+Node, local: 32 - global: 82
+Node, local: 33 - global: 85
+Node, local: 34 - global: 86
+Node, local: 35 - global: 87
+Node, local: 36 - global: 100
+Node, local: 37 - global: 101
+Node, local: 38 - global: 102
+Node, local: 39 - global: 105
+Node, local: 40 - global: 106
+Node, local: 41 - global: 107
+Node, local: 42 - global: 110
+Node, local: 43 - global: 111
+Node, local: 44 - global: 112
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 25
+Node, domain: 10 - global: 26
+Node, domain: 11 - global: 27
+Node, domain: 12 - global: 30
+Node, domain: 13 - global: 31
+Node, domain: 14 - global: 32
+Node, domain: 15 - global: 35
+Node, domain: 16 - global: 36
+Node, domain: 17 - global: 37
+Node, domain: 18 - global: 50
+Node, domain: 19 - global: 51
+Node, domain: 20 - global: 52
+Node, domain: 21 - global: 55
+Node, domain: 22 - global: 56
+Node, domain: 23 - global: 57
+Node, domain: 24 - global: 60
+Node, domain: 25 - global: 61
+Node, domain: 26 - global: 62
+Node, domain: 27 - global: 75
+Node, domain: 28 - global: 76
+Node, domain: 29 - global: 77
+Node, domain: 30 - global: 80
+Node, domain: 31 - global: 81
+Node, domain: 32 - global: 82
+Node, domain: 33 - global: 85
+Node, domain: 34 - global: 86
+Node, domain: 35 - global: 87
+Node, domain: 36 - global: 100
+Node, domain: 37 - global: 101
+Node, domain: 38 - global: 102
+Node, domain: 39 - global: 105
+Node, domain: 40 - global: 106
+Node, domain: 41 - global: 107
+Node, domain: 42 - global: 110
+Node, domain: 43 - global: 111
+Node, domain: 44 - global: 112
+Node, domain: 45 - global: 3
+Node, domain: 46 - global: 4
+Node, domain: 47 - global: 8
+Node, domain: 48 - global: 9
+Node, domain: 49 - global: 13
+Node, domain: 50 - global: 14
+Node, domain: 51 - global: 15
+Node, domain: 52 - global: 16
+Node, domain: 53 - global: 17
+Node, domain: 54 - global: 18
+Node, domain: 55 - global: 19
+Node, domain: 56 - global: 20
+Node, domain: 57 - global: 21
+Node, domain: 58 - global: 22
+Node, domain: 59 - global: 23
+Node, domain: 60 - global: 24
+Node, domain: 61 - global: 28
+Node, domain: 62 - global: 29
+Node, domain: 63 - global: 33
+Node, domain: 64 - global: 34
+Node, domain: 65 - global: 38
+Node, domain: 66 - global: 39
+Node, domain: 67 - global: 40
+Node, domain: 68 - global: 41
+Node, domain: 69 - global: 42
+Node, domain: 70 - global: 43
+Node, domain: 71 - global: 44
+Node, domain: 72 - global: 45
+Node, domain: 73 - global: 46
+Node, domain: 74 - global: 47
+Node, domain: 75 - global: 48
+Node, domain: 76 - global: 49
+Node, domain: 77 - global: 53
+Node, domain: 78 - global: 54
+Node, domain: 79 - global: 58
+Node, domain: 80 - global: 59
+Node, domain: 81 - global: 63
+Node, domain: 82 - global: 64
+Node, domain: 83 - global: 65
+Node, domain: 84 - global: 66
+Node, domain: 85 - global: 67
+Node, domain: 86 - global: 68
+Node, domain: 87 - global: 69
+Node, domain: 88 - global: 70
+Node, domain: 89 - global: 71
+Node, domain: 90 - global: 72
+Node, domain: 91 - global: 73
+Node, domain: 92 - global: 74
+Node, domain: 93 - global: 78
+Node, domain: 94 - global: 79
+Node, domain: 95 - global: 83
+Node, domain: 96 - global: 84
+Node, domain: 97 - global: 88
+Node, domain: 98 - global: 89
+Node, domain: 99 - global: 90
+Node, domain: 100 - global: 91
+Node, domain: 101 - global: 92
+Node, domain: 102 - global: 93
+Node, domain: 103 - global: 94
+Node, domain: 104 - global: 95
+Node, domain: 105 - global: 96
+Node, domain: 106 - global: 97
+Node, domain: 107 - global: 98
+Node, domain: 108 - global: 99
+Node, domain: 109 - global: 103
+Node, domain: 110 - global: 104
+Node, domain: 111 - global: 108
+Node, domain: 112 - global: 109
+Node, domain: 113 - global: 113
+Node, domain: 114 - global: 114
+Node, domain: 115 - global: 115
+Node, domain: 116 - global: 116
+Node, domain: 117 - global: 117
+Node, domain: 118 - global: 118
+Node, domain: 119 - global: 119
+Node, domain: 120 - global: 120
+Node, domain: 121 - global: 121
+Node, domain: 122 - global: 122
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,485 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060cb0)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 16
+Element, global: 1 - local: X - shadow: 1 - domain: 17
+Element, global: 2 - local: 0 - shadow: X - domain: 0
+Element, global: 3 - local: 1 - shadow: X - domain: 1
+Element, global: 4 - local: X - shadow: 2 - domain: 18
+Element, global: 5 - local: X - shadow: 3 - domain: 19
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: 4 - domain: 20
+Element, global: 9 - local: X - shadow: 5 - domain: 21
+Element, global: 10 - local: X - shadow: 6 - domain: 22
+Element, global: 11 - local: X - shadow: 7 - domain: 23
+Element, global: 12 - local: X - shadow: 8 - domain: 24
+Element, global: 13 - local: X - shadow: 9 - domain: 25
+Element, global: 14 - local: X - shadow: 10 - domain: 26
+Element, global: 15 - local: X - shadow: 11 - domain: 27
+Element, global: 16 - local: X - shadow: 12 - domain: 28
+Element, global: 17 - local: X - shadow: 13 - domain: 29
+Element, global: 18 - local: 4 - shadow: X - domain: 4
+Element, global: 19 - local: 5 - shadow: X - domain: 5
+Element, global: 20 - local: X - shadow: 14 - domain: 30
+Element, global: 21 - local: X - shadow: 15 - domain: 31
+Element, global: 22 - local: 6 - shadow: X - domain: 6
+Element, global: 23 - local: 7 - shadow: X - domain: 7
+Element, global: 24 - local: X - shadow: 16 - domain: 32
+Element, global: 25 - local: X - shadow: 17 - domain: 33
+Element, global: 26 - local: X - shadow: 18 - domain: 34
+Element, global: 27 - local: X - shadow: 19 - domain: 35
+Element, global: 28 - local: X - shadow: 20 - domain: 36
+Element, global: 29 - local: X - shadow: 21 - domain: 37
+Element, global: 30 - local: X - shadow: 22 - domain: 38
+Element, global: 31 - local: X - shadow: 23 - domain: 39
+Element, global: 32 - local: X - shadow: 24 - domain: 40
+Element, global: 33 - local: X - shadow: 25 - domain: 41
+Element, global: 34 - local: 8 - shadow: X - domain: 8
+Element, global: 35 - local: 9 - shadow: X - domain: 9
+Element, global: 36 - local: X - shadow: 26 - domain: 42
+Element, global: 37 - local: X - shadow: 27 - domain: 43
+Element, global: 38 - local: 10 - shadow: X - domain: 10
+Element, global: 39 - local: 11 - shadow: X - domain: 11
+Element, global: 40 - local: X - shadow: 28 - domain: 44
+Element, global: 41 - local: X - shadow: 29 - domain: 45
+Element, global: 42 - local: X - shadow: 30 - domain: 46
+Element, global: 43 - local: X - shadow: 31 - domain: 47
+Element, global: 44 - local: X - shadow: 32 - domain: 48
+Element, global: 45 - local: X - shadow: 33 - domain: 49
+Element, global: 46 - local: X - shadow: 34 - domain: 50
+Element, global: 47 - local: X - shadow: 35 - domain: 51
+Element, global: 48 - local: X - shadow: 36 - domain: 52
+Element, global: 49 - local: X - shadow: 37 - domain: 53
+Element, global: 50 - local: 12 - shadow: X - domain: 12
+Element, global: 51 - local: 13 - shadow: X - domain: 13
+Element, global: 52 - local: X - shadow: 38 - domain: 54
+Element, global: 53 - local: X - shadow: 39 - domain: 55
+Element, global: 54 - local: 14 - shadow: X - domain: 14
+Element, global: 55 - local: 15 - shadow: X - domain: 15
+Element, global: 56 - local: X - shadow: 40 - domain: 56
+Element, global: 57 - local: X - shadow: 41 - domain: 57
+Element, global: 58 - local: X - shadow: 42 - domain: 58
+Element, global: 59 - local: X - shadow: 43 - domain: 59
+Element, global: 60 - local: X - shadow: 44 - domain: 60
+Element, global: 61 - local: X - shadow: 45 - domain: 61
+Element, global: 62 - local: X - shadow: 46 - domain: 62
+Element, global: 63 - local: X - shadow: 47 - domain: 63
+
+Element, local: 0 - global: 2
+Element, local: 1 - global: 3
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 18
+Element, local: 5 - global: 19
+Element, local: 6 - global: 22
+Element, local: 7 - global: 23
+Element, local: 8 - global: 34
+Element, local: 9 - global: 35
+Element, local: 10 - global: 38
+Element, local: 11 - global: 39
+Element, local: 12 - global: 50
+Element, local: 13 - global: 51
+Element, local: 14 - global: 54
+Element, local: 15 - global: 55
+
+Element, domain: 0 - global: 2
+Element, domain: 1 - global: 3
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 18
+Element, domain: 5 - global: 19
+Element, domain: 6 - global: 22
+Element, domain: 7 - global: 23
+Element, domain: 8 - global: 34
+Element, domain: 9 - global: 35
+Element, domain: 10 - global: 38
+Element, domain: 11 - global: 39
+Element, domain: 12 - global: 50
+Element, domain: 13 - global: 51
+Element, domain: 14 - global: 54
+Element, domain: 15 - global: 55
+Element, domain: 16 - global: 0
+Element, domain: 17 - global: 1
+Element, domain: 18 - global: 4
+Element, domain: 19 - global: 5
+Element, domain: 20 - global: 8
+Element, domain: 21 - global: 9
+Element, domain: 22 - global: 10
+Element, domain: 23 - global: 11
+Element, domain: 24 - global: 12
+Element, domain: 25 - global: 13
+Element, domain: 26 - global: 14
+Element, domain: 27 - global: 15
+Element, domain: 28 - global: 16
+Element, domain: 29 - global: 17
+Element, domain: 30 - global: 20
+Element, domain: 31 - global: 21
+Element, domain: 32 - global: 24
+Element, domain: 33 - global: 25
+Element, domain: 34 - global: 26
+Element, domain: 35 - global: 27
+Element, domain: 36 - global: 28
+Element, domain: 37 - global: 29
+Element, domain: 38 - global: 30
+Element, domain: 39 - global: 31
+Element, domain: 40 - global: 32
+Element, domain: 41 - global: 33
+Element, domain: 42 - global: 36
+Element, domain: 43 - global: 37
+Element, domain: 44 - global: 40
+Element, domain: 45 - global: 41
+Element, domain: 46 - global: 42
+Element, domain: 47 - global: 43
+Element, domain: 48 - global: 44
+Element, domain: 49 - global: 45
+Element, domain: 50 - global: 46
+Element, domain: 51 - global: 47
+Element, domain: 52 - global: 48
+Element, domain: 53 - global: 49
+Element, domain: 54 - global: 52
+Element, domain: 55 - global: 53
+Element, domain: 56 - global: 56
+Element, domain: 57 - global: 57
+Element, domain: 58 - global: 58
+Element, domain: 59 - global: 59
+Element, domain: 60 - global: 60
+Element, domain: 61 - global: 61
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: X - shadow: 0 - domain: 45
+Node, global: 1 - local: X - shadow: 1 - domain: 46
+Node, global: 2 - local: 0 - shadow: X - domain: 0
+Node, global: 3 - local: 1 - shadow: X - domain: 1
+Node, global: 4 - local: 2 - shadow: X - domain: 2
+Node, global: 5 - local: X - shadow: 2 - domain: 47
+Node, global: 6 - local: X - shadow: 3 - domain: 48
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: X - shadow: 4 - domain: 49
+Node, global: 11 - local: X - shadow: 5 - domain: 50
+Node, global: 12 - local: 6 - shadow: X - domain: 6
+Node, global: 13 - local: 7 - shadow: X - domain: 7
+Node, global: 14 - local: 8 - shadow: X - domain: 8
+Node, global: 15 - local: X - shadow: 6 - domain: 51
+Node, global: 16 - local: X - shadow: 7 - domain: 52
+Node, global: 17 - local: X - shadow: 8 - domain: 53
+Node, global: 18 - local: X - shadow: 9 - domain: 54
+Node, global: 19 - local: X - shadow: 10 - domain: 55
+Node, global: 20 - local: X - shadow: 11 - domain: 56
+Node, global: 21 - local: X - shadow: 12 - domain: 57
+Node, global: 22 - local: X - shadow: 13 - domain: 58
+Node, global: 23 - local: X - shadow: 14 - domain: 59
+Node, global: 24 - local: X - shadow: 15 - domain: 60
+Node, global: 25 - local: X - shadow: 16 - domain: 61
+Node, global: 26 - local: X - shadow: 17 - domain: 62
+Node, global: 27 - local: 9 - shadow: X - domain: 9
+Node, global: 28 - local: 10 - shadow: X - domain: 10
+Node, global: 29 - local: 11 - shadow: X - domain: 11
+Node, global: 30 - local: X - shadow: 18 - domain: 63
+Node, global: 31 - local: X - shadow: 19 - domain: 64
+Node, global: 32 - local: 12 - shadow: X - domain: 12
+Node, global: 33 - local: 13 - shadow: X - domain: 13
+Node, global: 34 - local: 14 - shadow: X - domain: 14
+Node, global: 35 - local: X - shadow: 20 - domain: 65
+Node, global: 36 - local: X - shadow: 21 - domain: 66
+Node, global: 37 - local: 15 - shadow: X - domain: 15
+Node, global: 38 - local: 16 - shadow: X - domain: 16
+Node, global: 39 - local: 17 - shadow: X - domain: 17
+Node, global: 40 - local: X - shadow: 22 - domain: 67
+Node, global: 41 - local: X - shadow: 23 - domain: 68
+Node, global: 42 - local: X - shadow: 24 - domain: 69
+Node, global: 43 - local: X - shadow: 25 - domain: 70
+Node, global: 44 - local: X - shadow: 26 - domain: 71
+Node, global: 45 - local: X - shadow: 27 - domain: 72
+Node, global: 46 - local: X - shadow: 28 - domain: 73
+Node, global: 47 - local: X - shadow: 29 - domain: 74
+Node, global: 48 - local: X - shadow: 30 - domain: 75
+Node, global: 49 - local: X - shadow: 31 - domain: 76
+Node, global: 50 - local: X - shadow: 32 - domain: 77
+Node, global: 51 - local: X - shadow: 33 - domain: 78
+Node, global: 52 - local: 18 - shadow: X - domain: 18
+Node, global: 53 - local: 19 - shadow: X - domain: 19
+Node, global: 54 - local: 20 - shadow: X - domain: 20
+Node, global: 55 - local: X - shadow: 34 - domain: 79
+Node, global: 56 - local: X - shadow: 35 - domain: 80
+Node, global: 57 - local: 21 - shadow: X - domain: 21
+Node, global: 58 - local: 22 - shadow: X - domain: 22
+Node, global: 59 - local: 23 - shadow: X - domain: 23
+Node, global: 60 - local: X - shadow: 36 - domain: 81
+Node, global: 61 - local: X - shadow: 37 - domain: 82
+Node, global: 62 - local: 24 - shadow: X - domain: 24
+Node, global: 63 - local: 25 - shadow: X - domain: 25
+Node, global: 64 - local: 26 - shadow: X - domain: 26
+Node, global: 65 - local: X - shadow: 38 - domain: 83
+Node, global: 66 - local: X - shadow: 39 - domain: 84
+Node, global: 67 - local: X - shadow: 40 - domain: 85
+Node, global: 68 - local: X - shadow: 41 - domain: 86
+Node, global: 69 - local: X - shadow: 42 - domain: 87
+Node, global: 70 - local: X - shadow: 43 - domain: 88
+Node, global: 71 - local: X - shadow: 44 - domain: 89
+Node, global: 72 - local: X - shadow: 45 - domain: 90
+Node, global: 73 - local: X - shadow: 46 - domain: 91
+Node, global: 74 - local: X - shadow: 47 - domain: 92
+Node, global: 75 - local: X - shadow: 48 - domain: 93
+Node, global: 76 - local: X - shadow: 49 - domain: 94
+Node, global: 77 - local: 27 - shadow: X - domain: 27
+Node, global: 78 - local: 28 - shadow: X - domain: 28
+Node, global: 79 - local: 29 - shadow: X - domain: 29
+Node, global: 80 - local: X - shadow: 50 - domain: 95
+Node, global: 81 - local: X - shadow: 51 - domain: 96
+Node, global: 82 - local: 30 - shadow: X - domain: 30
+Node, global: 83 - local: 31 - shadow: X - domain: 31
+Node, global: 84 - local: 32 - shadow: X - domain: 32
+Node, global: 85 - local: X - shadow: 52 - domain: 97
+Node, global: 86 - local: X - shadow: 53 - domain: 98
+Node, global: 87 - local: 33 - shadow: X - domain: 33
+Node, global: 88 - local: 34 - shadow: X - domain: 34
+Node, global: 89 - local: 35 - shadow: X - domain: 35
+Node, global: 90 - local: X - shadow: 54 - domain: 99
+Node, global: 91 - local: X - shadow: 55 - domain: 100
+Node, global: 92 - local: X - shadow: 56 - domain: 101
+Node, global: 93 - local: X - shadow: 57 - domain: 102
+Node, global: 94 - local: X - shadow: 58 - domain: 103
+Node, global: 95 - local: X - shadow: 59 - domain: 104
+Node, global: 96 - local: X - shadow: 60 - domain: 105
+Node, global: 97 - local: X - shadow: 61 - domain: 106
+Node, global: 98 - local: X - shadow: 62 - domain: 107
+Node, global: 99 - local: X - shadow: 63 - domain: 108
+Node, global: 100 - local: X - shadow: 64 - domain: 109
+Node, global: 101 - local: X - shadow: 65 - domain: 110
+Node, global: 102 - local: 36 - shadow: X - domain: 36
+Node, global: 103 - local: 37 - shadow: X - domain: 37
+Node, global: 104 - local: 38 - shadow: X - domain: 38
+Node, global: 105 - local: X - shadow: 66 - domain: 111
+Node, global: 106 - local: X - shadow: 67 - domain: 112
+Node, global: 107 - local: 39 - shadow: X - domain: 39
+Node, global: 108 - local: 40 - shadow: X - domain: 40
+Node, global: 109 - local: 41 - shadow: X - domain: 41
+Node, global: 110 - local: X - shadow: 68 - domain: 113
+Node, global: 111 - local: X - shadow: 69 - domain: 114
+Node, global: 112 - local: 42 - shadow: X - domain: 42
+Node, global: 113 - local: 43 - shadow: X - domain: 43
+Node, global: 114 - local: 44 - shadow: X - domain: 44
+Node, global: 115 - local: X - shadow: 70 - domain: 115
+Node, global: 116 - local: X - shadow: 71 - domain: 116
+Node, global: 117 - local: X - shadow: 72 - domain: 117
+Node, global: 118 - local: X - shadow: 73 - domain: 118
+Node, global: 119 - local: X - shadow: 74 - domain: 119
+Node, global: 120 - local: X - shadow: 75 - domain: 120
+Node, global: 121 - local: X - shadow: 76 - domain: 121
+Node, global: 122 - local: X - shadow: 77 - domain: 122
+Node, global: 123 - local: X - shadow: 78 - domain: 123
+Node, global: 124 - local: X - shadow: 79 - domain: 124
+
+Node, local: 0 - global: 2
+Node, local: 1 - global: 3
+Node, local: 2 - global: 4
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 9
+Node, local: 6 - global: 12
+Node, local: 7 - global: 13
+Node, local: 8 - global: 14
+Node, local: 9 - global: 27
+Node, local: 10 - global: 28
+Node, local: 11 - global: 29
+Node, local: 12 - global: 32
+Node, local: 13 - global: 33
+Node, local: 14 - global: 34
+Node, local: 15 - global: 37
+Node, local: 16 - global: 38
+Node, local: 17 - global: 39
+Node, local: 18 - global: 52
+Node, local: 19 - global: 53
+Node, local: 20 - global: 54
+Node, local: 21 - global: 57
+Node, local: 22 - global: 58
+Node, local: 23 - global: 59
+Node, local: 24 - global: 62
+Node, local: 25 - global: 63
+Node, local: 26 - global: 64
+Node, local: 27 - global: 77
+Node, local: 28 - global: 78
+Node, local: 29 - global: 79
+Node, local: 30 - global: 82
+Node, local: 31 - global: 83
+Node, local: 32 - global: 84
+Node, local: 33 - global: 87
+Node, local: 34 - global: 88
+Node, local: 35 - global: 89
+Node, local: 36 - global: 102
+Node, local: 37 - global: 103
+Node, local: 38 - global: 104
+Node, local: 39 - global: 107
+Node, local: 40 - global: 108
+Node, local: 41 - global: 109
+Node, local: 42 - global: 112
+Node, local: 43 - global: 113
+Node, local: 44 - global: 114
+
+Node, domain: 0 - global: 2
+Node, domain: 1 - global: 3
+Node, domain: 2 - global: 4
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 12
+Node, domain: 7 - global: 13
+Node, domain: 8 - global: 14
+Node, domain: 9 - global: 27
+Node, domain: 10 - global: 28
+Node, domain: 11 - global: 29
+Node, domain: 12 - global: 32
+Node, domain: 13 - global: 33
+Node, domain: 14 - global: 34
+Node, domain: 15 - global: 37
+Node, domain: 16 - global: 38
+Node, domain: 17 - global: 39
+Node, domain: 18 - global: 52
+Node, domain: 19 - global: 53
+Node, domain: 20 - global: 54
+Node, domain: 21 - global: 57
+Node, domain: 22 - global: 58
+Node, domain: 23 - global: 59
+Node, domain: 24 - global: 62
+Node, domain: 25 - global: 63
+Node, domain: 26 - global: 64
+Node, domain: 27 - global: 77
+Node, domain: 28 - global: 78
+Node, domain: 29 - global: 79
+Node, domain: 30 - global: 82
+Node, domain: 31 - global: 83
+Node, domain: 32 - global: 84
+Node, domain: 33 - global: 87
+Node, domain: 34 - global: 88
+Node, domain: 35 - global: 89
+Node, domain: 36 - global: 102
+Node, domain: 37 - global: 103
+Node, domain: 38 - global: 104
+Node, domain: 39 - global: 107
+Node, domain: 40 - global: 108
+Node, domain: 41 - global: 109
+Node, domain: 42 - global: 112
+Node, domain: 43 - global: 113
+Node, domain: 44 - global: 114
+Node, domain: 45 - global: 0
+Node, domain: 46 - global: 1
+Node, domain: 47 - global: 5
+Node, domain: 48 - global: 6
+Node, domain: 49 - global: 10
+Node, domain: 50 - global: 11
+Node, domain: 51 - global: 15
+Node, domain: 52 - global: 16
+Node, domain: 53 - global: 17
+Node, domain: 54 - global: 18
+Node, domain: 55 - global: 19
+Node, domain: 56 - global: 20
+Node, domain: 57 - global: 21
+Node, domain: 58 - global: 22
+Node, domain: 59 - global: 23
+Node, domain: 60 - global: 24
+Node, domain: 61 - global: 25
+Node, domain: 62 - global: 26
+Node, domain: 63 - global: 30
+Node, domain: 64 - global: 31
+Node, domain: 65 - global: 35
+Node, domain: 66 - global: 36
+Node, domain: 67 - global: 40
+Node, domain: 68 - global: 41
+Node, domain: 69 - global: 42
+Node, domain: 70 - global: 43
+Node, domain: 71 - global: 44
+Node, domain: 72 - global: 45
+Node, domain: 73 - global: 46
+Node, domain: 74 - global: 47
+Node, domain: 75 - global: 48
+Node, domain: 76 - global: 49
+Node, domain: 77 - global: 50
+Node, domain: 78 - global: 51
+Node, domain: 79 - global: 55
+Node, domain: 80 - global: 56
+Node, domain: 81 - global: 60
+Node, domain: 82 - global: 61
+Node, domain: 83 - global: 65
+Node, domain: 84 - global: 66
+Node, domain: 85 - global: 67
+Node, domain: 86 - global: 68
+Node, domain: 87 - global: 69
+Node, domain: 88 - global: 70
+Node, domain: 89 - global: 71
+Node, domain: 90 - global: 72
+Node, domain: 91 - global: 73
+Node, domain: 92 - global: 74
+Node, domain: 93 - global: 75
+Node, domain: 94 - global: 76
+Node, domain: 95 - global: 80
+Node, domain: 96 - global: 81
+Node, domain: 97 - global: 85
+Node, domain: 98 - global: 86
+Node, domain: 99 - global: 90
+Node, domain: 100 - global: 91
+Node, domain: 101 - global: 92
+Node, domain: 102 - global: 93
+Node, domain: 103 - global: 94
+Node, domain: 104 - global: 95
+Node, domain: 105 - global: 96
+Node, domain: 106 - global: 97
+Node, domain: 107 - global: 98
+Node, domain: 108 - global: 99
+Node, domain: 109 - global: 100
+Node, domain: 110 - global: 101
+Node, domain: 111 - global: 105
+Node, domain: 112 - global: 106
+Node, domain: 113 - global: 110
+Node, domain: 114 - global: 111
+Node, domain: 115 - global: 115
+Node, domain: 116 - global: 116
+Node, domain: 117 - global: 117
+Node, domain: 118 - global: 118
+Node, domain: 119 - global: 119
+Node, domain: 120 - global: 120
+Node, domain: 121 - global: 121
+Node, domain: 122 - global: 122
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,485 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 2 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060cb0)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 16
+Element, global: 1 - local: X - shadow: 1 - domain: 17
+Element, global: 2 - local: X - shadow: 2 - domain: 18
+Element, global: 3 - local: X - shadow: 3 - domain: 19
+Element, global: 4 - local: X - shadow: 4 - domain: 20
+Element, global: 5 - local: X - shadow: 5 - domain: 21
+Element, global: 6 - local: X - shadow: 6 - domain: 22
+Element, global: 7 - local: X - shadow: 7 - domain: 23
+Element, global: 8 - local: 0 - shadow: X - domain: 0
+Element, global: 9 - local: 1 - shadow: X - domain: 1
+Element, global: 10 - local: X - shadow: 8 - domain: 24
+Element, global: 11 - local: X - shadow: 9 - domain: 25
+Element, global: 12 - local: 2 - shadow: X - domain: 2
+Element, global: 13 - local: 3 - shadow: X - domain: 3
+Element, global: 14 - local: X - shadow: 10 - domain: 26
+Element, global: 15 - local: X - shadow: 11 - domain: 27
+Element, global: 16 - local: X - shadow: 12 - domain: 28
+Element, global: 17 - local: X - shadow: 13 - domain: 29
+Element, global: 18 - local: X - shadow: 14 - domain: 30
+Element, global: 19 - local: X - shadow: 15 - domain: 31
+Element, global: 20 - local: X - shadow: 16 - domain: 32
+Element, global: 21 - local: X - shadow: 17 - domain: 33
+Element, global: 22 - local: X - shadow: 18 - domain: 34
+Element, global: 23 - local: X - shadow: 19 - domain: 35
+Element, global: 24 - local: 4 - shadow: X - domain: 4
+Element, global: 25 - local: 5 - shadow: X - domain: 5
+Element, global: 26 - local: X - shadow: 20 - domain: 36
+Element, global: 27 - local: X - shadow: 21 - domain: 37
+Element, global: 28 - local: 6 - shadow: X - domain: 6
+Element, global: 29 - local: 7 - shadow: X - domain: 7
+Element, global: 30 - local: X - shadow: 22 - domain: 38
+Element, global: 31 - local: X - shadow: 23 - domain: 39
+Element, global: 32 - local: X - shadow: 24 - domain: 40
+Element, global: 33 - local: X - shadow: 25 - domain: 41
+Element, global: 34 - local: X - shadow: 26 - domain: 42
+Element, global: 35 - local: X - shadow: 27 - domain: 43
+Element, global: 36 - local: X - shadow: 28 - domain: 44
+Element, global: 37 - local: X - shadow: 29 - domain: 45
+Element, global: 38 - local: X - shadow: 30 - domain: 46
+Element, global: 39 - local: X - shadow: 31 - domain: 47
+Element, global: 40 - local: 8 - shadow: X - domain: 8
+Element, global: 41 - local: 9 - shadow: X - domain: 9
+Element, global: 42 - local: X - shadow: 32 - domain: 48
+Element, global: 43 - local: X - shadow: 33 - domain: 49
+Element, global: 44 - local: 10 - shadow: X - domain: 10
+Element, global: 45 - local: 11 - shadow: X - domain: 11
+Element, global: 46 - local: X - shadow: 34 - domain: 50
+Element, global: 47 - local: X - shadow: 35 - domain: 51
+Element, global: 48 - local: X - shadow: 36 - domain: 52
+Element, global: 49 - local: X - shadow: 37 - domain: 53
+Element, global: 50 - local: X - shadow: 38 - domain: 54
+Element, global: 51 - local: X - shadow: 39 - domain: 55
+Element, global: 52 - local: X - shadow: 40 - domain: 56
+Element, global: 53 - local: X - shadow: 41 - domain: 57
+Element, global: 54 - local: X - shadow: 42 - domain: 58
+Element, global: 55 - local: X - shadow: 43 - domain: 59
+Element, global: 56 - local: 12 - shadow: X - domain: 12
+Element, global: 57 - local: 13 - shadow: X - domain: 13
+Element, global: 58 - local: X - shadow: 44 - domain: 60
+Element, global: 59 - local: X - shadow: 45 - domain: 61
+Element, global: 60 - local: 14 - shadow: X - domain: 14
+Element, global: 61 - local: 15 - shadow: X - domain: 15
+Element, global: 62 - local: X - shadow: 46 - domain: 62
+Element, global: 63 - local: X - shadow: 47 - domain: 63
+
+Element, local: 0 - global: 8
+Element, local: 1 - global: 9
+Element, local: 2 - global: 12
+Element, local: 3 - global: 13
+Element, local: 4 - global: 24
+Element, local: 5 - global: 25
+Element, local: 6 - global: 28
+Element, local: 7 - global: 29
+Element, local: 8 - global: 40
+Element, local: 9 - global: 41
+Element, local: 10 - global: 44
+Element, local: 11 - global: 45
+Element, local: 12 - global: 56
+Element, local: 13 - global: 57
+Element, local: 14 - global: 60
+Element, local: 15 - global: 61
+
+Element, domain: 0 - global: 8
+Element, domain: 1 - global: 9
+Element, domain: 2 - global: 12
+Element, domain: 3 - global: 13
+Element, domain: 4 - global: 24
+Element, domain: 5 - global: 25
+Element, domain: 6 - global: 28
+Element, domain: 7 - global: 29
+Element, domain: 8 - global: 40
+Element, domain: 9 - global: 41
+Element, domain: 10 - global: 44
+Element, domain: 11 - global: 45
+Element, domain: 12 - global: 56
+Element, domain: 13 - global: 57
+Element, domain: 14 - global: 60
+Element, domain: 15 - global: 61
+Element, domain: 16 - global: 0
+Element, domain: 17 - global: 1
+Element, domain: 18 - global: 2
+Element, domain: 19 - global: 3
+Element, domain: 20 - global: 4
+Element, domain: 21 - global: 5
+Element, domain: 22 - global: 6
+Element, domain: 23 - global: 7
+Element, domain: 24 - global: 10
+Element, domain: 25 - global: 11
+Element, domain: 26 - global: 14
+Element, domain: 27 - global: 15
+Element, domain: 28 - global: 16
+Element, domain: 29 - global: 17
+Element, domain: 30 - global: 18
+Element, domain: 31 - global: 19
+Element, domain: 32 - global: 20
+Element, domain: 33 - global: 21
+Element, domain: 34 - global: 22
+Element, domain: 35 - global: 23
+Element, domain: 36 - global: 26
+Element, domain: 37 - global: 27
+Element, domain: 38 - global: 30
+Element, domain: 39 - global: 31
+Element, domain: 40 - global: 32
+Element, domain: 41 - global: 33
+Element, domain: 42 - global: 34
+Element, domain: 43 - global: 35
+Element, domain: 44 - global: 36
+Element, domain: 45 - global: 37
+Element, domain: 46 - global: 38
+Element, domain: 47 - global: 39
+Element, domain: 48 - global: 42
+Element, domain: 49 - global: 43
+Element, domain: 50 - global: 46
+Element, domain: 51 - global: 47
+Element, domain: 52 - global: 48
+Element, domain: 53 - global: 49
+Element, domain: 54 - global: 50
+Element, domain: 55 - global: 51
+Element, domain: 56 - global: 52
+Element, domain: 57 - global: 53
+Element, domain: 58 - global: 54
+Element, domain: 59 - global: 55
+Element, domain: 60 - global: 58
+Element, domain: 61 - global: 59
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: X - shadow: 0 - domain: 45
+Node, global: 1 - local: X - shadow: 1 - domain: 46
+Node, global: 2 - local: X - shadow: 2 - domain: 47
+Node, global: 3 - local: X - shadow: 3 - domain: 48
+Node, global: 4 - local: X - shadow: 4 - domain: 49
+Node, global: 5 - local: X - shadow: 5 - domain: 50
+Node, global: 6 - local: X - shadow: 6 - domain: 51
+Node, global: 7 - local: X - shadow: 7 - domain: 52
+Node, global: 8 - local: X - shadow: 8 - domain: 53
+Node, global: 9 - local: X - shadow: 9 - domain: 54
+Node, global: 10 - local: 0 - shadow: X - domain: 0
+Node, global: 11 - local: 1 - shadow: X - domain: 1
+Node, global: 12 - local: 2 - shadow: X - domain: 2
+Node, global: 13 - local: X - shadow: 10 - domain: 55
+Node, global: 14 - local: X - shadow: 11 - domain: 56
+Node, global: 15 - local: 3 - shadow: X - domain: 3
+Node, global: 16 - local: 4 - shadow: X - domain: 4
+Node, global: 17 - local: 5 - shadow: X - domain: 5
+Node, global: 18 - local: X - shadow: 12 - domain: 57
+Node, global: 19 - local: X - shadow: 13 - domain: 58
+Node, global: 20 - local: 6 - shadow: X - domain: 6
+Node, global: 21 - local: 7 - shadow: X - domain: 7
+Node, global: 22 - local: 8 - shadow: X - domain: 8
+Node, global: 23 - local: X - shadow: 14 - domain: 59
+Node, global: 24 - local: X - shadow: 15 - domain: 60
+Node, global: 25 - local: X - shadow: 16 - domain: 61
+Node, global: 26 - local: X - shadow: 17 - domain: 62
+Node, global: 27 - local: X - shadow: 18 - domain: 63
+Node, global: 28 - local: X - shadow: 19 - domain: 64
+Node, global: 29 - local: X - shadow: 20 - domain: 65
+Node, global: 30 - local: X - shadow: 21 - domain: 66
+Node, global: 31 - local: X - shadow: 22 - domain: 67
+Node, global: 32 - local: X - shadow: 23 - domain: 68
+Node, global: 33 - local: X - shadow: 24 - domain: 69
+Node, global: 34 - local: X - shadow: 25 - domain: 70
+Node, global: 35 - local: 9 - shadow: X - domain: 9
+Node, global: 36 - local: 10 - shadow: X - domain: 10
+Node, global: 37 - local: 11 - shadow: X - domain: 11
+Node, global: 38 - local: X - shadow: 26 - domain: 71
+Node, global: 39 - local: X - shadow: 27 - domain: 72
+Node, global: 40 - local: 12 - shadow: X - domain: 12
+Node, global: 41 - local: 13 - shadow: X - domain: 13
+Node, global: 42 - local: 14 - shadow: X - domain: 14
+Node, global: 43 - local: X - shadow: 28 - domain: 73
+Node, global: 44 - local: X - shadow: 29 - domain: 74
+Node, global: 45 - local: 15 - shadow: X - domain: 15
+Node, global: 46 - local: 16 - shadow: X - domain: 16
+Node, global: 47 - local: 17 - shadow: X - domain: 17
+Node, global: 48 - local: X - shadow: 30 - domain: 75
+Node, global: 49 - local: X - shadow: 31 - domain: 76
+Node, global: 50 - local: X - shadow: 32 - domain: 77
+Node, global: 51 - local: X - shadow: 33 - domain: 78
+Node, global: 52 - local: X - shadow: 34 - domain: 79
+Node, global: 53 - local: X - shadow: 35 - domain: 80
+Node, global: 54 - local: X - shadow: 36 - domain: 81
+Node, global: 55 - local: X - shadow: 37 - domain: 82
+Node, global: 56 - local: X - shadow: 38 - domain: 83
+Node, global: 57 - local: X - shadow: 39 - domain: 84
+Node, global: 58 - local: X - shadow: 40 - domain: 85
+Node, global: 59 - local: X - shadow: 41 - domain: 86
+Node, global: 60 - local: 18 - shadow: X - domain: 18
+Node, global: 61 - local: 19 - shadow: X - domain: 19
+Node, global: 62 - local: 20 - shadow: X - domain: 20
+Node, global: 63 - local: X - shadow: 42 - domain: 87
+Node, global: 64 - local: X - shadow: 43 - domain: 88
+Node, global: 65 - local: 21 - shadow: X - domain: 21
+Node, global: 66 - local: 22 - shadow: X - domain: 22
+Node, global: 67 - local: 23 - shadow: X - domain: 23
+Node, global: 68 - local: X - shadow: 44 - domain: 89
+Node, global: 69 - local: X - shadow: 45 - domain: 90
+Node, global: 70 - local: 24 - shadow: X - domain: 24
+Node, global: 71 - local: 25 - shadow: X - domain: 25
+Node, global: 72 - local: 26 - shadow: X - domain: 26
+Node, global: 73 - local: X - shadow: 46 - domain: 91
+Node, global: 74 - local: X - shadow: 47 - domain: 92
+Node, global: 75 - local: X - shadow: 48 - domain: 93
+Node, global: 76 - local: X - shadow: 49 - domain: 94
+Node, global: 77 - local: X - shadow: 50 - domain: 95
+Node, global: 78 - local: X - shadow: 51 - domain: 96
+Node, global: 79 - local: X - shadow: 52 - domain: 97
+Node, global: 80 - local: X - shadow: 53 - domain: 98
+Node, global: 81 - local: X - shadow: 54 - domain: 99
+Node, global: 82 - local: X - shadow: 55 - domain: 100
+Node, global: 83 - local: X - shadow: 56 - domain: 101
+Node, global: 84 - local: X - shadow: 57 - domain: 102
+Node, global: 85 - local: 27 - shadow: X - domain: 27
+Node, global: 86 - local: 28 - shadow: X - domain: 28
+Node, global: 87 - local: 29 - shadow: X - domain: 29
+Node, global: 88 - local: X - shadow: 58 - domain: 103
+Node, global: 89 - local: X - shadow: 59 - domain: 104
+Node, global: 90 - local: 30 - shadow: X - domain: 30
+Node, global: 91 - local: 31 - shadow: X - domain: 31
+Node, global: 92 - local: 32 - shadow: X - domain: 32
+Node, global: 93 - local: X - shadow: 60 - domain: 105
+Node, global: 94 - local: X - shadow: 61 - domain: 106
+Node, global: 95 - local: 33 - shadow: X - domain: 33
+Node, global: 96 - local: 34 - shadow: X - domain: 34
+Node, global: 97 - local: 35 - shadow: X - domain: 35
+Node, global: 98 - local: X - shadow: 62 - domain: 107
+Node, global: 99 - local: X - shadow: 63 - domain: 108
+Node, global: 100 - local: X - shadow: 64 - domain: 109
+Node, global: 101 - local: X - shadow: 65 - domain: 110
+Node, global: 102 - local: X - shadow: 66 - domain: 111
+Node, global: 103 - local: X - shadow: 67 - domain: 112
+Node, global: 104 - local: X - shadow: 68 - domain: 113
+Node, global: 105 - local: X - shadow: 69 - domain: 114
+Node, global: 106 - local: X - shadow: 70 - domain: 115
+Node, global: 107 - local: X - shadow: 71 - domain: 116
+Node, global: 108 - local: X - shadow: 72 - domain: 117
+Node, global: 109 - local: X - shadow: 73 - domain: 118
+Node, global: 110 - local: 36 - shadow: X - domain: 36
+Node, global: 111 - local: 37 - shadow: X - domain: 37
+Node, global: 112 - local: 38 - shadow: X - domain: 38
+Node, global: 113 - local: X - shadow: 74 - domain: 119
+Node, global: 114 - local: X - shadow: 75 - domain: 120
+Node, global: 115 - local: 39 - shadow: X - domain: 39
+Node, global: 116 - local: 40 - shadow: X - domain: 40
+Node, global: 117 - local: 41 - shadow: X - domain: 41
+Node, global: 118 - local: X - shadow: 76 - domain: 121
+Node, global: 119 - local: X - shadow: 77 - domain: 122
+Node, global: 120 - local: 42 - shadow: X - domain: 42
+Node, global: 121 - local: 43 - shadow: X - domain: 43
+Node, global: 122 - local: 44 - shadow: X - domain: 44
+Node, global: 123 - local: X - shadow: 78 - domain: 123
+Node, global: 124 - local: X - shadow: 79 - domain: 124
+
+Node, local: 0 - global: 10
+Node, local: 1 - global: 11
+Node, local: 2 - global: 12
+Node, local: 3 - global: 15
+Node, local: 4 - global: 16
+Node, local: 5 - global: 17
+Node, local: 6 - global: 20
+Node, local: 7 - global: 21
+Node, local: 8 - global: 22
+Node, local: 9 - global: 35
+Node, local: 10 - global: 36
+Node, local: 11 - global: 37
+Node, local: 12 - global: 40
+Node, local: 13 - global: 41
+Node, local: 14 - global: 42
+Node, local: 15 - global: 45
+Node, local: 16 - global: 46
+Node, local: 17 - global: 47
+Node, local: 18 - global: 60
+Node, local: 19 - global: 61
+Node, local: 20 - global: 62
+Node, local: 21 - global: 65
+Node, local: 22 - global: 66
+Node, local: 23 - global: 67
+Node, local: 24 - global: 70
+Node, local: 25 - global: 71
+Node, local: 26 - global: 72
+Node, local: 27 - global: 85
+Node, local: 28 - global: 86
+Node, local: 29 - global: 87
+Node, local: 30 - global: 90
+Node, local: 31 - global: 91
+Node, local: 32 - global: 92
+Node, local: 33 - global: 95
+Node, local: 34 - global: 96
+Node, local: 35 - global: 97
+Node, local: 36 - global: 110
+Node, local: 37 - global: 111
+Node, local: 38 - global: 112
+Node, local: 39 - global: 115
+Node, local: 40 - global: 116
+Node, local: 41 - global: 117
+Node, local: 42 - global: 120
+Node, local: 43 - global: 121
+Node, local: 44 - global: 122
+
+Node, domain: 0 - global: 10
+Node, domain: 1 - global: 11
+Node, domain: 2 - global: 12
+Node, domain: 3 - global: 15
+Node, domain: 4 - global: 16
+Node, domain: 5 - global: 17
+Node, domain: 6 - global: 20
+Node, domain: 7 - global: 21
+Node, domain: 8 - global: 22
+Node, domain: 9 - global: 35
+Node, domain: 10 - global: 36
+Node, domain: 11 - global: 37
+Node, domain: 12 - global: 40
+Node, domain: 13 - global: 41
+Node, domain: 14 - global: 42
+Node, domain: 15 - global: 45
+Node, domain: 16 - global: 46
+Node, domain: 17 - global: 47
+Node, domain: 18 - global: 60
+Node, domain: 19 - global: 61
+Node, domain: 20 - global: 62
+Node, domain: 21 - global: 65
+Node, domain: 22 - global: 66
+Node, domain: 23 - global: 67
+Node, domain: 24 - global: 70
+Node, domain: 25 - global: 71
+Node, domain: 26 - global: 72
+Node, domain: 27 - global: 85
+Node, domain: 28 - global: 86
+Node, domain: 29 - global: 87
+Node, domain: 30 - global: 90
+Node, domain: 31 - global: 91
+Node, domain: 32 - global: 92
+Node, domain: 33 - global: 95
+Node, domain: 34 - global: 96
+Node, domain: 35 - global: 97
+Node, domain: 36 - global: 110
+Node, domain: 37 - global: 111
+Node, domain: 38 - global: 112
+Node, domain: 39 - global: 115
+Node, domain: 40 - global: 116
+Node, domain: 41 - global: 117
+Node, domain: 42 - global: 120
+Node, domain: 43 - global: 121
+Node, domain: 44 - global: 122
+Node, domain: 45 - global: 0
+Node, domain: 46 - global: 1
+Node, domain: 47 - global: 2
+Node, domain: 48 - global: 3
+Node, domain: 49 - global: 4
+Node, domain: 50 - global: 5
+Node, domain: 51 - global: 6
+Node, domain: 52 - global: 7
+Node, domain: 53 - global: 8
+Node, domain: 54 - global: 9
+Node, domain: 55 - global: 13
+Node, domain: 56 - global: 14
+Node, domain: 57 - global: 18
+Node, domain: 58 - global: 19
+Node, domain: 59 - global: 23
+Node, domain: 60 - global: 24
+Node, domain: 61 - global: 25
+Node, domain: 62 - global: 26
+Node, domain: 63 - global: 27
+Node, domain: 64 - global: 28
+Node, domain: 65 - global: 29
+Node, domain: 66 - global: 30
+Node, domain: 67 - global: 31
+Node, domain: 68 - global: 32
+Node, domain: 69 - global: 33
+Node, domain: 70 - global: 34
+Node, domain: 71 - global: 38
+Node, domain: 72 - global: 39
+Node, domain: 73 - global: 43
+Node, domain: 74 - global: 44
+Node, domain: 75 - global: 48
+Node, domain: 76 - global: 49
+Node, domain: 77 - global: 50
+Node, domain: 78 - global: 51
+Node, domain: 79 - global: 52
+Node, domain: 80 - global: 53
+Node, domain: 81 - global: 54
+Node, domain: 82 - global: 55
+Node, domain: 83 - global: 56
+Node, domain: 84 - global: 57
+Node, domain: 85 - global: 58
+Node, domain: 86 - global: 59
+Node, domain: 87 - global: 63
+Node, domain: 88 - global: 64
+Node, domain: 89 - global: 68
+Node, domain: 90 - global: 69
+Node, domain: 91 - global: 73
+Node, domain: 92 - global: 74
+Node, domain: 93 - global: 75
+Node, domain: 94 - global: 76
+Node, domain: 95 - global: 77
+Node, domain: 96 - global: 78
+Node, domain: 97 - global: 79
+Node, domain: 98 - global: 80
+Node, domain: 99 - global: 81
+Node, domain: 100 - global: 82
+Node, domain: 101 - global: 83
+Node, domain: 102 - global: 84
+Node, domain: 103 - global: 88
+Node, domain: 104 - global: 89
+Node, domain: 105 - global: 93
+Node, domain: 106 - global: 94
+Node, domain: 107 - global: 98
+Node, domain: 108 - global: 99
+Node, domain: 109 - global: 100
+Node, domain: 110 - global: 101
+Node, domain: 111 - global: 102
+Node, domain: 112 - global: 103
+Node, domain: 113 - global: 104
+Node, domain: 114 - global: 105
+Node, domain: 115 - global: 106
+Node, domain: 116 - global: 107
+Node, domain: 117 - global: 108
+Node, domain: 118 - global: 109
+Node, domain: 119 - global: 113
+Node, domain: 120 - global: 114
+Node, domain: 121 - global: 118
+Node, domain: 122 - global: 119
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,485 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 3 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060cb0)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 16
+Element, global: 1 - local: X - shadow: 1 - domain: 17
+Element, global: 2 - local: X - shadow: 2 - domain: 18
+Element, global: 3 - local: X - shadow: 3 - domain: 19
+Element, global: 4 - local: X - shadow: 4 - domain: 20
+Element, global: 5 - local: X - shadow: 5 - domain: 21
+Element, global: 6 - local: X - shadow: 6 - domain: 22
+Element, global: 7 - local: X - shadow: 7 - domain: 23
+Element, global: 8 - local: X - shadow: 8 - domain: 24
+Element, global: 9 - local: X - shadow: 9 - domain: 25
+Element, global: 10 - local: 0 - shadow: X - domain: 0
+Element, global: 11 - local: 1 - shadow: X - domain: 1
+Element, global: 12 - local: X - shadow: 10 - domain: 26
+Element, global: 13 - local: X - shadow: 11 - domain: 27
+Element, global: 14 - local: 2 - shadow: X - domain: 2
+Element, global: 15 - local: 3 - shadow: X - domain: 3
+Element, global: 16 - local: X - shadow: 12 - domain: 28
+Element, global: 17 - local: X - shadow: 13 - domain: 29
+Element, global: 18 - local: X - shadow: 14 - domain: 30
+Element, global: 19 - local: X - shadow: 15 - domain: 31
+Element, global: 20 - local: X - shadow: 16 - domain: 32
+Element, global: 21 - local: X - shadow: 17 - domain: 33
+Element, global: 22 - local: X - shadow: 18 - domain: 34
+Element, global: 23 - local: X - shadow: 19 - domain: 35
+Element, global: 24 - local: X - shadow: 20 - domain: 36
+Element, global: 25 - local: X - shadow: 21 - domain: 37
+Element, global: 26 - local: 4 - shadow: X - domain: 4
+Element, global: 27 - local: 5 - shadow: X - domain: 5
+Element, global: 28 - local: X - shadow: 22 - domain: 38
+Element, global: 29 - local: X - shadow: 23 - domain: 39
+Element, global: 30 - local: 6 - shadow: X - domain: 6
+Element, global: 31 - local: 7 - shadow: X - domain: 7
+Element, global: 32 - local: X - shadow: 24 - domain: 40
+Element, global: 33 - local: X - shadow: 25 - domain: 41
+Element, global: 34 - local: X - shadow: 26 - domain: 42
+Element, global: 35 - local: X - shadow: 27 - domain: 43
+Element, global: 36 - local: X - shadow: 28 - domain: 44
+Element, global: 37 - local: X - shadow: 29 - domain: 45
+Element, global: 38 - local: X - shadow: 30 - domain: 46
+Element, global: 39 - local: X - shadow: 31 - domain: 47
+Element, global: 40 - local: X - shadow: 32 - domain: 48
+Element, global: 41 - local: X - shadow: 33 - domain: 49
+Element, global: 42 - local: 8 - shadow: X - domain: 8
+Element, global: 43 - local: 9 - shadow: X - domain: 9
+Element, global: 44 - local: X - shadow: 34 - domain: 50
+Element, global: 45 - local: X - shadow: 35 - domain: 51
+Element, global: 46 - local: 10 - shadow: X - domain: 10
+Element, global: 47 - local: 11 - shadow: X - domain: 11
+Element, global: 48 - local: X - shadow: 36 - domain: 52
+Element, global: 49 - local: X - shadow: 37 - domain: 53
+Element, global: 50 - local: X - shadow: 38 - domain: 54
+Element, global: 51 - local: X - shadow: 39 - domain: 55
+Element, global: 52 - local: X - shadow: 40 - domain: 56
+Element, global: 53 - local: X - shadow: 41 - domain: 57
+Element, global: 54 - local: X - shadow: 42 - domain: 58
+Element, global: 55 - local: X - shadow: 43 - domain: 59
+Element, global: 56 - local: X - shadow: 44 - domain: 60
+Element, global: 57 - local: X - shadow: 45 - domain: 61
+Element, global: 58 - local: 12 - shadow: X - domain: 12
+Element, global: 59 - local: 13 - shadow: X - domain: 13
+Element, global: 60 - local: X - shadow: 46 - domain: 62
+Element, global: 61 - local: X - shadow: 47 - domain: 63
+Element, global: 62 - local: 14 - shadow: X - domain: 14
+Element, global: 63 - local: 15 - shadow: X - domain: 15
+
+Element, local: 0 - global: 10
+Element, local: 1 - global: 11
+Element, local: 2 - global: 14
+Element, local: 3 - global: 15
+Element, local: 4 - global: 26
+Element, local: 5 - global: 27
+Element, local: 6 - global: 30
+Element, local: 7 - global: 31
+Element, local: 8 - global: 42
+Element, local: 9 - global: 43
+Element, local: 10 - global: 46
+Element, local: 11 - global: 47
+Element, local: 12 - global: 58
+Element, local: 13 - global: 59
+Element, local: 14 - global: 62
+Element, local: 15 - global: 63
+
+Element, domain: 0 - global: 10
+Element, domain: 1 - global: 11
+Element, domain: 2 - global: 14
+Element, domain: 3 - global: 15
+Element, domain: 4 - global: 26
+Element, domain: 5 - global: 27
+Element, domain: 6 - global: 30
+Element, domain: 7 - global: 31
+Element, domain: 8 - global: 42
+Element, domain: 9 - global: 43
+Element, domain: 10 - global: 46
+Element, domain: 11 - global: 47
+Element, domain: 12 - global: 58
+Element, domain: 13 - global: 59
+Element, domain: 14 - global: 62
+Element, domain: 15 - global: 63
+Element, domain: 16 - global: 0
+Element, domain: 17 - global: 1
+Element, domain: 18 - global: 2
+Element, domain: 19 - global: 3
+Element, domain: 20 - global: 4
+Element, domain: 21 - global: 5
+Element, domain: 22 - global: 6
+Element, domain: 23 - global: 7
+Element, domain: 24 - global: 8
+Element, domain: 25 - global: 9
+Element, domain: 26 - global: 12
+Element, domain: 27 - global: 13
+Element, domain: 28 - global: 16
+Element, domain: 29 - global: 17
+Element, domain: 30 - global: 18
+Element, domain: 31 - global: 19
+Element, domain: 32 - global: 20
+Element, domain: 33 - global: 21
+Element, domain: 34 - global: 22
+Element, domain: 35 - global: 23
+Element, domain: 36 - global: 24
+Element, domain: 37 - global: 25
+Element, domain: 38 - global: 28
+Element, domain: 39 - global: 29
+Element, domain: 40 - global: 32
+Element, domain: 41 - global: 33
+Element, domain: 42 - global: 34
+Element, domain: 43 - global: 35
+Element, domain: 44 - global: 36
+Element, domain: 45 - global: 37
+Element, domain: 46 - global: 38
+Element, domain: 47 - global: 39
+Element, domain: 48 - global: 40
+Element, domain: 49 - global: 41
+Element, domain: 50 - global: 44
+Element, domain: 51 - global: 45
+Element, domain: 52 - global: 48
+Element, domain: 53 - global: 49
+Element, domain: 54 - global: 50
+Element, domain: 55 - global: 51
+Element, domain: 56 - global: 52
+Element, domain: 57 - global: 53
+Element, domain: 58 - global: 54
+Element, domain: 59 - global: 55
+Element, domain: 60 - global: 56
+Element, domain: 61 - global: 57
+Element, domain: 62 - global: 60
+Element, domain: 63 - global: 61
+
+Node, global: 0 - local: X - shadow: 0 - domain: 45
+Node, global: 1 - local: X - shadow: 1 - domain: 46
+Node, global: 2 - local: X - shadow: 2 - domain: 47
+Node, global: 3 - local: X - shadow: 3 - domain: 48
+Node, global: 4 - local: X - shadow: 4 - domain: 49
+Node, global: 5 - local: X - shadow: 5 - domain: 50
+Node, global: 6 - local: X - shadow: 6 - domain: 51
+Node, global: 7 - local: X - shadow: 7 - domain: 52
+Node, global: 8 - local: X - shadow: 8 - domain: 53
+Node, global: 9 - local: X - shadow: 9 - domain: 54
+Node, global: 10 - local: X - shadow: 10 - domain: 55
+Node, global: 11 - local: X - shadow: 11 - domain: 56
+Node, global: 12 - local: 0 - shadow: X - domain: 0
+Node, global: 13 - local: 1 - shadow: X - domain: 1
+Node, global: 14 - local: 2 - shadow: X - domain: 2
+Node, global: 15 - local: X - shadow: 12 - domain: 57
+Node, global: 16 - local: X - shadow: 13 - domain: 58
+Node, global: 17 - local: 3 - shadow: X - domain: 3
+Node, global: 18 - local: 4 - shadow: X - domain: 4
+Node, global: 19 - local: 5 - shadow: X - domain: 5
+Node, global: 20 - local: X - shadow: 14 - domain: 59
+Node, global: 21 - local: X - shadow: 15 - domain: 60
+Node, global: 22 - local: 6 - shadow: X - domain: 6
+Node, global: 23 - local: 7 - shadow: X - domain: 7
+Node, global: 24 - local: 8 - shadow: X - domain: 8
+Node, global: 25 - local: X - shadow: 16 - domain: 61
+Node, global: 26 - local: X - shadow: 17 - domain: 62
+Node, global: 27 - local: X - shadow: 18 - domain: 63
+Node, global: 28 - local: X - shadow: 19 - domain: 64
+Node, global: 29 - local: X - shadow: 20 - domain: 65
+Node, global: 30 - local: X - shadow: 21 - domain: 66
+Node, global: 31 - local: X - shadow: 22 - domain: 67
+Node, global: 32 - local: X - shadow: 23 - domain: 68
+Node, global: 33 - local: X - shadow: 24 - domain: 69
+Node, global: 34 - local: X - shadow: 25 - domain: 70
+Node, global: 35 - local: X - shadow: 26 - domain: 71
+Node, global: 36 - local: X - shadow: 27 - domain: 72
+Node, global: 37 - local: 9 - shadow: X - domain: 9
+Node, global: 38 - local: 10 - shadow: X - domain: 10
+Node, global: 39 - local: 11 - shadow: X - domain: 11
+Node, global: 40 - local: X - shadow: 28 - domain: 73
+Node, global: 41 - local: X - shadow: 29 - domain: 74
+Node, global: 42 - local: 12 - shadow: X - domain: 12
+Node, global: 43 - local: 13 - shadow: X - domain: 13
+Node, global: 44 - local: 14 - shadow: X - domain: 14
+Node, global: 45 - local: X - shadow: 30 - domain: 75
+Node, global: 46 - local: X - shadow: 31 - domain: 76
+Node, global: 47 - local: 15 - shadow: X - domain: 15
+Node, global: 48 - local: 16 - shadow: X - domain: 16
+Node, global: 49 - local: 17 - shadow: X - domain: 17
+Node, global: 50 - local: X - shadow: 32 - domain: 77
+Node, global: 51 - local: X - shadow: 33 - domain: 78
+Node, global: 52 - local: X - shadow: 34 - domain: 79
+Node, global: 53 - local: X - shadow: 35 - domain: 80
+Node, global: 54 - local: X - shadow: 36 - domain: 81
+Node, global: 55 - local: X - shadow: 37 - domain: 82
+Node, global: 56 - local: X - shadow: 38 - domain: 83
+Node, global: 57 - local: X - shadow: 39 - domain: 84
+Node, global: 58 - local: X - shadow: 40 - domain: 85
+Node, global: 59 - local: X - shadow: 41 - domain: 86
+Node, global: 60 - local: X - shadow: 42 - domain: 87
+Node, global: 61 - local: X - shadow: 43 - domain: 88
+Node, global: 62 - local: 18 - shadow: X - domain: 18
+Node, global: 63 - local: 19 - shadow: X - domain: 19
+Node, global: 64 - local: 20 - shadow: X - domain: 20
+Node, global: 65 - local: X - shadow: 44 - domain: 89
+Node, global: 66 - local: X - shadow: 45 - domain: 90
+Node, global: 67 - local: 21 - shadow: X - domain: 21
+Node, global: 68 - local: 22 - shadow: X - domain: 22
+Node, global: 69 - local: 23 - shadow: X - domain: 23
+Node, global: 70 - local: X - shadow: 46 - domain: 91
+Node, global: 71 - local: X - shadow: 47 - domain: 92
+Node, global: 72 - local: 24 - shadow: X - domain: 24
+Node, global: 73 - local: 25 - shadow: X - domain: 25
+Node, global: 74 - local: 26 - shadow: X - domain: 26
+Node, global: 75 - local: X - shadow: 48 - domain: 93
+Node, global: 76 - local: X - shadow: 49 - domain: 94
+Node, global: 77 - local: X - shadow: 50 - domain: 95
+Node, global: 78 - local: X - shadow: 51 - domain: 96
+Node, global: 79 - local: X - shadow: 52 - domain: 97
+Node, global: 80 - local: X - shadow: 53 - domain: 98
+Node, global: 81 - local: X - shadow: 54 - domain: 99
+Node, global: 82 - local: X - shadow: 55 - domain: 100
+Node, global: 83 - local: X - shadow: 56 - domain: 101
+Node, global: 84 - local: X - shadow: 57 - domain: 102
+Node, global: 85 - local: X - shadow: 58 - domain: 103
+Node, global: 86 - local: X - shadow: 59 - domain: 104
+Node, global: 87 - local: 27 - shadow: X - domain: 27
+Node, global: 88 - local: 28 - shadow: X - domain: 28
+Node, global: 89 - local: 29 - shadow: X - domain: 29
+Node, global: 90 - local: X - shadow: 60 - domain: 105
+Node, global: 91 - local: X - shadow: 61 - domain: 106
+Node, global: 92 - local: 30 - shadow: X - domain: 30
+Node, global: 93 - local: 31 - shadow: X - domain: 31
+Node, global: 94 - local: 32 - shadow: X - domain: 32
+Node, global: 95 - local: X - shadow: 62 - domain: 107
+Node, global: 96 - local: X - shadow: 63 - domain: 108
+Node, global: 97 - local: 33 - shadow: X - domain: 33
+Node, global: 98 - local: 34 - shadow: X - domain: 34
+Node, global: 99 - local: 35 - shadow: X - domain: 35
+Node, global: 100 - local: X - shadow: 64 - domain: 109
+Node, global: 101 - local: X - shadow: 65 - domain: 110
+Node, global: 102 - local: X - shadow: 66 - domain: 111
+Node, global: 103 - local: X - shadow: 67 - domain: 112
+Node, global: 104 - local: X - shadow: 68 - domain: 113
+Node, global: 105 - local: X - shadow: 69 - domain: 114
+Node, global: 106 - local: X - shadow: 70 - domain: 115
+Node, global: 107 - local: X - shadow: 71 - domain: 116
+Node, global: 108 - local: X - shadow: 72 - domain: 117
+Node, global: 109 - local: X - shadow: 73 - domain: 118
+Node, global: 110 - local: X - shadow: 74 - domain: 119
+Node, global: 111 - local: X - shadow: 75 - domain: 120
+Node, global: 112 - local: 36 - shadow: X - domain: 36
+Node, global: 113 - local: 37 - shadow: X - domain: 37
+Node, global: 114 - local: 38 - shadow: X - domain: 38
+Node, global: 115 - local: X - shadow: 76 - domain: 121
+Node, global: 116 - local: X - shadow: 77 - domain: 122
+Node, global: 117 - local: 39 - shadow: X - domain: 39
+Node, global: 118 - local: 40 - shadow: X - domain: 40
+Node, global: 119 - local: 41 - shadow: X - domain: 41
+Node, global: 120 - local: X - shadow: 78 - domain: 123
+Node, global: 121 - local: X - shadow: 79 - domain: 124
+Node, global: 122 - local: 42 - shadow: X - domain: 42
+Node, global: 123 - local: 43 - shadow: X - domain: 43
+Node, global: 124 - local: 44 - shadow: X - domain: 44
+
+Node, local: 0 - global: 12
+Node, local: 1 - global: 13
+Node, local: 2 - global: 14
+Node, local: 3 - global: 17
+Node, local: 4 - global: 18
+Node, local: 5 - global: 19
+Node, local: 6 - global: 22
+Node, local: 7 - global: 23
+Node, local: 8 - global: 24
+Node, local: 9 - global: 37
+Node, local: 10 - global: 38
+Node, local: 11 - global: 39
+Node, local: 12 - global: 42
+Node, local: 13 - global: 43
+Node, local: 14 - global: 44
+Node, local: 15 - global: 47
+Node, local: 16 - global: 48
+Node, local: 17 - global: 49
+Node, local: 18 - global: 62
+Node, local: 19 - global: 63
+Node, local: 20 - global: 64
+Node, local: 21 - global: 67
+Node, local: 22 - global: 68
+Node, local: 23 - global: 69
+Node, local: 24 - global: 72
+Node, local: 25 - global: 73
+Node, local: 26 - global: 74
+Node, local: 27 - global: 87
+Node, local: 28 - global: 88
+Node, local: 29 - global: 89
+Node, local: 30 - global: 92
+Node, local: 31 - global: 93
+Node, local: 32 - global: 94
+Node, local: 33 - global: 97
+Node, local: 34 - global: 98
+Node, local: 35 - global: 99
+Node, local: 36 - global: 112
+Node, local: 37 - global: 113
+Node, local: 38 - global: 114
+Node, local: 39 - global: 117
+Node, local: 40 - global: 118
+Node, local: 41 - global: 119
+Node, local: 42 - global: 122
+Node, local: 43 - global: 123
+Node, local: 44 - global: 124
+
+Node, domain: 0 - global: 12
+Node, domain: 1 - global: 13
+Node, domain: 2 - global: 14
+Node, domain: 3 - global: 17
+Node, domain: 4 - global: 18
+Node, domain: 5 - global: 19
+Node, domain: 6 - global: 22
+Node, domain: 7 - global: 23
+Node, domain: 8 - global: 24
+Node, domain: 9 - global: 37
+Node, domain: 10 - global: 38
+Node, domain: 11 - global: 39
+Node, domain: 12 - global: 42
+Node, domain: 13 - global: 43
+Node, domain: 14 - global: 44
+Node, domain: 15 - global: 47
+Node, domain: 16 - global: 48
+Node, domain: 17 - global: 49
+Node, domain: 18 - global: 62
+Node, domain: 19 - global: 63
+Node, domain: 20 - global: 64
+Node, domain: 21 - global: 67
+Node, domain: 22 - global: 68
+Node, domain: 23 - global: 69
+Node, domain: 24 - global: 72
+Node, domain: 25 - global: 73
+Node, domain: 26 - global: 74
+Node, domain: 27 - global: 87
+Node, domain: 28 - global: 88
+Node, domain: 29 - global: 89
+Node, domain: 30 - global: 92
+Node, domain: 31 - global: 93
+Node, domain: 32 - global: 94
+Node, domain: 33 - global: 97
+Node, domain: 34 - global: 98
+Node, domain: 35 - global: 99
+Node, domain: 36 - global: 112
+Node, domain: 37 - global: 113
+Node, domain: 38 - global: 114
+Node, domain: 39 - global: 117
+Node, domain: 40 - global: 118
+Node, domain: 41 - global: 119
+Node, domain: 42 - global: 122
+Node, domain: 43 - global: 123
+Node, domain: 44 - global: 124
+Node, domain: 45 - global: 0
+Node, domain: 46 - global: 1
+Node, domain: 47 - global: 2
+Node, domain: 48 - global: 3
+Node, domain: 49 - global: 4
+Node, domain: 50 - global: 5
+Node, domain: 51 - global: 6
+Node, domain: 52 - global: 7
+Node, domain: 53 - global: 8
+Node, domain: 54 - global: 9
+Node, domain: 55 - global: 10
+Node, domain: 56 - global: 11
+Node, domain: 57 - global: 15
+Node, domain: 58 - global: 16
+Node, domain: 59 - global: 20
+Node, domain: 60 - global: 21
+Node, domain: 61 - global: 25
+Node, domain: 62 - global: 26
+Node, domain: 63 - global: 27
+Node, domain: 64 - global: 28
+Node, domain: 65 - global: 29
+Node, domain: 66 - global: 30
+Node, domain: 67 - global: 31
+Node, domain: 68 - global: 32
+Node, domain: 69 - global: 33
+Node, domain: 70 - global: 34
+Node, domain: 71 - global: 35
+Node, domain: 72 - global: 36
+Node, domain: 73 - global: 40
+Node, domain: 74 - global: 41
+Node, domain: 75 - global: 45
+Node, domain: 76 - global: 46
+Node, domain: 77 - global: 50
+Node, domain: 78 - global: 51
+Node, domain: 79 - global: 52
+Node, domain: 80 - global: 53
+Node, domain: 81 - global: 54
+Node, domain: 82 - global: 55
+Node, domain: 83 - global: 56
+Node, domain: 84 - global: 57
+Node, domain: 85 - global: 58
+Node, domain: 86 - global: 59
+Node, domain: 87 - global: 60
+Node, domain: 88 - global: 61
+Node, domain: 89 - global: 65
+Node, domain: 90 - global: 66
+Node, domain: 91 - global: 70
+Node, domain: 92 - global: 71
+Node, domain: 93 - global: 75
+Node, domain: 94 - global: 76
+Node, domain: 95 - global: 77
+Node, domain: 96 - global: 78
+Node, domain: 97 - global: 79
+Node, domain: 98 - global: 80
+Node, domain: 99 - global: 81
+Node, domain: 100 - global: 82
+Node, domain: 101 - global: 83
+Node, domain: 102 - global: 84
+Node, domain: 103 - global: 85
+Node, domain: 104 - global: 86
+Node, domain: 105 - global: 90
+Node, domain: 106 - global: 91
+Node, domain: 107 - global: 95
+Node, domain: 108 - global: 96
+Node, domain: 109 - global: 100
+Node, domain: 110 - global: 101
+Node, domain: 111 - global: 102
+Node, domain: 112 - global: 103
+Node, domain: 113 - global: 104
+Node, domain: 114 - global: 105
+Node, domain: 115 - global: 106
+Node, domain: 116 - global: 107
+Node, domain: 117 - global: 108
+Node, domain: 118 - global: 109
+Node, domain: 119 - global: 110
+Node, domain: 120 - global: 111
+Node, domain: 121 - global: 115
+Node, domain: 122 - global: 116
+Node, domain: 123 - global: 120
+Node, domain: 124 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,412 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8061ca8)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 3, 3, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 16
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 1 - domain: 17
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: X - shadow: 2 - domain: 18
+Element, global: 9 - local: X - shadow: 3 - domain: 19
+Element, global: 10 - local: X - shadow: 4 - domain: 20
+Element, global: 11 - local: X - shadow: X - domain: X
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: X - domain: X
+Element, global: 14 - local: X - shadow: X - domain: X
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: 4 - shadow: X - domain: 4
+Element, global: 17 - local: 5 - shadow: X - domain: 5
+Element, global: 18 - local: X - shadow: 5 - domain: 21
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: 6 - shadow: X - domain: 6
+Element, global: 21 - local: 7 - shadow: X - domain: 7
+Element, global: 22 - local: X - shadow: 6 - domain: 22
+Element, global: 23 - local: X - shadow: X - domain: X
+Element, global: 24 - local: X - shadow: 7 - domain: 23
+Element, global: 25 - local: X - shadow: 8 - domain: 24
+Element, global: 26 - local: X - shadow: 9 - domain: 25
+Element, global: 27 - local: X - shadow: X - domain: X
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: X - domain: X
+Element, global: 30 - local: X - shadow: X - domain: X
+Element, global: 31 - local: X - shadow: X - domain: X
+Element, global: 32 - local: 8 - shadow: X - domain: 8
+Element, global: 33 - local: 9 - shadow: X - domain: 9
+Element, global: 34 - local: X - shadow: 10 - domain: 26
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: 10 - shadow: X - domain: 10
+Element, global: 37 - local: 11 - shadow: X - domain: 11
+Element, global: 38 - local: X - shadow: 11 - domain: 27
+Element, global: 39 - local: X - shadow: X - domain: X
+Element, global: 40 - local: X - shadow: 12 - domain: 28
+Element, global: 41 - local: X - shadow: 13 - domain: 29
+Element, global: 42 - local: X - shadow: 14 - domain: 30
+Element, global: 43 - local: X - shadow: X - domain: X
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: X - domain: X
+Element, global: 46 - local: X - shadow: X - domain: X
+Element, global: 47 - local: X - shadow: X - domain: X
+Element, global: 48 - local: 12 - shadow: X - domain: 12
+Element, global: 49 - local: 13 - shadow: X - domain: 13
+Element, global: 50 - local: X - shadow: 15 - domain: 31
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: 14 - shadow: X - domain: 14
+Element, global: 53 - local: 15 - shadow: X - domain: 15
+Element, global: 54 - local: X - shadow: 16 - domain: 32
+Element, global: 55 - local: X - shadow: X - domain: X
+Element, global: 56 - local: X - shadow: 17 - domain: 33
+Element, global: 57 - local: X - shadow: 18 - domain: 34
+Element, global: 58 - local: X - shadow: 19 - domain: 35
+Element, global: 59 - local: X - shadow: X - domain: X
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: X - domain: X
+Element, global: 62 - local: X - shadow: X - domain: X
+Element, global: 63 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 16
+Element, local: 5 - global: 17
+Element, local: 6 - global: 20
+Element, local: 7 - global: 21
+Element, local: 8 - global: 32
+Element, local: 9 - global: 33
+Element, local: 10 - global: 36
+Element, local: 11 - global: 37
+Element, local: 12 - global: 48
+Element, local: 13 - global: 49
+Element, local: 14 - global: 52
+Element, local: 15 - global: 53
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 16
+Element, domain: 5 - global: 17
+Element, domain: 6 - global: 20
+Element, domain: 7 - global: 21
+Element, domain: 8 - global: 32
+Element, domain: 9 - global: 33
+Element, domain: 10 - global: 36
+Element, domain: 11 - global: 37
+Element, domain: 12 - global: 48
+Element, domain: 13 - global: 49
+Element, domain: 14 - global: 52
+Element, domain: 15 - global: 53
+Element, domain: 16 - global: 2
+Element, domain: 17 - global: 6
+Element, domain: 18 - global: 8
+Element, domain: 19 - global: 9
+Element, domain: 20 - global: 10
+Element, domain: 21 - global: 18
+Element, domain: 22 - global: 22
+Element, domain: 23 - global: 24
+Element, domain: 24 - global: 25
+Element, domain: 25 - global: 26
+Element, domain: 26 - global: 34
+Element, domain: 27 - global: 38
+Element, domain: 28 - global: 40
+Element, domain: 29 - global: 41
+Element, domain: 30 - global: 42
+Element, domain: 31 - global: 50
+Element, domain: 32 - global: 54
+Element, domain: 33 - global: 56
+Element, domain: 34 - global: 57
+Element, domain: 35 - global: 58
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 45
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 1 - domain: 46
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 2 - domain: 47
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: 3 - domain: 48
+Node, global: 16 - local: X - shadow: 4 - domain: 49
+Node, global: 17 - local: X - shadow: 5 - domain: 50
+Node, global: 18 - local: X - shadow: 6 - domain: 51
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: 9 - shadow: X - domain: 9
+Node, global: 26 - local: 10 - shadow: X - domain: 10
+Node, global: 27 - local: 11 - shadow: X - domain: 11
+Node, global: 28 - local: X - shadow: 7 - domain: 52
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: 12 - shadow: X - domain: 12
+Node, global: 31 - local: 13 - shadow: X - domain: 13
+Node, global: 32 - local: 14 - shadow: X - domain: 14
+Node, global: 33 - local: X - shadow: 8 - domain: 53
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: 15 - shadow: X - domain: 15
+Node, global: 36 - local: 16 - shadow: X - domain: 16
+Node, global: 37 - local: 17 - shadow: X - domain: 17
+Node, global: 38 - local: X - shadow: 9 - domain: 54
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: X - shadow: 10 - domain: 55
+Node, global: 41 - local: X - shadow: 11 - domain: 56
+Node, global: 42 - local: X - shadow: 12 - domain: 57
+Node, global: 43 - local: X - shadow: 13 - domain: 58
+Node, global: 44 - local: X - shadow: X - domain: X
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: X - domain: X
+Node, global: 47 - local: X - shadow: X - domain: X
+Node, global: 48 - local: X - shadow: X - domain: X
+Node, global: 49 - local: X - shadow: X - domain: X
+Node, global: 50 - local: 18 - shadow: X - domain: 18
+Node, global: 51 - local: 19 - shadow: X - domain: 19
+Node, global: 52 - local: 20 - shadow: X - domain: 20
+Node, global: 53 - local: X - shadow: 14 - domain: 59
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: 21 - shadow: X - domain: 21
+Node, global: 56 - local: 22 - shadow: X - domain: 22
+Node, global: 57 - local: 23 - shadow: X - domain: 23
+Node, global: 58 - local: X - shadow: 15 - domain: 60
+Node, global: 59 - local: X - shadow: X - domain: X
+Node, global: 60 - local: 24 - shadow: X - domain: 24
+Node, global: 61 - local: 25 - shadow: X - domain: 25
+Node, global: 62 - local: 26 - shadow: X - domain: 26
+Node, global: 63 - local: X - shadow: 16 - domain: 61
+Node, global: 64 - local: X - shadow: X - domain: X
+Node, global: 65 - local: X - shadow: 17 - domain: 62
+Node, global: 66 - local: X - shadow: 18 - domain: 63
+Node, global: 67 - local: X - shadow: 19 - domain: 64
+Node, global: 68 - local: X - shadow: 20 - domain: 65
+Node, global: 69 - local: X - shadow: X - domain: X
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: X - domain: X
+Node, global: 72 - local: X - shadow: X - domain: X
+Node, global: 73 - local: X - shadow: X - domain: X
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: 27 - shadow: X - domain: 27
+Node, global: 76 - local: 28 - shadow: X - domain: 28
+Node, global: 77 - local: 29 - shadow: X - domain: 29
+Node, global: 78 - local: X - shadow: 21 - domain: 66
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: 30 - shadow: X - domain: 30
+Node, global: 81 - local: 31 - shadow: X - domain: 31
+Node, global: 82 - local: 32 - shadow: X - domain: 32
+Node, global: 83 - local: X - shadow: 22 - domain: 67
+Node, global: 84 - local: X - shadow: X - domain: X
+Node, global: 85 - local: 33 - shadow: X - domain: 33
+Node, global: 86 - local: 34 - shadow: X - domain: 34
+Node, global: 87 - local: 35 - shadow: X - domain: 35
+Node, global: 88 - local: X - shadow: 23 - domain: 68
+Node, global: 89 - local: X - shadow: X - domain: X
+Node, global: 90 - local: X - shadow: 24 - domain: 69
+Node, global: 91 - local: X - shadow: 25 - domain: 70
+Node, global: 92 - local: X - shadow: 26 - domain: 71
+Node, global: 93 - local: X - shadow: 27 - domain: 72
+Node, global: 94 - local: X - shadow: X - domain: X
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: X - domain: X
+Node, global: 97 - local: X - shadow: X - domain: X
+Node, global: 98 - local: X - shadow: X - domain: X
+Node, global: 99 - local: X - shadow: X - domain: X
+Node, global: 100 - local: 36 - shadow: X - domain: 36
+Node, global: 101 - local: 37 - shadow: X - domain: 37
+Node, global: 102 - local: 38 - shadow: X - domain: 38
+Node, global: 103 - local: X - shadow: 28 - domain: 73
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: 39 - shadow: X - domain: 39
+Node, global: 106 - local: 40 - shadow: X - domain: 40
+Node, global: 107 - local: 41 - shadow: X - domain: 41
+Node, global: 108 - local: X - shadow: 29 - domain: 74
+Node, global: 109 - local: X - shadow: X - domain: X
+Node, global: 110 - local: 42 - shadow: X - domain: 42
+Node, global: 111 - local: 43 - shadow: X - domain: 43
+Node, global: 112 - local: 44 - shadow: X - domain: 44
+Node, global: 113 - local: X - shadow: 30 - domain: 75
+Node, global: 114 - local: X - shadow: X - domain: X
+Node, global: 115 - local: X - shadow: 31 - domain: 76
+Node, global: 116 - local: X - shadow: 32 - domain: 77
+Node, global: 117 - local: X - shadow: 33 - domain: 78
+Node, global: 118 - local: X - shadow: 34 - domain: 79
+Node, global: 119 - local: X - shadow: X - domain: X
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: X - domain: X
+Node, global: 122 - local: X - shadow: X - domain: X
+Node, global: 123 - local: X - shadow: X - domain: X
+Node, global: 124 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 25
+Node, local: 10 - global: 26
+Node, local: 11 - global: 27
+Node, local: 12 - global: 30
+Node, local: 13 - global: 31
+Node, local: 14 - global: 32
+Node, local: 15 - global: 35
+Node, local: 16 - global: 36
+Node, local: 17 - global: 37
+Node, local: 18 - global: 50
+Node, local: 19 - global: 51
+Node, local: 20 - global: 52
+Node, local: 21 - global: 55
+Node, local: 22 - global: 56
+Node, local: 23 - global: 57
+Node, local: 24 - global: 60
+Node, local: 25 - global: 61
+Node, local: 26 - global: 62
+Node, local: 27 - global: 75
+Node, local: 28 - global: 76
+Node, local: 29 - global: 77
+Node, local: 30 - global: 80
+Node, local: 31 - global: 81
+Node, local: 32 - global: 82
+Node, local: 33 - global: 85
+Node, local: 34 - global: 86
+Node, local: 35 - global: 87
+Node, local: 36 - global: 100
+Node, local: 37 - global: 101
+Node, local: 38 - global: 102
+Node, local: 39 - global: 105
+Node, local: 40 - global: 106
+Node, local: 41 - global: 107
+Node, local: 42 - global: 110
+Node, local: 43 - global: 111
+Node, local: 44 - global: 112
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 25
+Node, domain: 10 - global: 26
+Node, domain: 11 - global: 27
+Node, domain: 12 - global: 30
+Node, domain: 13 - global: 31
+Node, domain: 14 - global: 32
+Node, domain: 15 - global: 35
+Node, domain: 16 - global: 36
+Node, domain: 17 - global: 37
+Node, domain: 18 - global: 50
+Node, domain: 19 - global: 51
+Node, domain: 20 - global: 52
+Node, domain: 21 - global: 55
+Node, domain: 22 - global: 56
+Node, domain: 23 - global: 57
+Node, domain: 24 - global: 60
+Node, domain: 25 - global: 61
+Node, domain: 26 - global: 62
+Node, domain: 27 - global: 75
+Node, domain: 28 - global: 76
+Node, domain: 29 - global: 77
+Node, domain: 30 - global: 80
+Node, domain: 31 - global: 81
+Node, domain: 32 - global: 82
+Node, domain: 33 - global: 85
+Node, domain: 34 - global: 86
+Node, domain: 35 - global: 87
+Node, domain: 36 - global: 100
+Node, domain: 37 - global: 101
+Node, domain: 38 - global: 102
+Node, domain: 39 - global: 105
+Node, domain: 40 - global: 106
+Node, domain: 41 - global: 107
+Node, domain: 42 - global: 110
+Node, domain: 43 - global: 111
+Node, domain: 44 - global: 112
+Node, domain: 45 - global: 3
+Node, domain: 46 - global: 8
+Node, domain: 47 - global: 13
+Node, domain: 48 - global: 15
+Node, domain: 49 - global: 16
+Node, domain: 50 - global: 17
+Node, domain: 51 - global: 18
+Node, domain: 52 - global: 28
+Node, domain: 53 - global: 33
+Node, domain: 54 - global: 38
+Node, domain: 55 - global: 40
+Node, domain: 56 - global: 41
+Node, domain: 57 - global: 42
+Node, domain: 58 - global: 43
+Node, domain: 59 - global: 53
+Node, domain: 60 - global: 58
+Node, domain: 61 - global: 63
+Node, domain: 62 - global: 65
+Node, domain: 63 - global: 66
+Node, domain: 64 - global: 67
+Node, domain: 65 - global: 68
+Node, domain: 66 - global: 78
+Node, domain: 67 - global: 83
+Node, domain: 68 - global: 88
+Node, domain: 69 - global: 90
+Node, domain: 70 - global: 91
+Node, domain: 71 - global: 92
+Node, domain: 72 - global: 93
+Node, domain: 73 - global: 103
+Node, domain: 74 - global: 108
+Node, domain: 75 - global: 113
+Node, domain: 76 - global: 115
+Node, domain: 77 - global: 116
+Node, domain: 78 - global: 117
+Node, domain: 79 - global: 118
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,412 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060c58)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 3, 3, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: 0 - domain: 16
+Element, global: 2 - local: 0 - shadow: X - domain: 0
+Element, global: 3 - local: 1 - shadow: X - domain: 1
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: 1 - domain: 17
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: 2 - domain: 18
+Element, global: 10 - local: X - shadow: 3 - domain: 19
+Element, global: 11 - local: X - shadow: 4 - domain: 20
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: X - domain: X
+Element, global: 14 - local: X - shadow: X - domain: X
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: X - shadow: X - domain: X
+Element, global: 17 - local: X - shadow: 5 - domain: 21
+Element, global: 18 - local: 4 - shadow: X - domain: 4
+Element, global: 19 - local: 5 - shadow: X - domain: 5
+Element, global: 20 - local: X - shadow: X - domain: X
+Element, global: 21 - local: X - shadow: 6 - domain: 22
+Element, global: 22 - local: 6 - shadow: X - domain: 6
+Element, global: 23 - local: 7 - shadow: X - domain: 7
+Element, global: 24 - local: X - shadow: X - domain: X
+Element, global: 25 - local: X - shadow: 7 - domain: 23
+Element, global: 26 - local: X - shadow: 8 - domain: 24
+Element, global: 27 - local: X - shadow: 9 - domain: 25
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: X - domain: X
+Element, global: 30 - local: X - shadow: X - domain: X
+Element, global: 31 - local: X - shadow: X - domain: X
+Element, global: 32 - local: X - shadow: X - domain: X
+Element, global: 33 - local: X - shadow: 10 - domain: 26
+Element, global: 34 - local: 8 - shadow: X - domain: 8
+Element, global: 35 - local: 9 - shadow: X - domain: 9
+Element, global: 36 - local: X - shadow: X - domain: X
+Element, global: 37 - local: X - shadow: 11 - domain: 27
+Element, global: 38 - local: 10 - shadow: X - domain: 10
+Element, global: 39 - local: 11 - shadow: X - domain: 11
+Element, global: 40 - local: X - shadow: X - domain: X
+Element, global: 41 - local: X - shadow: 12 - domain: 28
+Element, global: 42 - local: X - shadow: 13 - domain: 29
+Element, global: 43 - local: X - shadow: 14 - domain: 30
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: X - domain: X
+Element, global: 46 - local: X - shadow: X - domain: X
+Element, global: 47 - local: X - shadow: X - domain: X
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: 15 - domain: 31
+Element, global: 50 - local: 12 - shadow: X - domain: 12
+Element, global: 51 - local: 13 - shadow: X - domain: 13
+Element, global: 52 - local: X - shadow: X - domain: X
+Element, global: 53 - local: X - shadow: 16 - domain: 32
+Element, global: 54 - local: 14 - shadow: X - domain: 14
+Element, global: 55 - local: 15 - shadow: X - domain: 15
+Element, global: 56 - local: X - shadow: X - domain: X
+Element, global: 57 - local: X - shadow: 17 - domain: 33
+Element, global: 58 - local: X - shadow: 18 - domain: 34
+Element, global: 59 - local: X - shadow: 19 - domain: 35
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: X - domain: X
+Element, global: 62 - local: X - shadow: X - domain: X
+Element, global: 63 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 2
+Element, local: 1 - global: 3
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 18
+Element, local: 5 - global: 19
+Element, local: 6 - global: 22
+Element, local: 7 - global: 23
+Element, local: 8 - global: 34
+Element, local: 9 - global: 35
+Element, local: 10 - global: 38
+Element, local: 11 - global: 39
+Element, local: 12 - global: 50
+Element, local: 13 - global: 51
+Element, local: 14 - global: 54
+Element, local: 15 - global: 55
+
+Element, domain: 0 - global: 2
+Element, domain: 1 - global: 3
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 18
+Element, domain: 5 - global: 19
+Element, domain: 6 - global: 22
+Element, domain: 7 - global: 23
+Element, domain: 8 - global: 34
+Element, domain: 9 - global: 35
+Element, domain: 10 - global: 38
+Element, domain: 11 - global: 39
+Element, domain: 12 - global: 50
+Element, domain: 13 - global: 51
+Element, domain: 14 - global: 54
+Element, domain: 15 - global: 55
+Element, domain: 16 - global: 1
+Element, domain: 17 - global: 5
+Element, domain: 18 - global: 9
+Element, domain: 19 - global: 10
+Element, domain: 20 - global: 11
+Element, domain: 21 - global: 17
+Element, domain: 22 - global: 21
+Element, domain: 23 - global: 25
+Element, domain: 24 - global: 26
+Element, domain: 25 - global: 27
+Element, domain: 26 - global: 33
+Element, domain: 27 - global: 37
+Element, domain: 28 - global: 41
+Element, domain: 29 - global: 42
+Element, domain: 30 - global: 43
+Element, domain: 31 - global: 49
+Element, domain: 32 - global: 53
+Element, domain: 33 - global: 57
+Element, domain: 34 - global: 58
+Element, domain: 35 - global: 59
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: 0 - domain: 45
+Node, global: 2 - local: 0 - shadow: X - domain: 0
+Node, global: 3 - local: 1 - shadow: X - domain: 1
+Node, global: 4 - local: 2 - shadow: X - domain: 2
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: 1 - domain: 46
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: 2 - domain: 47
+Node, global: 12 - local: 6 - shadow: X - domain: 6
+Node, global: 13 - local: 7 - shadow: X - domain: 7
+Node, global: 14 - local: 8 - shadow: X - domain: 8
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: 3 - domain: 48
+Node, global: 17 - local: X - shadow: 4 - domain: 49
+Node, global: 18 - local: X - shadow: 5 - domain: 50
+Node, global: 19 - local: X - shadow: 6 - domain: 51
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: 7 - domain: 52
+Node, global: 27 - local: 9 - shadow: X - domain: 9
+Node, global: 28 - local: 10 - shadow: X - domain: 10
+Node, global: 29 - local: 11 - shadow: X - domain: 11
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: 8 - domain: 53
+Node, global: 32 - local: 12 - shadow: X - domain: 12
+Node, global: 33 - local: 13 - shadow: X - domain: 13
+Node, global: 34 - local: 14 - shadow: X - domain: 14
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: 9 - domain: 54
+Node, global: 37 - local: 15 - shadow: X - domain: 15
+Node, global: 38 - local: 16 - shadow: X - domain: 16
+Node, global: 39 - local: 17 - shadow: X - domain: 17
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: 10 - domain: 55
+Node, global: 42 - local: X - shadow: 11 - domain: 56
+Node, global: 43 - local: X - shadow: 12 - domain: 57
+Node, global: 44 - local: X - shadow: 13 - domain: 58
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: X - domain: X
+Node, global: 47 - local: X - shadow: X - domain: X
+Node, global: 48 - local: X - shadow: X - domain: X
+Node, global: 49 - local: X - shadow: X - domain: X
+Node, global: 50 - local: X - shadow: X - domain: X
+Node, global: 51 - local: X - shadow: 14 - domain: 59
+Node, global: 52 - local: 18 - shadow: X - domain: 18
+Node, global: 53 - local: 19 - shadow: X - domain: 19
+Node, global: 54 - local: 20 - shadow: X - domain: 20
+Node, global: 55 - local: X - shadow: X - domain: X
+Node, global: 56 - local: X - shadow: 15 - domain: 60
+Node, global: 57 - local: 21 - shadow: X - domain: 21
+Node, global: 58 - local: 22 - shadow: X - domain: 22
+Node, global: 59 - local: 23 - shadow: X - domain: 23
+Node, global: 60 - local: X - shadow: X - domain: X
+Node, global: 61 - local: X - shadow: 16 - domain: 61
+Node, global: 62 - local: 24 - shadow: X - domain: 24
+Node, global: 63 - local: 25 - shadow: X - domain: 25
+Node, global: 64 - local: 26 - shadow: X - domain: 26
+Node, global: 65 - local: X - shadow: X - domain: X
+Node, global: 66 - local: X - shadow: 17 - domain: 62
+Node, global: 67 - local: X - shadow: 18 - domain: 63
+Node, global: 68 - local: X - shadow: 19 - domain: 64
+Node, global: 69 - local: X - shadow: 20 - domain: 65
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: X - domain: X
+Node, global: 72 - local: X - shadow: X - domain: X
+Node, global: 73 - local: X - shadow: X - domain: X
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: X - shadow: X - domain: X
+Node, global: 76 - local: X - shadow: 21 - domain: 66
+Node, global: 77 - local: 27 - shadow: X - domain: 27
+Node, global: 78 - local: 28 - shadow: X - domain: 28
+Node, global: 79 - local: 29 - shadow: X - domain: 29
+Node, global: 80 - local: X - shadow: X - domain: X
+Node, global: 81 - local: X - shadow: 22 - domain: 67
+Node, global: 82 - local: 30 - shadow: X - domain: 30
+Node, global: 83 - local: 31 - shadow: X - domain: 31
+Node, global: 84 - local: 32 - shadow: X - domain: 32
+Node, global: 85 - local: X - shadow: X - domain: X
+Node, global: 86 - local: X - shadow: 23 - domain: 68
+Node, global: 87 - local: 33 - shadow: X - domain: 33
+Node, global: 88 - local: 34 - shadow: X - domain: 34
+Node, global: 89 - local: 35 - shadow: X - domain: 35
+Node, global: 90 - local: X - shadow: X - domain: X
+Node, global: 91 - local: X - shadow: 24 - domain: 69
+Node, global: 92 - local: X - shadow: 25 - domain: 70
+Node, global: 93 - local: X - shadow: 26 - domain: 71
+Node, global: 94 - local: X - shadow: 27 - domain: 72
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: X - domain: X
+Node, global: 97 - local: X - shadow: X - domain: X
+Node, global: 98 - local: X - shadow: X - domain: X
+Node, global: 99 - local: X - shadow: X - domain: X
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: 28 - domain: 73
+Node, global: 102 - local: 36 - shadow: X - domain: 36
+Node, global: 103 - local: 37 - shadow: X - domain: 37
+Node, global: 104 - local: 38 - shadow: X - domain: 38
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: 29 - domain: 74
+Node, global: 107 - local: 39 - shadow: X - domain: 39
+Node, global: 108 - local: 40 - shadow: X - domain: 40
+Node, global: 109 - local: 41 - shadow: X - domain: 41
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: 30 - domain: 75
+Node, global: 112 - local: 42 - shadow: X - domain: 42
+Node, global: 113 - local: 43 - shadow: X - domain: 43
+Node, global: 114 - local: 44 - shadow: X - domain: 44
+Node, global: 115 - local: X - shadow: X - domain: X
+Node, global: 116 - local: X - shadow: 31 - domain: 76
+Node, global: 117 - local: X - shadow: 32 - domain: 77
+Node, global: 118 - local: X - shadow: 33 - domain: 78
+Node, global: 119 - local: X - shadow: 34 - domain: 79
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: X - domain: X
+Node, global: 122 - local: X - shadow: X - domain: X
+Node, global: 123 - local: X - shadow: X - domain: X
+Node, global: 124 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 2
+Node, local: 1 - global: 3
+Node, local: 2 - global: 4
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 9
+Node, local: 6 - global: 12
+Node, local: 7 - global: 13
+Node, local: 8 - global: 14
+Node, local: 9 - global: 27
+Node, local: 10 - global: 28
+Node, local: 11 - global: 29
+Node, local: 12 - global: 32
+Node, local: 13 - global: 33
+Node, local: 14 - global: 34
+Node, local: 15 - global: 37
+Node, local: 16 - global: 38
+Node, local: 17 - global: 39
+Node, local: 18 - global: 52
+Node, local: 19 - global: 53
+Node, local: 20 - global: 54
+Node, local: 21 - global: 57
+Node, local: 22 - global: 58
+Node, local: 23 - global: 59
+Node, local: 24 - global: 62
+Node, local: 25 - global: 63
+Node, local: 26 - global: 64
+Node, local: 27 - global: 77
+Node, local: 28 - global: 78
+Node, local: 29 - global: 79
+Node, local: 30 - global: 82
+Node, local: 31 - global: 83
+Node, local: 32 - global: 84
+Node, local: 33 - global: 87
+Node, local: 34 - global: 88
+Node, local: 35 - global: 89
+Node, local: 36 - global: 102
+Node, local: 37 - global: 103
+Node, local: 38 - global: 104
+Node, local: 39 - global: 107
+Node, local: 40 - global: 108
+Node, local: 41 - global: 109
+Node, local: 42 - global: 112
+Node, local: 43 - global: 113
+Node, local: 44 - global: 114
+
+Node, domain: 0 - global: 2
+Node, domain: 1 - global: 3
+Node, domain: 2 - global: 4
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 12
+Node, domain: 7 - global: 13
+Node, domain: 8 - global: 14
+Node, domain: 9 - global: 27
+Node, domain: 10 - global: 28
+Node, domain: 11 - global: 29
+Node, domain: 12 - global: 32
+Node, domain: 13 - global: 33
+Node, domain: 14 - global: 34
+Node, domain: 15 - global: 37
+Node, domain: 16 - global: 38
+Node, domain: 17 - global: 39
+Node, domain: 18 - global: 52
+Node, domain: 19 - global: 53
+Node, domain: 20 - global: 54
+Node, domain: 21 - global: 57
+Node, domain: 22 - global: 58
+Node, domain: 23 - global: 59
+Node, domain: 24 - global: 62
+Node, domain: 25 - global: 63
+Node, domain: 26 - global: 64
+Node, domain: 27 - global: 77
+Node, domain: 28 - global: 78
+Node, domain: 29 - global: 79
+Node, domain: 30 - global: 82
+Node, domain: 31 - global: 83
+Node, domain: 32 - global: 84
+Node, domain: 33 - global: 87
+Node, domain: 34 - global: 88
+Node, domain: 35 - global: 89
+Node, domain: 36 - global: 102
+Node, domain: 37 - global: 103
+Node, domain: 38 - global: 104
+Node, domain: 39 - global: 107
+Node, domain: 40 - global: 108
+Node, domain: 41 - global: 109
+Node, domain: 42 - global: 112
+Node, domain: 43 - global: 113
+Node, domain: 44 - global: 114
+Node, domain: 45 - global: 1
+Node, domain: 46 - global: 6
+Node, domain: 47 - global: 11
+Node, domain: 48 - global: 16
+Node, domain: 49 - global: 17
+Node, domain: 50 - global: 18
+Node, domain: 51 - global: 19
+Node, domain: 52 - global: 26
+Node, domain: 53 - global: 31
+Node, domain: 54 - global: 36
+Node, domain: 55 - global: 41
+Node, domain: 56 - global: 42
+Node, domain: 57 - global: 43
+Node, domain: 58 - global: 44
+Node, domain: 59 - global: 51
+Node, domain: 60 - global: 56
+Node, domain: 61 - global: 61
+Node, domain: 62 - global: 66
+Node, domain: 63 - global: 67
+Node, domain: 64 - global: 68
+Node, domain: 65 - global: 69
+Node, domain: 66 - global: 76
+Node, domain: 67 - global: 81
+Node, domain: 68 - global: 86
+Node, domain: 69 - global: 91
+Node, domain: 70 - global: 92
+Node, domain: 71 - global: 93
+Node, domain: 72 - global: 94
+Node, domain: 73 - global: 101
+Node, domain: 74 - global: 106
+Node, domain: 75 - global: 111
+Node, domain: 76 - global: 116
+Node, domain: 77 - global: 117
+Node, domain: 78 - global: 118
+Node, domain: 79 - global: 119
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,412 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 2 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060c58)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 3, 3, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: 0 - domain: 16
+Element, global: 5 - local: X - shadow: 1 - domain: 17
+Element, global: 6 - local: X - shadow: 2 - domain: 18
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: 0 - shadow: X - domain: 0
+Element, global: 9 - local: 1 - shadow: X - domain: 1
+Element, global: 10 - local: X - shadow: 3 - domain: 19
+Element, global: 11 - local: X - shadow: X - domain: X
+Element, global: 12 - local: 2 - shadow: X - domain: 2
+Element, global: 13 - local: 3 - shadow: X - domain: 3
+Element, global: 14 - local: X - shadow: 4 - domain: 20
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: X - shadow: X - domain: X
+Element, global: 17 - local: X - shadow: X - domain: X
+Element, global: 18 - local: X - shadow: X - domain: X
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: X - shadow: 5 - domain: 21
+Element, global: 21 - local: X - shadow: 6 - domain: 22
+Element, global: 22 - local: X - shadow: 7 - domain: 23
+Element, global: 23 - local: X - shadow: X - domain: X
+Element, global: 24 - local: 4 - shadow: X - domain: 4
+Element, global: 25 - local: 5 - shadow: X - domain: 5
+Element, global: 26 - local: X - shadow: 8 - domain: 24
+Element, global: 27 - local: X - shadow: X - domain: X
+Element, global: 28 - local: 6 - shadow: X - domain: 6
+Element, global: 29 - local: 7 - shadow: X - domain: 7
+Element, global: 30 - local: X - shadow: 9 - domain: 25
+Element, global: 31 - local: X - shadow: X - domain: X
+Element, global: 32 - local: X - shadow: X - domain: X
+Element, global: 33 - local: X - shadow: X - domain: X
+Element, global: 34 - local: X - shadow: X - domain: X
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: X - shadow: 10 - domain: 26
+Element, global: 37 - local: X - shadow: 11 - domain: 27
+Element, global: 38 - local: X - shadow: 12 - domain: 28
+Element, global: 39 - local: X - shadow: X - domain: X
+Element, global: 40 - local: 8 - shadow: X - domain: 8
+Element, global: 41 - local: 9 - shadow: X - domain: 9
+Element, global: 42 - local: X - shadow: 13 - domain: 29
+Element, global: 43 - local: X - shadow: X - domain: X
+Element, global: 44 - local: 10 - shadow: X - domain: 10
+Element, global: 45 - local: 11 - shadow: X - domain: 11
+Element, global: 46 - local: X - shadow: 14 - domain: 30
+Element, global: 47 - local: X - shadow: X - domain: X
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: X - domain: X
+Element, global: 50 - local: X - shadow: X - domain: X
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: X - shadow: 15 - domain: 31
+Element, global: 53 - local: X - shadow: 16 - domain: 32
+Element, global: 54 - local: X - shadow: 17 - domain: 33
+Element, global: 55 - local: X - shadow: X - domain: X
+Element, global: 56 - local: 12 - shadow: X - domain: 12
+Element, global: 57 - local: 13 - shadow: X - domain: 13
+Element, global: 58 - local: X - shadow: 18 - domain: 34
+Element, global: 59 - local: X - shadow: X - domain: X
+Element, global: 60 - local: 14 - shadow: X - domain: 14
+Element, global: 61 - local: 15 - shadow: X - domain: 15
+Element, global: 62 - local: X - shadow: 19 - domain: 35
+Element, global: 63 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 8
+Element, local: 1 - global: 9
+Element, local: 2 - global: 12
+Element, local: 3 - global: 13
+Element, local: 4 - global: 24
+Element, local: 5 - global: 25
+Element, local: 6 - global: 28
+Element, local: 7 - global: 29
+Element, local: 8 - global: 40
+Element, local: 9 - global: 41
+Element, local: 10 - global: 44
+Element, local: 11 - global: 45
+Element, local: 12 - global: 56
+Element, local: 13 - global: 57
+Element, local: 14 - global: 60
+Element, local: 15 - global: 61
+
+Element, domain: 0 - global: 8
+Element, domain: 1 - global: 9
+Element, domain: 2 - global: 12
+Element, domain: 3 - global: 13
+Element, domain: 4 - global: 24
+Element, domain: 5 - global: 25
+Element, domain: 6 - global: 28
+Element, domain: 7 - global: 29
+Element, domain: 8 - global: 40
+Element, domain: 9 - global: 41
+Element, domain: 10 - global: 44
+Element, domain: 11 - global: 45
+Element, domain: 12 - global: 56
+Element, domain: 13 - global: 57
+Element, domain: 14 - global: 60
+Element, domain: 15 - global: 61
+Element, domain: 16 - global: 4
+Element, domain: 17 - global: 5
+Element, domain: 18 - global: 6
+Element, domain: 19 - global: 10
+Element, domain: 20 - global: 14
+Element, domain: 21 - global: 20
+Element, domain: 22 - global: 21
+Element, domain: 23 - global: 22
+Element, domain: 24 - global: 26
+Element, domain: 25 - global: 30
+Element, domain: 26 - global: 36
+Element, domain: 27 - global: 37
+Element, domain: 28 - global: 38
+Element, domain: 29 - global: 42
+Element, domain: 30 - global: 46
+Element, domain: 31 - global: 52
+Element, domain: 32 - global: 53
+Element, domain: 33 - global: 54
+Element, domain: 34 - global: 58
+Element, domain: 35 - global: 62
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: X - shadow: 0 - domain: 45
+Node, global: 6 - local: X - shadow: 1 - domain: 46
+Node, global: 7 - local: X - shadow: 2 - domain: 47
+Node, global: 8 - local: X - shadow: 3 - domain: 48
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: 0 - shadow: X - domain: 0
+Node, global: 11 - local: 1 - shadow: X - domain: 1
+Node, global: 12 - local: 2 - shadow: X - domain: 2
+Node, global: 13 - local: X - shadow: 4 - domain: 49
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: 3 - shadow: X - domain: 3
+Node, global: 16 - local: 4 - shadow: X - domain: 4
+Node, global: 17 - local: 5 - shadow: X - domain: 5
+Node, global: 18 - local: X - shadow: 5 - domain: 50
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: 6 - shadow: X - domain: 6
+Node, global: 21 - local: 7 - shadow: X - domain: 7
+Node, global: 22 - local: 8 - shadow: X - domain: 8
+Node, global: 23 - local: X - shadow: 6 - domain: 51
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: X - domain: X
+Node, global: 27 - local: X - shadow: X - domain: X
+Node, global: 28 - local: X - shadow: X - domain: X
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: X - shadow: 7 - domain: 52
+Node, global: 31 - local: X - shadow: 8 - domain: 53
+Node, global: 32 - local: X - shadow: 9 - domain: 54
+Node, global: 33 - local: X - shadow: 10 - domain: 55
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: 9 - shadow: X - domain: 9
+Node, global: 36 - local: 10 - shadow: X - domain: 10
+Node, global: 37 - local: 11 - shadow: X - domain: 11
+Node, global: 38 - local: X - shadow: 11 - domain: 56
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: 12 - shadow: X - domain: 12
+Node, global: 41 - local: 13 - shadow: X - domain: 13
+Node, global: 42 - local: 14 - shadow: X - domain: 14
+Node, global: 43 - local: X - shadow: 12 - domain: 57
+Node, global: 44 - local: X - shadow: X - domain: X
+Node, global: 45 - local: 15 - shadow: X - domain: 15
+Node, global: 46 - local: 16 - shadow: X - domain: 16
+Node, global: 47 - local: 17 - shadow: X - domain: 17
+Node, global: 48 - local: X - shadow: 13 - domain: 58
+Node, global: 49 - local: X - shadow: X - domain: X
+Node, global: 50 - local: X - shadow: X - domain: X
+Node, global: 51 - local: X - shadow: X - domain: X
+Node, global: 52 - local: X - shadow: X - domain: X
+Node, global: 53 - local: X - shadow: X - domain: X
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: X - shadow: 14 - domain: 59
+Node, global: 56 - local: X - shadow: 15 - domain: 60
+Node, global: 57 - local: X - shadow: 16 - domain: 61
+Node, global: 58 - local: X - shadow: 17 - domain: 62
+Node, global: 59 - local: X - shadow: X - domain: X
+Node, global: 60 - local: 18 - shadow: X - domain: 18
+Node, global: 61 - local: 19 - shadow: X - domain: 19
+Node, global: 62 - local: 20 - shadow: X - domain: 20
+Node, global: 63 - local: X - shadow: 18 - domain: 63
+Node, global: 64 - local: X - shadow: X - domain: X
+Node, global: 65 - local: 21 - shadow: X - domain: 21
+Node, global: 66 - local: 22 - shadow: X - domain: 22
+Node, global: 67 - local: 23 - shadow: X - domain: 23
+Node, global: 68 - local: X - shadow: 19 - domain: 64
+Node, global: 69 - local: X - shadow: X - domain: X
+Node, global: 70 - local: 24 - shadow: X - domain: 24
+Node, global: 71 - local: 25 - shadow: X - domain: 25
+Node, global: 72 - local: 26 - shadow: X - domain: 26
+Node, global: 73 - local: X - shadow: 20 - domain: 65
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: X - shadow: X - domain: X
+Node, global: 76 - local: X - shadow: X - domain: X
+Node, global: 77 - local: X - shadow: X - domain: X
+Node, global: 78 - local: X - shadow: X - domain: X
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: X - shadow: 21 - domain: 66
+Node, global: 81 - local: X - shadow: 22 - domain: 67
+Node, global: 82 - local: X - shadow: 23 - domain: 68
+Node, global: 83 - local: X - shadow: 24 - domain: 69
+Node, global: 84 - local: X - shadow: X - domain: X
+Node, global: 85 - local: 27 - shadow: X - domain: 27
+Node, global: 86 - local: 28 - shadow: X - domain: 28
+Node, global: 87 - local: 29 - shadow: X - domain: 29
+Node, global: 88 - local: X - shadow: 25 - domain: 70
+Node, global: 89 - local: X - shadow: X - domain: X
+Node, global: 90 - local: 30 - shadow: X - domain: 30
+Node, global: 91 - local: 31 - shadow: X - domain: 31
+Node, global: 92 - local: 32 - shadow: X - domain: 32
+Node, global: 93 - local: X - shadow: 26 - domain: 71
+Node, global: 94 - local: X - shadow: X - domain: X
+Node, global: 95 - local: 33 - shadow: X - domain: 33
+Node, global: 96 - local: 34 - shadow: X - domain: 34
+Node, global: 97 - local: 35 - shadow: X - domain: 35
+Node, global: 98 - local: X - shadow: 27 - domain: 72
+Node, global: 99 - local: X - shadow: X - domain: X
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: X - domain: X
+Node, global: 102 - local: X - shadow: X - domain: X
+Node, global: 103 - local: X - shadow: X - domain: X
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: X - shadow: 28 - domain: 73
+Node, global: 106 - local: X - shadow: 29 - domain: 74
+Node, global: 107 - local: X - shadow: 30 - domain: 75
+Node, global: 108 - local: X - shadow: 31 - domain: 76
+Node, global: 109 - local: X - shadow: X - domain: X
+Node, global: 110 - local: 36 - shadow: X - domain: 36
+Node, global: 111 - local: 37 - shadow: X - domain: 37
+Node, global: 112 - local: 38 - shadow: X - domain: 38
+Node, global: 113 - local: X - shadow: 32 - domain: 77
+Node, global: 114 - local: X - shadow: X - domain: X
+Node, global: 115 - local: 39 - shadow: X - domain: 39
+Node, global: 116 - local: 40 - shadow: X - domain: 40
+Node, global: 117 - local: 41 - shadow: X - domain: 41
+Node, global: 118 - local: X - shadow: 33 - domain: 78
+Node, global: 119 - local: X - shadow: X - domain: X
+Node, global: 120 - local: 42 - shadow: X - domain: 42
+Node, global: 121 - local: 43 - shadow: X - domain: 43
+Node, global: 122 - local: 44 - shadow: X - domain: 44
+Node, global: 123 - local: X - shadow: 34 - domain: 79
+Node, global: 124 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 10
+Node, local: 1 - global: 11
+Node, local: 2 - global: 12
+Node, local: 3 - global: 15
+Node, local: 4 - global: 16
+Node, local: 5 - global: 17
+Node, local: 6 - global: 20
+Node, local: 7 - global: 21
+Node, local: 8 - global: 22
+Node, local: 9 - global: 35
+Node, local: 10 - global: 36
+Node, local: 11 - global: 37
+Node, local: 12 - global: 40
+Node, local: 13 - global: 41
+Node, local: 14 - global: 42
+Node, local: 15 - global: 45
+Node, local: 16 - global: 46
+Node, local: 17 - global: 47
+Node, local: 18 - global: 60
+Node, local: 19 - global: 61
+Node, local: 20 - global: 62
+Node, local: 21 - global: 65
+Node, local: 22 - global: 66
+Node, local: 23 - global: 67
+Node, local: 24 - global: 70
+Node, local: 25 - global: 71
+Node, local: 26 - global: 72
+Node, local: 27 - global: 85
+Node, local: 28 - global: 86
+Node, local: 29 - global: 87
+Node, local: 30 - global: 90
+Node, local: 31 - global: 91
+Node, local: 32 - global: 92
+Node, local: 33 - global: 95
+Node, local: 34 - global: 96
+Node, local: 35 - global: 97
+Node, local: 36 - global: 110
+Node, local: 37 - global: 111
+Node, local: 38 - global: 112
+Node, local: 39 - global: 115
+Node, local: 40 - global: 116
+Node, local: 41 - global: 117
+Node, local: 42 - global: 120
+Node, local: 43 - global: 121
+Node, local: 44 - global: 122
+
+Node, domain: 0 - global: 10
+Node, domain: 1 - global: 11
+Node, domain: 2 - global: 12
+Node, domain: 3 - global: 15
+Node, domain: 4 - global: 16
+Node, domain: 5 - global: 17
+Node, domain: 6 - global: 20
+Node, domain: 7 - global: 21
+Node, domain: 8 - global: 22
+Node, domain: 9 - global: 35
+Node, domain: 10 - global: 36
+Node, domain: 11 - global: 37
+Node, domain: 12 - global: 40
+Node, domain: 13 - global: 41
+Node, domain: 14 - global: 42
+Node, domain: 15 - global: 45
+Node, domain: 16 - global: 46
+Node, domain: 17 - global: 47
+Node, domain: 18 - global: 60
+Node, domain: 19 - global: 61
+Node, domain: 20 - global: 62
+Node, domain: 21 - global: 65
+Node, domain: 22 - global: 66
+Node, domain: 23 - global: 67
+Node, domain: 24 - global: 70
+Node, domain: 25 - global: 71
+Node, domain: 26 - global: 72
+Node, domain: 27 - global: 85
+Node, domain: 28 - global: 86
+Node, domain: 29 - global: 87
+Node, domain: 30 - global: 90
+Node, domain: 31 - global: 91
+Node, domain: 32 - global: 92
+Node, domain: 33 - global: 95
+Node, domain: 34 - global: 96
+Node, domain: 35 - global: 97
+Node, domain: 36 - global: 110
+Node, domain: 37 - global: 111
+Node, domain: 38 - global: 112
+Node, domain: 39 - global: 115
+Node, domain: 40 - global: 116
+Node, domain: 41 - global: 117
+Node, domain: 42 - global: 120
+Node, domain: 43 - global: 121
+Node, domain: 44 - global: 122
+Node, domain: 45 - global: 5
+Node, domain: 46 - global: 6
+Node, domain: 47 - global: 7
+Node, domain: 48 - global: 8
+Node, domain: 49 - global: 13
+Node, domain: 50 - global: 18
+Node, domain: 51 - global: 23
+Node, domain: 52 - global: 30
+Node, domain: 53 - global: 31
+Node, domain: 54 - global: 32
+Node, domain: 55 - global: 33
+Node, domain: 56 - global: 38
+Node, domain: 57 - global: 43
+Node, domain: 58 - global: 48
+Node, domain: 59 - global: 55
+Node, domain: 60 - global: 56
+Node, domain: 61 - global: 57
+Node, domain: 62 - global: 58
+Node, domain: 63 - global: 63
+Node, domain: 64 - global: 68
+Node, domain: 65 - global: 73
+Node, domain: 66 - global: 80
+Node, domain: 67 - global: 81
+Node, domain: 68 - global: 82
+Node, domain: 69 - global: 83
+Node, domain: 70 - global: 88
+Node, domain: 71 - global: 93
+Node, domain: 72 - global: 98
+Node, domain: 73 - global: 105
+Node, domain: 74 - global: 106
+Node, domain: 75 - global: 107
+Node, domain: 76 - global: 108
+Node, domain: 77 - global: 113
+Node, domain: 78 - global: 118
+Node, domain: 79 - global: 123
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,412 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 3 of 4 in use (4 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060c58)
+		size : (2,2,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, False }
+partitionCounts: { 2, 2, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 4 }
+	elementLocalCounts[1]: { 2, 2, 4 }
+	elementLocalCounts[2]: { 2, 2, 4 }
+	elementLocalCounts[3]: { 2, 2, 4 }
+elementDomainCounts: { 3, 3, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 5 }
+	nodeLocalCounts[1]: { 3, 3, 5 }
+	nodeLocalCounts[2]: { 3, 3, 5 }
+	nodeLocalCounts[3]: { 3, 3, 5 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: 0 - domain: 16
+Element, global: 6 - local: X - shadow: 1 - domain: 17
+Element, global: 7 - local: X - shadow: 2 - domain: 18
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: 3 - domain: 19
+Element, global: 10 - local: 0 - shadow: X - domain: 0
+Element, global: 11 - local: 1 - shadow: X - domain: 1
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: 4 - domain: 20
+Element, global: 14 - local: 2 - shadow: X - domain: 2
+Element, global: 15 - local: 3 - shadow: X - domain: 3
+Element, global: 16 - local: X - shadow: X - domain: X
+Element, global: 17 - local: X - shadow: X - domain: X
+Element, global: 18 - local: X - shadow: X - domain: X
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: X - shadow: X - domain: X
+Element, global: 21 - local: X - shadow: 5 - domain: 21
+Element, global: 22 - local: X - shadow: 6 - domain: 22
+Element, global: 23 - local: X - shadow: 7 - domain: 23
+Element, global: 24 - local: X - shadow: X - domain: X
+Element, global: 25 - local: X - shadow: 8 - domain: 24
+Element, global: 26 - local: 4 - shadow: X - domain: 4
+Element, global: 27 - local: 5 - shadow: X - domain: 5
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: 9 - domain: 25
+Element, global: 30 - local: 6 - shadow: X - domain: 6
+Element, global: 31 - local: 7 - shadow: X - domain: 7
+Element, global: 32 - local: X - shadow: X - domain: X
+Element, global: 33 - local: X - shadow: X - domain: X
+Element, global: 34 - local: X - shadow: X - domain: X
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: X - shadow: X - domain: X
+Element, global: 37 - local: X - shadow: 10 - domain: 26
+Element, global: 38 - local: X - shadow: 11 - domain: 27
+Element, global: 39 - local: X - shadow: 12 - domain: 28
+Element, global: 40 - local: X - shadow: X - domain: X
+Element, global: 41 - local: X - shadow: 13 - domain: 29
+Element, global: 42 - local: 8 - shadow: X - domain: 8
+Element, global: 43 - local: 9 - shadow: X - domain: 9
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: 14 - domain: 30
+Element, global: 46 - local: 10 - shadow: X - domain: 10
+Element, global: 47 - local: 11 - shadow: X - domain: 11
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: X - domain: X
+Element, global: 50 - local: X - shadow: X - domain: X
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: X - shadow: X - domain: X
+Element, global: 53 - local: X - shadow: 15 - domain: 31
+Element, global: 54 - local: X - shadow: 16 - domain: 32
+Element, global: 55 - local: X - shadow: 17 - domain: 33
+Element, global: 56 - local: X - shadow: X - domain: X
+Element, global: 57 - local: X - shadow: 18 - domain: 34
+Element, global: 58 - local: 12 - shadow: X - domain: 12
+Element, global: 59 - local: 13 - shadow: X - domain: 13
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: 19 - domain: 35
+Element, global: 62 - local: 14 - shadow: X - domain: 14
+Element, global: 63 - local: 15 - shadow: X - domain: 15
+
+Element, local: 0 - global: 10
+Element, local: 1 - global: 11
+Element, local: 2 - global: 14
+Element, local: 3 - global: 15
+Element, local: 4 - global: 26
+Element, local: 5 - global: 27
+Element, local: 6 - global: 30
+Element, local: 7 - global: 31
+Element, local: 8 - global: 42
+Element, local: 9 - global: 43
+Element, local: 10 - global: 46
+Element, local: 11 - global: 47
+Element, local: 12 - global: 58
+Element, local: 13 - global: 59
+Element, local: 14 - global: 62
+Element, local: 15 - global: 63
+
+Element, domain: 0 - global: 10
+Element, domain: 1 - global: 11
+Element, domain: 2 - global: 14
+Element, domain: 3 - global: 15
+Element, domain: 4 - global: 26
+Element, domain: 5 - global: 27
+Element, domain: 6 - global: 30
+Element, domain: 7 - global: 31
+Element, domain: 8 - global: 42
+Element, domain: 9 - global: 43
+Element, domain: 10 - global: 46
+Element, domain: 11 - global: 47
+Element, domain: 12 - global: 58
+Element, domain: 13 - global: 59
+Element, domain: 14 - global: 62
+Element, domain: 15 - global: 63
+Element, domain: 16 - global: 5
+Element, domain: 17 - global: 6
+Element, domain: 18 - global: 7
+Element, domain: 19 - global: 9
+Element, domain: 20 - global: 13
+Element, domain: 21 - global: 21
+Element, domain: 22 - global: 22
+Element, domain: 23 - global: 23
+Element, domain: 24 - global: 25
+Element, domain: 25 - global: 29
+Element, domain: 26 - global: 37
+Element, domain: 27 - global: 38
+Element, domain: 28 - global: 39
+Element, domain: 29 - global: 41
+Element, domain: 30 - global: 45
+Element, domain: 31 - global: 53
+Element, domain: 32 - global: 54
+Element, domain: 33 - global: 55
+Element, domain: 34 - global: 57
+Element, domain: 35 - global: 61
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: 0 - domain: 45
+Node, global: 7 - local: X - shadow: 1 - domain: 46
+Node, global: 8 - local: X - shadow: 2 - domain: 47
+Node, global: 9 - local: X - shadow: 3 - domain: 48
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: 4 - domain: 49
+Node, global: 12 - local: 0 - shadow: X - domain: 0
+Node, global: 13 - local: 1 - shadow: X - domain: 1
+Node, global: 14 - local: 2 - shadow: X - domain: 2
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: 5 - domain: 50
+Node, global: 17 - local: 3 - shadow: X - domain: 3
+Node, global: 18 - local: 4 - shadow: X - domain: 4
+Node, global: 19 - local: 5 - shadow: X - domain: 5
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: 6 - domain: 51
+Node, global: 22 - local: 6 - shadow: X - domain: 6
+Node, global: 23 - local: 7 - shadow: X - domain: 7
+Node, global: 24 - local: 8 - shadow: X - domain: 8
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: X - domain: X
+Node, global: 27 - local: X - shadow: X - domain: X
+Node, global: 28 - local: X - shadow: X - domain: X
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: 7 - domain: 52
+Node, global: 32 - local: X - shadow: 8 - domain: 53
+Node, global: 33 - local: X - shadow: 9 - domain: 54
+Node, global: 34 - local: X - shadow: 10 - domain: 55
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: 11 - domain: 56
+Node, global: 37 - local: 9 - shadow: X - domain: 9
+Node, global: 38 - local: 10 - shadow: X - domain: 10
+Node, global: 39 - local: 11 - shadow: X - domain: 11
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: 12 - domain: 57
+Node, global: 42 - local: 12 - shadow: X - domain: 12
+Node, global: 43 - local: 13 - shadow: X - domain: 13
+Node, global: 44 - local: 14 - shadow: X - domain: 14
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: 13 - domain: 58
+Node, global: 47 - local: 15 - shadow: X - domain: 15
+Node, global: 48 - local: 16 - shadow: X - domain: 16
+Node, global: 49 - local: 17 - shadow: X - domain: 17
+Node, global: 50 - local: X - shadow: X - domain: X
+Node, global: 51 - local: X - shadow: X - domain: X
+Node, global: 52 - local: X - shadow: X - domain: X
+Node, global: 53 - local: X - shadow: X - domain: X
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: X - shadow: X - domain: X
+Node, global: 56 - local: X - shadow: 14 - domain: 59
+Node, global: 57 - local: X - shadow: 15 - domain: 60
+Node, global: 58 - local: X - shadow: 16 - domain: 61
+Node, global: 59 - local: X - shadow: 17 - domain: 62
+Node, global: 60 - local: X - shadow: X - domain: X
+Node, global: 61 - local: X - shadow: 18 - domain: 63
+Node, global: 62 - local: 18 - shadow: X - domain: 18
+Node, global: 63 - local: 19 - shadow: X - domain: 19
+Node, global: 64 - local: 20 - shadow: X - domain: 20
+Node, global: 65 - local: X - shadow: X - domain: X
+Node, global: 66 - local: X - shadow: 19 - domain: 64
+Node, global: 67 - local: 21 - shadow: X - domain: 21
+Node, global: 68 - local: 22 - shadow: X - domain: 22
+Node, global: 69 - local: 23 - shadow: X - domain: 23
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: 20 - domain: 65
+Node, global: 72 - local: 24 - shadow: X - domain: 24
+Node, global: 73 - local: 25 - shadow: X - domain: 25
+Node, global: 74 - local: 26 - shadow: X - domain: 26
+Node, global: 75 - local: X - shadow: X - domain: X
+Node, global: 76 - local: X - shadow: X - domain: X
+Node, global: 77 - local: X - shadow: X - domain: X
+Node, global: 78 - local: X - shadow: X - domain: X
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: X - shadow: X - domain: X
+Node, global: 81 - local: X - shadow: 21 - domain: 66
+Node, global: 82 - local: X - shadow: 22 - domain: 67
+Node, global: 83 - local: X - shadow: 23 - domain: 68
+Node, global: 84 - local: X - shadow: 24 - domain: 69
+Node, global: 85 - local: X - shadow: X - domain: X
+Node, global: 86 - local: X - shadow: 25 - domain: 70
+Node, global: 87 - local: 27 - shadow: X - domain: 27
+Node, global: 88 - local: 28 - shadow: X - domain: 28
+Node, global: 89 - local: 29 - shadow: X - domain: 29
+Node, global: 90 - local: X - shadow: X - domain: X
+Node, global: 91 - local: X - shadow: 26 - domain: 71
+Node, global: 92 - local: 30 - shadow: X - domain: 30
+Node, global: 93 - local: 31 - shadow: X - domain: 31
+Node, global: 94 - local: 32 - shadow: X - domain: 32
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: 27 - domain: 72
+Node, global: 97 - local: 33 - shadow: X - domain: 33
+Node, global: 98 - local: 34 - shadow: X - domain: 34
+Node, global: 99 - local: 35 - shadow: X - domain: 35
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: X - domain: X
+Node, global: 102 - local: X - shadow: X - domain: X
+Node, global: 103 - local: X - shadow: X - domain: X
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: 28 - domain: 73
+Node, global: 107 - local: X - shadow: 29 - domain: 74
+Node, global: 108 - local: X - shadow: 30 - domain: 75
+Node, global: 109 - local: X - shadow: 31 - domain: 76
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: 32 - domain: 77
+Node, global: 112 - local: 36 - shadow: X - domain: 36
+Node, global: 113 - local: 37 - shadow: X - domain: 37
+Node, global: 114 - local: 38 - shadow: X - domain: 38
+Node, global: 115 - local: X - shadow: X - domain: X
+Node, global: 116 - local: X - shadow: 33 - domain: 78
+Node, global: 117 - local: 39 - shadow: X - domain: 39
+Node, global: 118 - local: 40 - shadow: X - domain: 40
+Node, global: 119 - local: 41 - shadow: X - domain: 41
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: 34 - domain: 79
+Node, global: 122 - local: 42 - shadow: X - domain: 42
+Node, global: 123 - local: 43 - shadow: X - domain: 43
+Node, global: 124 - local: 44 - shadow: X - domain: 44
+
+Node, local: 0 - global: 12
+Node, local: 1 - global: 13
+Node, local: 2 - global: 14
+Node, local: 3 - global: 17
+Node, local: 4 - global: 18
+Node, local: 5 - global: 19
+Node, local: 6 - global: 22
+Node, local: 7 - global: 23
+Node, local: 8 - global: 24
+Node, local: 9 - global: 37
+Node, local: 10 - global: 38
+Node, local: 11 - global: 39
+Node, local: 12 - global: 42
+Node, local: 13 - global: 43
+Node, local: 14 - global: 44
+Node, local: 15 - global: 47
+Node, local: 16 - global: 48
+Node, local: 17 - global: 49
+Node, local: 18 - global: 62
+Node, local: 19 - global: 63
+Node, local: 20 - global: 64
+Node, local: 21 - global: 67
+Node, local: 22 - global: 68
+Node, local: 23 - global: 69
+Node, local: 24 - global: 72
+Node, local: 25 - global: 73
+Node, local: 26 - global: 74
+Node, local: 27 - global: 87
+Node, local: 28 - global: 88
+Node, local: 29 - global: 89
+Node, local: 30 - global: 92
+Node, local: 31 - global: 93
+Node, local: 32 - global: 94
+Node, local: 33 - global: 97
+Node, local: 34 - global: 98
+Node, local: 35 - global: 99
+Node, local: 36 - global: 112
+Node, local: 37 - global: 113
+Node, local: 38 - global: 114
+Node, local: 39 - global: 117
+Node, local: 40 - global: 118
+Node, local: 41 - global: 119
+Node, local: 42 - global: 122
+Node, local: 43 - global: 123
+Node, local: 44 - global: 124
+
+Node, domain: 0 - global: 12
+Node, domain: 1 - global: 13
+Node, domain: 2 - global: 14
+Node, domain: 3 - global: 17
+Node, domain: 4 - global: 18
+Node, domain: 5 - global: 19
+Node, domain: 6 - global: 22
+Node, domain: 7 - global: 23
+Node, domain: 8 - global: 24
+Node, domain: 9 - global: 37
+Node, domain: 10 - global: 38
+Node, domain: 11 - global: 39
+Node, domain: 12 - global: 42
+Node, domain: 13 - global: 43
+Node, domain: 14 - global: 44
+Node, domain: 15 - global: 47
+Node, domain: 16 - global: 48
+Node, domain: 17 - global: 49
+Node, domain: 18 - global: 62
+Node, domain: 19 - global: 63
+Node, domain: 20 - global: 64
+Node, domain: 21 - global: 67
+Node, domain: 22 - global: 68
+Node, domain: 23 - global: 69
+Node, domain: 24 - global: 72
+Node, domain: 25 - global: 73
+Node, domain: 26 - global: 74
+Node, domain: 27 - global: 87
+Node, domain: 28 - global: 88
+Node, domain: 29 - global: 89
+Node, domain: 30 - global: 92
+Node, domain: 31 - global: 93
+Node, domain: 32 - global: 94
+Node, domain: 33 - global: 97
+Node, domain: 34 - global: 98
+Node, domain: 35 - global: 99
+Node, domain: 36 - global: 112
+Node, domain: 37 - global: 113
+Node, domain: 38 - global: 114
+Node, domain: 39 - global: 117
+Node, domain: 40 - global: 118
+Node, domain: 41 - global: 119
+Node, domain: 42 - global: 122
+Node, domain: 43 - global: 123
+Node, domain: 44 - global: 124
+Node, domain: 45 - global: 6
+Node, domain: 46 - global: 7
+Node, domain: 47 - global: 8
+Node, domain: 48 - global: 9
+Node, domain: 49 - global: 11
+Node, domain: 50 - global: 16
+Node, domain: 51 - global: 21
+Node, domain: 52 - global: 31
+Node, domain: 53 - global: 32
+Node, domain: 54 - global: 33
+Node, domain: 55 - global: 34
+Node, domain: 56 - global: 36
+Node, domain: 57 - global: 41
+Node, domain: 58 - global: 46
+Node, domain: 59 - global: 56
+Node, domain: 60 - global: 57
+Node, domain: 61 - global: 58
+Node, domain: 62 - global: 59
+Node, domain: 63 - global: 61
+Node, domain: 64 - global: 66
+Node, domain: 65 - global: 71
+Node, domain: 66 - global: 81
+Node, domain: 67 - global: 82
+Node, domain: 68 - global: 83
+Node, domain: 69 - global: 84
+Node, domain: 70 - global: 86
+Node, domain: 71 - global: 91
+Node, domain: 72 - global: 96
+Node, domain: 73 - global: 106
+Node, domain: 74 - global: 107
+Node, domain: 75 - global: 108
+Node, domain: 76 - global: 109
+Node, domain: 77 - global: 111
+Node, domain: 78 - global: 116
+Node, domain: 79 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,467 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 8 in use (8 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8061f30)
+		size : (2,2,2)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, True }
+partitionCounts: { 2, 2, 2 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 2 }
+	elementLocalCounts[1]: { 2, 2, 2 }
+	elementLocalCounts[2]: { 2, 2, 2 }
+	elementLocalCounts[3]: { 2, 2, 2 }
+	elementLocalCounts[4]: { 2, 2, 2 }
+	elementLocalCounts[5]: { 2, 2, 2 }
+	elementLocalCounts[6]: { 2, 2, 2 }
+	elementLocalCounts[7]: { 2, 2, 2 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 3 }
+	nodeLocalCounts[1]: { 3, 3, 3 }
+	nodeLocalCounts[2]: { 3, 3, 3 }
+	nodeLocalCounts[3]: { 3, 3, 3 }
+	nodeLocalCounts[4]: { 3, 3, 3 }
+	nodeLocalCounts[5]: { 3, 3, 3 }
+	nodeLocalCounts[6]: { 3, 3, 3 }
+	nodeLocalCounts[7]: { 3, 3, 3 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 8
+Element, global: 3 - local: X - shadow: 1 - domain: 9
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 2 - domain: 10
+Element, global: 7 - local: X - shadow: 3 - domain: 11
+Element, global: 8 - local: X - shadow: 4 - domain: 12
+Element, global: 9 - local: X - shadow: 5 - domain: 13
+Element, global: 10 - local: X - shadow: 6 - domain: 14
+Element, global: 11 - local: X - shadow: 7 - domain: 15
+Element, global: 12 - local: X - shadow: 8 - domain: 16
+Element, global: 13 - local: X - shadow: 9 - domain: 17
+Element, global: 14 - local: X - shadow: 10 - domain: 18
+Element, global: 15 - local: X - shadow: 11 - domain: 19
+Element, global: 16 - local: 4 - shadow: X - domain: 4
+Element, global: 17 - local: 5 - shadow: X - domain: 5
+Element, global: 18 - local: X - shadow: 12 - domain: 20
+Element, global: 19 - local: X - shadow: 13 - domain: 21
+Element, global: 20 - local: 6 - shadow: X - domain: 6
+Element, global: 21 - local: 7 - shadow: X - domain: 7
+Element, global: 22 - local: X - shadow: 14 - domain: 22
+Element, global: 23 - local: X - shadow: 15 - domain: 23
+Element, global: 24 - local: X - shadow: 16 - domain: 24
+Element, global: 25 - local: X - shadow: 17 - domain: 25
+Element, global: 26 - local: X - shadow: 18 - domain: 26
+Element, global: 27 - local: X - shadow: 19 - domain: 27
+Element, global: 28 - local: X - shadow: 20 - domain: 28
+Element, global: 29 - local: X - shadow: 21 - domain: 29
+Element, global: 30 - local: X - shadow: 22 - domain: 30
+Element, global: 31 - local: X - shadow: 23 - domain: 31
+Element, global: 32 - local: X - shadow: 24 - domain: 32
+Element, global: 33 - local: X - shadow: 25 - domain: 33
+Element, global: 34 - local: X - shadow: 26 - domain: 34
+Element, global: 35 - local: X - shadow: 27 - domain: 35
+Element, global: 36 - local: X - shadow: 28 - domain: 36
+Element, global: 37 - local: X - shadow: 29 - domain: 37
+Element, global: 38 - local: X - shadow: 30 - domain: 38
+Element, global: 39 - local: X - shadow: 31 - domain: 39
+Element, global: 40 - local: X - shadow: 32 - domain: 40
+Element, global: 41 - local: X - shadow: 33 - domain: 41
+Element, global: 42 - local: X - shadow: 34 - domain: 42
+Element, global: 43 - local: X - shadow: 35 - domain: 43
+Element, global: 44 - local: X - shadow: 36 - domain: 44
+Element, global: 45 - local: X - shadow: 37 - domain: 45
+Element, global: 46 - local: X - shadow: 38 - domain: 46
+Element, global: 47 - local: X - shadow: 39 - domain: 47
+Element, global: 48 - local: X - shadow: 40 - domain: 48
+Element, global: 49 - local: X - shadow: 41 - domain: 49
+Element, global: 50 - local: X - shadow: 42 - domain: 50
+Element, global: 51 - local: X - shadow: 43 - domain: 51
+Element, global: 52 - local: X - shadow: 44 - domain: 52
+Element, global: 53 - local: X - shadow: 45 - domain: 53
+Element, global: 54 - local: X - shadow: 46 - domain: 54
+Element, global: 55 - local: X - shadow: 47 - domain: 55
+Element, global: 56 - local: X - shadow: 48 - domain: 56
+Element, global: 57 - local: X - shadow: 49 - domain: 57
+Element, global: 58 - local: X - shadow: 50 - domain: 58
+Element, global: 59 - local: X - shadow: 51 - domain: 59
+Element, global: 60 - local: X - shadow: 52 - domain: 60
+Element, global: 61 - local: X - shadow: 53 - domain: 61
+Element, global: 62 - local: X - shadow: 54 - domain: 62
+Element, global: 63 - local: X - shadow: 55 - domain: 63
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 16
+Element, local: 5 - global: 17
+Element, local: 6 - global: 20
+Element, local: 7 - global: 21
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 16
+Element, domain: 5 - global: 17
+Element, domain: 6 - global: 20
+Element, domain: 7 - global: 21
+Element, domain: 8 - global: 2
+Element, domain: 9 - global: 3
+Element, domain: 10 - global: 6
+Element, domain: 11 - global: 7
+Element, domain: 12 - global: 8
+Element, domain: 13 - global: 9
+Element, domain: 14 - global: 10
+Element, domain: 15 - global: 11
+Element, domain: 16 - global: 12
+Element, domain: 17 - global: 13
+Element, domain: 18 - global: 14
+Element, domain: 19 - global: 15
+Element, domain: 20 - global: 18
+Element, domain: 21 - global: 19
+Element, domain: 22 - global: 22
+Element, domain: 23 - global: 23
+Element, domain: 24 - global: 24
+Element, domain: 25 - global: 25
+Element, domain: 26 - global: 26
+Element, domain: 27 - global: 27
+Element, domain: 28 - global: 28
+Element, domain: 29 - global: 29
+Element, domain: 30 - global: 30
+Element, domain: 31 - global: 31
+Element, domain: 32 - global: 32
+Element, domain: 33 - global: 33
+Element, domain: 34 - global: 34
+Element, domain: 35 - global: 35
+Element, domain: 36 - global: 36
+Element, domain: 37 - global: 37
+Element, domain: 38 - global: 38
+Element, domain: 39 - global: 39
+Element, domain: 40 - global: 40
+Element, domain: 41 - global: 41
+Element, domain: 42 - global: 42
+Element, domain: 43 - global: 43
+Element, domain: 44 - global: 44
+Element, domain: 45 - global: 45
+Element, domain: 46 - global: 46
+Element, domain: 47 - global: 47
+Element, domain: 48 - global: 48
+Element, domain: 49 - global: 49
+Element, domain: 50 - global: 50
+Element, domain: 51 - global: 51
+Element, domain: 52 - global: 52
+Element, domain: 53 - global: 53
+Element, domain: 54 - global: 54
+Element, domain: 55 - global: 55
+Element, domain: 56 - global: 56
+Element, domain: 57 - global: 57
+Element, domain: 58 - global: 58
+Element, domain: 59 - global: 59
+Element, domain: 60 - global: 60
+Element, domain: 61 - global: 61
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 27
+Node, global: 4 - local: X - shadow: 1 - domain: 28
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 2 - domain: 29
+Node, global: 9 - local: X - shadow: 3 - domain: 30
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 4 - domain: 31
+Node, global: 14 - local: X - shadow: 5 - domain: 32
+Node, global: 15 - local: X - shadow: 6 - domain: 33
+Node, global: 16 - local: X - shadow: 7 - domain: 34
+Node, global: 17 - local: X - shadow: 8 - domain: 35
+Node, global: 18 - local: X - shadow: 9 - domain: 36
+Node, global: 19 - local: X - shadow: 10 - domain: 37
+Node, global: 20 - local: X - shadow: 11 - domain: 38
+Node, global: 21 - local: X - shadow: 12 - domain: 39
+Node, global: 22 - local: X - shadow: 13 - domain: 40
+Node, global: 23 - local: X - shadow: 14 - domain: 41
+Node, global: 24 - local: X - shadow: 15 - domain: 42
+Node, global: 25 - local: 9 - shadow: X - domain: 9
+Node, global: 26 - local: 10 - shadow: X - domain: 10
+Node, global: 27 - local: 11 - shadow: X - domain: 11
+Node, global: 28 - local: X - shadow: 16 - domain: 43
+Node, global: 29 - local: X - shadow: 17 - domain: 44
+Node, global: 30 - local: 12 - shadow: X - domain: 12
+Node, global: 31 - local: 13 - shadow: X - domain: 13
+Node, global: 32 - local: 14 - shadow: X - domain: 14
+Node, global: 33 - local: X - shadow: 18 - domain: 45
+Node, global: 34 - local: X - shadow: 19 - domain: 46
+Node, global: 35 - local: 15 - shadow: X - domain: 15
+Node, global: 36 - local: 16 - shadow: X - domain: 16
+Node, global: 37 - local: 17 - shadow: X - domain: 17
+Node, global: 38 - local: X - shadow: 20 - domain: 47
+Node, global: 39 - local: X - shadow: 21 - domain: 48
+Node, global: 40 - local: X - shadow: 22 - domain: 49
+Node, global: 41 - local: X - shadow: 23 - domain: 50
+Node, global: 42 - local: X - shadow: 24 - domain: 51
+Node, global: 43 - local: X - shadow: 25 - domain: 52
+Node, global: 44 - local: X - shadow: 26 - domain: 53
+Node, global: 45 - local: X - shadow: 27 - domain: 54
+Node, global: 46 - local: X - shadow: 28 - domain: 55
+Node, global: 47 - local: X - shadow: 29 - domain: 56
+Node, global: 48 - local: X - shadow: 30 - domain: 57
+Node, global: 49 - local: X - shadow: 31 - domain: 58
+Node, global: 50 - local: 18 - shadow: X - domain: 18
+Node, global: 51 - local: 19 - shadow: X - domain: 19
+Node, global: 52 - local: 20 - shadow: X - domain: 20
+Node, global: 53 - local: X - shadow: 32 - domain: 59
+Node, global: 54 - local: X - shadow: 33 - domain: 60
+Node, global: 55 - local: 21 - shadow: X - domain: 21
+Node, global: 56 - local: 22 - shadow: X - domain: 22
+Node, global: 57 - local: 23 - shadow: X - domain: 23
+Node, global: 58 - local: X - shadow: 34 - domain: 61
+Node, global: 59 - local: X - shadow: 35 - domain: 62
+Node, global: 60 - local: 24 - shadow: X - domain: 24
+Node, global: 61 - local: 25 - shadow: X - domain: 25
+Node, global: 62 - local: 26 - shadow: X - domain: 26
+Node, global: 63 - local: X - shadow: 36 - domain: 63
+Node, global: 64 - local: X - shadow: 37 - domain: 64
+Node, global: 65 - local: X - shadow: 38 - domain: 65
+Node, global: 66 - local: X - shadow: 39 - domain: 66
+Node, global: 67 - local: X - shadow: 40 - domain: 67
+Node, global: 68 - local: X - shadow: 41 - domain: 68
+Node, global: 69 - local: X - shadow: 42 - domain: 69
+Node, global: 70 - local: X - shadow: 43 - domain: 70
+Node, global: 71 - local: X - shadow: 44 - domain: 71
+Node, global: 72 - local: X - shadow: 45 - domain: 72
+Node, global: 73 - local: X - shadow: 46 - domain: 73
+Node, global: 74 - local: X - shadow: 47 - domain: 74
+Node, global: 75 - local: X - shadow: 48 - domain: 75
+Node, global: 76 - local: X - shadow: 49 - domain: 76
+Node, global: 77 - local: X - shadow: 50 - domain: 77
+Node, global: 78 - local: X - shadow: 51 - domain: 78
+Node, global: 79 - local: X - shadow: 52 - domain: 79
+Node, global: 80 - local: X - shadow: 53 - domain: 80
+Node, global: 81 - local: X - shadow: 54 - domain: 81
+Node, global: 82 - local: X - shadow: 55 - domain: 82
+Node, global: 83 - local: X - shadow: 56 - domain: 83
+Node, global: 84 - local: X - shadow: 57 - domain: 84
+Node, global: 85 - local: X - shadow: 58 - domain: 85
+Node, global: 86 - local: X - shadow: 59 - domain: 86
+Node, global: 87 - local: X - shadow: 60 - domain: 87
+Node, global: 88 - local: X - shadow: 61 - domain: 88
+Node, global: 89 - local: X - shadow: 62 - domain: 89
+Node, global: 90 - local: X - shadow: 63 - domain: 90
+Node, global: 91 - local: X - shadow: 64 - domain: 91
+Node, global: 92 - local: X - shadow: 65 - domain: 92
+Node, global: 93 - local: X - shadow: 66 - domain: 93
+Node, global: 94 - local: X - shadow: 67 - domain: 94
+Node, global: 95 - local: X - shadow: 68 - domain: 95
+Node, global: 96 - local: X - shadow: 69 - domain: 96
+Node, global: 97 - local: X - shadow: 70 - domain: 97
+Node, global: 98 - local: X - shadow: 71 - domain: 98
+Node, global: 99 - local: X - shadow: 72 - domain: 99
+Node, global: 100 - local: X - shadow: 73 - domain: 100
+Node, global: 101 - local: X - shadow: 74 - domain: 101
+Node, global: 102 - local: X - shadow: 75 - domain: 102
+Node, global: 103 - local: X - shadow: 76 - domain: 103
+Node, global: 104 - local: X - shadow: 77 - domain: 104
+Node, global: 105 - local: X - shadow: 78 - domain: 105
+Node, global: 106 - local: X - shadow: 79 - domain: 106
+Node, global: 107 - local: X - shadow: 80 - domain: 107
+Node, global: 108 - local: X - shadow: 81 - domain: 108
+Node, global: 109 - local: X - shadow: 82 - domain: 109
+Node, global: 110 - local: X - shadow: 83 - domain: 110
+Node, global: 111 - local: X - shadow: 84 - domain: 111
+Node, global: 112 - local: X - shadow: 85 - domain: 112
+Node, global: 113 - local: X - shadow: 86 - domain: 113
+Node, global: 114 - local: X - shadow: 87 - domain: 114
+Node, global: 115 - local: X - shadow: 88 - domain: 115
+Node, global: 116 - local: X - shadow: 89 - domain: 116
+Node, global: 117 - local: X - shadow: 90 - domain: 117
+Node, global: 118 - local: X - shadow: 91 - domain: 118
+Node, global: 119 - local: X - shadow: 92 - domain: 119
+Node, global: 120 - local: X - shadow: 93 - domain: 120
+Node, global: 121 - local: X - shadow: 94 - domain: 121
+Node, global: 122 - local: X - shadow: 95 - domain: 122
+Node, global: 123 - local: X - shadow: 96 - domain: 123
+Node, global: 124 - local: X - shadow: 97 - domain: 124
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 25
+Node, local: 10 - global: 26
+Node, local: 11 - global: 27
+Node, local: 12 - global: 30
+Node, local: 13 - global: 31
+Node, local: 14 - global: 32
+Node, local: 15 - global: 35
+Node, local: 16 - global: 36
+Node, local: 17 - global: 37
+Node, local: 18 - global: 50
+Node, local: 19 - global: 51
+Node, local: 20 - global: 52
+Node, local: 21 - global: 55
+Node, local: 22 - global: 56
+Node, local: 23 - global: 57
+Node, local: 24 - global: 60
+Node, local: 25 - global: 61
+Node, local: 26 - global: 62
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 25
+Node, domain: 10 - global: 26
+Node, domain: 11 - global: 27
+Node, domain: 12 - global: 30
+Node, domain: 13 - global: 31
+Node, domain: 14 - global: 32
+Node, domain: 15 - global: 35
+Node, domain: 16 - global: 36
+Node, domain: 17 - global: 37
+Node, domain: 18 - global: 50
+Node, domain: 19 - global: 51
+Node, domain: 20 - global: 52
+Node, domain: 21 - global: 55
+Node, domain: 22 - global: 56
+Node, domain: 23 - global: 57
+Node, domain: 24 - global: 60
+Node, domain: 25 - global: 61
+Node, domain: 26 - global: 62
+Node, domain: 27 - global: 3
+Node, domain: 28 - global: 4
+Node, domain: 29 - global: 8
+Node, domain: 30 - global: 9
+Node, domain: 31 - global: 13
+Node, domain: 32 - global: 14
+Node, domain: 33 - global: 15
+Node, domain: 34 - global: 16
+Node, domain: 35 - global: 17
+Node, domain: 36 - global: 18
+Node, domain: 37 - global: 19
+Node, domain: 38 - global: 20
+Node, domain: 39 - global: 21
+Node, domain: 40 - global: 22
+Node, domain: 41 - global: 23
+Node, domain: 42 - global: 24
+Node, domain: 43 - global: 28
+Node, domain: 44 - global: 29
+Node, domain: 45 - global: 33
+Node, domain: 46 - global: 34
+Node, domain: 47 - global: 38
+Node, domain: 48 - global: 39
+Node, domain: 49 - global: 40
+Node, domain: 50 - global: 41
+Node, domain: 51 - global: 42
+Node, domain: 52 - global: 43
+Node, domain: 53 - global: 44
+Node, domain: 54 - global: 45
+Node, domain: 55 - global: 46
+Node, domain: 56 - global: 47
+Node, domain: 57 - global: 48
+Node, domain: 58 - global: 49
+Node, domain: 59 - global: 53
+Node, domain: 60 - global: 54
+Node, domain: 61 - global: 58
+Node, domain: 62 - global: 59
+Node, domain: 63 - global: 63
+Node, domain: 64 - global: 64
+Node, domain: 65 - global: 65
+Node, domain: 66 - global: 66
+Node, domain: 67 - global: 67
+Node, domain: 68 - global: 68
+Node, domain: 69 - global: 69
+Node, domain: 70 - global: 70
+Node, domain: 71 - global: 71
+Node, domain: 72 - global: 72
+Node, domain: 73 - global: 73
+Node, domain: 74 - global: 74
+Node, domain: 75 - global: 75
+Node, domain: 76 - global: 76
+Node, domain: 77 - global: 77
+Node, domain: 78 - global: 78
+Node, domain: 79 - global: 79
+Node, domain: 80 - global: 80
+Node, domain: 81 - global: 81
+Node, domain: 82 - global: 82
+Node, domain: 83 - global: 83
+Node, domain: 84 - global: 84
+Node, domain: 85 - global: 85
+Node, domain: 86 - global: 86
+Node, domain: 87 - global: 87
+Node, domain: 88 - global: 88
+Node, domain: 89 - global: 89
+Node, domain: 90 - global: 90
+Node, domain: 91 - global: 91
+Node, domain: 92 - global: 92
+Node, domain: 93 - global: 93
+Node, domain: 94 - global: 94
+Node, domain: 95 - global: 95
+Node, domain: 96 - global: 96
+Node, domain: 97 - global: 97
+Node, domain: 98 - global: 98
+Node, domain: 99 - global: 99
+Node, domain: 100 - global: 100
+Node, domain: 101 - global: 101
+Node, domain: 102 - global: 102
+Node, domain: 103 - global: 103
+Node, domain: 104 - global: 104
+Node, domain: 105 - global: 105
+Node, domain: 106 - global: 106
+Node, domain: 107 - global: 107
+Node, domain: 108 - global: 108
+Node, domain: 109 - global: 109
+Node, domain: 110 - global: 110
+Node, domain: 111 - global: 111
+Node, domain: 112 - global: 112
+Node, domain: 113 - global: 113
+Node, domain: 114 - global: 114
+Node, domain: 115 - global: 115
+Node, domain: 116 - global: 116
+Node, domain: 117 - global: 117
+Node, domain: 118 - global: 118
+Node, domain: 119 - global: 119
+Node, domain: 120 - global: 120
+Node, domain: 121 - global: 121
+Node, domain: 122 - global: 122
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=3 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,467 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 7 of 8 in use (8 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060f00)
+		size : (2,2,2)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, True }
+partitionCounts: { 2, 2, 2 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 2 }
+	elementLocalCounts[1]: { 2, 2, 2 }
+	elementLocalCounts[2]: { 2, 2, 2 }
+	elementLocalCounts[3]: { 2, 2, 2 }
+	elementLocalCounts[4]: { 2, 2, 2 }
+	elementLocalCounts[5]: { 2, 2, 2 }
+	elementLocalCounts[6]: { 2, 2, 2 }
+	elementLocalCounts[7]: { 2, 2, 2 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 3 }
+	nodeLocalCounts[1]: { 3, 3, 3 }
+	nodeLocalCounts[2]: { 3, 3, 3 }
+	nodeLocalCounts[3]: { 3, 3, 3 }
+	nodeLocalCounts[4]: { 3, 3, 3 }
+	nodeLocalCounts[5]: { 3, 3, 3 }
+	nodeLocalCounts[6]: { 3, 3, 3 }
+	nodeLocalCounts[7]: { 3, 3, 3 }
+Element, global: 0 - local: X - shadow: 0 - domain: 8
+Element, global: 1 - local: X - shadow: 1 - domain: 9
+Element, global: 2 - local: X - shadow: 2 - domain: 10
+Element, global: 3 - local: X - shadow: 3 - domain: 11
+Element, global: 4 - local: X - shadow: 4 - domain: 12
+Element, global: 5 - local: X - shadow: 5 - domain: 13
+Element, global: 6 - local: X - shadow: 6 - domain: 14
+Element, global: 7 - local: X - shadow: 7 - domain: 15
+Element, global: 8 - local: X - shadow: 8 - domain: 16
+Element, global: 9 - local: X - shadow: 9 - domain: 17
+Element, global: 10 - local: X - shadow: 10 - domain: 18
+Element, global: 11 - local: X - shadow: 11 - domain: 19
+Element, global: 12 - local: X - shadow: 12 - domain: 20
+Element, global: 13 - local: X - shadow: 13 - domain: 21
+Element, global: 14 - local: X - shadow: 14 - domain: 22
+Element, global: 15 - local: X - shadow: 15 - domain: 23
+Element, global: 16 - local: X - shadow: 16 - domain: 24
+Element, global: 17 - local: X - shadow: 17 - domain: 25
+Element, global: 18 - local: X - shadow: 18 - domain: 26
+Element, global: 19 - local: X - shadow: 19 - domain: 27
+Element, global: 20 - local: X - shadow: 20 - domain: 28
+Element, global: 21 - local: X - shadow: 21 - domain: 29
+Element, global: 22 - local: X - shadow: 22 - domain: 30
+Element, global: 23 - local: X - shadow: 23 - domain: 31
+Element, global: 24 - local: X - shadow: 24 - domain: 32
+Element, global: 25 - local: X - shadow: 25 - domain: 33
+Element, global: 26 - local: X - shadow: 26 - domain: 34
+Element, global: 27 - local: X - shadow: 27 - domain: 35
+Element, global: 28 - local: X - shadow: 28 - domain: 36
+Element, global: 29 - local: X - shadow: 29 - domain: 37
+Element, global: 30 - local: X - shadow: 30 - domain: 38
+Element, global: 31 - local: X - shadow: 31 - domain: 39
+Element, global: 32 - local: X - shadow: 32 - domain: 40
+Element, global: 33 - local: X - shadow: 33 - domain: 41
+Element, global: 34 - local: X - shadow: 34 - domain: 42
+Element, global: 35 - local: X - shadow: 35 - domain: 43
+Element, global: 36 - local: X - shadow: 36 - domain: 44
+Element, global: 37 - local: X - shadow: 37 - domain: 45
+Element, global: 38 - local: X - shadow: 38 - domain: 46
+Element, global: 39 - local: X - shadow: 39 - domain: 47
+Element, global: 40 - local: X - shadow: 40 - domain: 48
+Element, global: 41 - local: X - shadow: 41 - domain: 49
+Element, global: 42 - local: 0 - shadow: X - domain: 0
+Element, global: 43 - local: 1 - shadow: X - domain: 1
+Element, global: 44 - local: X - shadow: 42 - domain: 50
+Element, global: 45 - local: X - shadow: 43 - domain: 51
+Element, global: 46 - local: 2 - shadow: X - domain: 2
+Element, global: 47 - local: 3 - shadow: X - domain: 3
+Element, global: 48 - local: X - shadow: 44 - domain: 52
+Element, global: 49 - local: X - shadow: 45 - domain: 53
+Element, global: 50 - local: X - shadow: 46 - domain: 54
+Element, global: 51 - local: X - shadow: 47 - domain: 55
+Element, global: 52 - local: X - shadow: 48 - domain: 56
+Element, global: 53 - local: X - shadow: 49 - domain: 57
+Element, global: 54 - local: X - shadow: 50 - domain: 58
+Element, global: 55 - local: X - shadow: 51 - domain: 59
+Element, global: 56 - local: X - shadow: 52 - domain: 60
+Element, global: 57 - local: X - shadow: 53 - domain: 61
+Element, global: 58 - local: 4 - shadow: X - domain: 4
+Element, global: 59 - local: 5 - shadow: X - domain: 5
+Element, global: 60 - local: X - shadow: 54 - domain: 62
+Element, global: 61 - local: X - shadow: 55 - domain: 63
+Element, global: 62 - local: 6 - shadow: X - domain: 6
+Element, global: 63 - local: 7 - shadow: X - domain: 7
+
+Element, local: 0 - global: 42
+Element, local: 1 - global: 43
+Element, local: 2 - global: 46
+Element, local: 3 - global: 47
+Element, local: 4 - global: 58
+Element, local: 5 - global: 59
+Element, local: 6 - global: 62
+Element, local: 7 - global: 63
+
+Element, domain: 0 - global: 42
+Element, domain: 1 - global: 43
+Element, domain: 2 - global: 46
+Element, domain: 3 - global: 47
+Element, domain: 4 - global: 58
+Element, domain: 5 - global: 59
+Element, domain: 6 - global: 62
+Element, domain: 7 - global: 63
+Element, domain: 8 - global: 0
+Element, domain: 9 - global: 1
+Element, domain: 10 - global: 2
+Element, domain: 11 - global: 3
+Element, domain: 12 - global: 4
+Element, domain: 13 - global: 5
+Element, domain: 14 - global: 6
+Element, domain: 15 - global: 7
+Element, domain: 16 - global: 8
+Element, domain: 17 - global: 9
+Element, domain: 18 - global: 10
+Element, domain: 19 - global: 11
+Element, domain: 20 - global: 12
+Element, domain: 21 - global: 13
+Element, domain: 22 - global: 14
+Element, domain: 23 - global: 15
+Element, domain: 24 - global: 16
+Element, domain: 25 - global: 17
+Element, domain: 26 - global: 18
+Element, domain: 27 - global: 19
+Element, domain: 28 - global: 20
+Element, domain: 29 - global: 21
+Element, domain: 30 - global: 22
+Element, domain: 31 - global: 23
+Element, domain: 32 - global: 24
+Element, domain: 33 - global: 25
+Element, domain: 34 - global: 26
+Element, domain: 35 - global: 27
+Element, domain: 36 - global: 28
+Element, domain: 37 - global: 29
+Element, domain: 38 - global: 30
+Element, domain: 39 - global: 31
+Element, domain: 40 - global: 32
+Element, domain: 41 - global: 33
+Element, domain: 42 - global: 34
+Element, domain: 43 - global: 35
+Element, domain: 44 - global: 36
+Element, domain: 45 - global: 37
+Element, domain: 46 - global: 38
+Element, domain: 47 - global: 39
+Element, domain: 48 - global: 40
+Element, domain: 49 - global: 41
+Element, domain: 50 - global: 44
+Element, domain: 51 - global: 45
+Element, domain: 52 - global: 48
+Element, domain: 53 - global: 49
+Element, domain: 54 - global: 50
+Element, domain: 55 - global: 51
+Element, domain: 56 - global: 52
+Element, domain: 57 - global: 53
+Element, domain: 58 - global: 54
+Element, domain: 59 - global: 55
+Element, domain: 60 - global: 56
+Element, domain: 61 - global: 57
+Element, domain: 62 - global: 60
+Element, domain: 63 - global: 61
+
+Node, global: 0 - local: X - shadow: 0 - domain: 27
+Node, global: 1 - local: X - shadow: 1 - domain: 28
+Node, global: 2 - local: X - shadow: 2 - domain: 29
+Node, global: 3 - local: X - shadow: 3 - domain: 30
+Node, global: 4 - local: X - shadow: 4 - domain: 31
+Node, global: 5 - local: X - shadow: 5 - domain: 32
+Node, global: 6 - local: X - shadow: 6 - domain: 33
+Node, global: 7 - local: X - shadow: 7 - domain: 34
+Node, global: 8 - local: X - shadow: 8 - domain: 35
+Node, global: 9 - local: X - shadow: 9 - domain: 36
+Node, global: 10 - local: X - shadow: 10 - domain: 37
+Node, global: 11 - local: X - shadow: 11 - domain: 38
+Node, global: 12 - local: X - shadow: 12 - domain: 39
+Node, global: 13 - local: X - shadow: 13 - domain: 40
+Node, global: 14 - local: X - shadow: 14 - domain: 41
+Node, global: 15 - local: X - shadow: 15 - domain: 42
+Node, global: 16 - local: X - shadow: 16 - domain: 43
+Node, global: 17 - local: X - shadow: 17 - domain: 44
+Node, global: 18 - local: X - shadow: 18 - domain: 45
+Node, global: 19 - local: X - shadow: 19 - domain: 46
+Node, global: 20 - local: X - shadow: 20 - domain: 47
+Node, global: 21 - local: X - shadow: 21 - domain: 48
+Node, global: 22 - local: X - shadow: 22 - domain: 49
+Node, global: 23 - local: X - shadow: 23 - domain: 50
+Node, global: 24 - local: X - shadow: 24 - domain: 51
+Node, global: 25 - local: X - shadow: 25 - domain: 52
+Node, global: 26 - local: X - shadow: 26 - domain: 53
+Node, global: 27 - local: X - shadow: 27 - domain: 54
+Node, global: 28 - local: X - shadow: 28 - domain: 55
+Node, global: 29 - local: X - shadow: 29 - domain: 56
+Node, global: 30 - local: X - shadow: 30 - domain: 57
+Node, global: 31 - local: X - shadow: 31 - domain: 58
+Node, global: 32 - local: X - shadow: 32 - domain: 59
+Node, global: 33 - local: X - shadow: 33 - domain: 60
+Node, global: 34 - local: X - shadow: 34 - domain: 61
+Node, global: 35 - local: X - shadow: 35 - domain: 62
+Node, global: 36 - local: X - shadow: 36 - domain: 63
+Node, global: 37 - local: X - shadow: 37 - domain: 64
+Node, global: 38 - local: X - shadow: 38 - domain: 65
+Node, global: 39 - local: X - shadow: 39 - domain: 66
+Node, global: 40 - local: X - shadow: 40 - domain: 67
+Node, global: 41 - local: X - shadow: 41 - domain: 68
+Node, global: 42 - local: X - shadow: 42 - domain: 69
+Node, global: 43 - local: X - shadow: 43 - domain: 70
+Node, global: 44 - local: X - shadow: 44 - domain: 71
+Node, global: 45 - local: X - shadow: 45 - domain: 72
+Node, global: 46 - local: X - shadow: 46 - domain: 73
+Node, global: 47 - local: X - shadow: 47 - domain: 74
+Node, global: 48 - local: X - shadow: 48 - domain: 75
+Node, global: 49 - local: X - shadow: 49 - domain: 76
+Node, global: 50 - local: X - shadow: 50 - domain: 77
+Node, global: 51 - local: X - shadow: 51 - domain: 78
+Node, global: 52 - local: X - shadow: 52 - domain: 79
+Node, global: 53 - local: X - shadow: 53 - domain: 80
+Node, global: 54 - local: X - shadow: 54 - domain: 81
+Node, global: 55 - local: X - shadow: 55 - domain: 82
+Node, global: 56 - local: X - shadow: 56 - domain: 83
+Node, global: 57 - local: X - shadow: 57 - domain: 84
+Node, global: 58 - local: X - shadow: 58 - domain: 85
+Node, global: 59 - local: X - shadow: 59 - domain: 86
+Node, global: 60 - local: X - shadow: 60 - domain: 87
+Node, global: 61 - local: X - shadow: 61 - domain: 88
+Node, global: 62 - local: 0 - shadow: X - domain: 0
+Node, global: 63 - local: 1 - shadow: X - domain: 1
+Node, global: 64 - local: 2 - shadow: X - domain: 2
+Node, global: 65 - local: X - shadow: 62 - domain: 89
+Node, global: 66 - local: X - shadow: 63 - domain: 90
+Node, global: 67 - local: 3 - shadow: X - domain: 3
+Node, global: 68 - local: 4 - shadow: X - domain: 4
+Node, global: 69 - local: 5 - shadow: X - domain: 5
+Node, global: 70 - local: X - shadow: 64 - domain: 91
+Node, global: 71 - local: X - shadow: 65 - domain: 92
+Node, global: 72 - local: 6 - shadow: X - domain: 6
+Node, global: 73 - local: 7 - shadow: X - domain: 7
+Node, global: 74 - local: 8 - shadow: X - domain: 8
+Node, global: 75 - local: X - shadow: 66 - domain: 93
+Node, global: 76 - local: X - shadow: 67 - domain: 94
+Node, global: 77 - local: X - shadow: 68 - domain: 95
+Node, global: 78 - local: X - shadow: 69 - domain: 96
+Node, global: 79 - local: X - shadow: 70 - domain: 97
+Node, global: 80 - local: X - shadow: 71 - domain: 98
+Node, global: 81 - local: X - shadow: 72 - domain: 99
+Node, global: 82 - local: X - shadow: 73 - domain: 100
+Node, global: 83 - local: X - shadow: 74 - domain: 101
+Node, global: 84 - local: X - shadow: 75 - domain: 102
+Node, global: 85 - local: X - shadow: 76 - domain: 103
+Node, global: 86 - local: X - shadow: 77 - domain: 104
+Node, global: 87 - local: 9 - shadow: X - domain: 9
+Node, global: 88 - local: 10 - shadow: X - domain: 10
+Node, global: 89 - local: 11 - shadow: X - domain: 11
+Node, global: 90 - local: X - shadow: 78 - domain: 105
+Node, global: 91 - local: X - shadow: 79 - domain: 106
+Node, global: 92 - local: 12 - shadow: X - domain: 12
+Node, global: 93 - local: 13 - shadow: X - domain: 13
+Node, global: 94 - local: 14 - shadow: X - domain: 14
+Node, global: 95 - local: X - shadow: 80 - domain: 107
+Node, global: 96 - local: X - shadow: 81 - domain: 108
+Node, global: 97 - local: 15 - shadow: X - domain: 15
+Node, global: 98 - local: 16 - shadow: X - domain: 16
+Node, global: 99 - local: 17 - shadow: X - domain: 17
+Node, global: 100 - local: X - shadow: 82 - domain: 109
+Node, global: 101 - local: X - shadow: 83 - domain: 110
+Node, global: 102 - local: X - shadow: 84 - domain: 111
+Node, global: 103 - local: X - shadow: 85 - domain: 112
+Node, global: 104 - local: X - shadow: 86 - domain: 113
+Node, global: 105 - local: X - shadow: 87 - domain: 114
+Node, global: 106 - local: X - shadow: 88 - domain: 115
+Node, global: 107 - local: X - shadow: 89 - domain: 116
+Node, global: 108 - local: X - shadow: 90 - domain: 117
+Node, global: 109 - local: X - shadow: 91 - domain: 118
+Node, global: 110 - local: X - shadow: 92 - domain: 119
+Node, global: 111 - local: X - shadow: 93 - domain: 120
+Node, global: 112 - local: 18 - shadow: X - domain: 18
+Node, global: 113 - local: 19 - shadow: X - domain: 19
+Node, global: 114 - local: 20 - shadow: X - domain: 20
+Node, global: 115 - local: X - shadow: 94 - domain: 121
+Node, global: 116 - local: X - shadow: 95 - domain: 122
+Node, global: 117 - local: 21 - shadow: X - domain: 21
+Node, global: 118 - local: 22 - shadow: X - domain: 22
+Node, global: 119 - local: 23 - shadow: X - domain: 23
+Node, global: 120 - local: X - shadow: 96 - domain: 123
+Node, global: 121 - local: X - shadow: 97 - domain: 124
+Node, global: 122 - local: 24 - shadow: X - domain: 24
+Node, global: 123 - local: 25 - shadow: X - domain: 25
+Node, global: 124 - local: 26 - shadow: X - domain: 26
+
+Node, local: 0 - global: 62
+Node, local: 1 - global: 63
+Node, local: 2 - global: 64
+Node, local: 3 - global: 67
+Node, local: 4 - global: 68
+Node, local: 5 - global: 69
+Node, local: 6 - global: 72
+Node, local: 7 - global: 73
+Node, local: 8 - global: 74
+Node, local: 9 - global: 87
+Node, local: 10 - global: 88
+Node, local: 11 - global: 89
+Node, local: 12 - global: 92
+Node, local: 13 - global: 93
+Node, local: 14 - global: 94
+Node, local: 15 - global: 97
+Node, local: 16 - global: 98
+Node, local: 17 - global: 99
+Node, local: 18 - global: 112
+Node, local: 19 - global: 113
+Node, local: 20 - global: 114
+Node, local: 21 - global: 117
+Node, local: 22 - global: 118
+Node, local: 23 - global: 119
+Node, local: 24 - global: 122
+Node, local: 25 - global: 123
+Node, local: 26 - global: 124
+
+Node, domain: 0 - global: 62
+Node, domain: 1 - global: 63
+Node, domain: 2 - global: 64
+Node, domain: 3 - global: 67
+Node, domain: 4 - global: 68
+Node, domain: 5 - global: 69
+Node, domain: 6 - global: 72
+Node, domain: 7 - global: 73
+Node, domain: 8 - global: 74
+Node, domain: 9 - global: 87
+Node, domain: 10 - global: 88
+Node, domain: 11 - global: 89
+Node, domain: 12 - global: 92
+Node, domain: 13 - global: 93
+Node, domain: 14 - global: 94
+Node, domain: 15 - global: 97
+Node, domain: 16 - global: 98
+Node, domain: 17 - global: 99
+Node, domain: 18 - global: 112
+Node, domain: 19 - global: 113
+Node, domain: 20 - global: 114
+Node, domain: 21 - global: 117
+Node, domain: 22 - global: 118
+Node, domain: 23 - global: 119
+Node, domain: 24 - global: 122
+Node, domain: 25 - global: 123
+Node, domain: 26 - global: 124
+Node, domain: 27 - global: 0
+Node, domain: 28 - global: 1
+Node, domain: 29 - global: 2
+Node, domain: 30 - global: 3
+Node, domain: 31 - global: 4
+Node, domain: 32 - global: 5
+Node, domain: 33 - global: 6
+Node, domain: 34 - global: 7
+Node, domain: 35 - global: 8
+Node, domain: 36 - global: 9
+Node, domain: 37 - global: 10
+Node, domain: 38 - global: 11
+Node, domain: 39 - global: 12
+Node, domain: 40 - global: 13
+Node, domain: 41 - global: 14
+Node, domain: 42 - global: 15
+Node, domain: 43 - global: 16
+Node, domain: 44 - global: 17
+Node, domain: 45 - global: 18
+Node, domain: 46 - global: 19
+Node, domain: 47 - global: 20
+Node, domain: 48 - global: 21
+Node, domain: 49 - global: 22
+Node, domain: 50 - global: 23
+Node, domain: 51 - global: 24
+Node, domain: 52 - global: 25
+Node, domain: 53 - global: 26
+Node, domain: 54 - global: 27
+Node, domain: 55 - global: 28
+Node, domain: 56 - global: 29
+Node, domain: 57 - global: 30
+Node, domain: 58 - global: 31
+Node, domain: 59 - global: 32
+Node, domain: 60 - global: 33
+Node, domain: 61 - global: 34
+Node, domain: 62 - global: 35
+Node, domain: 63 - global: 36
+Node, domain: 64 - global: 37
+Node, domain: 65 - global: 38
+Node, domain: 66 - global: 39
+Node, domain: 67 - global: 40
+Node, domain: 68 - global: 41
+Node, domain: 69 - global: 42
+Node, domain: 70 - global: 43
+Node, domain: 71 - global: 44
+Node, domain: 72 - global: 45
+Node, domain: 73 - global: 46
+Node, domain: 74 - global: 47
+Node, domain: 75 - global: 48
+Node, domain: 76 - global: 49
+Node, domain: 77 - global: 50
+Node, domain: 78 - global: 51
+Node, domain: 79 - global: 52
+Node, domain: 80 - global: 53
+Node, domain: 81 - global: 54
+Node, domain: 82 - global: 55
+Node, domain: 83 - global: 56
+Node, domain: 84 - global: 57
+Node, domain: 85 - global: 58
+Node, domain: 86 - global: 59
+Node, domain: 87 - global: 60
+Node, domain: 88 - global: 61
+Node, domain: 89 - global: 65
+Node, domain: 90 - global: 66
+Node, domain: 91 - global: 70
+Node, domain: 92 - global: 71
+Node, domain: 93 - global: 75
+Node, domain: 94 - global: 76
+Node, domain: 95 - global: 77
+Node, domain: 96 - global: 78
+Node, domain: 97 - global: 79
+Node, domain: 98 - global: 80
+Node, domain: 99 - global: 81
+Node, domain: 100 - global: 82
+Node, domain: 101 - global: 83
+Node, domain: 102 - global: 84
+Node, domain: 103 - global: 85
+Node, domain: 104 - global: 86
+Node, domain: 105 - global: 90
+Node, domain: 106 - global: 91
+Node, domain: 107 - global: 95
+Node, domain: 108 - global: 96
+Node, domain: 109 - global: 100
+Node, domain: 110 - global: 101
+Node, domain: 111 - global: 102
+Node, domain: 112 - global: 103
+Node, domain: 113 - global: 104
+Node, domain: 114 - global: 105
+Node, domain: 115 - global: 106
+Node, domain: 116 - global: 107
+Node, domain: 117 - global: 108
+Node, domain: 118 - global: 109
+Node, domain: 119 - global: 110
+Node, domain: 120 - global: 111
+Node, domain: 121 - global: 115
+Node, domain: 122 - global: 116
+Node, domain: 123 - global: 120
+Node, domain: 124 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=3 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,369 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 8 in use (8 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8061f28)
+		size : (2,2,2)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, True }
+partitionCounts: { 2, 2, 2 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 2 }
+	elementLocalCounts[1]: { 2, 2, 2 }
+	elementLocalCounts[2]: { 2, 2, 2 }
+	elementLocalCounts[3]: { 2, 2, 2 }
+	elementLocalCounts[4]: { 2, 2, 2 }
+	elementLocalCounts[5]: { 2, 2, 2 }
+	elementLocalCounts[6]: { 2, 2, 2 }
+	elementLocalCounts[7]: { 2, 2, 2 }
+elementDomainCounts: { 3, 3, 3 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 3 }
+	nodeLocalCounts[1]: { 3, 3, 3 }
+	nodeLocalCounts[2]: { 3, 3, 3 }
+	nodeLocalCounts[3]: { 3, 3, 3 }
+	nodeLocalCounts[4]: { 3, 3, 3 }
+	nodeLocalCounts[5]: { 3, 3, 3 }
+	nodeLocalCounts[6]: { 3, 3, 3 }
+	nodeLocalCounts[7]: { 3, 3, 3 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 8
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 1 - domain: 9
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: X - shadow: 2 - domain: 10
+Element, global: 9 - local: X - shadow: 3 - domain: 11
+Element, global: 10 - local: X - shadow: 4 - domain: 12
+Element, global: 11 - local: X - shadow: X - domain: X
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: X - domain: X
+Element, global: 14 - local: X - shadow: X - domain: X
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: 4 - shadow: X - domain: 4
+Element, global: 17 - local: 5 - shadow: X - domain: 5
+Element, global: 18 - local: X - shadow: 5 - domain: 13
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: 6 - shadow: X - domain: 6
+Element, global: 21 - local: 7 - shadow: X - domain: 7
+Element, global: 22 - local: X - shadow: 6 - domain: 14
+Element, global: 23 - local: X - shadow: X - domain: X
+Element, global: 24 - local: X - shadow: 7 - domain: 15
+Element, global: 25 - local: X - shadow: 8 - domain: 16
+Element, global: 26 - local: X - shadow: 9 - domain: 17
+Element, global: 27 - local: X - shadow: X - domain: X
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: X - domain: X
+Element, global: 30 - local: X - shadow: X - domain: X
+Element, global: 31 - local: X - shadow: X - domain: X
+Element, global: 32 - local: X - shadow: 10 - domain: 18
+Element, global: 33 - local: X - shadow: 11 - domain: 19
+Element, global: 34 - local: X - shadow: 12 - domain: 20
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: X - shadow: 13 - domain: 21
+Element, global: 37 - local: X - shadow: 14 - domain: 22
+Element, global: 38 - local: X - shadow: 15 - domain: 23
+Element, global: 39 - local: X - shadow: X - domain: X
+Element, global: 40 - local: X - shadow: 16 - domain: 24
+Element, global: 41 - local: X - shadow: 17 - domain: 25
+Element, global: 42 - local: X - shadow: 18 - domain: 26
+Element, global: 43 - local: X - shadow: X - domain: X
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: X - domain: X
+Element, global: 46 - local: X - shadow: X - domain: X
+Element, global: 47 - local: X - shadow: X - domain: X
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: X - domain: X
+Element, global: 50 - local: X - shadow: X - domain: X
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: X - shadow: X - domain: X
+Element, global: 53 - local: X - shadow: X - domain: X
+Element, global: 54 - local: X - shadow: X - domain: X
+Element, global: 55 - local: X - shadow: X - domain: X
+Element, global: 56 - local: X - shadow: X - domain: X
+Element, global: 57 - local: X - shadow: X - domain: X
+Element, global: 58 - local: X - shadow: X - domain: X
+Element, global: 59 - local: X - shadow: X - domain: X
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: X - domain: X
+Element, global: 62 - local: X - shadow: X - domain: X
+Element, global: 63 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 16
+Element, local: 5 - global: 17
+Element, local: 6 - global: 20
+Element, local: 7 - global: 21
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 16
+Element, domain: 5 - global: 17
+Element, domain: 6 - global: 20
+Element, domain: 7 - global: 21
+Element, domain: 8 - global: 2
+Element, domain: 9 - global: 6
+Element, domain: 10 - global: 8
+Element, domain: 11 - global: 9
+Element, domain: 12 - global: 10
+Element, domain: 13 - global: 18
+Element, domain: 14 - global: 22
+Element, domain: 15 - global: 24
+Element, domain: 16 - global: 25
+Element, domain: 17 - global: 26
+Element, domain: 18 - global: 32
+Element, domain: 19 - global: 33
+Element, domain: 20 - global: 34
+Element, domain: 21 - global: 36
+Element, domain: 22 - global: 37
+Element, domain: 23 - global: 38
+Element, domain: 24 - global: 40
+Element, domain: 25 - global: 41
+Element, domain: 26 - global: 42
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 27
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 1 - domain: 28
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 2 - domain: 29
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: 3 - domain: 30
+Node, global: 16 - local: X - shadow: 4 - domain: 31
+Node, global: 17 - local: X - shadow: 5 - domain: 32
+Node, global: 18 - local: X - shadow: 6 - domain: 33
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: 9 - shadow: X - domain: 9
+Node, global: 26 - local: 10 - shadow: X - domain: 10
+Node, global: 27 - local: 11 - shadow: X - domain: 11
+Node, global: 28 - local: X - shadow: 7 - domain: 34
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: 12 - shadow: X - domain: 12
+Node, global: 31 - local: 13 - shadow: X - domain: 13
+Node, global: 32 - local: 14 - shadow: X - domain: 14
+Node, global: 33 - local: X - shadow: 8 - domain: 35
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: 15 - shadow: X - domain: 15
+Node, global: 36 - local: 16 - shadow: X - domain: 16
+Node, global: 37 - local: 17 - shadow: X - domain: 17
+Node, global: 38 - local: X - shadow: 9 - domain: 36
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: X - shadow: 10 - domain: 37
+Node, global: 41 - local: X - shadow: 11 - domain: 38
+Node, global: 42 - local: X - shadow: 12 - domain: 39
+Node, global: 43 - local: X - shadow: 13 - domain: 40
+Node, global: 44 - local: X - shadow: X - domain: X
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: X - domain: X
+Node, global: 47 - local: X - shadow: X - domain: X
+Node, global: 48 - local: X - shadow: X - domain: X
+Node, global: 49 - local: X - shadow: X - domain: X
+Node, global: 50 - local: 18 - shadow: X - domain: 18
+Node, global: 51 - local: 19 - shadow: X - domain: 19
+Node, global: 52 - local: 20 - shadow: X - domain: 20
+Node, global: 53 - local: X - shadow: 14 - domain: 41
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: 21 - shadow: X - domain: 21
+Node, global: 56 - local: 22 - shadow: X - domain: 22
+Node, global: 57 - local: 23 - shadow: X - domain: 23
+Node, global: 58 - local: X - shadow: 15 - domain: 42
+Node, global: 59 - local: X - shadow: X - domain: X
+Node, global: 60 - local: 24 - shadow: X - domain: 24
+Node, global: 61 - local: 25 - shadow: X - domain: 25
+Node, global: 62 - local: 26 - shadow: X - domain: 26
+Node, global: 63 - local: X - shadow: 16 - domain: 43
+Node, global: 64 - local: X - shadow: X - domain: X
+Node, global: 65 - local: X - shadow: 17 - domain: 44
+Node, global: 66 - local: X - shadow: 18 - domain: 45
+Node, global: 67 - local: X - shadow: 19 - domain: 46
+Node, global: 68 - local: X - shadow: 20 - domain: 47
+Node, global: 69 - local: X - shadow: X - domain: X
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: X - domain: X
+Node, global: 72 - local: X - shadow: X - domain: X
+Node, global: 73 - local: X - shadow: X - domain: X
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: X - shadow: 21 - domain: 48
+Node, global: 76 - local: X - shadow: 22 - domain: 49
+Node, global: 77 - local: X - shadow: 23 - domain: 50
+Node, global: 78 - local: X - shadow: 24 - domain: 51
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: X - shadow: 25 - domain: 52
+Node, global: 81 - local: X - shadow: 26 - domain: 53
+Node, global: 82 - local: X - shadow: 27 - domain: 54
+Node, global: 83 - local: X - shadow: 28 - domain: 55
+Node, global: 84 - local: X - shadow: X - domain: X
+Node, global: 85 - local: X - shadow: 29 - domain: 56
+Node, global: 86 - local: X - shadow: 30 - domain: 57
+Node, global: 87 - local: X - shadow: 31 - domain: 58
+Node, global: 88 - local: X - shadow: 32 - domain: 59
+Node, global: 89 - local: X - shadow: X - domain: X
+Node, global: 90 - local: X - shadow: 33 - domain: 60
+Node, global: 91 - local: X - shadow: 34 - domain: 61
+Node, global: 92 - local: X - shadow: 35 - domain: 62
+Node, global: 93 - local: X - shadow: 36 - domain: 63
+Node, global: 94 - local: X - shadow: X - domain: X
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: X - domain: X
+Node, global: 97 - local: X - shadow: X - domain: X
+Node, global: 98 - local: X - shadow: X - domain: X
+Node, global: 99 - local: X - shadow: X - domain: X
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: X - domain: X
+Node, global: 102 - local: X - shadow: X - domain: X
+Node, global: 103 - local: X - shadow: X - domain: X
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: X - domain: X
+Node, global: 107 - local: X - shadow: X - domain: X
+Node, global: 108 - local: X - shadow: X - domain: X
+Node, global: 109 - local: X - shadow: X - domain: X
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: X - domain: X
+Node, global: 112 - local: X - shadow: X - domain: X
+Node, global: 113 - local: X - shadow: X - domain: X
+Node, global: 114 - local: X - shadow: X - domain: X
+Node, global: 115 - local: X - shadow: X - domain: X
+Node, global: 116 - local: X - shadow: X - domain: X
+Node, global: 117 - local: X - shadow: X - domain: X
+Node, global: 118 - local: X - shadow: X - domain: X
+Node, global: 119 - local: X - shadow: X - domain: X
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: X - domain: X
+Node, global: 122 - local: X - shadow: X - domain: X
+Node, global: 123 - local: X - shadow: X - domain: X
+Node, global: 124 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 25
+Node, local: 10 - global: 26
+Node, local: 11 - global: 27
+Node, local: 12 - global: 30
+Node, local: 13 - global: 31
+Node, local: 14 - global: 32
+Node, local: 15 - global: 35
+Node, local: 16 - global: 36
+Node, local: 17 - global: 37
+Node, local: 18 - global: 50
+Node, local: 19 - global: 51
+Node, local: 20 - global: 52
+Node, local: 21 - global: 55
+Node, local: 22 - global: 56
+Node, local: 23 - global: 57
+Node, local: 24 - global: 60
+Node, local: 25 - global: 61
+Node, local: 26 - global: 62
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 25
+Node, domain: 10 - global: 26
+Node, domain: 11 - global: 27
+Node, domain: 12 - global: 30
+Node, domain: 13 - global: 31
+Node, domain: 14 - global: 32
+Node, domain: 15 - global: 35
+Node, domain: 16 - global: 36
+Node, domain: 17 - global: 37
+Node, domain: 18 - global: 50
+Node, domain: 19 - global: 51
+Node, domain: 20 - global: 52
+Node, domain: 21 - global: 55
+Node, domain: 22 - global: 56
+Node, domain: 23 - global: 57
+Node, domain: 24 - global: 60
+Node, domain: 25 - global: 61
+Node, domain: 26 - global: 62
+Node, domain: 27 - global: 3
+Node, domain: 28 - global: 8
+Node, domain: 29 - global: 13
+Node, domain: 30 - global: 15
+Node, domain: 31 - global: 16
+Node, domain: 32 - global: 17
+Node, domain: 33 - global: 18
+Node, domain: 34 - global: 28
+Node, domain: 35 - global: 33
+Node, domain: 36 - global: 38
+Node, domain: 37 - global: 40
+Node, domain: 38 - global: 41
+Node, domain: 39 - global: 42
+Node, domain: 40 - global: 43
+Node, domain: 41 - global: 53
+Node, domain: 42 - global: 58
+Node, domain: 43 - global: 63
+Node, domain: 44 - global: 65
+Node, domain: 45 - global: 66
+Node, domain: 46 - global: 67
+Node, domain: 47 - global: 68
+Node, domain: 48 - global: 75
+Node, domain: 49 - global: 76
+Node, domain: 50 - global: 77
+Node, domain: 51 - global: 78
+Node, domain: 52 - global: 80
+Node, domain: 53 - global: 81
+Node, domain: 54 - global: 82
+Node, domain: 55 - global: 83
+Node, domain: 56 - global: 85
+Node, domain: 57 - global: 86
+Node, domain: 58 - global: 87
+Node, domain: 59 - global: 88
+Node, domain: 60 - global: 90
+Node, domain: 61 - global: 91
+Node, domain: 62 - global: 92
+Node, domain: 63 - global: 93
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=3" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,369 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 7 of 8 in use (8 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060ea8)
+		size : (2,2,2)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, True, True }
+partitionCounts: { 2, 2, 2 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 2, 2 }
+	elementLocalCounts[1]: { 2, 2, 2 }
+	elementLocalCounts[2]: { 2, 2, 2 }
+	elementLocalCounts[3]: { 2, 2, 2 }
+	elementLocalCounts[4]: { 2, 2, 2 }
+	elementLocalCounts[5]: { 2, 2, 2 }
+	elementLocalCounts[6]: { 2, 2, 2 }
+	elementLocalCounts[7]: { 2, 2, 2 }
+elementDomainCounts: { 3, 3, 3 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 3, 3 }
+	nodeLocalCounts[1]: { 3, 3, 3 }
+	nodeLocalCounts[2]: { 3, 3, 3 }
+	nodeLocalCounts[3]: { 3, 3, 3 }
+	nodeLocalCounts[4]: { 3, 3, 3 }
+	nodeLocalCounts[5]: { 3, 3, 3 }
+	nodeLocalCounts[6]: { 3, 3, 3 }
+	nodeLocalCounts[7]: { 3, 3, 3 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: X - domain: X
+Element, global: 6 - local: X - shadow: X - domain: X
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: X - domain: X
+Element, global: 10 - local: X - shadow: X - domain: X
+Element, global: 11 - local: X - shadow: X - domain: X
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: X - domain: X
+Element, global: 14 - local: X - shadow: X - domain: X
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: X - shadow: X - domain: X
+Element, global: 17 - local: X - shadow: X - domain: X
+Element, global: 18 - local: X - shadow: X - domain: X
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: X - shadow: X - domain: X
+Element, global: 21 - local: X - shadow: 0 - domain: 8
+Element, global: 22 - local: X - shadow: 1 - domain: 9
+Element, global: 23 - local: X - shadow: 2 - domain: 10
+Element, global: 24 - local: X - shadow: X - domain: X
+Element, global: 25 - local: X - shadow: 3 - domain: 11
+Element, global: 26 - local: X - shadow: 4 - domain: 12
+Element, global: 27 - local: X - shadow: 5 - domain: 13
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: 6 - domain: 14
+Element, global: 30 - local: X - shadow: 7 - domain: 15
+Element, global: 31 - local: X - shadow: 8 - domain: 16
+Element, global: 32 - local: X - shadow: X - domain: X
+Element, global: 33 - local: X - shadow: X - domain: X
+Element, global: 34 - local: X - shadow: X - domain: X
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: X - shadow: X - domain: X
+Element, global: 37 - local: X - shadow: 9 - domain: 17
+Element, global: 38 - local: X - shadow: 10 - domain: 18
+Element, global: 39 - local: X - shadow: 11 - domain: 19
+Element, global: 40 - local: X - shadow: X - domain: X
+Element, global: 41 - local: X - shadow: 12 - domain: 20
+Element, global: 42 - local: 0 - shadow: X - domain: 0
+Element, global: 43 - local: 1 - shadow: X - domain: 1
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: 13 - domain: 21
+Element, global: 46 - local: 2 - shadow: X - domain: 2
+Element, global: 47 - local: 3 - shadow: X - domain: 3
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: X - domain: X
+Element, global: 50 - local: X - shadow: X - domain: X
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: X - shadow: X - domain: X
+Element, global: 53 - local: X - shadow: 14 - domain: 22
+Element, global: 54 - local: X - shadow: 15 - domain: 23
+Element, global: 55 - local: X - shadow: 16 - domain: 24
+Element, global: 56 - local: X - shadow: X - domain: X
+Element, global: 57 - local: X - shadow: 17 - domain: 25
+Element, global: 58 - local: 4 - shadow: X - domain: 4
+Element, global: 59 - local: 5 - shadow: X - domain: 5
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: 18 - domain: 26
+Element, global: 62 - local: 6 - shadow: X - domain: 6
+Element, global: 63 - local: 7 - shadow: X - domain: 7
+
+Element, local: 0 - global: 42
+Element, local: 1 - global: 43
+Element, local: 2 - global: 46
+Element, local: 3 - global: 47
+Element, local: 4 - global: 58
+Element, local: 5 - global: 59
+Element, local: 6 - global: 62
+Element, local: 7 - global: 63
+
+Element, domain: 0 - global: 42
+Element, domain: 1 - global: 43
+Element, domain: 2 - global: 46
+Element, domain: 3 - global: 47
+Element, domain: 4 - global: 58
+Element, domain: 5 - global: 59
+Element, domain: 6 - global: 62
+Element, domain: 7 - global: 63
+Element, domain: 8 - global: 21
+Element, domain: 9 - global: 22
+Element, domain: 10 - global: 23
+Element, domain: 11 - global: 25
+Element, domain: 12 - global: 26
+Element, domain: 13 - global: 27
+Element, domain: 14 - global: 29
+Element, domain: 15 - global: 30
+Element, domain: 16 - global: 31
+Element, domain: 17 - global: 37
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 41
+Element, domain: 21 - global: 45
+Element, domain: 22 - global: 53
+Element, domain: 23 - global: 54
+Element, domain: 24 - global: 55
+Element, domain: 25 - global: 57
+Element, domain: 26 - global: 61
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: X - domain: X
+Node, global: 7 - local: X - shadow: X - domain: X
+Node, global: 8 - local: X - shadow: X - domain: X
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: X - domain: X
+Node, global: 13 - local: X - shadow: X - domain: X
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: X - domain: X
+Node, global: 17 - local: X - shadow: X - domain: X
+Node, global: 18 - local: X - shadow: X - domain: X
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: X - domain: X
+Node, global: 27 - local: X - shadow: X - domain: X
+Node, global: 28 - local: X - shadow: X - domain: X
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: 0 - domain: 27
+Node, global: 32 - local: X - shadow: 1 - domain: 28
+Node, global: 33 - local: X - shadow: 2 - domain: 29
+Node, global: 34 - local: X - shadow: 3 - domain: 30
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: 4 - domain: 31
+Node, global: 37 - local: X - shadow: 5 - domain: 32
+Node, global: 38 - local: X - shadow: 6 - domain: 33
+Node, global: 39 - local: X - shadow: 7 - domain: 34
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: 8 - domain: 35
+Node, global: 42 - local: X - shadow: 9 - domain: 36
+Node, global: 43 - local: X - shadow: 10 - domain: 37
+Node, global: 44 - local: X - shadow: 11 - domain: 38
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: 12 - domain: 39
+Node, global: 47 - local: X - shadow: 13 - domain: 40
+Node, global: 48 - local: X - shadow: 14 - domain: 41
+Node, global: 49 - local: X - shadow: 15 - domain: 42
+Node, global: 50 - local: X - shadow: X - domain: X
+Node, global: 51 - local: X - shadow: X - domain: X
+Node, global: 52 - local: X - shadow: X - domain: X
+Node, global: 53 - local: X - shadow: X - domain: X
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: X - shadow: X - domain: X
+Node, global: 56 - local: X - shadow: 16 - domain: 43
+Node, global: 57 - local: X - shadow: 17 - domain: 44
+Node, global: 58 - local: X - shadow: 18 - domain: 45
+Node, global: 59 - local: X - shadow: 19 - domain: 46
+Node, global: 60 - local: X - shadow: X - domain: X
+Node, global: 61 - local: X - shadow: 20 - domain: 47
+Node, global: 62 - local: 0 - shadow: X - domain: 0
+Node, global: 63 - local: 1 - shadow: X - domain: 1
+Node, global: 64 - local: 2 - shadow: X - domain: 2
+Node, global: 65 - local: X - shadow: X - domain: X
+Node, global: 66 - local: X - shadow: 21 - domain: 48
+Node, global: 67 - local: 3 - shadow: X - domain: 3
+Node, global: 68 - local: 4 - shadow: X - domain: 4
+Node, global: 69 - local: 5 - shadow: X - domain: 5
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: 22 - domain: 49
+Node, global: 72 - local: 6 - shadow: X - domain: 6
+Node, global: 73 - local: 7 - shadow: X - domain: 7
+Node, global: 74 - local: 8 - shadow: X - domain: 8
+Node, global: 75 - local: X - shadow: X - domain: X
+Node, global: 76 - local: X - shadow: X - domain: X
+Node, global: 77 - local: X - shadow: X - domain: X
+Node, global: 78 - local: X - shadow: X - domain: X
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: X - shadow: X - domain: X
+Node, global: 81 - local: X - shadow: 23 - domain: 50
+Node, global: 82 - local: X - shadow: 24 - domain: 51
+Node, global: 83 - local: X - shadow: 25 - domain: 52
+Node, global: 84 - local: X - shadow: 26 - domain: 53
+Node, global: 85 - local: X - shadow: X - domain: X
+Node, global: 86 - local: X - shadow: 27 - domain: 54
+Node, global: 87 - local: 9 - shadow: X - domain: 9
+Node, global: 88 - local: 10 - shadow: X - domain: 10
+Node, global: 89 - local: 11 - shadow: X - domain: 11
+Node, global: 90 - local: X - shadow: X - domain: X
+Node, global: 91 - local: X - shadow: 28 - domain: 55
+Node, global: 92 - local: 12 - shadow: X - domain: 12
+Node, global: 93 - local: 13 - shadow: X - domain: 13
+Node, global: 94 - local: 14 - shadow: X - domain: 14
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: 29 - domain: 56
+Node, global: 97 - local: 15 - shadow: X - domain: 15
+Node, global: 98 - local: 16 - shadow: X - domain: 16
+Node, global: 99 - local: 17 - shadow: X - domain: 17
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: X - domain: X
+Node, global: 102 - local: X - shadow: X - domain: X
+Node, global: 103 - local: X - shadow: X - domain: X
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: 30 - domain: 57
+Node, global: 107 - local: X - shadow: 31 - domain: 58
+Node, global: 108 - local: X - shadow: 32 - domain: 59
+Node, global: 109 - local: X - shadow: 33 - domain: 60
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: 34 - domain: 61
+Node, global: 112 - local: 18 - shadow: X - domain: 18
+Node, global: 113 - local: 19 - shadow: X - domain: 19
+Node, global: 114 - local: 20 - shadow: X - domain: 20
+Node, global: 115 - local: X - shadow: X - domain: X
+Node, global: 116 - local: X - shadow: 35 - domain: 62
+Node, global: 117 - local: 21 - shadow: X - domain: 21
+Node, global: 118 - local: 22 - shadow: X - domain: 22
+Node, global: 119 - local: 23 - shadow: X - domain: 23
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: 36 - domain: 63
+Node, global: 122 - local: 24 - shadow: X - domain: 24
+Node, global: 123 - local: 25 - shadow: X - domain: 25
+Node, global: 124 - local: 26 - shadow: X - domain: 26
+
+Node, local: 0 - global: 62
+Node, local: 1 - global: 63
+Node, local: 2 - global: 64
+Node, local: 3 - global: 67
+Node, local: 4 - global: 68
+Node, local: 5 - global: 69
+Node, local: 6 - global: 72
+Node, local: 7 - global: 73
+Node, local: 8 - global: 74
+Node, local: 9 - global: 87
+Node, local: 10 - global: 88
+Node, local: 11 - global: 89
+Node, local: 12 - global: 92
+Node, local: 13 - global: 93
+Node, local: 14 - global: 94
+Node, local: 15 - global: 97
+Node, local: 16 - global: 98
+Node, local: 17 - global: 99
+Node, local: 18 - global: 112
+Node, local: 19 - global: 113
+Node, local: 20 - global: 114
+Node, local: 21 - global: 117
+Node, local: 22 - global: 118
+Node, local: 23 - global: 119
+Node, local: 24 - global: 122
+Node, local: 25 - global: 123
+Node, local: 26 - global: 124
+
+Node, domain: 0 - global: 62
+Node, domain: 1 - global: 63
+Node, domain: 2 - global: 64
+Node, domain: 3 - global: 67
+Node, domain: 4 - global: 68
+Node, domain: 5 - global: 69
+Node, domain: 6 - global: 72
+Node, domain: 7 - global: 73
+Node, domain: 8 - global: 74
+Node, domain: 9 - global: 87
+Node, domain: 10 - global: 88
+Node, domain: 11 - global: 89
+Node, domain: 12 - global: 92
+Node, domain: 13 - global: 93
+Node, domain: 14 - global: 94
+Node, domain: 15 - global: 97
+Node, domain: 16 - global: 98
+Node, domain: 17 - global: 99
+Node, domain: 18 - global: 112
+Node, domain: 19 - global: 113
+Node, domain: 20 - global: 114
+Node, domain: 21 - global: 117
+Node, domain: 22 - global: 118
+Node, domain: 23 - global: 119
+Node, domain: 24 - global: 122
+Node, domain: 25 - global: 123
+Node, domain: 26 - global: 124
+Node, domain: 27 - global: 31
+Node, domain: 28 - global: 32
+Node, domain: 29 - global: 33
+Node, domain: 30 - global: 34
+Node, domain: 31 - global: 36
+Node, domain: 32 - global: 37
+Node, domain: 33 - global: 38
+Node, domain: 34 - global: 39
+Node, domain: 35 - global: 41
+Node, domain: 36 - global: 42
+Node, domain: 37 - global: 43
+Node, domain: 38 - global: 44
+Node, domain: 39 - global: 46
+Node, domain: 40 - global: 47
+Node, domain: 41 - global: 48
+Node, domain: 42 - global: 49
+Node, domain: 43 - global: 56
+Node, domain: 44 - global: 57
+Node, domain: 45 - global: 58
+Node, domain: 46 - global: 59
+Node, domain: 47 - global: 61
+Node, domain: 48 - global: 66
+Node, domain: 49 - global: 71
+Node, domain: 50 - global: 81
+Node, domain: 51 - global: 82
+Node, domain: 52 - global: 83
+Node, domain: 53 - global: 84
+Node, domain: 54 - global: 86
+Node, domain: 55 - global: 91
+Node, domain: 56 - global: 96
+Node, domain: 57 - global: 106
+Node, domain: 58 - global: 107
+Node, domain: 59 - global: 108
+Node, domain: 60 - global: 109
+Node, domain: 61 - global: 111
+Node, domain: 62 - global: 116
+Node, domain: 63 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --decompDims=3" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,937 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8061420)
+		size : (2,1,1)
+		isPeriodic : (True,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 8, 4, 4 }
+elementGlobalCount: 128
+	elementLocalCounts[0]: { 4, 4, 4 }
+	elementLocalCounts[1]: { 4, 4, 4 }
+elementDomainCounts: { 8, 4, 4 }
+nodeGlobalCounts: { 9, 5, 5 }
+nodeGlobalCount: 225
+	nodeLocalCounts[0]: { 5, 5, 5 }
+	nodeLocalCounts[1]: { 5, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: 2 - shadow: X - domain: 2
+Element, global: 3 - local: 3 - shadow: X - domain: 3
+Element, global: 4 - local: X - shadow: 0 - domain: 64
+Element, global: 5 - local: X - shadow: 1 - domain: 65
+Element, global: 6 - local: X - shadow: 2 - domain: 66
+Element, global: 7 - local: X - shadow: 3 - domain: 67
+Element, global: 8 - local: 4 - shadow: X - domain: 4
+Element, global: 9 - local: 5 - shadow: X - domain: 5
+Element, global: 10 - local: 6 - shadow: X - domain: 6
+Element, global: 11 - local: 7 - shadow: X - domain: 7
+Element, global: 12 - local: X - shadow: 4 - domain: 68
+Element, global: 13 - local: X - shadow: 5 - domain: 69
+Element, global: 14 - local: X - shadow: 6 - domain: 70
+Element, global: 15 - local: X - shadow: 7 - domain: 71
+Element, global: 16 - local: 8 - shadow: X - domain: 8
+Element, global: 17 - local: 9 - shadow: X - domain: 9
+Element, global: 18 - local: 10 - shadow: X - domain: 10
+Element, global: 19 - local: 11 - shadow: X - domain: 11
+Element, global: 20 - local: X - shadow: 8 - domain: 72
+Element, global: 21 - local: X - shadow: 9 - domain: 73
+Element, global: 22 - local: X - shadow: 10 - domain: 74
+Element, global: 23 - local: X - shadow: 11 - domain: 75
+Element, global: 24 - local: 12 - shadow: X - domain: 12
+Element, global: 25 - local: 13 - shadow: X - domain: 13
+Element, global: 26 - local: 14 - shadow: X - domain: 14
+Element, global: 27 - local: 15 - shadow: X - domain: 15
+Element, global: 28 - local: X - shadow: 12 - domain: 76
+Element, global: 29 - local: X - shadow: 13 - domain: 77
+Element, global: 30 - local: X - shadow: 14 - domain: 78
+Element, global: 31 - local: X - shadow: 15 - domain: 79
+Element, global: 32 - local: 16 - shadow: X - domain: 16
+Element, global: 33 - local: 17 - shadow: X - domain: 17
+Element, global: 34 - local: 18 - shadow: X - domain: 18
+Element, global: 35 - local: 19 - shadow: X - domain: 19
+Element, global: 36 - local: X - shadow: 16 - domain: 80
+Element, global: 37 - local: X - shadow: 17 - domain: 81
+Element, global: 38 - local: X - shadow: 18 - domain: 82
+Element, global: 39 - local: X - shadow: 19 - domain: 83
+Element, global: 40 - local: 20 - shadow: X - domain: 20
+Element, global: 41 - local: 21 - shadow: X - domain: 21
+Element, global: 42 - local: 22 - shadow: X - domain: 22
+Element, global: 43 - local: 23 - shadow: X - domain: 23
+Element, global: 44 - local: X - shadow: 20 - domain: 84
+Element, global: 45 - local: X - shadow: 21 - domain: 85
+Element, global: 46 - local: X - shadow: 22 - domain: 86
+Element, global: 47 - local: X - shadow: 23 - domain: 87
+Element, global: 48 - local: 24 - shadow: X - domain: 24
+Element, global: 49 - local: 25 - shadow: X - domain: 25
+Element, global: 50 - local: 26 - shadow: X - domain: 26
+Element, global: 51 - local: 27 - shadow: X - domain: 27
+Element, global: 52 - local: X - shadow: 24 - domain: 88
+Element, global: 53 - local: X - shadow: 25 - domain: 89
+Element, global: 54 - local: X - shadow: 26 - domain: 90
+Element, global: 55 - local: X - shadow: 27 - domain: 91
+Element, global: 56 - local: 28 - shadow: X - domain: 28
+Element, global: 57 - local: 29 - shadow: X - domain: 29
+Element, global: 58 - local: 30 - shadow: X - domain: 30
+Element, global: 59 - local: 31 - shadow: X - domain: 31
+Element, global: 60 - local: X - shadow: 28 - domain: 92
+Element, global: 61 - local: X - shadow: 29 - domain: 93
+Element, global: 62 - local: X - shadow: 30 - domain: 94
+Element, global: 63 - local: X - shadow: 31 - domain: 95
+Element, global: 64 - local: 32 - shadow: X - domain: 32
+Element, global: 65 - local: 33 - shadow: X - domain: 33
+Element, global: 66 - local: 34 - shadow: X - domain: 34
+Element, global: 67 - local: 35 - shadow: X - domain: 35
+Element, global: 68 - local: X - shadow: 32 - domain: 96
+Element, global: 69 - local: X - shadow: 33 - domain: 97
+Element, global: 70 - local: X - shadow: 34 - domain: 98
+Element, global: 71 - local: X - shadow: 35 - domain: 99
+Element, global: 72 - local: 36 - shadow: X - domain: 36
+Element, global: 73 - local: 37 - shadow: X - domain: 37
+Element, global: 74 - local: 38 - shadow: X - domain: 38
+Element, global: 75 - local: 39 - shadow: X - domain: 39
+Element, global: 76 - local: X - shadow: 36 - domain: 100
+Element, global: 77 - local: X - shadow: 37 - domain: 101
+Element, global: 78 - local: X - shadow: 38 - domain: 102
+Element, global: 79 - local: X - shadow: 39 - domain: 103
+Element, global: 80 - local: 40 - shadow: X - domain: 40
+Element, global: 81 - local: 41 - shadow: X - domain: 41
+Element, global: 82 - local: 42 - shadow: X - domain: 42
+Element, global: 83 - local: 43 - shadow: X - domain: 43
+Element, global: 84 - local: X - shadow: 40 - domain: 104
+Element, global: 85 - local: X - shadow: 41 - domain: 105
+Element, global: 86 - local: X - shadow: 42 - domain: 106
+Element, global: 87 - local: X - shadow: 43 - domain: 107
+Element, global: 88 - local: 44 - shadow: X - domain: 44
+Element, global: 89 - local: 45 - shadow: X - domain: 45
+Element, global: 90 - local: 46 - shadow: X - domain: 46
+Element, global: 91 - local: 47 - shadow: X - domain: 47
+Element, global: 92 - local: X - shadow: 44 - domain: 108
+Element, global: 93 - local: X - shadow: 45 - domain: 109
+Element, global: 94 - local: X - shadow: 46 - domain: 110
+Element, global: 95 - local: X - shadow: 47 - domain: 111
+Element, global: 96 - local: 48 - shadow: X - domain: 48
+Element, global: 97 - local: 49 - shadow: X - domain: 49
+Element, global: 98 - local: 50 - shadow: X - domain: 50
+Element, global: 99 - local: 51 - shadow: X - domain: 51
+Element, global: 100 - local: X - shadow: 48 - domain: 112
+Element, global: 101 - local: X - shadow: 49 - domain: 113
+Element, global: 102 - local: X - shadow: 50 - domain: 114
+Element, global: 103 - local: X - shadow: 51 - domain: 115
+Element, global: 104 - local: 52 - shadow: X - domain: 52
+Element, global: 105 - local: 53 - shadow: X - domain: 53
+Element, global: 106 - local: 54 - shadow: X - domain: 54
+Element, global: 107 - local: 55 - shadow: X - domain: 55
+Element, global: 108 - local: X - shadow: 52 - domain: 116
+Element, global: 109 - local: X - shadow: 53 - domain: 117
+Element, global: 110 - local: X - shadow: 54 - domain: 118
+Element, global: 111 - local: X - shadow: 55 - domain: 119
+Element, global: 112 - local: 56 - shadow: X - domain: 56
+Element, global: 113 - local: 57 - shadow: X - domain: 57
+Element, global: 114 - local: 58 - shadow: X - domain: 58
+Element, global: 115 - local: 59 - shadow: X - domain: 59
+Element, global: 116 - local: X - shadow: 56 - domain: 120
+Element, global: 117 - local: X - shadow: 57 - domain: 121
+Element, global: 118 - local: X - shadow: 58 - domain: 122
+Element, global: 119 - local: X - shadow: 59 - domain: 123
+Element, global: 120 - local: 60 - shadow: X - domain: 60
+Element, global: 121 - local: 61 - shadow: X - domain: 61
+Element, global: 122 - local: 62 - shadow: X - domain: 62
+Element, global: 123 - local: 63 - shadow: X - domain: 63
+Element, global: 124 - local: X - shadow: 60 - domain: 124
+Element, global: 125 - local: X - shadow: 61 - domain: 125
+Element, global: 126 - local: X - shadow: 62 - domain: 126
+Element, global: 127 - local: X - shadow: 63 - domain: 127
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 2
+Element, local: 3 - global: 3
+Element, local: 4 - global: 8
+Element, local: 5 - global: 9
+Element, local: 6 - global: 10
+Element, local: 7 - global: 11
+Element, local: 8 - global: 16
+Element, local: 9 - global: 17
+Element, local: 10 - global: 18
+Element, local: 11 - global: 19
+Element, local: 12 - global: 24
+Element, local: 13 - global: 25
+Element, local: 14 - global: 26
+Element, local: 15 - global: 27
+Element, local: 16 - global: 32
+Element, local: 17 - global: 33
+Element, local: 18 - global: 34
+Element, local: 19 - global: 35
+Element, local: 20 - global: 40
+Element, local: 21 - global: 41
+Element, local: 22 - global: 42
+Element, local: 23 - global: 43
+Element, local: 24 - global: 48
+Element, local: 25 - global: 49
+Element, local: 26 - global: 50
+Element, local: 27 - global: 51
+Element, local: 28 - global: 56
+Element, local: 29 - global: 57
+Element, local: 30 - global: 58
+Element, local: 31 - global: 59
+Element, local: 32 - global: 64
+Element, local: 33 - global: 65
+Element, local: 34 - global: 66
+Element, local: 35 - global: 67
+Element, local: 36 - global: 72
+Element, local: 37 - global: 73
+Element, local: 38 - global: 74
+Element, local: 39 - global: 75
+Element, local: 40 - global: 80
+Element, local: 41 - global: 81
+Element, local: 42 - global: 82
+Element, local: 43 - global: 83
+Element, local: 44 - global: 88
+Element, local: 45 - global: 89
+Element, local: 46 - global: 90
+Element, local: 47 - global: 91
+Element, local: 48 - global: 96
+Element, local: 49 - global: 97
+Element, local: 50 - global: 98
+Element, local: 51 - global: 99
+Element, local: 52 - global: 104
+Element, local: 53 - global: 105
+Element, local: 54 - global: 106
+Element, local: 55 - global: 107
+Element, local: 56 - global: 112
+Element, local: 57 - global: 113
+Element, local: 58 - global: 114
+Element, local: 59 - global: 115
+Element, local: 60 - global: 120
+Element, local: 61 - global: 121
+Element, local: 62 - global: 122
+Element, local: 63 - global: 123
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 2
+Element, domain: 3 - global: 3
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+Element, domain: 6 - global: 10
+Element, domain: 7 - global: 11
+Element, domain: 8 - global: 16
+Element, domain: 9 - global: 17
+Element, domain: 10 - global: 18
+Element, domain: 11 - global: 19
+Element, domain: 12 - global: 24
+Element, domain: 13 - global: 25
+Element, domain: 14 - global: 26
+Element, domain: 15 - global: 27
+Element, domain: 16 - global: 32
+Element, domain: 17 - global: 33
+Element, domain: 18 - global: 34
+Element, domain: 19 - global: 35
+Element, domain: 20 - global: 40
+Element, domain: 21 - global: 41
+Element, domain: 22 - global: 42
+Element, domain: 23 - global: 43
+Element, domain: 24 - global: 48
+Element, domain: 25 - global: 49
+Element, domain: 26 - global: 50
+Element, domain: 27 - global: 51
+Element, domain: 28 - global: 56
+Element, domain: 29 - global: 57
+Element, domain: 30 - global: 58
+Element, domain: 31 - global: 59
+Element, domain: 32 - global: 64
+Element, domain: 33 - global: 65
+Element, domain: 34 - global: 66
+Element, domain: 35 - global: 67
+Element, domain: 36 - global: 72
+Element, domain: 37 - global: 73
+Element, domain: 38 - global: 74
+Element, domain: 39 - global: 75
+Element, domain: 40 - global: 80
+Element, domain: 41 - global: 81
+Element, domain: 42 - global: 82
+Element, domain: 43 - global: 83
+Element, domain: 44 - global: 88
+Element, domain: 45 - global: 89
+Element, domain: 46 - global: 90
+Element, domain: 47 - global: 91
+Element, domain: 48 - global: 96
+Element, domain: 49 - global: 97
+Element, domain: 50 - global: 98
+Element, domain: 51 - global: 99
+Element, domain: 52 - global: 104
+Element, domain: 53 - global: 105
+Element, domain: 54 - global: 106
+Element, domain: 55 - global: 107
+Element, domain: 56 - global: 112
+Element, domain: 57 - global: 113
+Element, domain: 58 - global: 114
+Element, domain: 59 - global: 115
+Element, domain: 60 - global: 120
+Element, domain: 61 - global: 121
+Element, domain: 62 - global: 122
+Element, domain: 63 - global: 123
+Element, domain: 64 - global: 4
+Element, domain: 65 - global: 5
+Element, domain: 66 - global: 6
+Element, domain: 67 - global: 7
+Element, domain: 68 - global: 12
+Element, domain: 69 - global: 13
+Element, domain: 70 - global: 14
+Element, domain: 71 - global: 15
+Element, domain: 72 - global: 20
+Element, domain: 73 - global: 21
+Element, domain: 74 - global: 22
+Element, domain: 75 - global: 23
+Element, domain: 76 - global: 28
+Element, domain: 77 - global: 29
+Element, domain: 78 - global: 30
+Element, domain: 79 - global: 31
+Element, domain: 80 - global: 36
+Element, domain: 81 - global: 37
+Element, domain: 82 - global: 38
+Element, domain: 83 - global: 39
+Element, domain: 84 - global: 44
+Element, domain: 85 - global: 45
+Element, domain: 86 - global: 46
+Element, domain: 87 - global: 47
+Element, domain: 88 - global: 52
+Element, domain: 89 - global: 53
+Element, domain: 90 - global: 54
+Element, domain: 91 - global: 55
+Element, domain: 92 - global: 60
+Element, domain: 93 - global: 61
+Element, domain: 94 - global: 62
+Element, domain: 95 - global: 63
+Element, domain: 96 - global: 68
+Element, domain: 97 - global: 69
+Element, domain: 98 - global: 70
+Element, domain: 99 - global: 71
+Element, domain: 100 - global: 76
+Element, domain: 101 - global: 77
+Element, domain: 102 - global: 78
+Element, domain: 103 - global: 79
+Element, domain: 104 - global: 84
+Element, domain: 105 - global: 85
+Element, domain: 106 - global: 86
+Element, domain: 107 - global: 87
+Element, domain: 108 - global: 92
+Element, domain: 109 - global: 93
+Element, domain: 110 - global: 94
+Element, domain: 111 - global: 95
+Element, domain: 112 - global: 100
+Element, domain: 113 - global: 101
+Element, domain: 114 - global: 102
+Element, domain: 115 - global: 103
+Element, domain: 116 - global: 108
+Element, domain: 117 - global: 109
+Element, domain: 118 - global: 110
+Element, domain: 119 - global: 111
+Element, domain: 120 - global: 116
+Element, domain: 121 - global: 117
+Element, domain: 122 - global: 118
+Element, domain: 123 - global: 119
+Element, domain: 124 - global: 124
+Element, domain: 125 - global: 125
+Element, domain: 126 - global: 126
+Element, domain: 127 - global: 127
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: 3 - shadow: X - domain: 3
+Node, global: 4 - local: 4 - shadow: X - domain: 4
+Node, global: 5 - local: X - shadow: 0 - domain: 125
+Node, global: 6 - local: X - shadow: 1 - domain: 126
+Node, global: 7 - local: X - shadow: 2 - domain: 127
+Node, global: 8 - local: X - shadow: 3 - domain: 128
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: 9 - shadow: X - domain: 9
+Node, global: 14 - local: X - shadow: 4 - domain: 129
+Node, global: 15 - local: X - shadow: 5 - domain: 130
+Node, global: 16 - local: X - shadow: 6 - domain: 131
+Node, global: 17 - local: X - shadow: 7 - domain: 132
+Node, global: 18 - local: 10 - shadow: X - domain: 10
+Node, global: 19 - local: 11 - shadow: X - domain: 11
+Node, global: 20 - local: 12 - shadow: X - domain: 12
+Node, global: 21 - local: 13 - shadow: X - domain: 13
+Node, global: 22 - local: 14 - shadow: X - domain: 14
+Node, global: 23 - local: X - shadow: 8 - domain: 133
+Node, global: 24 - local: X - shadow: 9 - domain: 134
+Node, global: 25 - local: X - shadow: 10 - domain: 135
+Node, global: 26 - local: X - shadow: 11 - domain: 136
+Node, global: 27 - local: 15 - shadow: X - domain: 15
+Node, global: 28 - local: 16 - shadow: X - domain: 16
+Node, global: 29 - local: 17 - shadow: X - domain: 17
+Node, global: 30 - local: 18 - shadow: X - domain: 18
+Node, global: 31 - local: 19 - shadow: X - domain: 19
+Node, global: 32 - local: X - shadow: 12 - domain: 137
+Node, global: 33 - local: X - shadow: 13 - domain: 138
+Node, global: 34 - local: X - shadow: 14 - domain: 139
+Node, global: 35 - local: X - shadow: 15 - domain: 140
+Node, global: 36 - local: 20 - shadow: X - domain: 20
+Node, global: 37 - local: 21 - shadow: X - domain: 21
+Node, global: 38 - local: 22 - shadow: X - domain: 22
+Node, global: 39 - local: 23 - shadow: X - domain: 23
+Node, global: 40 - local: 24 - shadow: X - domain: 24
+Node, global: 41 - local: X - shadow: 16 - domain: 141
+Node, global: 42 - local: X - shadow: 17 - domain: 142
+Node, global: 43 - local: X - shadow: 18 - domain: 143
+Node, global: 44 - local: X - shadow: 19 - domain: 144
+Node, global: 45 - local: 25 - shadow: X - domain: 25
+Node, global: 46 - local: 26 - shadow: X - domain: 26
+Node, global: 47 - local: 27 - shadow: X - domain: 27
+Node, global: 48 - local: 28 - shadow: X - domain: 28
+Node, global: 49 - local: 29 - shadow: X - domain: 29
+Node, global: 50 - local: X - shadow: 20 - domain: 145
+Node, global: 51 - local: X - shadow: 21 - domain: 146
+Node, global: 52 - local: X - shadow: 22 - domain: 147
+Node, global: 53 - local: X - shadow: 23 - domain: 148
+Node, global: 54 - local: 30 - shadow: X - domain: 30
+Node, global: 55 - local: 31 - shadow: X - domain: 31
+Node, global: 56 - local: 32 - shadow: X - domain: 32
+Node, global: 57 - local: 33 - shadow: X - domain: 33
+Node, global: 58 - local: 34 - shadow: X - domain: 34
+Node, global: 59 - local: X - shadow: 24 - domain: 149
+Node, global: 60 - local: X - shadow: 25 - domain: 150
+Node, global: 61 - local: X - shadow: 26 - domain: 151
+Node, global: 62 - local: X - shadow: 27 - domain: 152
+Node, global: 63 - local: 35 - shadow: X - domain: 35
+Node, global: 64 - local: 36 - shadow: X - domain: 36
+Node, global: 65 - local: 37 - shadow: X - domain: 37
+Node, global: 66 - local: 38 - shadow: X - domain: 38
+Node, global: 67 - local: 39 - shadow: X - domain: 39
+Node, global: 68 - local: X - shadow: 28 - domain: 153
+Node, global: 69 - local: X - shadow: 29 - domain: 154
+Node, global: 70 - local: X - shadow: 30 - domain: 155
+Node, global: 71 - local: X - shadow: 31 - domain: 156
+Node, global: 72 - local: 40 - shadow: X - domain: 40
+Node, global: 73 - local: 41 - shadow: X - domain: 41
+Node, global: 74 - local: 42 - shadow: X - domain: 42
+Node, global: 75 - local: 43 - shadow: X - domain: 43
+Node, global: 76 - local: 44 - shadow: X - domain: 44
+Node, global: 77 - local: X - shadow: 32 - domain: 157
+Node, global: 78 - local: X - shadow: 33 - domain: 158
+Node, global: 79 - local: X - shadow: 34 - domain: 159
+Node, global: 80 - local: X - shadow: 35 - domain: 160
+Node, global: 81 - local: 45 - shadow: X - domain: 45
+Node, global: 82 - local: 46 - shadow: X - domain: 46
+Node, global: 83 - local: 47 - shadow: X - domain: 47
+Node, global: 84 - local: 48 - shadow: X - domain: 48
+Node, global: 85 - local: 49 - shadow: X - domain: 49
+Node, global: 86 - local: X - shadow: 36 - domain: 161
+Node, global: 87 - local: X - shadow: 37 - domain: 162
+Node, global: 88 - local: X - shadow: 38 - domain: 163
+Node, global: 89 - local: X - shadow: 39 - domain: 164
+Node, global: 90 - local: 50 - shadow: X - domain: 50
+Node, global: 91 - local: 51 - shadow: X - domain: 51
+Node, global: 92 - local: 52 - shadow: X - domain: 52
+Node, global: 93 - local: 53 - shadow: X - domain: 53
+Node, global: 94 - local: 54 - shadow: X - domain: 54
+Node, global: 95 - local: X - shadow: 40 - domain: 165
+Node, global: 96 - local: X - shadow: 41 - domain: 166
+Node, global: 97 - local: X - shadow: 42 - domain: 167
+Node, global: 98 - local: X - shadow: 43 - domain: 168
+Node, global: 99 - local: 55 - shadow: X - domain: 55
+Node, global: 100 - local: 56 - shadow: X - domain: 56
+Node, global: 101 - local: 57 - shadow: X - domain: 57
+Node, global: 102 - local: 58 - shadow: X - domain: 58
+Node, global: 103 - local: 59 - shadow: X - domain: 59
+Node, global: 104 - local: X - shadow: 44 - domain: 169
+Node, global: 105 - local: X - shadow: 45 - domain: 170
+Node, global: 106 - local: X - shadow: 46 - domain: 171
+Node, global: 107 - local: X - shadow: 47 - domain: 172
+Node, global: 108 - local: 60 - shadow: X - domain: 60
+Node, global: 109 - local: 61 - shadow: X - domain: 61
+Node, global: 110 - local: 62 - shadow: X - domain: 62
+Node, global: 111 - local: 63 - shadow: X - domain: 63
+Node, global: 112 - local: 64 - shadow: X - domain: 64
+Node, global: 113 - local: X - shadow: 48 - domain: 173
+Node, global: 114 - local: X - shadow: 49 - domain: 174
+Node, global: 115 - local: X - shadow: 50 - domain: 175
+Node, global: 116 - local: X - shadow: 51 - domain: 176
+Node, global: 117 - local: 65 - shadow: X - domain: 65
+Node, global: 118 - local: 66 - shadow: X - domain: 66
+Node, global: 119 - local: 67 - shadow: X - domain: 67
+Node, global: 120 - local: 68 - shadow: X - domain: 68
+Node, global: 121 - local: 69 - shadow: X - domain: 69
+Node, global: 122 - local: X - shadow: 52 - domain: 177
+Node, global: 123 - local: X - shadow: 53 - domain: 178
+Node, global: 124 - local: X - shadow: 54 - domain: 179
+Node, global: 125 - local: X - shadow: 55 - domain: 180
+Node, global: 126 - local: 70 - shadow: X - domain: 70
+Node, global: 127 - local: 71 - shadow: X - domain: 71
+Node, global: 128 - local: 72 - shadow: X - domain: 72
+Node, global: 129 - local: 73 - shadow: X - domain: 73
+Node, global: 130 - local: 74 - shadow: X - domain: 74
+Node, global: 131 - local: X - shadow: 56 - domain: 181
+Node, global: 132 - local: X - shadow: 57 - domain: 182
+Node, global: 133 - local: X - shadow: 58 - domain: 183
+Node, global: 134 - local: X - shadow: 59 - domain: 184
+Node, global: 135 - local: 75 - shadow: X - domain: 75
+Node, global: 136 - local: 76 - shadow: X - domain: 76
+Node, global: 137 - local: 77 - shadow: X - domain: 77
+Node, global: 138 - local: 78 - shadow: X - domain: 78
+Node, global: 139 - local: 79 - shadow: X - domain: 79
+Node, global: 140 - local: X - shadow: 60 - domain: 185
+Node, global: 141 - local: X - shadow: 61 - domain: 186
+Node, global: 142 - local: X - shadow: 62 - domain: 187
+Node, global: 143 - local: X - shadow: 63 - domain: 188
+Node, global: 144 - local: 80 - shadow: X - domain: 80
+Node, global: 145 - local: 81 - shadow: X - domain: 81
+Node, global: 146 - local: 82 - shadow: X - domain: 82
+Node, global: 147 - local: 83 - shadow: X - domain: 83
+Node, global: 148 - local: 84 - shadow: X - domain: 84
+Node, global: 149 - local: X - shadow: 64 - domain: 189
+Node, global: 150 - local: X - shadow: 65 - domain: 190
+Node, global: 151 - local: X - shadow: 66 - domain: 191
+Node, global: 152 - local: X - shadow: 67 - domain: 192
+Node, global: 153 - local: 85 - shadow: X - domain: 85
+Node, global: 154 - local: 86 - shadow: X - domain: 86
+Node, global: 155 - local: 87 - shadow: X - domain: 87
+Node, global: 156 - local: 88 - shadow: X - domain: 88
+Node, global: 157 - local: 89 - shadow: X - domain: 89
+Node, global: 158 - local: X - shadow: 68 - domain: 193
+Node, global: 159 - local: X - shadow: 69 - domain: 194
+Node, global: 160 - local: X - shadow: 70 - domain: 195
+Node, global: 161 - local: X - shadow: 71 - domain: 196
+Node, global: 162 - local: 90 - shadow: X - domain: 90
+Node, global: 163 - local: 91 - shadow: X - domain: 91
+Node, global: 164 - local: 92 - shadow: X - domain: 92
+Node, global: 165 - local: 93 - shadow: X - domain: 93
+Node, global: 166 - local: 94 - shadow: X - domain: 94
+Node, global: 167 - local: X - shadow: 72 - domain: 197
+Node, global: 168 - local: X - shadow: 73 - domain: 198
+Node, global: 169 - local: X - shadow: 74 - domain: 199
+Node, global: 170 - local: X - shadow: 75 - domain: 200
+Node, global: 171 - local: 95 - shadow: X - domain: 95
+Node, global: 172 - local: 96 - shadow: X - domain: 96
+Node, global: 173 - local: 97 - shadow: X - domain: 97
+Node, global: 174 - local: 98 - shadow: X - domain: 98
+Node, global: 175 - local: 99 - shadow: X - domain: 99
+Node, global: 176 - local: X - shadow: 76 - domain: 201
+Node, global: 177 - local: X - shadow: 77 - domain: 202
+Node, global: 178 - local: X - shadow: 78 - domain: 203
+Node, global: 179 - local: X - shadow: 79 - domain: 204
+Node, global: 180 - local: 100 - shadow: X - domain: 100
+Node, global: 181 - local: 101 - shadow: X - domain: 101
+Node, global: 182 - local: 102 - shadow: X - domain: 102
+Node, global: 183 - local: 103 - shadow: X - domain: 103
+Node, global: 184 - local: 104 - shadow: X - domain: 104
+Node, global: 185 - local: X - shadow: 80 - domain: 205
+Node, global: 186 - local: X - shadow: 81 - domain: 206
+Node, global: 187 - local: X - shadow: 82 - domain: 207
+Node, global: 188 - local: X - shadow: 83 - domain: 208
+Node, global: 189 - local: 105 - shadow: X - domain: 105
+Node, global: 190 - local: 106 - shadow: X - domain: 106
+Node, global: 191 - local: 107 - shadow: X - domain: 107
+Node, global: 192 - local: 108 - shadow: X - domain: 108
+Node, global: 193 - local: 109 - shadow: X - domain: 109
+Node, global: 194 - local: X - shadow: 84 - domain: 209
+Node, global: 195 - local: X - shadow: 85 - domain: 210
+Node, global: 196 - local: X - shadow: 86 - domain: 211
+Node, global: 197 - local: X - shadow: 87 - domain: 212
+Node, global: 198 - local: 110 - shadow: X - domain: 110
+Node, global: 199 - local: 111 - shadow: X - domain: 111
+Node, global: 200 - local: 112 - shadow: X - domain: 112
+Node, global: 201 - local: 113 - shadow: X - domain: 113
+Node, global: 202 - local: 114 - shadow: X - domain: 114
+Node, global: 203 - local: X - shadow: 88 - domain: 213
+Node, global: 204 - local: X - shadow: 89 - domain: 214
+Node, global: 205 - local: X - shadow: 90 - domain: 215
+Node, global: 206 - local: X - shadow: 91 - domain: 216
+Node, global: 207 - local: 115 - shadow: X - domain: 115
+Node, global: 208 - local: 116 - shadow: X - domain: 116
+Node, global: 209 - local: 117 - shadow: X - domain: 117
+Node, global: 210 - local: 118 - shadow: X - domain: 118
+Node, global: 211 - local: 119 - shadow: X - domain: 119
+Node, global: 212 - local: X - shadow: 92 - domain: 217
+Node, global: 213 - local: X - shadow: 93 - domain: 218
+Node, global: 214 - local: X - shadow: 94 - domain: 219
+Node, global: 215 - local: X - shadow: 95 - domain: 220
+Node, global: 216 - local: 120 - shadow: X - domain: 120
+Node, global: 217 - local: 121 - shadow: X - domain: 121
+Node, global: 218 - local: 122 - shadow: X - domain: 122
+Node, global: 219 - local: 123 - shadow: X - domain: 123
+Node, global: 220 - local: 124 - shadow: X - domain: 124
+Node, global: 221 - local: X - shadow: 96 - domain: 221
+Node, global: 222 - local: X - shadow: 97 - domain: 222
+Node, global: 223 - local: X - shadow: 98 - domain: 223
+Node, global: 224 - local: X - shadow: 99 - domain: 224
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 3
+Node, local: 4 - global: 4
+Node, local: 5 - global: 9
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 13
+Node, local: 10 - global: 18
+Node, local: 11 - global: 19
+Node, local: 12 - global: 20
+Node, local: 13 - global: 21
+Node, local: 14 - global: 22
+Node, local: 15 - global: 27
+Node, local: 16 - global: 28
+Node, local: 17 - global: 29
+Node, local: 18 - global: 30
+Node, local: 19 - global: 31
+Node, local: 20 - global: 36
+Node, local: 21 - global: 37
+Node, local: 22 - global: 38
+Node, local: 23 - global: 39
+Node, local: 24 - global: 40
+Node, local: 25 - global: 45
+Node, local: 26 - global: 46
+Node, local: 27 - global: 47
+Node, local: 28 - global: 48
+Node, local: 29 - global: 49
+Node, local: 30 - global: 54
+Node, local: 31 - global: 55
+Node, local: 32 - global: 56
+Node, local: 33 - global: 57
+Node, local: 34 - global: 58
+Node, local: 35 - global: 63
+Node, local: 36 - global: 64
+Node, local: 37 - global: 65
+Node, local: 38 - global: 66
+Node, local: 39 - global: 67
+Node, local: 40 - global: 72
+Node, local: 41 - global: 73
+Node, local: 42 - global: 74
+Node, local: 43 - global: 75
+Node, local: 44 - global: 76
+Node, local: 45 - global: 81
+Node, local: 46 - global: 82
+Node, local: 47 - global: 83
+Node, local: 48 - global: 84
+Node, local: 49 - global: 85
+Node, local: 50 - global: 90
+Node, local: 51 - global: 91
+Node, local: 52 - global: 92
+Node, local: 53 - global: 93
+Node, local: 54 - global: 94
+Node, local: 55 - global: 99
+Node, local: 56 - global: 100
+Node, local: 57 - global: 101
+Node, local: 58 - global: 102
+Node, local: 59 - global: 103
+Node, local: 60 - global: 108
+Node, local: 61 - global: 109
+Node, local: 62 - global: 110
+Node, local: 63 - global: 111
+Node, local: 64 - global: 112
+Node, local: 65 - global: 117
+Node, local: 66 - global: 118
+Node, local: 67 - global: 119
+Node, local: 68 - global: 120
+Node, local: 69 - global: 121
+Node, local: 70 - global: 126
+Node, local: 71 - global: 127
+Node, local: 72 - global: 128
+Node, local: 73 - global: 129
+Node, local: 74 - global: 130
+Node, local: 75 - global: 135
+Node, local: 76 - global: 136
+Node, local: 77 - global: 137
+Node, local: 78 - global: 138
+Node, local: 79 - global: 139
+Node, local: 80 - global: 144
+Node, local: 81 - global: 145
+Node, local: 82 - global: 146
+Node, local: 83 - global: 147
+Node, local: 84 - global: 148
+Node, local: 85 - global: 153
+Node, local: 86 - global: 154
+Node, local: 87 - global: 155
+Node, local: 88 - global: 156
+Node, local: 89 - global: 157
+Node, local: 90 - global: 162
+Node, local: 91 - global: 163
+Node, local: 92 - global: 164
+Node, local: 93 - global: 165
+Node, local: 94 - global: 166
+Node, local: 95 - global: 171
+Node, local: 96 - global: 172
+Node, local: 97 - global: 173
+Node, local: 98 - global: 174
+Node, local: 99 - global: 175
+Node, local: 100 - global: 180
+Node, local: 101 - global: 181
+Node, local: 102 - global: 182
+Node, local: 103 - global: 183
+Node, local: 104 - global: 184
+Node, local: 105 - global: 189
+Node, local: 106 - global: 190
+Node, local: 107 - global: 191
+Node, local: 108 - global: 192
+Node, local: 109 - global: 193
+Node, local: 110 - global: 198
+Node, local: 111 - global: 199
+Node, local: 112 - global: 200
+Node, local: 113 - global: 201
+Node, local: 114 - global: 202
+Node, local: 115 - global: 207
+Node, local: 116 - global: 208
+Node, local: 117 - global: 209
+Node, local: 118 - global: 210
+Node, local: 119 - global: 211
+Node, local: 120 - global: 216
+Node, local: 121 - global: 217
+Node, local: 122 - global: 218
+Node, local: 123 - global: 219
+Node, local: 124 - global: 220
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 3
+Node, domain: 4 - global: 4
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 13
+Node, domain: 10 - global: 18
+Node, domain: 11 - global: 19
+Node, domain: 12 - global: 20
+Node, domain: 13 - global: 21
+Node, domain: 14 - global: 22
+Node, domain: 15 - global: 27
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 30
+Node, domain: 19 - global: 31
+Node, domain: 20 - global: 36
+Node, domain: 21 - global: 37
+Node, domain: 22 - global: 38
+Node, domain: 23 - global: 39
+Node, domain: 24 - global: 40
+Node, domain: 25 - global: 45
+Node, domain: 26 - global: 46
+Node, domain: 27 - global: 47
+Node, domain: 28 - global: 48
+Node, domain: 29 - global: 49
+Node, domain: 30 - global: 54
+Node, domain: 31 - global: 55
+Node, domain: 32 - global: 56
+Node, domain: 33 - global: 57
+Node, domain: 34 - global: 58
+Node, domain: 35 - global: 63
+Node, domain: 36 - global: 64
+Node, domain: 37 - global: 65
+Node, domain: 38 - global: 66
+Node, domain: 39 - global: 67
+Node, domain: 40 - global: 72
+Node, domain: 41 - global: 73
+Node, domain: 42 - global: 74
+Node, domain: 43 - global: 75
+Node, domain: 44 - global: 76
+Node, domain: 45 - global: 81
+Node, domain: 46 - global: 82
+Node, domain: 47 - global: 83
+Node, domain: 48 - global: 84
+Node, domain: 49 - global: 85
+Node, domain: 50 - global: 90
+Node, domain: 51 - global: 91
+Node, domain: 52 - global: 92
+Node, domain: 53 - global: 93
+Node, domain: 54 - global: 94
+Node, domain: 55 - global: 99
+Node, domain: 56 - global: 100
+Node, domain: 57 - global: 101
+Node, domain: 58 - global: 102
+Node, domain: 59 - global: 103
+Node, domain: 60 - global: 108
+Node, domain: 61 - global: 109
+Node, domain: 62 - global: 110
+Node, domain: 63 - global: 111
+Node, domain: 64 - global: 112
+Node, domain: 65 - global: 117
+Node, domain: 66 - global: 118
+Node, domain: 67 - global: 119
+Node, domain: 68 - global: 120
+Node, domain: 69 - global: 121
+Node, domain: 70 - global: 126
+Node, domain: 71 - global: 127
+Node, domain: 72 - global: 128
+Node, domain: 73 - global: 129
+Node, domain: 74 - global: 130
+Node, domain: 75 - global: 135
+Node, domain: 76 - global: 136
+Node, domain: 77 - global: 137
+Node, domain: 78 - global: 138
+Node, domain: 79 - global: 139
+Node, domain: 80 - global: 144
+Node, domain: 81 - global: 145
+Node, domain: 82 - global: 146
+Node, domain: 83 - global: 147
+Node, domain: 84 - global: 148
+Node, domain: 85 - global: 153
+Node, domain: 86 - global: 154
+Node, domain: 87 - global: 155
+Node, domain: 88 - global: 156
+Node, domain: 89 - global: 157
+Node, domain: 90 - global: 162
+Node, domain: 91 - global: 163
+Node, domain: 92 - global: 164
+Node, domain: 93 - global: 165
+Node, domain: 94 - global: 166
+Node, domain: 95 - global: 171
+Node, domain: 96 - global: 172
+Node, domain: 97 - global: 173
+Node, domain: 98 - global: 174
+Node, domain: 99 - global: 175
+Node, domain: 100 - global: 180
+Node, domain: 101 - global: 181
+Node, domain: 102 - global: 182
+Node, domain: 103 - global: 183
+Node, domain: 104 - global: 184
+Node, domain: 105 - global: 189
+Node, domain: 106 - global: 190
+Node, domain: 107 - global: 191
+Node, domain: 108 - global: 192
+Node, domain: 109 - global: 193
+Node, domain: 110 - global: 198
+Node, domain: 111 - global: 199
+Node, domain: 112 - global: 200
+Node, domain: 113 - global: 201
+Node, domain: 114 - global: 202
+Node, domain: 115 - global: 207
+Node, domain: 116 - global: 208
+Node, domain: 117 - global: 209
+Node, domain: 118 - global: 210
+Node, domain: 119 - global: 211
+Node, domain: 120 - global: 216
+Node, domain: 121 - global: 217
+Node, domain: 122 - global: 218
+Node, domain: 123 - global: 219
+Node, domain: 124 - global: 220
+Node, domain: 125 - global: 5
+Node, domain: 126 - global: 6
+Node, domain: 127 - global: 7
+Node, domain: 128 - global: 8
+Node, domain: 129 - global: 14
+Node, domain: 130 - global: 15
+Node, domain: 131 - global: 16
+Node, domain: 132 - global: 17
+Node, domain: 133 - global: 23
+Node, domain: 134 - global: 24
+Node, domain: 135 - global: 25
+Node, domain: 136 - global: 26
+Node, domain: 137 - global: 32
+Node, domain: 138 - global: 33
+Node, domain: 139 - global: 34
+Node, domain: 140 - global: 35
+Node, domain: 141 - global: 41
+Node, domain: 142 - global: 42
+Node, domain: 143 - global: 43
+Node, domain: 144 - global: 44
+Node, domain: 145 - global: 50
+Node, domain: 146 - global: 51
+Node, domain: 147 - global: 52
+Node, domain: 148 - global: 53
+Node, domain: 149 - global: 59
+Node, domain: 150 - global: 60
+Node, domain: 151 - global: 61
+Node, domain: 152 - global: 62
+Node, domain: 153 - global: 68
+Node, domain: 154 - global: 69
+Node, domain: 155 - global: 70
+Node, domain: 156 - global: 71
+Node, domain: 157 - global: 77
+Node, domain: 158 - global: 78
+Node, domain: 159 - global: 79
+Node, domain: 160 - global: 80
+Node, domain: 161 - global: 86
+Node, domain: 162 - global: 87
+Node, domain: 163 - global: 88
+Node, domain: 164 - global: 89
+Node, domain: 165 - global: 95
+Node, domain: 166 - global: 96
+Node, domain: 167 - global: 97
+Node, domain: 168 - global: 98
+Node, domain: 169 - global: 104
+Node, domain: 170 - global: 105
+Node, domain: 171 - global: 106
+Node, domain: 172 - global: 107
+Node, domain: 173 - global: 113
+Node, domain: 174 - global: 114
+Node, domain: 175 - global: 115
+Node, domain: 176 - global: 116
+Node, domain: 177 - global: 122
+Node, domain: 178 - global: 123
+Node, domain: 179 - global: 124
+Node, domain: 180 - global: 125
+Node, domain: 181 - global: 131
+Node, domain: 182 - global: 132
+Node, domain: 183 - global: 133
+Node, domain: 184 - global: 134
+Node, domain: 185 - global: 140
+Node, domain: 186 - global: 141
+Node, domain: 187 - global: 142
+Node, domain: 188 - global: 143
+Node, domain: 189 - global: 149
+Node, domain: 190 - global: 150
+Node, domain: 191 - global: 151
+Node, domain: 192 - global: 152
+Node, domain: 193 - global: 158
+Node, domain: 194 - global: 159
+Node, domain: 195 - global: 160
+Node, domain: 196 - global: 161
+Node, domain: 197 - global: 167
+Node, domain: 198 - global: 168
+Node, domain: 199 - global: 169
+Node, domain: 200 - global: 170
+Node, domain: 201 - global: 176
+Node, domain: 202 - global: 177
+Node, domain: 203 - global: 178
+Node, domain: 204 - global: 179
+Node, domain: 205 - global: 185
+Node, domain: 206 - global: 186
+Node, domain: 207 - global: 187
+Node, domain: 208 - global: 188
+Node, domain: 209 - global: 194
+Node, domain: 210 - global: 195
+Node, domain: 211 - global: 196
+Node, domain: 212 - global: 197
+Node, domain: 213 - global: 203
+Node, domain: 214 - global: 204
+Node, domain: 215 - global: 205
+Node, domain: 216 - global: 206
+Node, domain: 217 - global: 212
+Node, domain: 218 - global: 213
+Node, domain: 219 - global: 214
+Node, domain: 220 - global: 215
+Node, domain: 221 - global: 221
+Node, domain: 222 - global: 222
+Node, domain: 223 - global: 223
+Node, domain: 224 - global: 224
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --meshSizeI=9 --isPeriodicI=True --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,937 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060790)
+		size : (2,1,1)
+		isPeriodic : (True,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 8, 4, 4 }
+elementGlobalCount: 128
+	elementLocalCounts[0]: { 4, 4, 4 }
+	elementLocalCounts[1]: { 4, 4, 4 }
+elementDomainCounts: { 8, 4, 4 }
+nodeGlobalCounts: { 9, 5, 5 }
+nodeGlobalCount: 225
+	nodeLocalCounts[0]: { 5, 5, 5 }
+	nodeLocalCounts[1]: { 5, 5, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 64
+Element, global: 1 - local: X - shadow: 1 - domain: 65
+Element, global: 2 - local: X - shadow: 2 - domain: 66
+Element, global: 3 - local: X - shadow: 3 - domain: 67
+Element, global: 4 - local: 0 - shadow: X - domain: 0
+Element, global: 5 - local: 1 - shadow: X - domain: 1
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: 4 - domain: 68
+Element, global: 9 - local: X - shadow: 5 - domain: 69
+Element, global: 10 - local: X - shadow: 6 - domain: 70
+Element, global: 11 - local: X - shadow: 7 - domain: 71
+Element, global: 12 - local: 4 - shadow: X - domain: 4
+Element, global: 13 - local: 5 - shadow: X - domain: 5
+Element, global: 14 - local: 6 - shadow: X - domain: 6
+Element, global: 15 - local: 7 - shadow: X - domain: 7
+Element, global: 16 - local: X - shadow: 8 - domain: 72
+Element, global: 17 - local: X - shadow: 9 - domain: 73
+Element, global: 18 - local: X - shadow: 10 - domain: 74
+Element, global: 19 - local: X - shadow: 11 - domain: 75
+Element, global: 20 - local: 8 - shadow: X - domain: 8
+Element, global: 21 - local: 9 - shadow: X - domain: 9
+Element, global: 22 - local: 10 - shadow: X - domain: 10
+Element, global: 23 - local: 11 - shadow: X - domain: 11
+Element, global: 24 - local: X - shadow: 12 - domain: 76
+Element, global: 25 - local: X - shadow: 13 - domain: 77
+Element, global: 26 - local: X - shadow: 14 - domain: 78
+Element, global: 27 - local: X - shadow: 15 - domain: 79
+Element, global: 28 - local: 12 - shadow: X - domain: 12
+Element, global: 29 - local: 13 - shadow: X - domain: 13
+Element, global: 30 - local: 14 - shadow: X - domain: 14
+Element, global: 31 - local: 15 - shadow: X - domain: 15
+Element, global: 32 - local: X - shadow: 16 - domain: 80
+Element, global: 33 - local: X - shadow: 17 - domain: 81
+Element, global: 34 - local: X - shadow: 18 - domain: 82
+Element, global: 35 - local: X - shadow: 19 - domain: 83
+Element, global: 36 - local: 16 - shadow: X - domain: 16
+Element, global: 37 - local: 17 - shadow: X - domain: 17
+Element, global: 38 - local: 18 - shadow: X - domain: 18
+Element, global: 39 - local: 19 - shadow: X - domain: 19
+Element, global: 40 - local: X - shadow: 20 - domain: 84
+Element, global: 41 - local: X - shadow: 21 - domain: 85
+Element, global: 42 - local: X - shadow: 22 - domain: 86
+Element, global: 43 - local: X - shadow: 23 - domain: 87
+Element, global: 44 - local: 20 - shadow: X - domain: 20
+Element, global: 45 - local: 21 - shadow: X - domain: 21
+Element, global: 46 - local: 22 - shadow: X - domain: 22
+Element, global: 47 - local: 23 - shadow: X - domain: 23
+Element, global: 48 - local: X - shadow: 24 - domain: 88
+Element, global: 49 - local: X - shadow: 25 - domain: 89
+Element, global: 50 - local: X - shadow: 26 - domain: 90
+Element, global: 51 - local: X - shadow: 27 - domain: 91
+Element, global: 52 - local: 24 - shadow: X - domain: 24
+Element, global: 53 - local: 25 - shadow: X - domain: 25
+Element, global: 54 - local: 26 - shadow: X - domain: 26
+Element, global: 55 - local: 27 - shadow: X - domain: 27
+Element, global: 56 - local: X - shadow: 28 - domain: 92
+Element, global: 57 - local: X - shadow: 29 - domain: 93
+Element, global: 58 - local: X - shadow: 30 - domain: 94
+Element, global: 59 - local: X - shadow: 31 - domain: 95
+Element, global: 60 - local: 28 - shadow: X - domain: 28
+Element, global: 61 - local: 29 - shadow: X - domain: 29
+Element, global: 62 - local: 30 - shadow: X - domain: 30
+Element, global: 63 - local: 31 - shadow: X - domain: 31
+Element, global: 64 - local: X - shadow: 32 - domain: 96
+Element, global: 65 - local: X - shadow: 33 - domain: 97
+Element, global: 66 - local: X - shadow: 34 - domain: 98
+Element, global: 67 - local: X - shadow: 35 - domain: 99
+Element, global: 68 - local: 32 - shadow: X - domain: 32
+Element, global: 69 - local: 33 - shadow: X - domain: 33
+Element, global: 70 - local: 34 - shadow: X - domain: 34
+Element, global: 71 - local: 35 - shadow: X - domain: 35
+Element, global: 72 - local: X - shadow: 36 - domain: 100
+Element, global: 73 - local: X - shadow: 37 - domain: 101
+Element, global: 74 - local: X - shadow: 38 - domain: 102
+Element, global: 75 - local: X - shadow: 39 - domain: 103
+Element, global: 76 - local: 36 - shadow: X - domain: 36
+Element, global: 77 - local: 37 - shadow: X - domain: 37
+Element, global: 78 - local: 38 - shadow: X - domain: 38
+Element, global: 79 - local: 39 - shadow: X - domain: 39
+Element, global: 80 - local: X - shadow: 40 - domain: 104
+Element, global: 81 - local: X - shadow: 41 - domain: 105
+Element, global: 82 - local: X - shadow: 42 - domain: 106
+Element, global: 83 - local: X - shadow: 43 - domain: 107
+Element, global: 84 - local: 40 - shadow: X - domain: 40
+Element, global: 85 - local: 41 - shadow: X - domain: 41
+Element, global: 86 - local: 42 - shadow: X - domain: 42
+Element, global: 87 - local: 43 - shadow: X - domain: 43
+Element, global: 88 - local: X - shadow: 44 - domain: 108
+Element, global: 89 - local: X - shadow: 45 - domain: 109
+Element, global: 90 - local: X - shadow: 46 - domain: 110
+Element, global: 91 - local: X - shadow: 47 - domain: 111
+Element, global: 92 - local: 44 - shadow: X - domain: 44
+Element, global: 93 - local: 45 - shadow: X - domain: 45
+Element, global: 94 - local: 46 - shadow: X - domain: 46
+Element, global: 95 - local: 47 - shadow: X - domain: 47
+Element, global: 96 - local: X - shadow: 48 - domain: 112
+Element, global: 97 - local: X - shadow: 49 - domain: 113
+Element, global: 98 - local: X - shadow: 50 - domain: 114
+Element, global: 99 - local: X - shadow: 51 - domain: 115
+Element, global: 100 - local: 48 - shadow: X - domain: 48
+Element, global: 101 - local: 49 - shadow: X - domain: 49
+Element, global: 102 - local: 50 - shadow: X - domain: 50
+Element, global: 103 - local: 51 - shadow: X - domain: 51
+Element, global: 104 - local: X - shadow: 52 - domain: 116
+Element, global: 105 - local: X - shadow: 53 - domain: 117
+Element, global: 106 - local: X - shadow: 54 - domain: 118
+Element, global: 107 - local: X - shadow: 55 - domain: 119
+Element, global: 108 - local: 52 - shadow: X - domain: 52
+Element, global: 109 - local: 53 - shadow: X - domain: 53
+Element, global: 110 - local: 54 - shadow: X - domain: 54
+Element, global: 111 - local: 55 - shadow: X - domain: 55
+Element, global: 112 - local: X - shadow: 56 - domain: 120
+Element, global: 113 - local: X - shadow: 57 - domain: 121
+Element, global: 114 - local: X - shadow: 58 - domain: 122
+Element, global: 115 - local: X - shadow: 59 - domain: 123
+Element, global: 116 - local: 56 - shadow: X - domain: 56
+Element, global: 117 - local: 57 - shadow: X - domain: 57
+Element, global: 118 - local: 58 - shadow: X - domain: 58
+Element, global: 119 - local: 59 - shadow: X - domain: 59
+Element, global: 120 - local: X - shadow: 60 - domain: 124
+Element, global: 121 - local: X - shadow: 61 - domain: 125
+Element, global: 122 - local: X - shadow: 62 - domain: 126
+Element, global: 123 - local: X - shadow: 63 - domain: 127
+Element, global: 124 - local: 60 - shadow: X - domain: 60
+Element, global: 125 - local: 61 - shadow: X - domain: 61
+Element, global: 126 - local: 62 - shadow: X - domain: 62
+Element, global: 127 - local: 63 - shadow: X - domain: 63
+
+Element, local: 0 - global: 4
+Element, local: 1 - global: 5
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 12
+Element, local: 5 - global: 13
+Element, local: 6 - global: 14
+Element, local: 7 - global: 15
+Element, local: 8 - global: 20
+Element, local: 9 - global: 21
+Element, local: 10 - global: 22
+Element, local: 11 - global: 23
+Element, local: 12 - global: 28
+Element, local: 13 - global: 29
+Element, local: 14 - global: 30
+Element, local: 15 - global: 31
+Element, local: 16 - global: 36
+Element, local: 17 - global: 37
+Element, local: 18 - global: 38
+Element, local: 19 - global: 39
+Element, local: 20 - global: 44
+Element, local: 21 - global: 45
+Element, local: 22 - global: 46
+Element, local: 23 - global: 47
+Element, local: 24 - global: 52
+Element, local: 25 - global: 53
+Element, local: 26 - global: 54
+Element, local: 27 - global: 55
+Element, local: 28 - global: 60
+Element, local: 29 - global: 61
+Element, local: 30 - global: 62
+Element, local: 31 - global: 63
+Element, local: 32 - global: 68
+Element, local: 33 - global: 69
+Element, local: 34 - global: 70
+Element, local: 35 - global: 71
+Element, local: 36 - global: 76
+Element, local: 37 - global: 77
+Element, local: 38 - global: 78
+Element, local: 39 - global: 79
+Element, local: 40 - global: 84
+Element, local: 41 - global: 85
+Element, local: 42 - global: 86
+Element, local: 43 - global: 87
+Element, local: 44 - global: 92
+Element, local: 45 - global: 93
+Element, local: 46 - global: 94
+Element, local: 47 - global: 95
+Element, local: 48 - global: 100
+Element, local: 49 - global: 101
+Element, local: 50 - global: 102
+Element, local: 51 - global: 103
+Element, local: 52 - global: 108
+Element, local: 53 - global: 109
+Element, local: 54 - global: 110
+Element, local: 55 - global: 111
+Element, local: 56 - global: 116
+Element, local: 57 - global: 117
+Element, local: 58 - global: 118
+Element, local: 59 - global: 119
+Element, local: 60 - global: 124
+Element, local: 61 - global: 125
+Element, local: 62 - global: 126
+Element, local: 63 - global: 127
+
+Element, domain: 0 - global: 4
+Element, domain: 1 - global: 5
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 12
+Element, domain: 5 - global: 13
+Element, domain: 6 - global: 14
+Element, domain: 7 - global: 15
+Element, domain: 8 - global: 20
+Element, domain: 9 - global: 21
+Element, domain: 10 - global: 22
+Element, domain: 11 - global: 23
+Element, domain: 12 - global: 28
+Element, domain: 13 - global: 29
+Element, domain: 14 - global: 30
+Element, domain: 15 - global: 31
+Element, domain: 16 - global: 36
+Element, domain: 17 - global: 37
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 44
+Element, domain: 21 - global: 45
+Element, domain: 22 - global: 46
+Element, domain: 23 - global: 47
+Element, domain: 24 - global: 52
+Element, domain: 25 - global: 53
+Element, domain: 26 - global: 54
+Element, domain: 27 - global: 55
+Element, domain: 28 - global: 60
+Element, domain: 29 - global: 61
+Element, domain: 30 - global: 62
+Element, domain: 31 - global: 63
+Element, domain: 32 - global: 68
+Element, domain: 33 - global: 69
+Element, domain: 34 - global: 70
+Element, domain: 35 - global: 71
+Element, domain: 36 - global: 76
+Element, domain: 37 - global: 77
+Element, domain: 38 - global: 78
+Element, domain: 39 - global: 79
+Element, domain: 40 - global: 84
+Element, domain: 41 - global: 85
+Element, domain: 42 - global: 86
+Element, domain: 43 - global: 87
+Element, domain: 44 - global: 92
+Element, domain: 45 - global: 93
+Element, domain: 46 - global: 94
+Element, domain: 47 - global: 95
+Element, domain: 48 - global: 100
+Element, domain: 49 - global: 101
+Element, domain: 50 - global: 102
+Element, domain: 51 - global: 103
+Element, domain: 52 - global: 108
+Element, domain: 53 - global: 109
+Element, domain: 54 - global: 110
+Element, domain: 55 - global: 111
+Element, domain: 56 - global: 116
+Element, domain: 57 - global: 117
+Element, domain: 58 - global: 118
+Element, domain: 59 - global: 119
+Element, domain: 60 - global: 124
+Element, domain: 61 - global: 125
+Element, domain: 62 - global: 126
+Element, domain: 63 - global: 127
+Element, domain: 64 - global: 0
+Element, domain: 65 - global: 1
+Element, domain: 66 - global: 2
+Element, domain: 67 - global: 3
+Element, domain: 68 - global: 8
+Element, domain: 69 - global: 9
+Element, domain: 70 - global: 10
+Element, domain: 71 - global: 11
+Element, domain: 72 - global: 16
+Element, domain: 73 - global: 17
+Element, domain: 74 - global: 18
+Element, domain: 75 - global: 19
+Element, domain: 76 - global: 24
+Element, domain: 77 - global: 25
+Element, domain: 78 - global: 26
+Element, domain: 79 - global: 27
+Element, domain: 80 - global: 32
+Element, domain: 81 - global: 33
+Element, domain: 82 - global: 34
+Element, domain: 83 - global: 35
+Element, domain: 84 - global: 40
+Element, domain: 85 - global: 41
+Element, domain: 86 - global: 42
+Element, domain: 87 - global: 43
+Element, domain: 88 - global: 48
+Element, domain: 89 - global: 49
+Element, domain: 90 - global: 50
+Element, domain: 91 - global: 51
+Element, domain: 92 - global: 56
+Element, domain: 93 - global: 57
+Element, domain: 94 - global: 58
+Element, domain: 95 - global: 59
+Element, domain: 96 - global: 64
+Element, domain: 97 - global: 65
+Element, domain: 98 - global: 66
+Element, domain: 99 - global: 67
+Element, domain: 100 - global: 72
+Element, domain: 101 - global: 73
+Element, domain: 102 - global: 74
+Element, domain: 103 - global: 75
+Element, domain: 104 - global: 80
+Element, domain: 105 - global: 81
+Element, domain: 106 - global: 82
+Element, domain: 107 - global: 83
+Element, domain: 108 - global: 88
+Element, domain: 109 - global: 89
+Element, domain: 110 - global: 90
+Element, domain: 111 - global: 91
+Element, domain: 112 - global: 96
+Element, domain: 113 - global: 97
+Element, domain: 114 - global: 98
+Element, domain: 115 - global: 99
+Element, domain: 116 - global: 104
+Element, domain: 117 - global: 105
+Element, domain: 118 - global: 106
+Element, domain: 119 - global: 107
+Element, domain: 120 - global: 112
+Element, domain: 121 - global: 113
+Element, domain: 122 - global: 114
+Element, domain: 123 - global: 115
+Element, domain: 124 - global: 120
+Element, domain: 125 - global: 121
+Element, domain: 126 - global: 122
+Element, domain: 127 - global: 123
+
+Node, global: 0 - local: X - shadow: 0 - domain: 125
+Node, global: 1 - local: X - shadow: 1 - domain: 126
+Node, global: 2 - local: X - shadow: 2 - domain: 127
+Node, global: 3 - local: X - shadow: 3 - domain: 128
+Node, global: 4 - local: 0 - shadow: X - domain: 0
+Node, global: 5 - local: 1 - shadow: X - domain: 1
+Node, global: 6 - local: 2 - shadow: X - domain: 2
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: X - shadow: 4 - domain: 129
+Node, global: 10 - local: X - shadow: 5 - domain: 130
+Node, global: 11 - local: X - shadow: 6 - domain: 131
+Node, global: 12 - local: X - shadow: 7 - domain: 132
+Node, global: 13 - local: 5 - shadow: X - domain: 5
+Node, global: 14 - local: 6 - shadow: X - domain: 6
+Node, global: 15 - local: 7 - shadow: X - domain: 7
+Node, global: 16 - local: 8 - shadow: X - domain: 8
+Node, global: 17 - local: 9 - shadow: X - domain: 9
+Node, global: 18 - local: X - shadow: 8 - domain: 133
+Node, global: 19 - local: X - shadow: 9 - domain: 134
+Node, global: 20 - local: X - shadow: 10 - domain: 135
+Node, global: 21 - local: X - shadow: 11 - domain: 136
+Node, global: 22 - local: 10 - shadow: X - domain: 10
+Node, global: 23 - local: 11 - shadow: X - domain: 11
+Node, global: 24 - local: 12 - shadow: X - domain: 12
+Node, global: 25 - local: 13 - shadow: X - domain: 13
+Node, global: 26 - local: 14 - shadow: X - domain: 14
+Node, global: 27 - local: X - shadow: 12 - domain: 137
+Node, global: 28 - local: X - shadow: 13 - domain: 138
+Node, global: 29 - local: X - shadow: 14 - domain: 139
+Node, global: 30 - local: X - shadow: 15 - domain: 140
+Node, global: 31 - local: 15 - shadow: X - domain: 15
+Node, global: 32 - local: 16 - shadow: X - domain: 16
+Node, global: 33 - local: 17 - shadow: X - domain: 17
+Node, global: 34 - local: 18 - shadow: X - domain: 18
+Node, global: 35 - local: 19 - shadow: X - domain: 19
+Node, global: 36 - local: X - shadow: 16 - domain: 141
+Node, global: 37 - local: X - shadow: 17 - domain: 142
+Node, global: 38 - local: X - shadow: 18 - domain: 143
+Node, global: 39 - local: X - shadow: 19 - domain: 144
+Node, global: 40 - local: 20 - shadow: X - domain: 20
+Node, global: 41 - local: 21 - shadow: X - domain: 21
+Node, global: 42 - local: 22 - shadow: X - domain: 22
+Node, global: 43 - local: 23 - shadow: X - domain: 23
+Node, global: 44 - local: 24 - shadow: X - domain: 24
+Node, global: 45 - local: X - shadow: 20 - domain: 145
+Node, global: 46 - local: X - shadow: 21 - domain: 146
+Node, global: 47 - local: X - shadow: 22 - domain: 147
+Node, global: 48 - local: X - shadow: 23 - domain: 148
+Node, global: 49 - local: 25 - shadow: X - domain: 25
+Node, global: 50 - local: 26 - shadow: X - domain: 26
+Node, global: 51 - local: 27 - shadow: X - domain: 27
+Node, global: 52 - local: 28 - shadow: X - domain: 28
+Node, global: 53 - local: 29 - shadow: X - domain: 29
+Node, global: 54 - local: X - shadow: 24 - domain: 149
+Node, global: 55 - local: X - shadow: 25 - domain: 150
+Node, global: 56 - local: X - shadow: 26 - domain: 151
+Node, global: 57 - local: X - shadow: 27 - domain: 152
+Node, global: 58 - local: 30 - shadow: X - domain: 30
+Node, global: 59 - local: 31 - shadow: X - domain: 31
+Node, global: 60 - local: 32 - shadow: X - domain: 32
+Node, global: 61 - local: 33 - shadow: X - domain: 33
+Node, global: 62 - local: 34 - shadow: X - domain: 34
+Node, global: 63 - local: X - shadow: 28 - domain: 153
+Node, global: 64 - local: X - shadow: 29 - domain: 154
+Node, global: 65 - local: X - shadow: 30 - domain: 155
+Node, global: 66 - local: X - shadow: 31 - domain: 156
+Node, global: 67 - local: 35 - shadow: X - domain: 35
+Node, global: 68 - local: 36 - shadow: X - domain: 36
+Node, global: 69 - local: 37 - shadow: X - domain: 37
+Node, global: 70 - local: 38 - shadow: X - domain: 38
+Node, global: 71 - local: 39 - shadow: X - domain: 39
+Node, global: 72 - local: X - shadow: 32 - domain: 157
+Node, global: 73 - local: X - shadow: 33 - domain: 158
+Node, global: 74 - local: X - shadow: 34 - domain: 159
+Node, global: 75 - local: X - shadow: 35 - domain: 160
+Node, global: 76 - local: 40 - shadow: X - domain: 40
+Node, global: 77 - local: 41 - shadow: X - domain: 41
+Node, global: 78 - local: 42 - shadow: X - domain: 42
+Node, global: 79 - local: 43 - shadow: X - domain: 43
+Node, global: 80 - local: 44 - shadow: X - domain: 44
+Node, global: 81 - local: X - shadow: 36 - domain: 161
+Node, global: 82 - local: X - shadow: 37 - domain: 162
+Node, global: 83 - local: X - shadow: 38 - domain: 163
+Node, global: 84 - local: X - shadow: 39 - domain: 164
+Node, global: 85 - local: 45 - shadow: X - domain: 45
+Node, global: 86 - local: 46 - shadow: X - domain: 46
+Node, global: 87 - local: 47 - shadow: X - domain: 47
+Node, global: 88 - local: 48 - shadow: X - domain: 48
+Node, global: 89 - local: 49 - shadow: X - domain: 49
+Node, global: 90 - local: X - shadow: 40 - domain: 165
+Node, global: 91 - local: X - shadow: 41 - domain: 166
+Node, global: 92 - local: X - shadow: 42 - domain: 167
+Node, global: 93 - local: X - shadow: 43 - domain: 168
+Node, global: 94 - local: 50 - shadow: X - domain: 50
+Node, global: 95 - local: 51 - shadow: X - domain: 51
+Node, global: 96 - local: 52 - shadow: X - domain: 52
+Node, global: 97 - local: 53 - shadow: X - domain: 53
+Node, global: 98 - local: 54 - shadow: X - domain: 54
+Node, global: 99 - local: X - shadow: 44 - domain: 169
+Node, global: 100 - local: X - shadow: 45 - domain: 170
+Node, global: 101 - local: X - shadow: 46 - domain: 171
+Node, global: 102 - local: X - shadow: 47 - domain: 172
+Node, global: 103 - local: 55 - shadow: X - domain: 55
+Node, global: 104 - local: 56 - shadow: X - domain: 56
+Node, global: 105 - local: 57 - shadow: X - domain: 57
+Node, global: 106 - local: 58 - shadow: X - domain: 58
+Node, global: 107 - local: 59 - shadow: X - domain: 59
+Node, global: 108 - local: X - shadow: 48 - domain: 173
+Node, global: 109 - local: X - shadow: 49 - domain: 174
+Node, global: 110 - local: X - shadow: 50 - domain: 175
+Node, global: 111 - local: X - shadow: 51 - domain: 176
+Node, global: 112 - local: 60 - shadow: X - domain: 60
+Node, global: 113 - local: 61 - shadow: X - domain: 61
+Node, global: 114 - local: 62 - shadow: X - domain: 62
+Node, global: 115 - local: 63 - shadow: X - domain: 63
+Node, global: 116 - local: 64 - shadow: X - domain: 64
+Node, global: 117 - local: X - shadow: 52 - domain: 177
+Node, global: 118 - local: X - shadow: 53 - domain: 178
+Node, global: 119 - local: X - shadow: 54 - domain: 179
+Node, global: 120 - local: X - shadow: 55 - domain: 180
+Node, global: 121 - local: 65 - shadow: X - domain: 65
+Node, global: 122 - local: 66 - shadow: X - domain: 66
+Node, global: 123 - local: 67 - shadow: X - domain: 67
+Node, global: 124 - local: 68 - shadow: X - domain: 68
+Node, global: 125 - local: 69 - shadow: X - domain: 69
+Node, global: 126 - local: X - shadow: 56 - domain: 181
+Node, global: 127 - local: X - shadow: 57 - domain: 182
+Node, global: 128 - local: X - shadow: 58 - domain: 183
+Node, global: 129 - local: X - shadow: 59 - domain: 184
+Node, global: 130 - local: 70 - shadow: X - domain: 70
+Node, global: 131 - local: 71 - shadow: X - domain: 71
+Node, global: 132 - local: 72 - shadow: X - domain: 72
+Node, global: 133 - local: 73 - shadow: X - domain: 73
+Node, global: 134 - local: 74 - shadow: X - domain: 74
+Node, global: 135 - local: X - shadow: 60 - domain: 185
+Node, global: 136 - local: X - shadow: 61 - domain: 186
+Node, global: 137 - local: X - shadow: 62 - domain: 187
+Node, global: 138 - local: X - shadow: 63 - domain: 188
+Node, global: 139 - local: 75 - shadow: X - domain: 75
+Node, global: 140 - local: 76 - shadow: X - domain: 76
+Node, global: 141 - local: 77 - shadow: X - domain: 77
+Node, global: 142 - local: 78 - shadow: X - domain: 78
+Node, global: 143 - local: 79 - shadow: X - domain: 79
+Node, global: 144 - local: X - shadow: 64 - domain: 189
+Node, global: 145 - local: X - shadow: 65 - domain: 190
+Node, global: 146 - local: X - shadow: 66 - domain: 191
+Node, global: 147 - local: X - shadow: 67 - domain: 192
+Node, global: 148 - local: 80 - shadow: X - domain: 80
+Node, global: 149 - local: 81 - shadow: X - domain: 81
+Node, global: 150 - local: 82 - shadow: X - domain: 82
+Node, global: 151 - local: 83 - shadow: X - domain: 83
+Node, global: 152 - local: 84 - shadow: X - domain: 84
+Node, global: 153 - local: X - shadow: 68 - domain: 193
+Node, global: 154 - local: X - shadow: 69 - domain: 194
+Node, global: 155 - local: X - shadow: 70 - domain: 195
+Node, global: 156 - local: X - shadow: 71 - domain: 196
+Node, global: 157 - local: 85 - shadow: X - domain: 85
+Node, global: 158 - local: 86 - shadow: X - domain: 86
+Node, global: 159 - local: 87 - shadow: X - domain: 87
+Node, global: 160 - local: 88 - shadow: X - domain: 88
+Node, global: 161 - local: 89 - shadow: X - domain: 89
+Node, global: 162 - local: X - shadow: 72 - domain: 197
+Node, global: 163 - local: X - shadow: 73 - domain: 198
+Node, global: 164 - local: X - shadow: 74 - domain: 199
+Node, global: 165 - local: X - shadow: 75 - domain: 200
+Node, global: 166 - local: 90 - shadow: X - domain: 90
+Node, global: 167 - local: 91 - shadow: X - domain: 91
+Node, global: 168 - local: 92 - shadow: X - domain: 92
+Node, global: 169 - local: 93 - shadow: X - domain: 93
+Node, global: 170 - local: 94 - shadow: X - domain: 94
+Node, global: 171 - local: X - shadow: 76 - domain: 201
+Node, global: 172 - local: X - shadow: 77 - domain: 202
+Node, global: 173 - local: X - shadow: 78 - domain: 203
+Node, global: 174 - local: X - shadow: 79 - domain: 204
+Node, global: 175 - local: 95 - shadow: X - domain: 95
+Node, global: 176 - local: 96 - shadow: X - domain: 96
+Node, global: 177 - local: 97 - shadow: X - domain: 97
+Node, global: 178 - local: 98 - shadow: X - domain: 98
+Node, global: 179 - local: 99 - shadow: X - domain: 99
+Node, global: 180 - local: X - shadow: 80 - domain: 205
+Node, global: 181 - local: X - shadow: 81 - domain: 206
+Node, global: 182 - local: X - shadow: 82 - domain: 207
+Node, global: 183 - local: X - shadow: 83 - domain: 208
+Node, global: 184 - local: 100 - shadow: X - domain: 100
+Node, global: 185 - local: 101 - shadow: X - domain: 101
+Node, global: 186 - local: 102 - shadow: X - domain: 102
+Node, global: 187 - local: 103 - shadow: X - domain: 103
+Node, global: 188 - local: 104 - shadow: X - domain: 104
+Node, global: 189 - local: X - shadow: 84 - domain: 209
+Node, global: 190 - local: X - shadow: 85 - domain: 210
+Node, global: 191 - local: X - shadow: 86 - domain: 211
+Node, global: 192 - local: X - shadow: 87 - domain: 212
+Node, global: 193 - local: 105 - shadow: X - domain: 105
+Node, global: 194 - local: 106 - shadow: X - domain: 106
+Node, global: 195 - local: 107 - shadow: X - domain: 107
+Node, global: 196 - local: 108 - shadow: X - domain: 108
+Node, global: 197 - local: 109 - shadow: X - domain: 109
+Node, global: 198 - local: X - shadow: 88 - domain: 213
+Node, global: 199 - local: X - shadow: 89 - domain: 214
+Node, global: 200 - local: X - shadow: 90 - domain: 215
+Node, global: 201 - local: X - shadow: 91 - domain: 216
+Node, global: 202 - local: 110 - shadow: X - domain: 110
+Node, global: 203 - local: 111 - shadow: X - domain: 111
+Node, global: 204 - local: 112 - shadow: X - domain: 112
+Node, global: 205 - local: 113 - shadow: X - domain: 113
+Node, global: 206 - local: 114 - shadow: X - domain: 114
+Node, global: 207 - local: X - shadow: 92 - domain: 217
+Node, global: 208 - local: X - shadow: 93 - domain: 218
+Node, global: 209 - local: X - shadow: 94 - domain: 219
+Node, global: 210 - local: X - shadow: 95 - domain: 220
+Node, global: 211 - local: 115 - shadow: X - domain: 115
+Node, global: 212 - local: 116 - shadow: X - domain: 116
+Node, global: 213 - local: 117 - shadow: X - domain: 117
+Node, global: 214 - local: 118 - shadow: X - domain: 118
+Node, global: 215 - local: 119 - shadow: X - domain: 119
+Node, global: 216 - local: X - shadow: 96 - domain: 221
+Node, global: 217 - local: X - shadow: 97 - domain: 222
+Node, global: 218 - local: X - shadow: 98 - domain: 223
+Node, global: 219 - local: X - shadow: 99 - domain: 224
+Node, global: 220 - local: 120 - shadow: X - domain: 120
+Node, global: 221 - local: 121 - shadow: X - domain: 121
+Node, global: 222 - local: 122 - shadow: X - domain: 122
+Node, global: 223 - local: 123 - shadow: X - domain: 123
+Node, global: 224 - local: 124 - shadow: X - domain: 124
+
+Node, local: 0 - global: 4
+Node, local: 1 - global: 5
+Node, local: 2 - global: 6
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 13
+Node, local: 6 - global: 14
+Node, local: 7 - global: 15
+Node, local: 8 - global: 16
+Node, local: 9 - global: 17
+Node, local: 10 - global: 22
+Node, local: 11 - global: 23
+Node, local: 12 - global: 24
+Node, local: 13 - global: 25
+Node, local: 14 - global: 26
+Node, local: 15 - global: 31
+Node, local: 16 - global: 32
+Node, local: 17 - global: 33
+Node, local: 18 - global: 34
+Node, local: 19 - global: 35
+Node, local: 20 - global: 40
+Node, local: 21 - global: 41
+Node, local: 22 - global: 42
+Node, local: 23 - global: 43
+Node, local: 24 - global: 44
+Node, local: 25 - global: 49
+Node, local: 26 - global: 50
+Node, local: 27 - global: 51
+Node, local: 28 - global: 52
+Node, local: 29 - global: 53
+Node, local: 30 - global: 58
+Node, local: 31 - global: 59
+Node, local: 32 - global: 60
+Node, local: 33 - global: 61
+Node, local: 34 - global: 62
+Node, local: 35 - global: 67
+Node, local: 36 - global: 68
+Node, local: 37 - global: 69
+Node, local: 38 - global: 70
+Node, local: 39 - global: 71
+Node, local: 40 - global: 76
+Node, local: 41 - global: 77
+Node, local: 42 - global: 78
+Node, local: 43 - global: 79
+Node, local: 44 - global: 80
+Node, local: 45 - global: 85
+Node, local: 46 - global: 86
+Node, local: 47 - global: 87
+Node, local: 48 - global: 88
+Node, local: 49 - global: 89
+Node, local: 50 - global: 94
+Node, local: 51 - global: 95
+Node, local: 52 - global: 96
+Node, local: 53 - global: 97
+Node, local: 54 - global: 98
+Node, local: 55 - global: 103
+Node, local: 56 - global: 104
+Node, local: 57 - global: 105
+Node, local: 58 - global: 106
+Node, local: 59 - global: 107
+Node, local: 60 - global: 112
+Node, local: 61 - global: 113
+Node, local: 62 - global: 114
+Node, local: 63 - global: 115
+Node, local: 64 - global: 116
+Node, local: 65 - global: 121
+Node, local: 66 - global: 122
+Node, local: 67 - global: 123
+Node, local: 68 - global: 124
+Node, local: 69 - global: 125
+Node, local: 70 - global: 130
+Node, local: 71 - global: 131
+Node, local: 72 - global: 132
+Node, local: 73 - global: 133
+Node, local: 74 - global: 134
+Node, local: 75 - global: 139
+Node, local: 76 - global: 140
+Node, local: 77 - global: 141
+Node, local: 78 - global: 142
+Node, local: 79 - global: 143
+Node, local: 80 - global: 148
+Node, local: 81 - global: 149
+Node, local: 82 - global: 150
+Node, local: 83 - global: 151
+Node, local: 84 - global: 152
+Node, local: 85 - global: 157
+Node, local: 86 - global: 158
+Node, local: 87 - global: 159
+Node, local: 88 - global: 160
+Node, local: 89 - global: 161
+Node, local: 90 - global: 166
+Node, local: 91 - global: 167
+Node, local: 92 - global: 168
+Node, local: 93 - global: 169
+Node, local: 94 - global: 170
+Node, local: 95 - global: 175
+Node, local: 96 - global: 176
+Node, local: 97 - global: 177
+Node, local: 98 - global: 178
+Node, local: 99 - global: 179
+Node, local: 100 - global: 184
+Node, local: 101 - global: 185
+Node, local: 102 - global: 186
+Node, local: 103 - global: 187
+Node, local: 104 - global: 188
+Node, local: 105 - global: 193
+Node, local: 106 - global: 194
+Node, local: 107 - global: 195
+Node, local: 108 - global: 196
+Node, local: 109 - global: 197
+Node, local: 110 - global: 202
+Node, local: 111 - global: 203
+Node, local: 112 - global: 204
+Node, local: 113 - global: 205
+Node, local: 114 - global: 206
+Node, local: 115 - global: 211
+Node, local: 116 - global: 212
+Node, local: 117 - global: 213
+Node, local: 118 - global: 214
+Node, local: 119 - global: 215
+Node, local: 120 - global: 220
+Node, local: 121 - global: 221
+Node, local: 122 - global: 222
+Node, local: 123 - global: 223
+Node, local: 124 - global: 224
+
+Node, domain: 0 - global: 4
+Node, domain: 1 - global: 5
+Node, domain: 2 - global: 6
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 13
+Node, domain: 6 - global: 14
+Node, domain: 7 - global: 15
+Node, domain: 8 - global: 16
+Node, domain: 9 - global: 17
+Node, domain: 10 - global: 22
+Node, domain: 11 - global: 23
+Node, domain: 12 - global: 24
+Node, domain: 13 - global: 25
+Node, domain: 14 - global: 26
+Node, domain: 15 - global: 31
+Node, domain: 16 - global: 32
+Node, domain: 17 - global: 33
+Node, domain: 18 - global: 34
+Node, domain: 19 - global: 35
+Node, domain: 20 - global: 40
+Node, domain: 21 - global: 41
+Node, domain: 22 - global: 42
+Node, domain: 23 - global: 43
+Node, domain: 24 - global: 44
+Node, domain: 25 - global: 49
+Node, domain: 26 - global: 50
+Node, domain: 27 - global: 51
+Node, domain: 28 - global: 52
+Node, domain: 29 - global: 53
+Node, domain: 30 - global: 58
+Node, domain: 31 - global: 59
+Node, domain: 32 - global: 60
+Node, domain: 33 - global: 61
+Node, domain: 34 - global: 62
+Node, domain: 35 - global: 67
+Node, domain: 36 - global: 68
+Node, domain: 37 - global: 69
+Node, domain: 38 - global: 70
+Node, domain: 39 - global: 71
+Node, domain: 40 - global: 76
+Node, domain: 41 - global: 77
+Node, domain: 42 - global: 78
+Node, domain: 43 - global: 79
+Node, domain: 44 - global: 80
+Node, domain: 45 - global: 85
+Node, domain: 46 - global: 86
+Node, domain: 47 - global: 87
+Node, domain: 48 - global: 88
+Node, domain: 49 - global: 89
+Node, domain: 50 - global: 94
+Node, domain: 51 - global: 95
+Node, domain: 52 - global: 96
+Node, domain: 53 - global: 97
+Node, domain: 54 - global: 98
+Node, domain: 55 - global: 103
+Node, domain: 56 - global: 104
+Node, domain: 57 - global: 105
+Node, domain: 58 - global: 106
+Node, domain: 59 - global: 107
+Node, domain: 60 - global: 112
+Node, domain: 61 - global: 113
+Node, domain: 62 - global: 114
+Node, domain: 63 - global: 115
+Node, domain: 64 - global: 116
+Node, domain: 65 - global: 121
+Node, domain: 66 - global: 122
+Node, domain: 67 - global: 123
+Node, domain: 68 - global: 124
+Node, domain: 69 - global: 125
+Node, domain: 70 - global: 130
+Node, domain: 71 - global: 131
+Node, domain: 72 - global: 132
+Node, domain: 73 - global: 133
+Node, domain: 74 - global: 134
+Node, domain: 75 - global: 139
+Node, domain: 76 - global: 140
+Node, domain: 77 - global: 141
+Node, domain: 78 - global: 142
+Node, domain: 79 - global: 143
+Node, domain: 80 - global: 148
+Node, domain: 81 - global: 149
+Node, domain: 82 - global: 150
+Node, domain: 83 - global: 151
+Node, domain: 84 - global: 152
+Node, domain: 85 - global: 157
+Node, domain: 86 - global: 158
+Node, domain: 87 - global: 159
+Node, domain: 88 - global: 160
+Node, domain: 89 - global: 161
+Node, domain: 90 - global: 166
+Node, domain: 91 - global: 167
+Node, domain: 92 - global: 168
+Node, domain: 93 - global: 169
+Node, domain: 94 - global: 170
+Node, domain: 95 - global: 175
+Node, domain: 96 - global: 176
+Node, domain: 97 - global: 177
+Node, domain: 98 - global: 178
+Node, domain: 99 - global: 179
+Node, domain: 100 - global: 184
+Node, domain: 101 - global: 185
+Node, domain: 102 - global: 186
+Node, domain: 103 - global: 187
+Node, domain: 104 - global: 188
+Node, domain: 105 - global: 193
+Node, domain: 106 - global: 194
+Node, domain: 107 - global: 195
+Node, domain: 108 - global: 196
+Node, domain: 109 - global: 197
+Node, domain: 110 - global: 202
+Node, domain: 111 - global: 203
+Node, domain: 112 - global: 204
+Node, domain: 113 - global: 205
+Node, domain: 114 - global: 206
+Node, domain: 115 - global: 211
+Node, domain: 116 - global: 212
+Node, domain: 117 - global: 213
+Node, domain: 118 - global: 214
+Node, domain: 119 - global: 215
+Node, domain: 120 - global: 220
+Node, domain: 121 - global: 221
+Node, domain: 122 - global: 222
+Node, domain: 123 - global: 223
+Node, domain: 124 - global: 224
+Node, domain: 125 - global: 0
+Node, domain: 126 - global: 1
+Node, domain: 127 - global: 2
+Node, domain: 128 - global: 3
+Node, domain: 129 - global: 9
+Node, domain: 130 - global: 10
+Node, domain: 131 - global: 11
+Node, domain: 132 - global: 12
+Node, domain: 133 - global: 18
+Node, domain: 134 - global: 19
+Node, domain: 135 - global: 20
+Node, domain: 136 - global: 21
+Node, domain: 137 - global: 27
+Node, domain: 138 - global: 28
+Node, domain: 139 - global: 29
+Node, domain: 140 - global: 30
+Node, domain: 141 - global: 36
+Node, domain: 142 - global: 37
+Node, domain: 143 - global: 38
+Node, domain: 144 - global: 39
+Node, domain: 145 - global: 45
+Node, domain: 146 - global: 46
+Node, domain: 147 - global: 47
+Node, domain: 148 - global: 48
+Node, domain: 149 - global: 54
+Node, domain: 150 - global: 55
+Node, domain: 151 - global: 56
+Node, domain: 152 - global: 57
+Node, domain: 153 - global: 63
+Node, domain: 154 - global: 64
+Node, domain: 155 - global: 65
+Node, domain: 156 - global: 66
+Node, domain: 157 - global: 72
+Node, domain: 158 - global: 73
+Node, domain: 159 - global: 74
+Node, domain: 160 - global: 75
+Node, domain: 161 - global: 81
+Node, domain: 162 - global: 82
+Node, domain: 163 - global: 83
+Node, domain: 164 - global: 84
+Node, domain: 165 - global: 90
+Node, domain: 166 - global: 91
+Node, domain: 167 - global: 92
+Node, domain: 168 - global: 93
+Node, domain: 169 - global: 99
+Node, domain: 170 - global: 100
+Node, domain: 171 - global: 101
+Node, domain: 172 - global: 102
+Node, domain: 173 - global: 108
+Node, domain: 174 - global: 109
+Node, domain: 175 - global: 110
+Node, domain: 176 - global: 111
+Node, domain: 177 - global: 117
+Node, domain: 178 - global: 118
+Node, domain: 179 - global: 119
+Node, domain: 180 - global: 120
+Node, domain: 181 - global: 126
+Node, domain: 182 - global: 127
+Node, domain: 183 - global: 128
+Node, domain: 184 - global: 129
+Node, domain: 185 - global: 135
+Node, domain: 186 - global: 136
+Node, domain: 187 - global: 137
+Node, domain: 188 - global: 138
+Node, domain: 189 - global: 144
+Node, domain: 190 - global: 145
+Node, domain: 191 - global: 146
+Node, domain: 192 - global: 147
+Node, domain: 193 - global: 153
+Node, domain: 194 - global: 154
+Node, domain: 195 - global: 155
+Node, domain: 196 - global: 156
+Node, domain: 197 - global: 162
+Node, domain: 198 - global: 163
+Node, domain: 199 - global: 164
+Node, domain: 200 - global: 165
+Node, domain: 201 - global: 171
+Node, domain: 202 - global: 172
+Node, domain: 203 - global: 173
+Node, domain: 204 - global: 174
+Node, domain: 205 - global: 180
+Node, domain: 206 - global: 181
+Node, domain: 207 - global: 182
+Node, domain: 208 - global: 183
+Node, domain: 209 - global: 189
+Node, domain: 210 - global: 190
+Node, domain: 211 - global: 191
+Node, domain: 212 - global: 192
+Node, domain: 213 - global: 198
+Node, domain: 214 - global: 199
+Node, domain: 215 - global: 200
+Node, domain: 216 - global: 201
+Node, domain: 217 - global: 207
+Node, domain: 218 - global: 208
+Node, domain: 219 - global: 209
+Node, domain: 220 - global: 210
+Node, domain: 221 - global: 216
+Node, domain: 222 - global: 217
+Node, domain: 223 - global: 218
+Node, domain: 224 - global: 219
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --meshSizeI=9 --isPeriodicI=True --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,880 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8061420)
+		size : (2,1,1)
+		isPeriodic : (True,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 8, 4, 4 }
+elementGlobalCount: 128
+	elementLocalCounts[0]: { 4, 4, 4 }
+	elementLocalCounts[1]: { 4, 4, 4 }
+elementDomainCounts: { 6, 4, 4 }
+nodeGlobalCounts: { 9, 5, 5 }
+nodeGlobalCount: 225
+	nodeLocalCounts[0]: { 5, 5, 5 }
+	nodeLocalCounts[1]: { 5, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: 2 - shadow: X - domain: 2
+Element, global: 3 - local: 3 - shadow: X - domain: 3
+Element, global: 4 - local: X - shadow: 0 - domain: 64
+Element, global: 5 - local: X - shadow: X - domain: X
+Element, global: 6 - local: X - shadow: X - domain: X
+Element, global: 7 - local: X - shadow: 1 - domain: 65
+Element, global: 8 - local: 4 - shadow: X - domain: 4
+Element, global: 9 - local: 5 - shadow: X - domain: 5
+Element, global: 10 - local: 6 - shadow: X - domain: 6
+Element, global: 11 - local: 7 - shadow: X - domain: 7
+Element, global: 12 - local: X - shadow: 2 - domain: 66
+Element, global: 13 - local: X - shadow: X - domain: X
+Element, global: 14 - local: X - shadow: X - domain: X
+Element, global: 15 - local: X - shadow: 3 - domain: 67
+Element, global: 16 - local: 8 - shadow: X - domain: 8
+Element, global: 17 - local: 9 - shadow: X - domain: 9
+Element, global: 18 - local: 10 - shadow: X - domain: 10
+Element, global: 19 - local: 11 - shadow: X - domain: 11
+Element, global: 20 - local: X - shadow: 4 - domain: 68
+Element, global: 21 - local: X - shadow: X - domain: X
+Element, global: 22 - local: X - shadow: X - domain: X
+Element, global: 23 - local: X - shadow: 5 - domain: 69
+Element, global: 24 - local: 12 - shadow: X - domain: 12
+Element, global: 25 - local: 13 - shadow: X - domain: 13
+Element, global: 26 - local: 14 - shadow: X - domain: 14
+Element, global: 27 - local: 15 - shadow: X - domain: 15
+Element, global: 28 - local: X - shadow: 6 - domain: 70
+Element, global: 29 - local: X - shadow: X - domain: X
+Element, global: 30 - local: X - shadow: X - domain: X
+Element, global: 31 - local: X - shadow: 7 - domain: 71
+Element, global: 32 - local: 16 - shadow: X - domain: 16
+Element, global: 33 - local: 17 - shadow: X - domain: 17
+Element, global: 34 - local: 18 - shadow: X - domain: 18
+Element, global: 35 - local: 19 - shadow: X - domain: 19
+Element, global: 36 - local: X - shadow: 8 - domain: 72
+Element, global: 37 - local: X - shadow: X - domain: X
+Element, global: 38 - local: X - shadow: X - domain: X
+Element, global: 39 - local: X - shadow: 9 - domain: 73
+Element, global: 40 - local: 20 - shadow: X - domain: 20
+Element, global: 41 - local: 21 - shadow: X - domain: 21
+Element, global: 42 - local: 22 - shadow: X - domain: 22
+Element, global: 43 - local: 23 - shadow: X - domain: 23
+Element, global: 44 - local: X - shadow: 10 - domain: 74
+Element, global: 45 - local: X - shadow: X - domain: X
+Element, global: 46 - local: X - shadow: X - domain: X
+Element, global: 47 - local: X - shadow: 11 - domain: 75
+Element, global: 48 - local: 24 - shadow: X - domain: 24
+Element, global: 49 - local: 25 - shadow: X - domain: 25
+Element, global: 50 - local: 26 - shadow: X - domain: 26
+Element, global: 51 - local: 27 - shadow: X - domain: 27
+Element, global: 52 - local: X - shadow: 12 - domain: 76
+Element, global: 53 - local: X - shadow: X - domain: X
+Element, global: 54 - local: X - shadow: X - domain: X
+Element, global: 55 - local: X - shadow: 13 - domain: 77
+Element, global: 56 - local: 28 - shadow: X - domain: 28
+Element, global: 57 - local: 29 - shadow: X - domain: 29
+Element, global: 58 - local: 30 - shadow: X - domain: 30
+Element, global: 59 - local: 31 - shadow: X - domain: 31
+Element, global: 60 - local: X - shadow: 14 - domain: 78
+Element, global: 61 - local: X - shadow: X - domain: X
+Element, global: 62 - local: X - shadow: X - domain: X
+Element, global: 63 - local: X - shadow: 15 - domain: 79
+Element, global: 64 - local: 32 - shadow: X - domain: 32
+Element, global: 65 - local: 33 - shadow: X - domain: 33
+Element, global: 66 - local: 34 - shadow: X - domain: 34
+Element, global: 67 - local: 35 - shadow: X - domain: 35
+Element, global: 68 - local: X - shadow: 16 - domain: 80
+Element, global: 69 - local: X - shadow: X - domain: X
+Element, global: 70 - local: X - shadow: X - domain: X
+Element, global: 71 - local: X - shadow: 17 - domain: 81
+Element, global: 72 - local: 36 - shadow: X - domain: 36
+Element, global: 73 - local: 37 - shadow: X - domain: 37
+Element, global: 74 - local: 38 - shadow: X - domain: 38
+Element, global: 75 - local: 39 - shadow: X - domain: 39
+Element, global: 76 - local: X - shadow: 18 - domain: 82
+Element, global: 77 - local: X - shadow: X - domain: X
+Element, global: 78 - local: X - shadow: X - domain: X
+Element, global: 79 - local: X - shadow: 19 - domain: 83
+Element, global: 80 - local: 40 - shadow: X - domain: 40
+Element, global: 81 - local: 41 - shadow: X - domain: 41
+Element, global: 82 - local: 42 - shadow: X - domain: 42
+Element, global: 83 - local: 43 - shadow: X - domain: 43
+Element, global: 84 - local: X - shadow: 20 - domain: 84
+Element, global: 85 - local: X - shadow: X - domain: X
+Element, global: 86 - local: X - shadow: X - domain: X
+Element, global: 87 - local: X - shadow: 21 - domain: 85
+Element, global: 88 - local: 44 - shadow: X - domain: 44
+Element, global: 89 - local: 45 - shadow: X - domain: 45
+Element, global: 90 - local: 46 - shadow: X - domain: 46
+Element, global: 91 - local: 47 - shadow: X - domain: 47
+Element, global: 92 - local: X - shadow: 22 - domain: 86
+Element, global: 93 - local: X - shadow: X - domain: X
+Element, global: 94 - local: X - shadow: X - domain: X
+Element, global: 95 - local: X - shadow: 23 - domain: 87
+Element, global: 96 - local: 48 - shadow: X - domain: 48
+Element, global: 97 - local: 49 - shadow: X - domain: 49
+Element, global: 98 - local: 50 - shadow: X - domain: 50
+Element, global: 99 - local: 51 - shadow: X - domain: 51
+Element, global: 100 - local: X - shadow: 24 - domain: 88
+Element, global: 101 - local: X - shadow: X - domain: X
+Element, global: 102 - local: X - shadow: X - domain: X
+Element, global: 103 - local: X - shadow: 25 - domain: 89
+Element, global: 104 - local: 52 - shadow: X - domain: 52
+Element, global: 105 - local: 53 - shadow: X - domain: 53
+Element, global: 106 - local: 54 - shadow: X - domain: 54
+Element, global: 107 - local: 55 - shadow: X - domain: 55
+Element, global: 108 - local: X - shadow: 26 - domain: 90
+Element, global: 109 - local: X - shadow: X - domain: X
+Element, global: 110 - local: X - shadow: X - domain: X
+Element, global: 111 - local: X - shadow: 27 - domain: 91
+Element, global: 112 - local: 56 - shadow: X - domain: 56
+Element, global: 113 - local: 57 - shadow: X - domain: 57
+Element, global: 114 - local: 58 - shadow: X - domain: 58
+Element, global: 115 - local: 59 - shadow: X - domain: 59
+Element, global: 116 - local: X - shadow: 28 - domain: 92
+Element, global: 117 - local: X - shadow: X - domain: X
+Element, global: 118 - local: X - shadow: X - domain: X
+Element, global: 119 - local: X - shadow: 29 - domain: 93
+Element, global: 120 - local: 60 - shadow: X - domain: 60
+Element, global: 121 - local: 61 - shadow: X - domain: 61
+Element, global: 122 - local: 62 - shadow: X - domain: 62
+Element, global: 123 - local: 63 - shadow: X - domain: 63
+Element, global: 124 - local: X - shadow: 30 - domain: 94
+Element, global: 125 - local: X - shadow: X - domain: X
+Element, global: 126 - local: X - shadow: X - domain: X
+Element, global: 127 - local: X - shadow: 31 - domain: 95
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 2
+Element, local: 3 - global: 3
+Element, local: 4 - global: 8
+Element, local: 5 - global: 9
+Element, local: 6 - global: 10
+Element, local: 7 - global: 11
+Element, local: 8 - global: 16
+Element, local: 9 - global: 17
+Element, local: 10 - global: 18
+Element, local: 11 - global: 19
+Element, local: 12 - global: 24
+Element, local: 13 - global: 25
+Element, local: 14 - global: 26
+Element, local: 15 - global: 27
+Element, local: 16 - global: 32
+Element, local: 17 - global: 33
+Element, local: 18 - global: 34
+Element, local: 19 - global: 35
+Element, local: 20 - global: 40
+Element, local: 21 - global: 41
+Element, local: 22 - global: 42
+Element, local: 23 - global: 43
+Element, local: 24 - global: 48
+Element, local: 25 - global: 49
+Element, local: 26 - global: 50
+Element, local: 27 - global: 51
+Element, local: 28 - global: 56
+Element, local: 29 - global: 57
+Element, local: 30 - global: 58
+Element, local: 31 - global: 59
+Element, local: 32 - global: 64
+Element, local: 33 - global: 65
+Element, local: 34 - global: 66
+Element, local: 35 - global: 67
+Element, local: 36 - global: 72
+Element, local: 37 - global: 73
+Element, local: 38 - global: 74
+Element, local: 39 - global: 75
+Element, local: 40 - global: 80
+Element, local: 41 - global: 81
+Element, local: 42 - global: 82
+Element, local: 43 - global: 83
+Element, local: 44 - global: 88
+Element, local: 45 - global: 89
+Element, local: 46 - global: 90
+Element, local: 47 - global: 91
+Element, local: 48 - global: 96
+Element, local: 49 - global: 97
+Element, local: 50 - global: 98
+Element, local: 51 - global: 99
+Element, local: 52 - global: 104
+Element, local: 53 - global: 105
+Element, local: 54 - global: 106
+Element, local: 55 - global: 107
+Element, local: 56 - global: 112
+Element, local: 57 - global: 113
+Element, local: 58 - global: 114
+Element, local: 59 - global: 115
+Element, local: 60 - global: 120
+Element, local: 61 - global: 121
+Element, local: 62 - global: 122
+Element, local: 63 - global: 123
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 2
+Element, domain: 3 - global: 3
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+Element, domain: 6 - global: 10
+Element, domain: 7 - global: 11
+Element, domain: 8 - global: 16
+Element, domain: 9 - global: 17
+Element, domain: 10 - global: 18
+Element, domain: 11 - global: 19
+Element, domain: 12 - global: 24
+Element, domain: 13 - global: 25
+Element, domain: 14 - global: 26
+Element, domain: 15 - global: 27
+Element, domain: 16 - global: 32
+Element, domain: 17 - global: 33
+Element, domain: 18 - global: 34
+Element, domain: 19 - global: 35
+Element, domain: 20 - global: 40
+Element, domain: 21 - global: 41
+Element, domain: 22 - global: 42
+Element, domain: 23 - global: 43
+Element, domain: 24 - global: 48
+Element, domain: 25 - global: 49
+Element, domain: 26 - global: 50
+Element, domain: 27 - global: 51
+Element, domain: 28 - global: 56
+Element, domain: 29 - global: 57
+Element, domain: 30 - global: 58
+Element, domain: 31 - global: 59
+Element, domain: 32 - global: 64
+Element, domain: 33 - global: 65
+Element, domain: 34 - global: 66
+Element, domain: 35 - global: 67
+Element, domain: 36 - global: 72
+Element, domain: 37 - global: 73
+Element, domain: 38 - global: 74
+Element, domain: 39 - global: 75
+Element, domain: 40 - global: 80
+Element, domain: 41 - global: 81
+Element, domain: 42 - global: 82
+Element, domain: 43 - global: 83
+Element, domain: 44 - global: 88
+Element, domain: 45 - global: 89
+Element, domain: 46 - global: 90
+Element, domain: 47 - global: 91
+Element, domain: 48 - global: 96
+Element, domain: 49 - global: 97
+Element, domain: 50 - global: 98
+Element, domain: 51 - global: 99
+Element, domain: 52 - global: 104
+Element, domain: 53 - global: 105
+Element, domain: 54 - global: 106
+Element, domain: 55 - global: 107
+Element, domain: 56 - global: 112
+Element, domain: 57 - global: 113
+Element, domain: 58 - global: 114
+Element, domain: 59 - global: 115
+Element, domain: 60 - global: 120
+Element, domain: 61 - global: 121
+Element, domain: 62 - global: 122
+Element, domain: 63 - global: 123
+Element, domain: 64 - global: 4
+Element, domain: 65 - global: 7
+Element, domain: 66 - global: 12
+Element, domain: 67 - global: 15
+Element, domain: 68 - global: 20
+Element, domain: 69 - global: 23
+Element, domain: 70 - global: 28
+Element, domain: 71 - global: 31
+Element, domain: 72 - global: 36
+Element, domain: 73 - global: 39
+Element, domain: 74 - global: 44
+Element, domain: 75 - global: 47
+Element, domain: 76 - global: 52
+Element, domain: 77 - global: 55
+Element, domain: 78 - global: 60
+Element, domain: 79 - global: 63
+Element, domain: 80 - global: 68
+Element, domain: 81 - global: 71
+Element, domain: 82 - global: 76
+Element, domain: 83 - global: 79
+Element, domain: 84 - global: 84
+Element, domain: 85 - global: 87
+Element, domain: 86 - global: 92
+Element, domain: 87 - global: 95
+Element, domain: 88 - global: 100
+Element, domain: 89 - global: 103
+Element, domain: 90 - global: 108
+Element, domain: 91 - global: 111
+Element, domain: 92 - global: 116
+Element, domain: 93 - global: 119
+Element, domain: 94 - global: 124
+Element, domain: 95 - global: 127
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: 3 - shadow: X - domain: 3
+Node, global: 4 - local: 4 - shadow: X - domain: 4
+Node, global: 5 - local: X - shadow: 0 - domain: 125
+Node, global: 6 - local: X - shadow: X - domain: X
+Node, global: 7 - local: X - shadow: 1 - domain: 126
+Node, global: 8 - local: X - shadow: 2 - domain: 127
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: 9 - shadow: X - domain: 9
+Node, global: 14 - local: X - shadow: 3 - domain: 128
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: 4 - domain: 129
+Node, global: 17 - local: X - shadow: 5 - domain: 130
+Node, global: 18 - local: 10 - shadow: X - domain: 10
+Node, global: 19 - local: 11 - shadow: X - domain: 11
+Node, global: 20 - local: 12 - shadow: X - domain: 12
+Node, global: 21 - local: 13 - shadow: X - domain: 13
+Node, global: 22 - local: 14 - shadow: X - domain: 14
+Node, global: 23 - local: X - shadow: 6 - domain: 131
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: 7 - domain: 132
+Node, global: 26 - local: X - shadow: 8 - domain: 133
+Node, global: 27 - local: 15 - shadow: X - domain: 15
+Node, global: 28 - local: 16 - shadow: X - domain: 16
+Node, global: 29 - local: 17 - shadow: X - domain: 17
+Node, global: 30 - local: 18 - shadow: X - domain: 18
+Node, global: 31 - local: 19 - shadow: X - domain: 19
+Node, global: 32 - local: X - shadow: 9 - domain: 134
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: 10 - domain: 135
+Node, global: 35 - local: X - shadow: 11 - domain: 136
+Node, global: 36 - local: 20 - shadow: X - domain: 20
+Node, global: 37 - local: 21 - shadow: X - domain: 21
+Node, global: 38 - local: 22 - shadow: X - domain: 22
+Node, global: 39 - local: 23 - shadow: X - domain: 23
+Node, global: 40 - local: 24 - shadow: X - domain: 24
+Node, global: 41 - local: X - shadow: 12 - domain: 137
+Node, global: 42 - local: X - shadow: X - domain: X
+Node, global: 43 - local: X - shadow: 13 - domain: 138
+Node, global: 44 - local: X - shadow: 14 - domain: 139
+Node, global: 45 - local: 25 - shadow: X - domain: 25
+Node, global: 46 - local: 26 - shadow: X - domain: 26
+Node, global: 47 - local: 27 - shadow: X - domain: 27
+Node, global: 48 - local: 28 - shadow: X - domain: 28
+Node, global: 49 - local: 29 - shadow: X - domain: 29
+Node, global: 50 - local: X - shadow: 15 - domain: 140
+Node, global: 51 - local: X - shadow: X - domain: X
+Node, global: 52 - local: X - shadow: 16 - domain: 141
+Node, global: 53 - local: X - shadow: 17 - domain: 142
+Node, global: 54 - local: 30 - shadow: X - domain: 30
+Node, global: 55 - local: 31 - shadow: X - domain: 31
+Node, global: 56 - local: 32 - shadow: X - domain: 32
+Node, global: 57 - local: 33 - shadow: X - domain: 33
+Node, global: 58 - local: 34 - shadow: X - domain: 34
+Node, global: 59 - local: X - shadow: 18 - domain: 143
+Node, global: 60 - local: X - shadow: X - domain: X
+Node, global: 61 - local: X - shadow: 19 - domain: 144
+Node, global: 62 - local: X - shadow: 20 - domain: 145
+Node, global: 63 - local: 35 - shadow: X - domain: 35
+Node, global: 64 - local: 36 - shadow: X - domain: 36
+Node, global: 65 - local: 37 - shadow: X - domain: 37
+Node, global: 66 - local: 38 - shadow: X - domain: 38
+Node, global: 67 - local: 39 - shadow: X - domain: 39
+Node, global: 68 - local: X - shadow: 21 - domain: 146
+Node, global: 69 - local: X - shadow: X - domain: X
+Node, global: 70 - local: X - shadow: 22 - domain: 147
+Node, global: 71 - local: X - shadow: 23 - domain: 148
+Node, global: 72 - local: 40 - shadow: X - domain: 40
+Node, global: 73 - local: 41 - shadow: X - domain: 41
+Node, global: 74 - local: 42 - shadow: X - domain: 42
+Node, global: 75 - local: 43 - shadow: X - domain: 43
+Node, global: 76 - local: 44 - shadow: X - domain: 44
+Node, global: 77 - local: X - shadow: 24 - domain: 149
+Node, global: 78 - local: X - shadow: X - domain: X
+Node, global: 79 - local: X - shadow: 25 - domain: 150
+Node, global: 80 - local: X - shadow: 26 - domain: 151
+Node, global: 81 - local: 45 - shadow: X - domain: 45
+Node, global: 82 - local: 46 - shadow: X - domain: 46
+Node, global: 83 - local: 47 - shadow: X - domain: 47
+Node, global: 84 - local: 48 - shadow: X - domain: 48
+Node, global: 85 - local: 49 - shadow: X - domain: 49
+Node, global: 86 - local: X - shadow: 27 - domain: 152
+Node, global: 87 - local: X - shadow: X - domain: X
+Node, global: 88 - local: X - shadow: 28 - domain: 153
+Node, global: 89 - local: X - shadow: 29 - domain: 154
+Node, global: 90 - local: 50 - shadow: X - domain: 50
+Node, global: 91 - local: 51 - shadow: X - domain: 51
+Node, global: 92 - local: 52 - shadow: X - domain: 52
+Node, global: 93 - local: 53 - shadow: X - domain: 53
+Node, global: 94 - local: 54 - shadow: X - domain: 54
+Node, global: 95 - local: X - shadow: 30 - domain: 155
+Node, global: 96 - local: X - shadow: X - domain: X
+Node, global: 97 - local: X - shadow: 31 - domain: 156
+Node, global: 98 - local: X - shadow: 32 - domain: 157
+Node, global: 99 - local: 55 - shadow: X - domain: 55
+Node, global: 100 - local: 56 - shadow: X - domain: 56
+Node, global: 101 - local: 57 - shadow: X - domain: 57
+Node, global: 102 - local: 58 - shadow: X - domain: 58
+Node, global: 103 - local: 59 - shadow: X - domain: 59
+Node, global: 104 - local: X - shadow: 33 - domain: 158
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: 34 - domain: 159
+Node, global: 107 - local: X - shadow: 35 - domain: 160
+Node, global: 108 - local: 60 - shadow: X - domain: 60
+Node, global: 109 - local: 61 - shadow: X - domain: 61
+Node, global: 110 - local: 62 - shadow: X - domain: 62
+Node, global: 111 - local: 63 - shadow: X - domain: 63
+Node, global: 112 - local: 64 - shadow: X - domain: 64
+Node, global: 113 - local: X - shadow: 36 - domain: 161
+Node, global: 114 - local: X - shadow: X - domain: X
+Node, global: 115 - local: X - shadow: 37 - domain: 162
+Node, global: 116 - local: X - shadow: 38 - domain: 163
+Node, global: 117 - local: 65 - shadow: X - domain: 65
+Node, global: 118 - local: 66 - shadow: X - domain: 66
+Node, global: 119 - local: 67 - shadow: X - domain: 67
+Node, global: 120 - local: 68 - shadow: X - domain: 68
+Node, global: 121 - local: 69 - shadow: X - domain: 69
+Node, global: 122 - local: X - shadow: 39 - domain: 164
+Node, global: 123 - local: X - shadow: X - domain: X
+Node, global: 124 - local: X - shadow: 40 - domain: 165
+Node, global: 125 - local: X - shadow: 41 - domain: 166
+Node, global: 126 - local: 70 - shadow: X - domain: 70
+Node, global: 127 - local: 71 - shadow: X - domain: 71
+Node, global: 128 - local: 72 - shadow: X - domain: 72
+Node, global: 129 - local: 73 - shadow: X - domain: 73
+Node, global: 130 - local: 74 - shadow: X - domain: 74
+Node, global: 131 - local: X - shadow: 42 - domain: 167
+Node, global: 132 - local: X - shadow: X - domain: X
+Node, global: 133 - local: X - shadow: 43 - domain: 168
+Node, global: 134 - local: X - shadow: 44 - domain: 169
+Node, global: 135 - local: 75 - shadow: X - domain: 75
+Node, global: 136 - local: 76 - shadow: X - domain: 76
+Node, global: 137 - local: 77 - shadow: X - domain: 77
+Node, global: 138 - local: 78 - shadow: X - domain: 78
+Node, global: 139 - local: 79 - shadow: X - domain: 79
+Node, global: 140 - local: X - shadow: 45 - domain: 170
+Node, global: 141 - local: X - shadow: X - domain: X
+Node, global: 142 - local: X - shadow: 46 - domain: 171
+Node, global: 143 - local: X - shadow: 47 - domain: 172
+Node, global: 144 - local: 80 - shadow: X - domain: 80
+Node, global: 145 - local: 81 - shadow: X - domain: 81
+Node, global: 146 - local: 82 - shadow: X - domain: 82
+Node, global: 147 - local: 83 - shadow: X - domain: 83
+Node, global: 148 - local: 84 - shadow: X - domain: 84
+Node, global: 149 - local: X - shadow: 48 - domain: 173
+Node, global: 150 - local: X - shadow: X - domain: X
+Node, global: 151 - local: X - shadow: 49 - domain: 174
+Node, global: 152 - local: X - shadow: 50 - domain: 175
+Node, global: 153 - local: 85 - shadow: X - domain: 85
+Node, global: 154 - local: 86 - shadow: X - domain: 86
+Node, global: 155 - local: 87 - shadow: X - domain: 87
+Node, global: 156 - local: 88 - shadow: X - domain: 88
+Node, global: 157 - local: 89 - shadow: X - domain: 89
+Node, global: 158 - local: X - shadow: 51 - domain: 176
+Node, global: 159 - local: X - shadow: X - domain: X
+Node, global: 160 - local: X - shadow: 52 - domain: 177
+Node, global: 161 - local: X - shadow: 53 - domain: 178
+Node, global: 162 - local: 90 - shadow: X - domain: 90
+Node, global: 163 - local: 91 - shadow: X - domain: 91
+Node, global: 164 - local: 92 - shadow: X - domain: 92
+Node, global: 165 - local: 93 - shadow: X - domain: 93
+Node, global: 166 - local: 94 - shadow: X - domain: 94
+Node, global: 167 - local: X - shadow: 54 - domain: 179
+Node, global: 168 - local: X - shadow: X - domain: X
+Node, global: 169 - local: X - shadow: 55 - domain: 180
+Node, global: 170 - local: X - shadow: 56 - domain: 181
+Node, global: 171 - local: 95 - shadow: X - domain: 95
+Node, global: 172 - local: 96 - shadow: X - domain: 96
+Node, global: 173 - local: 97 - shadow: X - domain: 97
+Node, global: 174 - local: 98 - shadow: X - domain: 98
+Node, global: 175 - local: 99 - shadow: X - domain: 99
+Node, global: 176 - local: X - shadow: 57 - domain: 182
+Node, global: 177 - local: X - shadow: X - domain: X
+Node, global: 178 - local: X - shadow: 58 - domain: 183
+Node, global: 179 - local: X - shadow: 59 - domain: 184
+Node, global: 180 - local: 100 - shadow: X - domain: 100
+Node, global: 181 - local: 101 - shadow: X - domain: 101
+Node, global: 182 - local: 102 - shadow: X - domain: 102
+Node, global: 183 - local: 103 - shadow: X - domain: 103
+Node, global: 184 - local: 104 - shadow: X - domain: 104
+Node, global: 185 - local: X - shadow: 60 - domain: 185
+Node, global: 186 - local: X - shadow: X - domain: X
+Node, global: 187 - local: X - shadow: 61 - domain: 186
+Node, global: 188 - local: X - shadow: 62 - domain: 187
+Node, global: 189 - local: 105 - shadow: X - domain: 105
+Node, global: 190 - local: 106 - shadow: X - domain: 106
+Node, global: 191 - local: 107 - shadow: X - domain: 107
+Node, global: 192 - local: 108 - shadow: X - domain: 108
+Node, global: 193 - local: 109 - shadow: X - domain: 109
+Node, global: 194 - local: X - shadow: 63 - domain: 188
+Node, global: 195 - local: X - shadow: X - domain: X
+Node, global: 196 - local: X - shadow: 64 - domain: 189
+Node, global: 197 - local: X - shadow: 65 - domain: 190
+Node, global: 198 - local: 110 - shadow: X - domain: 110
+Node, global: 199 - local: 111 - shadow: X - domain: 111
+Node, global: 200 - local: 112 - shadow: X - domain: 112
+Node, global: 201 - local: 113 - shadow: X - domain: 113
+Node, global: 202 - local: 114 - shadow: X - domain: 114
+Node, global: 203 - local: X - shadow: 66 - domain: 191
+Node, global: 204 - local: X - shadow: X - domain: X
+Node, global: 205 - local: X - shadow: 67 - domain: 192
+Node, global: 206 - local: X - shadow: 68 - domain: 193
+Node, global: 207 - local: 115 - shadow: X - domain: 115
+Node, global: 208 - local: 116 - shadow: X - domain: 116
+Node, global: 209 - local: 117 - shadow: X - domain: 117
+Node, global: 210 - local: 118 - shadow: X - domain: 118
+Node, global: 211 - local: 119 - shadow: X - domain: 119
+Node, global: 212 - local: X - shadow: 69 - domain: 194
+Node, global: 213 - local: X - shadow: X - domain: X
+Node, global: 214 - local: X - shadow: 70 - domain: 195
+Node, global: 215 - local: X - shadow: 71 - domain: 196
+Node, global: 216 - local: 120 - shadow: X - domain: 120
+Node, global: 217 - local: 121 - shadow: X - domain: 121
+Node, global: 218 - local: 122 - shadow: X - domain: 122
+Node, global: 219 - local: 123 - shadow: X - domain: 123
+Node, global: 220 - local: 124 - shadow: X - domain: 124
+Node, global: 221 - local: X - shadow: 72 - domain: 197
+Node, global: 222 - local: X - shadow: X - domain: X
+Node, global: 223 - local: X - shadow: 73 - domain: 198
+Node, global: 224 - local: X - shadow: 74 - domain: 199
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 3
+Node, local: 4 - global: 4
+Node, local: 5 - global: 9
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 13
+Node, local: 10 - global: 18
+Node, local: 11 - global: 19
+Node, local: 12 - global: 20
+Node, local: 13 - global: 21
+Node, local: 14 - global: 22
+Node, local: 15 - global: 27
+Node, local: 16 - global: 28
+Node, local: 17 - global: 29
+Node, local: 18 - global: 30
+Node, local: 19 - global: 31
+Node, local: 20 - global: 36
+Node, local: 21 - global: 37
+Node, local: 22 - global: 38
+Node, local: 23 - global: 39
+Node, local: 24 - global: 40
+Node, local: 25 - global: 45
+Node, local: 26 - global: 46
+Node, local: 27 - global: 47
+Node, local: 28 - global: 48
+Node, local: 29 - global: 49
+Node, local: 30 - global: 54
+Node, local: 31 - global: 55
+Node, local: 32 - global: 56
+Node, local: 33 - global: 57
+Node, local: 34 - global: 58
+Node, local: 35 - global: 63
+Node, local: 36 - global: 64
+Node, local: 37 - global: 65
+Node, local: 38 - global: 66
+Node, local: 39 - global: 67
+Node, local: 40 - global: 72
+Node, local: 41 - global: 73
+Node, local: 42 - global: 74
+Node, local: 43 - global: 75
+Node, local: 44 - global: 76
+Node, local: 45 - global: 81
+Node, local: 46 - global: 82
+Node, local: 47 - global: 83
+Node, local: 48 - global: 84
+Node, local: 49 - global: 85
+Node, local: 50 - global: 90
+Node, local: 51 - global: 91
+Node, local: 52 - global: 92
+Node, local: 53 - global: 93
+Node, local: 54 - global: 94
+Node, local: 55 - global: 99
+Node, local: 56 - global: 100
+Node, local: 57 - global: 101
+Node, local: 58 - global: 102
+Node, local: 59 - global: 103
+Node, local: 60 - global: 108
+Node, local: 61 - global: 109
+Node, local: 62 - global: 110
+Node, local: 63 - global: 111
+Node, local: 64 - global: 112
+Node, local: 65 - global: 117
+Node, local: 66 - global: 118
+Node, local: 67 - global: 119
+Node, local: 68 - global: 120
+Node, local: 69 - global: 121
+Node, local: 70 - global: 126
+Node, local: 71 - global: 127
+Node, local: 72 - global: 128
+Node, local: 73 - global: 129
+Node, local: 74 - global: 130
+Node, local: 75 - global: 135
+Node, local: 76 - global: 136
+Node, local: 77 - global: 137
+Node, local: 78 - global: 138
+Node, local: 79 - global: 139
+Node, local: 80 - global: 144
+Node, local: 81 - global: 145
+Node, local: 82 - global: 146
+Node, local: 83 - global: 147
+Node, local: 84 - global: 148
+Node, local: 85 - global: 153
+Node, local: 86 - global: 154
+Node, local: 87 - global: 155
+Node, local: 88 - global: 156
+Node, local: 89 - global: 157
+Node, local: 90 - global: 162
+Node, local: 91 - global: 163
+Node, local: 92 - global: 164
+Node, local: 93 - global: 165
+Node, local: 94 - global: 166
+Node, local: 95 - global: 171
+Node, local: 96 - global: 172
+Node, local: 97 - global: 173
+Node, local: 98 - global: 174
+Node, local: 99 - global: 175
+Node, local: 100 - global: 180
+Node, local: 101 - global: 181
+Node, local: 102 - global: 182
+Node, local: 103 - global: 183
+Node, local: 104 - global: 184
+Node, local: 105 - global: 189
+Node, local: 106 - global: 190
+Node, local: 107 - global: 191
+Node, local: 108 - global: 192
+Node, local: 109 - global: 193
+Node, local: 110 - global: 198
+Node, local: 111 - global: 199
+Node, local: 112 - global: 200
+Node, local: 113 - global: 201
+Node, local: 114 - global: 202
+Node, local: 115 - global: 207
+Node, local: 116 - global: 208
+Node, local: 117 - global: 209
+Node, local: 118 - global: 210
+Node, local: 119 - global: 211
+Node, local: 120 - global: 216
+Node, local: 121 - global: 217
+Node, local: 122 - global: 218
+Node, local: 123 - global: 219
+Node, local: 124 - global: 220
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 3
+Node, domain: 4 - global: 4
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 13
+Node, domain: 10 - global: 18
+Node, domain: 11 - global: 19
+Node, domain: 12 - global: 20
+Node, domain: 13 - global: 21
+Node, domain: 14 - global: 22
+Node, domain: 15 - global: 27
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 30
+Node, domain: 19 - global: 31
+Node, domain: 20 - global: 36
+Node, domain: 21 - global: 37
+Node, domain: 22 - global: 38
+Node, domain: 23 - global: 39
+Node, domain: 24 - global: 40
+Node, domain: 25 - global: 45
+Node, domain: 26 - global: 46
+Node, domain: 27 - global: 47
+Node, domain: 28 - global: 48
+Node, domain: 29 - global: 49
+Node, domain: 30 - global: 54
+Node, domain: 31 - global: 55
+Node, domain: 32 - global: 56
+Node, domain: 33 - global: 57
+Node, domain: 34 - global: 58
+Node, domain: 35 - global: 63
+Node, domain: 36 - global: 64
+Node, domain: 37 - global: 65
+Node, domain: 38 - global: 66
+Node, domain: 39 - global: 67
+Node, domain: 40 - global: 72
+Node, domain: 41 - global: 73
+Node, domain: 42 - global: 74
+Node, domain: 43 - global: 75
+Node, domain: 44 - global: 76
+Node, domain: 45 - global: 81
+Node, domain: 46 - global: 82
+Node, domain: 47 - global: 83
+Node, domain: 48 - global: 84
+Node, domain: 49 - global: 85
+Node, domain: 50 - global: 90
+Node, domain: 51 - global: 91
+Node, domain: 52 - global: 92
+Node, domain: 53 - global: 93
+Node, domain: 54 - global: 94
+Node, domain: 55 - global: 99
+Node, domain: 56 - global: 100
+Node, domain: 57 - global: 101
+Node, domain: 58 - global: 102
+Node, domain: 59 - global: 103
+Node, domain: 60 - global: 108
+Node, domain: 61 - global: 109
+Node, domain: 62 - global: 110
+Node, domain: 63 - global: 111
+Node, domain: 64 - global: 112
+Node, domain: 65 - global: 117
+Node, domain: 66 - global: 118
+Node, domain: 67 - global: 119
+Node, domain: 68 - global: 120
+Node, domain: 69 - global: 121
+Node, domain: 70 - global: 126
+Node, domain: 71 - global: 127
+Node, domain: 72 - global: 128
+Node, domain: 73 - global: 129
+Node, domain: 74 - global: 130
+Node, domain: 75 - global: 135
+Node, domain: 76 - global: 136
+Node, domain: 77 - global: 137
+Node, domain: 78 - global: 138
+Node, domain: 79 - global: 139
+Node, domain: 80 - global: 144
+Node, domain: 81 - global: 145
+Node, domain: 82 - global: 146
+Node, domain: 83 - global: 147
+Node, domain: 84 - global: 148
+Node, domain: 85 - global: 153
+Node, domain: 86 - global: 154
+Node, domain: 87 - global: 155
+Node, domain: 88 - global: 156
+Node, domain: 89 - global: 157
+Node, domain: 90 - global: 162
+Node, domain: 91 - global: 163
+Node, domain: 92 - global: 164
+Node, domain: 93 - global: 165
+Node, domain: 94 - global: 166
+Node, domain: 95 - global: 171
+Node, domain: 96 - global: 172
+Node, domain: 97 - global: 173
+Node, domain: 98 - global: 174
+Node, domain: 99 - global: 175
+Node, domain: 100 - global: 180
+Node, domain: 101 - global: 181
+Node, domain: 102 - global: 182
+Node, domain: 103 - global: 183
+Node, domain: 104 - global: 184
+Node, domain: 105 - global: 189
+Node, domain: 106 - global: 190
+Node, domain: 107 - global: 191
+Node, domain: 108 - global: 192
+Node, domain: 109 - global: 193
+Node, domain: 110 - global: 198
+Node, domain: 111 - global: 199
+Node, domain: 112 - global: 200
+Node, domain: 113 - global: 201
+Node, domain: 114 - global: 202
+Node, domain: 115 - global: 207
+Node, domain: 116 - global: 208
+Node, domain: 117 - global: 209
+Node, domain: 118 - global: 210
+Node, domain: 119 - global: 211
+Node, domain: 120 - global: 216
+Node, domain: 121 - global: 217
+Node, domain: 122 - global: 218
+Node, domain: 123 - global: 219
+Node, domain: 124 - global: 220
+Node, domain: 125 - global: 5
+Node, domain: 126 - global: 7
+Node, domain: 127 - global: 8
+Node, domain: 128 - global: 14
+Node, domain: 129 - global: 16
+Node, domain: 130 - global: 17
+Node, domain: 131 - global: 23
+Node, domain: 132 - global: 25
+Node, domain: 133 - global: 26
+Node, domain: 134 - global: 32
+Node, domain: 135 - global: 34
+Node, domain: 136 - global: 35
+Node, domain: 137 - global: 41
+Node, domain: 138 - global: 43
+Node, domain: 139 - global: 44
+Node, domain: 140 - global: 50
+Node, domain: 141 - global: 52
+Node, domain: 142 - global: 53
+Node, domain: 143 - global: 59
+Node, domain: 144 - global: 61
+Node, domain: 145 - global: 62
+Node, domain: 146 - global: 68
+Node, domain: 147 - global: 70
+Node, domain: 148 - global: 71
+Node, domain: 149 - global: 77
+Node, domain: 150 - global: 79
+Node, domain: 151 - global: 80
+Node, domain: 152 - global: 86
+Node, domain: 153 - global: 88
+Node, domain: 154 - global: 89
+Node, domain: 155 - global: 95
+Node, domain: 156 - global: 97
+Node, domain: 157 - global: 98
+Node, domain: 158 - global: 104
+Node, domain: 159 - global: 106
+Node, domain: 160 - global: 107
+Node, domain: 161 - global: 113
+Node, domain: 162 - global: 115
+Node, domain: 163 - global: 116
+Node, domain: 164 - global: 122
+Node, domain: 165 - global: 124
+Node, domain: 166 - global: 125
+Node, domain: 167 - global: 131
+Node, domain: 168 - global: 133
+Node, domain: 169 - global: 134
+Node, domain: 170 - global: 140
+Node, domain: 171 - global: 142
+Node, domain: 172 - global: 143
+Node, domain: 173 - global: 149
+Node, domain: 174 - global: 151
+Node, domain: 175 - global: 152
+Node, domain: 176 - global: 158
+Node, domain: 177 - global: 160
+Node, domain: 178 - global: 161
+Node, domain: 179 - global: 167
+Node, domain: 180 - global: 169
+Node, domain: 181 - global: 170
+Node, domain: 182 - global: 176
+Node, domain: 183 - global: 178
+Node, domain: 184 - global: 179
+Node, domain: 185 - global: 185
+Node, domain: 186 - global: 187
+Node, domain: 187 - global: 188
+Node, domain: 188 - global: 194
+Node, domain: 189 - global: 196
+Node, domain: 190 - global: 197
+Node, domain: 191 - global: 203
+Node, domain: 192 - global: 205
+Node, domain: 193 - global: 206
+Node, domain: 194 - global: 212
+Node, domain: 195 - global: 214
+Node, domain: 196 - global: 215
+Node, domain: 197 - global: 221
+Node, domain: 198 - global: 223
+Node, domain: 199 - global: 224
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --meshSizeI=9 --isPeriodicI=True " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,880 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060740)
+		size : (2,1,1)
+		isPeriodic : (True,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 8, 4, 4 }
+elementGlobalCount: 128
+	elementLocalCounts[0]: { 4, 4, 4 }
+	elementLocalCounts[1]: { 4, 4, 4 }
+elementDomainCounts: { 6, 4, 4 }
+nodeGlobalCounts: { 9, 5, 5 }
+nodeGlobalCount: 225
+	nodeLocalCounts[0]: { 5, 5, 5 }
+	nodeLocalCounts[1]: { 5, 5, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 64
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: 1 - domain: 65
+Element, global: 4 - local: 0 - shadow: X - domain: 0
+Element, global: 5 - local: 1 - shadow: X - domain: 1
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: 2 - domain: 66
+Element, global: 9 - local: X - shadow: X - domain: X
+Element, global: 10 - local: X - shadow: X - domain: X
+Element, global: 11 - local: X - shadow: 3 - domain: 67
+Element, global: 12 - local: 4 - shadow: X - domain: 4
+Element, global: 13 - local: 5 - shadow: X - domain: 5
+Element, global: 14 - local: 6 - shadow: X - domain: 6
+Element, global: 15 - local: 7 - shadow: X - domain: 7
+Element, global: 16 - local: X - shadow: 4 - domain: 68
+Element, global: 17 - local: X - shadow: X - domain: X
+Element, global: 18 - local: X - shadow: X - domain: X
+Element, global: 19 - local: X - shadow: 5 - domain: 69
+Element, global: 20 - local: 8 - shadow: X - domain: 8
+Element, global: 21 - local: 9 - shadow: X - domain: 9
+Element, global: 22 - local: 10 - shadow: X - domain: 10
+Element, global: 23 - local: 11 - shadow: X - domain: 11
+Element, global: 24 - local: X - shadow: 6 - domain: 70
+Element, global: 25 - local: X - shadow: X - domain: X
+Element, global: 26 - local: X - shadow: X - domain: X
+Element, global: 27 - local: X - shadow: 7 - domain: 71
+Element, global: 28 - local: 12 - shadow: X - domain: 12
+Element, global: 29 - local: 13 - shadow: X - domain: 13
+Element, global: 30 - local: 14 - shadow: X - domain: 14
+Element, global: 31 - local: 15 - shadow: X - domain: 15
+Element, global: 32 - local: X - shadow: 8 - domain: 72
+Element, global: 33 - local: X - shadow: X - domain: X
+Element, global: 34 - local: X - shadow: X - domain: X
+Element, global: 35 - local: X - shadow: 9 - domain: 73
+Element, global: 36 - local: 16 - shadow: X - domain: 16
+Element, global: 37 - local: 17 - shadow: X - domain: 17
+Element, global: 38 - local: 18 - shadow: X - domain: 18
+Element, global: 39 - local: 19 - shadow: X - domain: 19
+Element, global: 40 - local: X - shadow: 10 - domain: 74
+Element, global: 41 - local: X - shadow: X - domain: X
+Element, global: 42 - local: X - shadow: X - domain: X
+Element, global: 43 - local: X - shadow: 11 - domain: 75
+Element, global: 44 - local: 20 - shadow: X - domain: 20
+Element, global: 45 - local: 21 - shadow: X - domain: 21
+Element, global: 46 - local: 22 - shadow: X - domain: 22
+Element, global: 47 - local: 23 - shadow: X - domain: 23
+Element, global: 48 - local: X - shadow: 12 - domain: 76
+Element, global: 49 - local: X - shadow: X - domain: X
+Element, global: 50 - local: X - shadow: X - domain: X
+Element, global: 51 - local: X - shadow: 13 - domain: 77
+Element, global: 52 - local: 24 - shadow: X - domain: 24
+Element, global: 53 - local: 25 - shadow: X - domain: 25
+Element, global: 54 - local: 26 - shadow: X - domain: 26
+Element, global: 55 - local: 27 - shadow: X - domain: 27
+Element, global: 56 - local: X - shadow: 14 - domain: 78
+Element, global: 57 - local: X - shadow: X - domain: X
+Element, global: 58 - local: X - shadow: X - domain: X
+Element, global: 59 - local: X - shadow: 15 - domain: 79
+Element, global: 60 - local: 28 - shadow: X - domain: 28
+Element, global: 61 - local: 29 - shadow: X - domain: 29
+Element, global: 62 - local: 30 - shadow: X - domain: 30
+Element, global: 63 - local: 31 - shadow: X - domain: 31
+Element, global: 64 - local: X - shadow: 16 - domain: 80
+Element, global: 65 - local: X - shadow: X - domain: X
+Element, global: 66 - local: X - shadow: X - domain: X
+Element, global: 67 - local: X - shadow: 17 - domain: 81
+Element, global: 68 - local: 32 - shadow: X - domain: 32
+Element, global: 69 - local: 33 - shadow: X - domain: 33
+Element, global: 70 - local: 34 - shadow: X - domain: 34
+Element, global: 71 - local: 35 - shadow: X - domain: 35
+Element, global: 72 - local: X - shadow: 18 - domain: 82
+Element, global: 73 - local: X - shadow: X - domain: X
+Element, global: 74 - local: X - shadow: X - domain: X
+Element, global: 75 - local: X - shadow: 19 - domain: 83
+Element, global: 76 - local: 36 - shadow: X - domain: 36
+Element, global: 77 - local: 37 - shadow: X - domain: 37
+Element, global: 78 - local: 38 - shadow: X - domain: 38
+Element, global: 79 - local: 39 - shadow: X - domain: 39
+Element, global: 80 - local: X - shadow: 20 - domain: 84
+Element, global: 81 - local: X - shadow: X - domain: X
+Element, global: 82 - local: X - shadow: X - domain: X
+Element, global: 83 - local: X - shadow: 21 - domain: 85
+Element, global: 84 - local: 40 - shadow: X - domain: 40
+Element, global: 85 - local: 41 - shadow: X - domain: 41
+Element, global: 86 - local: 42 - shadow: X - domain: 42
+Element, global: 87 - local: 43 - shadow: X - domain: 43
+Element, global: 88 - local: X - shadow: 22 - domain: 86
+Element, global: 89 - local: X - shadow: X - domain: X
+Element, global: 90 - local: X - shadow: X - domain: X
+Element, global: 91 - local: X - shadow: 23 - domain: 87
+Element, global: 92 - local: 44 - shadow: X - domain: 44
+Element, global: 93 - local: 45 - shadow: X - domain: 45
+Element, global: 94 - local: 46 - shadow: X - domain: 46
+Element, global: 95 - local: 47 - shadow: X - domain: 47
+Element, global: 96 - local: X - shadow: 24 - domain: 88
+Element, global: 97 - local: X - shadow: X - domain: X
+Element, global: 98 - local: X - shadow: X - domain: X
+Element, global: 99 - local: X - shadow: 25 - domain: 89
+Element, global: 100 - local: 48 - shadow: X - domain: 48
+Element, global: 101 - local: 49 - shadow: X - domain: 49
+Element, global: 102 - local: 50 - shadow: X - domain: 50
+Element, global: 103 - local: 51 - shadow: X - domain: 51
+Element, global: 104 - local: X - shadow: 26 - domain: 90
+Element, global: 105 - local: X - shadow: X - domain: X
+Element, global: 106 - local: X - shadow: X - domain: X
+Element, global: 107 - local: X - shadow: 27 - domain: 91
+Element, global: 108 - local: 52 - shadow: X - domain: 52
+Element, global: 109 - local: 53 - shadow: X - domain: 53
+Element, global: 110 - local: 54 - shadow: X - domain: 54
+Element, global: 111 - local: 55 - shadow: X - domain: 55
+Element, global: 112 - local: X - shadow: 28 - domain: 92
+Element, global: 113 - local: X - shadow: X - domain: X
+Element, global: 114 - local: X - shadow: X - domain: X
+Element, global: 115 - local: X - shadow: 29 - domain: 93
+Element, global: 116 - local: 56 - shadow: X - domain: 56
+Element, global: 117 - local: 57 - shadow: X - domain: 57
+Element, global: 118 - local: 58 - shadow: X - domain: 58
+Element, global: 119 - local: 59 - shadow: X - domain: 59
+Element, global: 120 - local: X - shadow: 30 - domain: 94
+Element, global: 121 - local: X - shadow: X - domain: X
+Element, global: 122 - local: X - shadow: X - domain: X
+Element, global: 123 - local: X - shadow: 31 - domain: 95
+Element, global: 124 - local: 60 - shadow: X - domain: 60
+Element, global: 125 - local: 61 - shadow: X - domain: 61
+Element, global: 126 - local: 62 - shadow: X - domain: 62
+Element, global: 127 - local: 63 - shadow: X - domain: 63
+
+Element, local: 0 - global: 4
+Element, local: 1 - global: 5
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 12
+Element, local: 5 - global: 13
+Element, local: 6 - global: 14
+Element, local: 7 - global: 15
+Element, local: 8 - global: 20
+Element, local: 9 - global: 21
+Element, local: 10 - global: 22
+Element, local: 11 - global: 23
+Element, local: 12 - global: 28
+Element, local: 13 - global: 29
+Element, local: 14 - global: 30
+Element, local: 15 - global: 31
+Element, local: 16 - global: 36
+Element, local: 17 - global: 37
+Element, local: 18 - global: 38
+Element, local: 19 - global: 39
+Element, local: 20 - global: 44
+Element, local: 21 - global: 45
+Element, local: 22 - global: 46
+Element, local: 23 - global: 47
+Element, local: 24 - global: 52
+Element, local: 25 - global: 53
+Element, local: 26 - global: 54
+Element, local: 27 - global: 55
+Element, local: 28 - global: 60
+Element, local: 29 - global: 61
+Element, local: 30 - global: 62
+Element, local: 31 - global: 63
+Element, local: 32 - global: 68
+Element, local: 33 - global: 69
+Element, local: 34 - global: 70
+Element, local: 35 - global: 71
+Element, local: 36 - global: 76
+Element, local: 37 - global: 77
+Element, local: 38 - global: 78
+Element, local: 39 - global: 79
+Element, local: 40 - global: 84
+Element, local: 41 - global: 85
+Element, local: 42 - global: 86
+Element, local: 43 - global: 87
+Element, local: 44 - global: 92
+Element, local: 45 - global: 93
+Element, local: 46 - global: 94
+Element, local: 47 - global: 95
+Element, local: 48 - global: 100
+Element, local: 49 - global: 101
+Element, local: 50 - global: 102
+Element, local: 51 - global: 103
+Element, local: 52 - global: 108
+Element, local: 53 - global: 109
+Element, local: 54 - global: 110
+Element, local: 55 - global: 111
+Element, local: 56 - global: 116
+Element, local: 57 - global: 117
+Element, local: 58 - global: 118
+Element, local: 59 - global: 119
+Element, local: 60 - global: 124
+Element, local: 61 - global: 125
+Element, local: 62 - global: 126
+Element, local: 63 - global: 127
+
+Element, domain: 0 - global: 4
+Element, domain: 1 - global: 5
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 12
+Element, domain: 5 - global: 13
+Element, domain: 6 - global: 14
+Element, domain: 7 - global: 15
+Element, domain: 8 - global: 20
+Element, domain: 9 - global: 21
+Element, domain: 10 - global: 22
+Element, domain: 11 - global: 23
+Element, domain: 12 - global: 28
+Element, domain: 13 - global: 29
+Element, domain: 14 - global: 30
+Element, domain: 15 - global: 31
+Element, domain: 16 - global: 36
+Element, domain: 17 - global: 37
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 44
+Element, domain: 21 - global: 45
+Element, domain: 22 - global: 46
+Element, domain: 23 - global: 47
+Element, domain: 24 - global: 52
+Element, domain: 25 - global: 53
+Element, domain: 26 - global: 54
+Element, domain: 27 - global: 55
+Element, domain: 28 - global: 60
+Element, domain: 29 - global: 61
+Element, domain: 30 - global: 62
+Element, domain: 31 - global: 63
+Element, domain: 32 - global: 68
+Element, domain: 33 - global: 69
+Element, domain: 34 - global: 70
+Element, domain: 35 - global: 71
+Element, domain: 36 - global: 76
+Element, domain: 37 - global: 77
+Element, domain: 38 - global: 78
+Element, domain: 39 - global: 79
+Element, domain: 40 - global: 84
+Element, domain: 41 - global: 85
+Element, domain: 42 - global: 86
+Element, domain: 43 - global: 87
+Element, domain: 44 - global: 92
+Element, domain: 45 - global: 93
+Element, domain: 46 - global: 94
+Element, domain: 47 - global: 95
+Element, domain: 48 - global: 100
+Element, domain: 49 - global: 101
+Element, domain: 50 - global: 102
+Element, domain: 51 - global: 103
+Element, domain: 52 - global: 108
+Element, domain: 53 - global: 109
+Element, domain: 54 - global: 110
+Element, domain: 55 - global: 111
+Element, domain: 56 - global: 116
+Element, domain: 57 - global: 117
+Element, domain: 58 - global: 118
+Element, domain: 59 - global: 119
+Element, domain: 60 - global: 124
+Element, domain: 61 - global: 125
+Element, domain: 62 - global: 126
+Element, domain: 63 - global: 127
+Element, domain: 64 - global: 0
+Element, domain: 65 - global: 3
+Element, domain: 66 - global: 8
+Element, domain: 67 - global: 11
+Element, domain: 68 - global: 16
+Element, domain: 69 - global: 19
+Element, domain: 70 - global: 24
+Element, domain: 71 - global: 27
+Element, domain: 72 - global: 32
+Element, domain: 73 - global: 35
+Element, domain: 74 - global: 40
+Element, domain: 75 - global: 43
+Element, domain: 76 - global: 48
+Element, domain: 77 - global: 51
+Element, domain: 78 - global: 56
+Element, domain: 79 - global: 59
+Element, domain: 80 - global: 64
+Element, domain: 81 - global: 67
+Element, domain: 82 - global: 72
+Element, domain: 83 - global: 75
+Element, domain: 84 - global: 80
+Element, domain: 85 - global: 83
+Element, domain: 86 - global: 88
+Element, domain: 87 - global: 91
+Element, domain: 88 - global: 96
+Element, domain: 89 - global: 99
+Element, domain: 90 - global: 104
+Element, domain: 91 - global: 107
+Element, domain: 92 - global: 112
+Element, domain: 93 - global: 115
+Element, domain: 94 - global: 120
+Element, domain: 95 - global: 123
+
+Node, global: 0 - local: X - shadow: 0 - domain: 125
+Node, global: 1 - local: X - shadow: 1 - domain: 126
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: 2 - domain: 127
+Node, global: 4 - local: 0 - shadow: X - domain: 0
+Node, global: 5 - local: 1 - shadow: X - domain: 1
+Node, global: 6 - local: 2 - shadow: X - domain: 2
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: X - shadow: 3 - domain: 128
+Node, global: 10 - local: X - shadow: 4 - domain: 129
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: 5 - domain: 130
+Node, global: 13 - local: 5 - shadow: X - domain: 5
+Node, global: 14 - local: 6 - shadow: X - domain: 6
+Node, global: 15 - local: 7 - shadow: X - domain: 7
+Node, global: 16 - local: 8 - shadow: X - domain: 8
+Node, global: 17 - local: 9 - shadow: X - domain: 9
+Node, global: 18 - local: X - shadow: 6 - domain: 131
+Node, global: 19 - local: X - shadow: 7 - domain: 132
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: 8 - domain: 133
+Node, global: 22 - local: 10 - shadow: X - domain: 10
+Node, global: 23 - local: 11 - shadow: X - domain: 11
+Node, global: 24 - local: 12 - shadow: X - domain: 12
+Node, global: 25 - local: 13 - shadow: X - domain: 13
+Node, global: 26 - local: 14 - shadow: X - domain: 14
+Node, global: 27 - local: X - shadow: 9 - domain: 134
+Node, global: 28 - local: X - shadow: 10 - domain: 135
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: X - shadow: 11 - domain: 136
+Node, global: 31 - local: 15 - shadow: X - domain: 15
+Node, global: 32 - local: 16 - shadow: X - domain: 16
+Node, global: 33 - local: 17 - shadow: X - domain: 17
+Node, global: 34 - local: 18 - shadow: X - domain: 18
+Node, global: 35 - local: 19 - shadow: X - domain: 19
+Node, global: 36 - local: X - shadow: 12 - domain: 137
+Node, global: 37 - local: X - shadow: 13 - domain: 138
+Node, global: 38 - local: X - shadow: X - domain: X
+Node, global: 39 - local: X - shadow: 14 - domain: 139
+Node, global: 40 - local: 20 - shadow: X - domain: 20
+Node, global: 41 - local: 21 - shadow: X - domain: 21
+Node, global: 42 - local: 22 - shadow: X - domain: 22
+Node, global: 43 - local: 23 - shadow: X - domain: 23
+Node, global: 44 - local: 24 - shadow: X - domain: 24
+Node, global: 45 - local: X - shadow: 15 - domain: 140
+Node, global: 46 - local: X - shadow: 16 - domain: 141
+Node, global: 47 - local: X - shadow: X - domain: X
+Node, global: 48 - local: X - shadow: 17 - domain: 142
+Node, global: 49 - local: 25 - shadow: X - domain: 25
+Node, global: 50 - local: 26 - shadow: X - domain: 26
+Node, global: 51 - local: 27 - shadow: X - domain: 27
+Node, global: 52 - local: 28 - shadow: X - domain: 28
+Node, global: 53 - local: 29 - shadow: X - domain: 29
+Node, global: 54 - local: X - shadow: 18 - domain: 143
+Node, global: 55 - local: X - shadow: 19 - domain: 144
+Node, global: 56 - local: X - shadow: X - domain: X
+Node, global: 57 - local: X - shadow: 20 - domain: 145
+Node, global: 58 - local: 30 - shadow: X - domain: 30
+Node, global: 59 - local: 31 - shadow: X - domain: 31
+Node, global: 60 - local: 32 - shadow: X - domain: 32
+Node, global: 61 - local: 33 - shadow: X - domain: 33
+Node, global: 62 - local: 34 - shadow: X - domain: 34
+Node, global: 63 - local: X - shadow: 21 - domain: 146
+Node, global: 64 - local: X - shadow: 22 - domain: 147
+Node, global: 65 - local: X - shadow: X - domain: X
+Node, global: 66 - local: X - shadow: 23 - domain: 148
+Node, global: 67 - local: 35 - shadow: X - domain: 35
+Node, global: 68 - local: 36 - shadow: X - domain: 36
+Node, global: 69 - local: 37 - shadow: X - domain: 37
+Node, global: 70 - local: 38 - shadow: X - domain: 38
+Node, global: 71 - local: 39 - shadow: X - domain: 39
+Node, global: 72 - local: X - shadow: 24 - domain: 149
+Node, global: 73 - local: X - shadow: 25 - domain: 150
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: X - shadow: 26 - domain: 151
+Node, global: 76 - local: 40 - shadow: X - domain: 40
+Node, global: 77 - local: 41 - shadow: X - domain: 41
+Node, global: 78 - local: 42 - shadow: X - domain: 42
+Node, global: 79 - local: 43 - shadow: X - domain: 43
+Node, global: 80 - local: 44 - shadow: X - domain: 44
+Node, global: 81 - local: X - shadow: 27 - domain: 152
+Node, global: 82 - local: X - shadow: 28 - domain: 153
+Node, global: 83 - local: X - shadow: X - domain: X
+Node, global: 84 - local: X - shadow: 29 - domain: 154
+Node, global: 85 - local: 45 - shadow: X - domain: 45
+Node, global: 86 - local: 46 - shadow: X - domain: 46
+Node, global: 87 - local: 47 - shadow: X - domain: 47
+Node, global: 88 - local: 48 - shadow: X - domain: 48
+Node, global: 89 - local: 49 - shadow: X - domain: 49
+Node, global: 90 - local: X - shadow: 30 - domain: 155
+Node, global: 91 - local: X - shadow: 31 - domain: 156
+Node, global: 92 - local: X - shadow: X - domain: X
+Node, global: 93 - local: X - shadow: 32 - domain: 157
+Node, global: 94 - local: 50 - shadow: X - domain: 50
+Node, global: 95 - local: 51 - shadow: X - domain: 51
+Node, global: 96 - local: 52 - shadow: X - domain: 52
+Node, global: 97 - local: 53 - shadow: X - domain: 53
+Node, global: 98 - local: 54 - shadow: X - domain: 54
+Node, global: 99 - local: X - shadow: 33 - domain: 158
+Node, global: 100 - local: X - shadow: 34 - domain: 159
+Node, global: 101 - local: X - shadow: X - domain: X
+Node, global: 102 - local: X - shadow: 35 - domain: 160
+Node, global: 103 - local: 55 - shadow: X - domain: 55
+Node, global: 104 - local: 56 - shadow: X - domain: 56
+Node, global: 105 - local: 57 - shadow: X - domain: 57
+Node, global: 106 - local: 58 - shadow: X - domain: 58
+Node, global: 107 - local: 59 - shadow: X - domain: 59
+Node, global: 108 - local: X - shadow: 36 - domain: 161
+Node, global: 109 - local: X - shadow: 37 - domain: 162
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: 38 - domain: 163
+Node, global: 112 - local: 60 - shadow: X - domain: 60
+Node, global: 113 - local: 61 - shadow: X - domain: 61
+Node, global: 114 - local: 62 - shadow: X - domain: 62
+Node, global: 115 - local: 63 - shadow: X - domain: 63
+Node, global: 116 - local: 64 - shadow: X - domain: 64
+Node, global: 117 - local: X - shadow: 39 - domain: 164
+Node, global: 118 - local: X - shadow: 40 - domain: 165
+Node, global: 119 - local: X - shadow: X - domain: X
+Node, global: 120 - local: X - shadow: 41 - domain: 166
+Node, global: 121 - local: 65 - shadow: X - domain: 65
+Node, global: 122 - local: 66 - shadow: X - domain: 66
+Node, global: 123 - local: 67 - shadow: X - domain: 67
+Node, global: 124 - local: 68 - shadow: X - domain: 68
+Node, global: 125 - local: 69 - shadow: X - domain: 69
+Node, global: 126 - local: X - shadow: 42 - domain: 167
+Node, global: 127 - local: X - shadow: 43 - domain: 168
+Node, global: 128 - local: X - shadow: X - domain: X
+Node, global: 129 - local: X - shadow: 44 - domain: 169
+Node, global: 130 - local: 70 - shadow: X - domain: 70
+Node, global: 131 - local: 71 - shadow: X - domain: 71
+Node, global: 132 - local: 72 - shadow: X - domain: 72
+Node, global: 133 - local: 73 - shadow: X - domain: 73
+Node, global: 134 - local: 74 - shadow: X - domain: 74
+Node, global: 135 - local: X - shadow: 45 - domain: 170
+Node, global: 136 - local: X - shadow: 46 - domain: 171
+Node, global: 137 - local: X - shadow: X - domain: X
+Node, global: 138 - local: X - shadow: 47 - domain: 172
+Node, global: 139 - local: 75 - shadow: X - domain: 75
+Node, global: 140 - local: 76 - shadow: X - domain: 76
+Node, global: 141 - local: 77 - shadow: X - domain: 77
+Node, global: 142 - local: 78 - shadow: X - domain: 78
+Node, global: 143 - local: 79 - shadow: X - domain: 79
+Node, global: 144 - local: X - shadow: 48 - domain: 173
+Node, global: 145 - local: X - shadow: 49 - domain: 174
+Node, global: 146 - local: X - shadow: X - domain: X
+Node, global: 147 - local: X - shadow: 50 - domain: 175
+Node, global: 148 - local: 80 - shadow: X - domain: 80
+Node, global: 149 - local: 81 - shadow: X - domain: 81
+Node, global: 150 - local: 82 - shadow: X - domain: 82
+Node, global: 151 - local: 83 - shadow: X - domain: 83
+Node, global: 152 - local: 84 - shadow: X - domain: 84
+Node, global: 153 - local: X - shadow: 51 - domain: 176
+Node, global: 154 - local: X - shadow: 52 - domain: 177
+Node, global: 155 - local: X - shadow: X - domain: X
+Node, global: 156 - local: X - shadow: 53 - domain: 178
+Node, global: 157 - local: 85 - shadow: X - domain: 85
+Node, global: 158 - local: 86 - shadow: X - domain: 86
+Node, global: 159 - local: 87 - shadow: X - domain: 87
+Node, global: 160 - local: 88 - shadow: X - domain: 88
+Node, global: 161 - local: 89 - shadow: X - domain: 89
+Node, global: 162 - local: X - shadow: 54 - domain: 179
+Node, global: 163 - local: X - shadow: 55 - domain: 180
+Node, global: 164 - local: X - shadow: X - domain: X
+Node, global: 165 - local: X - shadow: 56 - domain: 181
+Node, global: 166 - local: 90 - shadow: X - domain: 90
+Node, global: 167 - local: 91 - shadow: X - domain: 91
+Node, global: 168 - local: 92 - shadow: X - domain: 92
+Node, global: 169 - local: 93 - shadow: X - domain: 93
+Node, global: 170 - local: 94 - shadow: X - domain: 94
+Node, global: 171 - local: X - shadow: 57 - domain: 182
+Node, global: 172 - local: X - shadow: 58 - domain: 183
+Node, global: 173 - local: X - shadow: X - domain: X
+Node, global: 174 - local: X - shadow: 59 - domain: 184
+Node, global: 175 - local: 95 - shadow: X - domain: 95
+Node, global: 176 - local: 96 - shadow: X - domain: 96
+Node, global: 177 - local: 97 - shadow: X - domain: 97
+Node, global: 178 - local: 98 - shadow: X - domain: 98
+Node, global: 179 - local: 99 - shadow: X - domain: 99
+Node, global: 180 - local: X - shadow: 60 - domain: 185
+Node, global: 181 - local: X - shadow: 61 - domain: 186
+Node, global: 182 - local: X - shadow: X - domain: X
+Node, global: 183 - local: X - shadow: 62 - domain: 187
+Node, global: 184 - local: 100 - shadow: X - domain: 100
+Node, global: 185 - local: 101 - shadow: X - domain: 101
+Node, global: 186 - local: 102 - shadow: X - domain: 102
+Node, global: 187 - local: 103 - shadow: X - domain: 103
+Node, global: 188 - local: 104 - shadow: X - domain: 104
+Node, global: 189 - local: X - shadow: 63 - domain: 188
+Node, global: 190 - local: X - shadow: 64 - domain: 189
+Node, global: 191 - local: X - shadow: X - domain: X
+Node, global: 192 - local: X - shadow: 65 - domain: 190
+Node, global: 193 - local: 105 - shadow: X - domain: 105
+Node, global: 194 - local: 106 - shadow: X - domain: 106
+Node, global: 195 - local: 107 - shadow: X - domain: 107
+Node, global: 196 - local: 108 - shadow: X - domain: 108
+Node, global: 197 - local: 109 - shadow: X - domain: 109
+Node, global: 198 - local: X - shadow: 66 - domain: 191
+Node, global: 199 - local: X - shadow: 67 - domain: 192
+Node, global: 200 - local: X - shadow: X - domain: X
+Node, global: 201 - local: X - shadow: 68 - domain: 193
+Node, global: 202 - local: 110 - shadow: X - domain: 110
+Node, global: 203 - local: 111 - shadow: X - domain: 111
+Node, global: 204 - local: 112 - shadow: X - domain: 112
+Node, global: 205 - local: 113 - shadow: X - domain: 113
+Node, global: 206 - local: 114 - shadow: X - domain: 114
+Node, global: 207 - local: X - shadow: 69 - domain: 194
+Node, global: 208 - local: X - shadow: 70 - domain: 195
+Node, global: 209 - local: X - shadow: X - domain: X
+Node, global: 210 - local: X - shadow: 71 - domain: 196
+Node, global: 211 - local: 115 - shadow: X - domain: 115
+Node, global: 212 - local: 116 - shadow: X - domain: 116
+Node, global: 213 - local: 117 - shadow: X - domain: 117
+Node, global: 214 - local: 118 - shadow: X - domain: 118
+Node, global: 215 - local: 119 - shadow: X - domain: 119
+Node, global: 216 - local: X - shadow: 72 - domain: 197
+Node, global: 217 - local: X - shadow: 73 - domain: 198
+Node, global: 218 - local: X - shadow: X - domain: X
+Node, global: 219 - local: X - shadow: 74 - domain: 199
+Node, global: 220 - local: 120 - shadow: X - domain: 120
+Node, global: 221 - local: 121 - shadow: X - domain: 121
+Node, global: 222 - local: 122 - shadow: X - domain: 122
+Node, global: 223 - local: 123 - shadow: X - domain: 123
+Node, global: 224 - local: 124 - shadow: X - domain: 124
+
+Node, local: 0 - global: 4
+Node, local: 1 - global: 5
+Node, local: 2 - global: 6
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 13
+Node, local: 6 - global: 14
+Node, local: 7 - global: 15
+Node, local: 8 - global: 16
+Node, local: 9 - global: 17
+Node, local: 10 - global: 22
+Node, local: 11 - global: 23
+Node, local: 12 - global: 24
+Node, local: 13 - global: 25
+Node, local: 14 - global: 26
+Node, local: 15 - global: 31
+Node, local: 16 - global: 32
+Node, local: 17 - global: 33
+Node, local: 18 - global: 34
+Node, local: 19 - global: 35
+Node, local: 20 - global: 40
+Node, local: 21 - global: 41
+Node, local: 22 - global: 42
+Node, local: 23 - global: 43
+Node, local: 24 - global: 44
+Node, local: 25 - global: 49
+Node, local: 26 - global: 50
+Node, local: 27 - global: 51
+Node, local: 28 - global: 52
+Node, local: 29 - global: 53
+Node, local: 30 - global: 58
+Node, local: 31 - global: 59
+Node, local: 32 - global: 60
+Node, local: 33 - global: 61
+Node, local: 34 - global: 62
+Node, local: 35 - global: 67
+Node, local: 36 - global: 68
+Node, local: 37 - global: 69
+Node, local: 38 - global: 70
+Node, local: 39 - global: 71
+Node, local: 40 - global: 76
+Node, local: 41 - global: 77
+Node, local: 42 - global: 78
+Node, local: 43 - global: 79
+Node, local: 44 - global: 80
+Node, local: 45 - global: 85
+Node, local: 46 - global: 86
+Node, local: 47 - global: 87
+Node, local: 48 - global: 88
+Node, local: 49 - global: 89
+Node, local: 50 - global: 94
+Node, local: 51 - global: 95
+Node, local: 52 - global: 96
+Node, local: 53 - global: 97
+Node, local: 54 - global: 98
+Node, local: 55 - global: 103
+Node, local: 56 - global: 104
+Node, local: 57 - global: 105
+Node, local: 58 - global: 106
+Node, local: 59 - global: 107
+Node, local: 60 - global: 112
+Node, local: 61 - global: 113
+Node, local: 62 - global: 114
+Node, local: 63 - global: 115
+Node, local: 64 - global: 116
+Node, local: 65 - global: 121
+Node, local: 66 - global: 122
+Node, local: 67 - global: 123
+Node, local: 68 - global: 124
+Node, local: 69 - global: 125
+Node, local: 70 - global: 130
+Node, local: 71 - global: 131
+Node, local: 72 - global: 132
+Node, local: 73 - global: 133
+Node, local: 74 - global: 134
+Node, local: 75 - global: 139
+Node, local: 76 - global: 140
+Node, local: 77 - global: 141
+Node, local: 78 - global: 142
+Node, local: 79 - global: 143
+Node, local: 80 - global: 148
+Node, local: 81 - global: 149
+Node, local: 82 - global: 150
+Node, local: 83 - global: 151
+Node, local: 84 - global: 152
+Node, local: 85 - global: 157
+Node, local: 86 - global: 158
+Node, local: 87 - global: 159
+Node, local: 88 - global: 160
+Node, local: 89 - global: 161
+Node, local: 90 - global: 166
+Node, local: 91 - global: 167
+Node, local: 92 - global: 168
+Node, local: 93 - global: 169
+Node, local: 94 - global: 170
+Node, local: 95 - global: 175
+Node, local: 96 - global: 176
+Node, local: 97 - global: 177
+Node, local: 98 - global: 178
+Node, local: 99 - global: 179
+Node, local: 100 - global: 184
+Node, local: 101 - global: 185
+Node, local: 102 - global: 186
+Node, local: 103 - global: 187
+Node, local: 104 - global: 188
+Node, local: 105 - global: 193
+Node, local: 106 - global: 194
+Node, local: 107 - global: 195
+Node, local: 108 - global: 196
+Node, local: 109 - global: 197
+Node, local: 110 - global: 202
+Node, local: 111 - global: 203
+Node, local: 112 - global: 204
+Node, local: 113 - global: 205
+Node, local: 114 - global: 206
+Node, local: 115 - global: 211
+Node, local: 116 - global: 212
+Node, local: 117 - global: 213
+Node, local: 118 - global: 214
+Node, local: 119 - global: 215
+Node, local: 120 - global: 220
+Node, local: 121 - global: 221
+Node, local: 122 - global: 222
+Node, local: 123 - global: 223
+Node, local: 124 - global: 224
+
+Node, domain: 0 - global: 4
+Node, domain: 1 - global: 5
+Node, domain: 2 - global: 6
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 13
+Node, domain: 6 - global: 14
+Node, domain: 7 - global: 15
+Node, domain: 8 - global: 16
+Node, domain: 9 - global: 17
+Node, domain: 10 - global: 22
+Node, domain: 11 - global: 23
+Node, domain: 12 - global: 24
+Node, domain: 13 - global: 25
+Node, domain: 14 - global: 26
+Node, domain: 15 - global: 31
+Node, domain: 16 - global: 32
+Node, domain: 17 - global: 33
+Node, domain: 18 - global: 34
+Node, domain: 19 - global: 35
+Node, domain: 20 - global: 40
+Node, domain: 21 - global: 41
+Node, domain: 22 - global: 42
+Node, domain: 23 - global: 43
+Node, domain: 24 - global: 44
+Node, domain: 25 - global: 49
+Node, domain: 26 - global: 50
+Node, domain: 27 - global: 51
+Node, domain: 28 - global: 52
+Node, domain: 29 - global: 53
+Node, domain: 30 - global: 58
+Node, domain: 31 - global: 59
+Node, domain: 32 - global: 60
+Node, domain: 33 - global: 61
+Node, domain: 34 - global: 62
+Node, domain: 35 - global: 67
+Node, domain: 36 - global: 68
+Node, domain: 37 - global: 69
+Node, domain: 38 - global: 70
+Node, domain: 39 - global: 71
+Node, domain: 40 - global: 76
+Node, domain: 41 - global: 77
+Node, domain: 42 - global: 78
+Node, domain: 43 - global: 79
+Node, domain: 44 - global: 80
+Node, domain: 45 - global: 85
+Node, domain: 46 - global: 86
+Node, domain: 47 - global: 87
+Node, domain: 48 - global: 88
+Node, domain: 49 - global: 89
+Node, domain: 50 - global: 94
+Node, domain: 51 - global: 95
+Node, domain: 52 - global: 96
+Node, domain: 53 - global: 97
+Node, domain: 54 - global: 98
+Node, domain: 55 - global: 103
+Node, domain: 56 - global: 104
+Node, domain: 57 - global: 105
+Node, domain: 58 - global: 106
+Node, domain: 59 - global: 107
+Node, domain: 60 - global: 112
+Node, domain: 61 - global: 113
+Node, domain: 62 - global: 114
+Node, domain: 63 - global: 115
+Node, domain: 64 - global: 116
+Node, domain: 65 - global: 121
+Node, domain: 66 - global: 122
+Node, domain: 67 - global: 123
+Node, domain: 68 - global: 124
+Node, domain: 69 - global: 125
+Node, domain: 70 - global: 130
+Node, domain: 71 - global: 131
+Node, domain: 72 - global: 132
+Node, domain: 73 - global: 133
+Node, domain: 74 - global: 134
+Node, domain: 75 - global: 139
+Node, domain: 76 - global: 140
+Node, domain: 77 - global: 141
+Node, domain: 78 - global: 142
+Node, domain: 79 - global: 143
+Node, domain: 80 - global: 148
+Node, domain: 81 - global: 149
+Node, domain: 82 - global: 150
+Node, domain: 83 - global: 151
+Node, domain: 84 - global: 152
+Node, domain: 85 - global: 157
+Node, domain: 86 - global: 158
+Node, domain: 87 - global: 159
+Node, domain: 88 - global: 160
+Node, domain: 89 - global: 161
+Node, domain: 90 - global: 166
+Node, domain: 91 - global: 167
+Node, domain: 92 - global: 168
+Node, domain: 93 - global: 169
+Node, domain: 94 - global: 170
+Node, domain: 95 - global: 175
+Node, domain: 96 - global: 176
+Node, domain: 97 - global: 177
+Node, domain: 98 - global: 178
+Node, domain: 99 - global: 179
+Node, domain: 100 - global: 184
+Node, domain: 101 - global: 185
+Node, domain: 102 - global: 186
+Node, domain: 103 - global: 187
+Node, domain: 104 - global: 188
+Node, domain: 105 - global: 193
+Node, domain: 106 - global: 194
+Node, domain: 107 - global: 195
+Node, domain: 108 - global: 196
+Node, domain: 109 - global: 197
+Node, domain: 110 - global: 202
+Node, domain: 111 - global: 203
+Node, domain: 112 - global: 204
+Node, domain: 113 - global: 205
+Node, domain: 114 - global: 206
+Node, domain: 115 - global: 211
+Node, domain: 116 - global: 212
+Node, domain: 117 - global: 213
+Node, domain: 118 - global: 214
+Node, domain: 119 - global: 215
+Node, domain: 120 - global: 220
+Node, domain: 121 - global: 221
+Node, domain: 122 - global: 222
+Node, domain: 123 - global: 223
+Node, domain: 124 - global: 224
+Node, domain: 125 - global: 0
+Node, domain: 126 - global: 1
+Node, domain: 127 - global: 3
+Node, domain: 128 - global: 9
+Node, domain: 129 - global: 10
+Node, domain: 130 - global: 12
+Node, domain: 131 - global: 18
+Node, domain: 132 - global: 19
+Node, domain: 133 - global: 21
+Node, domain: 134 - global: 27
+Node, domain: 135 - global: 28
+Node, domain: 136 - global: 30
+Node, domain: 137 - global: 36
+Node, domain: 138 - global: 37
+Node, domain: 139 - global: 39
+Node, domain: 140 - global: 45
+Node, domain: 141 - global: 46
+Node, domain: 142 - global: 48
+Node, domain: 143 - global: 54
+Node, domain: 144 - global: 55
+Node, domain: 145 - global: 57
+Node, domain: 146 - global: 63
+Node, domain: 147 - global: 64
+Node, domain: 148 - global: 66
+Node, domain: 149 - global: 72
+Node, domain: 150 - global: 73
+Node, domain: 151 - global: 75
+Node, domain: 152 - global: 81
+Node, domain: 153 - global: 82
+Node, domain: 154 - global: 84
+Node, domain: 155 - global: 90
+Node, domain: 156 - global: 91
+Node, domain: 157 - global: 93
+Node, domain: 158 - global: 99
+Node, domain: 159 - global: 100
+Node, domain: 160 - global: 102
+Node, domain: 161 - global: 108
+Node, domain: 162 - global: 109
+Node, domain: 163 - global: 111
+Node, domain: 164 - global: 117
+Node, domain: 165 - global: 118
+Node, domain: 166 - global: 120
+Node, domain: 167 - global: 126
+Node, domain: 168 - global: 127
+Node, domain: 169 - global: 129
+Node, domain: 170 - global: 135
+Node, domain: 171 - global: 136
+Node, domain: 172 - global: 138
+Node, domain: 173 - global: 144
+Node, domain: 174 - global: 145
+Node, domain: 175 - global: 147
+Node, domain: 176 - global: 153
+Node, domain: 177 - global: 154
+Node, domain: 178 - global: 156
+Node, domain: 179 - global: 162
+Node, domain: 180 - global: 163
+Node, domain: 181 - global: 165
+Node, domain: 182 - global: 171
+Node, domain: 183 - global: 172
+Node, domain: 184 - global: 174
+Node, domain: 185 - global: 180
+Node, domain: 186 - global: 181
+Node, domain: 187 - global: 183
+Node, domain: 188 - global: 189
+Node, domain: 189 - global: 190
+Node, domain: 190 - global: 192
+Node, domain: 191 - global: 198
+Node, domain: 192 - global: 199
+Node, domain: 193 - global: 201
+Node, domain: 194 - global: 207
+Node, domain: 195 - global: 208
+Node, domain: 196 - global: 210
+Node, domain: 197 - global: 216
+Node, domain: 198 - global: 217
+Node, domain: 199 - global: 219
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 128 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --meshSizeI=9 --isPeriodicI=True" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,527 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8061400)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 32
+Element, global: 3 - local: X - shadow: 1 - domain: 33
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 2 - domain: 34
+Element, global: 7 - local: X - shadow: 3 - domain: 35
+Element, global: 8 - local: 4 - shadow: X - domain: 4
+Element, global: 9 - local: 5 - shadow: X - domain: 5
+Element, global: 10 - local: X - shadow: 4 - domain: 36
+Element, global: 11 - local: X - shadow: 5 - domain: 37
+Element, global: 12 - local: 6 - shadow: X - domain: 6
+Element, global: 13 - local: 7 - shadow: X - domain: 7
+Element, global: 14 - local: X - shadow: 6 - domain: 38
+Element, global: 15 - local: X - shadow: 7 - domain: 39
+Element, global: 16 - local: 8 - shadow: X - domain: 8
+Element, global: 17 - local: 9 - shadow: X - domain: 9
+Element, global: 18 - local: X - shadow: 8 - domain: 40
+Element, global: 19 - local: X - shadow: 9 - domain: 41
+Element, global: 20 - local: 10 - shadow: X - domain: 10
+Element, global: 21 - local: 11 - shadow: X - domain: 11
+Element, global: 22 - local: X - shadow: 10 - domain: 42
+Element, global: 23 - local: X - shadow: 11 - domain: 43
+Element, global: 24 - local: 12 - shadow: X - domain: 12
+Element, global: 25 - local: 13 - shadow: X - domain: 13
+Element, global: 26 - local: X - shadow: 12 - domain: 44
+Element, global: 27 - local: X - shadow: 13 - domain: 45
+Element, global: 28 - local: 14 - shadow: X - domain: 14
+Element, global: 29 - local: 15 - shadow: X - domain: 15
+Element, global: 30 - local: X - shadow: 14 - domain: 46
+Element, global: 31 - local: X - shadow: 15 - domain: 47
+Element, global: 32 - local: 16 - shadow: X - domain: 16
+Element, global: 33 - local: 17 - shadow: X - domain: 17
+Element, global: 34 - local: X - shadow: 16 - domain: 48
+Element, global: 35 - local: X - shadow: 17 - domain: 49
+Element, global: 36 - local: 18 - shadow: X - domain: 18
+Element, global: 37 - local: 19 - shadow: X - domain: 19
+Element, global: 38 - local: X - shadow: 18 - domain: 50
+Element, global: 39 - local: X - shadow: 19 - domain: 51
+Element, global: 40 - local: 20 - shadow: X - domain: 20
+Element, global: 41 - local: 21 - shadow: X - domain: 21
+Element, global: 42 - local: X - shadow: 20 - domain: 52
+Element, global: 43 - local: X - shadow: 21 - domain: 53
+Element, global: 44 - local: 22 - shadow: X - domain: 22
+Element, global: 45 - local: 23 - shadow: X - domain: 23
+Element, global: 46 - local: X - shadow: 22 - domain: 54
+Element, global: 47 - local: X - shadow: 23 - domain: 55
+Element, global: 48 - local: 24 - shadow: X - domain: 24
+Element, global: 49 - local: 25 - shadow: X - domain: 25
+Element, global: 50 - local: X - shadow: 24 - domain: 56
+Element, global: 51 - local: X - shadow: 25 - domain: 57
+Element, global: 52 - local: 26 - shadow: X - domain: 26
+Element, global: 53 - local: 27 - shadow: X - domain: 27
+Element, global: 54 - local: X - shadow: 26 - domain: 58
+Element, global: 55 - local: X - shadow: 27 - domain: 59
+Element, global: 56 - local: 28 - shadow: X - domain: 28
+Element, global: 57 - local: 29 - shadow: X - domain: 29
+Element, global: 58 - local: X - shadow: 28 - domain: 60
+Element, global: 59 - local: X - shadow: 29 - domain: 61
+Element, global: 60 - local: 30 - shadow: X - domain: 30
+Element, global: 61 - local: 31 - shadow: X - domain: 31
+Element, global: 62 - local: X - shadow: 30 - domain: 62
+Element, global: 63 - local: X - shadow: 31 - domain: 63
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 8
+Element, local: 5 - global: 9
+Element, local: 6 - global: 12
+Element, local: 7 - global: 13
+Element, local: 8 - global: 16
+Element, local: 9 - global: 17
+Element, local: 10 - global: 20
+Element, local: 11 - global: 21
+Element, local: 12 - global: 24
+Element, local: 13 - global: 25
+Element, local: 14 - global: 28
+Element, local: 15 - global: 29
+Element, local: 16 - global: 32
+Element, local: 17 - global: 33
+Element, local: 18 - global: 36
+Element, local: 19 - global: 37
+Element, local: 20 - global: 40
+Element, local: 21 - global: 41
+Element, local: 22 - global: 44
+Element, local: 23 - global: 45
+Element, local: 24 - global: 48
+Element, local: 25 - global: 49
+Element, local: 26 - global: 52
+Element, local: 27 - global: 53
+Element, local: 28 - global: 56
+Element, local: 29 - global: 57
+Element, local: 30 - global: 60
+Element, local: 31 - global: 61
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+Element, domain: 6 - global: 12
+Element, domain: 7 - global: 13
+Element, domain: 8 - global: 16
+Element, domain: 9 - global: 17
+Element, domain: 10 - global: 20
+Element, domain: 11 - global: 21
+Element, domain: 12 - global: 24
+Element, domain: 13 - global: 25
+Element, domain: 14 - global: 28
+Element, domain: 15 - global: 29
+Element, domain: 16 - global: 32
+Element, domain: 17 - global: 33
+Element, domain: 18 - global: 36
+Element, domain: 19 - global: 37
+Element, domain: 20 - global: 40
+Element, domain: 21 - global: 41
+Element, domain: 22 - global: 44
+Element, domain: 23 - global: 45
+Element, domain: 24 - global: 48
+Element, domain: 25 - global: 49
+Element, domain: 26 - global: 52
+Element, domain: 27 - global: 53
+Element, domain: 28 - global: 56
+Element, domain: 29 - global: 57
+Element, domain: 30 - global: 60
+Element, domain: 31 - global: 61
+Element, domain: 32 - global: 2
+Element, domain: 33 - global: 3
+Element, domain: 34 - global: 6
+Element, domain: 35 - global: 7
+Element, domain: 36 - global: 10
+Element, domain: 37 - global: 11
+Element, domain: 38 - global: 14
+Element, domain: 39 - global: 15
+Element, domain: 40 - global: 18
+Element, domain: 41 - global: 19
+Element, domain: 42 - global: 22
+Element, domain: 43 - global: 23
+Element, domain: 44 - global: 26
+Element, domain: 45 - global: 27
+Element, domain: 46 - global: 30
+Element, domain: 47 - global: 31
+Element, domain: 48 - global: 34
+Element, domain: 49 - global: 35
+Element, domain: 50 - global: 38
+Element, domain: 51 - global: 39
+Element, domain: 52 - global: 42
+Element, domain: 53 - global: 43
+Element, domain: 54 - global: 46
+Element, domain: 55 - global: 47
+Element, domain: 56 - global: 50
+Element, domain: 57 - global: 51
+Element, domain: 58 - global: 54
+Element, domain: 59 - global: 55
+Element, domain: 60 - global: 58
+Element, domain: 61 - global: 59
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 75
+Node, global: 4 - local: X - shadow: 1 - domain: 76
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 2 - domain: 77
+Node, global: 9 - local: X - shadow: 3 - domain: 78
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 4 - domain: 79
+Node, global: 14 - local: X - shadow: 5 - domain: 80
+Node, global: 15 - local: 9 - shadow: X - domain: 9
+Node, global: 16 - local: 10 - shadow: X - domain: 10
+Node, global: 17 - local: 11 - shadow: X - domain: 11
+Node, global: 18 - local: X - shadow: 6 - domain: 81
+Node, global: 19 - local: X - shadow: 7 - domain: 82
+Node, global: 20 - local: 12 - shadow: X - domain: 12
+Node, global: 21 - local: 13 - shadow: X - domain: 13
+Node, global: 22 - local: 14 - shadow: X - domain: 14
+Node, global: 23 - local: X - shadow: 8 - domain: 83
+Node, global: 24 - local: X - shadow: 9 - domain: 84
+Node, global: 25 - local: 15 - shadow: X - domain: 15
+Node, global: 26 - local: 16 - shadow: X - domain: 16
+Node, global: 27 - local: 17 - shadow: X - domain: 17
+Node, global: 28 - local: X - shadow: 10 - domain: 85
+Node, global: 29 - local: X - shadow: 11 - domain: 86
+Node, global: 30 - local: 18 - shadow: X - domain: 18
+Node, global: 31 - local: 19 - shadow: X - domain: 19
+Node, global: 32 - local: 20 - shadow: X - domain: 20
+Node, global: 33 - local: X - shadow: 12 - domain: 87
+Node, global: 34 - local: X - shadow: 13 - domain: 88
+Node, global: 35 - local: 21 - shadow: X - domain: 21
+Node, global: 36 - local: 22 - shadow: X - domain: 22
+Node, global: 37 - local: 23 - shadow: X - domain: 23
+Node, global: 38 - local: X - shadow: 14 - domain: 89
+Node, global: 39 - local: X - shadow: 15 - domain: 90
+Node, global: 40 - local: 24 - shadow: X - domain: 24
+Node, global: 41 - local: 25 - shadow: X - domain: 25
+Node, global: 42 - local: 26 - shadow: X - domain: 26
+Node, global: 43 - local: X - shadow: 16 - domain: 91
+Node, global: 44 - local: X - shadow: 17 - domain: 92
+Node, global: 45 - local: 27 - shadow: X - domain: 27
+Node, global: 46 - local: 28 - shadow: X - domain: 28
+Node, global: 47 - local: 29 - shadow: X - domain: 29
+Node, global: 48 - local: X - shadow: 18 - domain: 93
+Node, global: 49 - local: X - shadow: 19 - domain: 94
+Node, global: 50 - local: 30 - shadow: X - domain: 30
+Node, global: 51 - local: 31 - shadow: X - domain: 31
+Node, global: 52 - local: 32 - shadow: X - domain: 32
+Node, global: 53 - local: X - shadow: 20 - domain: 95
+Node, global: 54 - local: X - shadow: 21 - domain: 96
+Node, global: 55 - local: 33 - shadow: X - domain: 33
+Node, global: 56 - local: 34 - shadow: X - domain: 34
+Node, global: 57 - local: 35 - shadow: X - domain: 35
+Node, global: 58 - local: X - shadow: 22 - domain: 97
+Node, global: 59 - local: X - shadow: 23 - domain: 98
+Node, global: 60 - local: 36 - shadow: X - domain: 36
+Node, global: 61 - local: 37 - shadow: X - domain: 37
+Node, global: 62 - local: 38 - shadow: X - domain: 38
+Node, global: 63 - local: X - shadow: 24 - domain: 99
+Node, global: 64 - local: X - shadow: 25 - domain: 100
+Node, global: 65 - local: 39 - shadow: X - domain: 39
+Node, global: 66 - local: 40 - shadow: X - domain: 40
+Node, global: 67 - local: 41 - shadow: X - domain: 41
+Node, global: 68 - local: X - shadow: 26 - domain: 101
+Node, global: 69 - local: X - shadow: 27 - domain: 102
+Node, global: 70 - local: 42 - shadow: X - domain: 42
+Node, global: 71 - local: 43 - shadow: X - domain: 43
+Node, global: 72 - local: 44 - shadow: X - domain: 44
+Node, global: 73 - local: X - shadow: 28 - domain: 103
+Node, global: 74 - local: X - shadow: 29 - domain: 104
+Node, global: 75 - local: 45 - shadow: X - domain: 45
+Node, global: 76 - local: 46 - shadow: X - domain: 46
+Node, global: 77 - local: 47 - shadow: X - domain: 47
+Node, global: 78 - local: X - shadow: 30 - domain: 105
+Node, global: 79 - local: X - shadow: 31 - domain: 106
+Node, global: 80 - local: 48 - shadow: X - domain: 48
+Node, global: 81 - local: 49 - shadow: X - domain: 49
+Node, global: 82 - local: 50 - shadow: X - domain: 50
+Node, global: 83 - local: X - shadow: 32 - domain: 107
+Node, global: 84 - local: X - shadow: 33 - domain: 108
+Node, global: 85 - local: 51 - shadow: X - domain: 51
+Node, global: 86 - local: 52 - shadow: X - domain: 52
+Node, global: 87 - local: 53 - shadow: X - domain: 53
+Node, global: 88 - local: X - shadow: 34 - domain: 109
+Node, global: 89 - local: X - shadow: 35 - domain: 110
+Node, global: 90 - local: 54 - shadow: X - domain: 54
+Node, global: 91 - local: 55 - shadow: X - domain: 55
+Node, global: 92 - local: 56 - shadow: X - domain: 56
+Node, global: 93 - local: X - shadow: 36 - domain: 111
+Node, global: 94 - local: X - shadow: 37 - domain: 112
+Node, global: 95 - local: 57 - shadow: X - domain: 57
+Node, global: 96 - local: 58 - shadow: X - domain: 58
+Node, global: 97 - local: 59 - shadow: X - domain: 59
+Node, global: 98 - local: X - shadow: 38 - domain: 113
+Node, global: 99 - local: X - shadow: 39 - domain: 114
+Node, global: 100 - local: 60 - shadow: X - domain: 60
+Node, global: 101 - local: 61 - shadow: X - domain: 61
+Node, global: 102 - local: 62 - shadow: X - domain: 62
+Node, global: 103 - local: X - shadow: 40 - domain: 115
+Node, global: 104 - local: X - shadow: 41 - domain: 116
+Node, global: 105 - local: 63 - shadow: X - domain: 63
+Node, global: 106 - local: 64 - shadow: X - domain: 64
+Node, global: 107 - local: 65 - shadow: X - domain: 65
+Node, global: 108 - local: X - shadow: 42 - domain: 117
+Node, global: 109 - local: X - shadow: 43 - domain: 118
+Node, global: 110 - local: 66 - shadow: X - domain: 66
+Node, global: 111 - local: 67 - shadow: X - domain: 67
+Node, global: 112 - local: 68 - shadow: X - domain: 68
+Node, global: 113 - local: X - shadow: 44 - domain: 119
+Node, global: 114 - local: X - shadow: 45 - domain: 120
+Node, global: 115 - local: 69 - shadow: X - domain: 69
+Node, global: 116 - local: 70 - shadow: X - domain: 70
+Node, global: 117 - local: 71 - shadow: X - domain: 71
+Node, global: 118 - local: X - shadow: 46 - domain: 121
+Node, global: 119 - local: X - shadow: 47 - domain: 122
+Node, global: 120 - local: 72 - shadow: X - domain: 72
+Node, global: 121 - local: 73 - shadow: X - domain: 73
+Node, global: 122 - local: 74 - shadow: X - domain: 74
+Node, global: 123 - local: X - shadow: 48 - domain: 123
+Node, global: 124 - local: X - shadow: 49 - domain: 124
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 15
+Node, local: 10 - global: 16
+Node, local: 11 - global: 17
+Node, local: 12 - global: 20
+Node, local: 13 - global: 21
+Node, local: 14 - global: 22
+Node, local: 15 - global: 25
+Node, local: 16 - global: 26
+Node, local: 17 - global: 27
+Node, local: 18 - global: 30
+Node, local: 19 - global: 31
+Node, local: 20 - global: 32
+Node, local: 21 - global: 35
+Node, local: 22 - global: 36
+Node, local: 23 - global: 37
+Node, local: 24 - global: 40
+Node, local: 25 - global: 41
+Node, local: 26 - global: 42
+Node, local: 27 - global: 45
+Node, local: 28 - global: 46
+Node, local: 29 - global: 47
+Node, local: 30 - global: 50
+Node, local: 31 - global: 51
+Node, local: 32 - global: 52
+Node, local: 33 - global: 55
+Node, local: 34 - global: 56
+Node, local: 35 - global: 57
+Node, local: 36 - global: 60
+Node, local: 37 - global: 61
+Node, local: 38 - global: 62
+Node, local: 39 - global: 65
+Node, local: 40 - global: 66
+Node, local: 41 - global: 67
+Node, local: 42 - global: 70
+Node, local: 43 - global: 71
+Node, local: 44 - global: 72
+Node, local: 45 - global: 75
+Node, local: 46 - global: 76
+Node, local: 47 - global: 77
+Node, local: 48 - global: 80
+Node, local: 49 - global: 81
+Node, local: 50 - global: 82
+Node, local: 51 - global: 85
+Node, local: 52 - global: 86
+Node, local: 53 - global: 87
+Node, local: 54 - global: 90
+Node, local: 55 - global: 91
+Node, local: 56 - global: 92
+Node, local: 57 - global: 95
+Node, local: 58 - global: 96
+Node, local: 59 - global: 97
+Node, local: 60 - global: 100
+Node, local: 61 - global: 101
+Node, local: 62 - global: 102
+Node, local: 63 - global: 105
+Node, local: 64 - global: 106
+Node, local: 65 - global: 107
+Node, local: 66 - global: 110
+Node, local: 67 - global: 111
+Node, local: 68 - global: 112
+Node, local: 69 - global: 115
+Node, local: 70 - global: 116
+Node, local: 71 - global: 117
+Node, local: 72 - global: 120
+Node, local: 73 - global: 121
+Node, local: 74 - global: 122
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 15
+Node, domain: 10 - global: 16
+Node, domain: 11 - global: 17
+Node, domain: 12 - global: 20
+Node, domain: 13 - global: 21
+Node, domain: 14 - global: 22
+Node, domain: 15 - global: 25
+Node, domain: 16 - global: 26
+Node, domain: 17 - global: 27
+Node, domain: 18 - global: 30
+Node, domain: 19 - global: 31
+Node, domain: 20 - global: 32
+Node, domain: 21 - global: 35
+Node, domain: 22 - global: 36
+Node, domain: 23 - global: 37
+Node, domain: 24 - global: 40
+Node, domain: 25 - global: 41
+Node, domain: 26 - global: 42
+Node, domain: 27 - global: 45
+Node, domain: 28 - global: 46
+Node, domain: 29 - global: 47
+Node, domain: 30 - global: 50
+Node, domain: 31 - global: 51
+Node, domain: 32 - global: 52
+Node, domain: 33 - global: 55
+Node, domain: 34 - global: 56
+Node, domain: 35 - global: 57
+Node, domain: 36 - global: 60
+Node, domain: 37 - global: 61
+Node, domain: 38 - global: 62
+Node, domain: 39 - global: 65
+Node, domain: 40 - global: 66
+Node, domain: 41 - global: 67
+Node, domain: 42 - global: 70
+Node, domain: 43 - global: 71
+Node, domain: 44 - global: 72
+Node, domain: 45 - global: 75
+Node, domain: 46 - global: 76
+Node, domain: 47 - global: 77
+Node, domain: 48 - global: 80
+Node, domain: 49 - global: 81
+Node, domain: 50 - global: 82
+Node, domain: 51 - global: 85
+Node, domain: 52 - global: 86
+Node, domain: 53 - global: 87
+Node, domain: 54 - global: 90
+Node, domain: 55 - global: 91
+Node, domain: 56 - global: 92
+Node, domain: 57 - global: 95
+Node, domain: 58 - global: 96
+Node, domain: 59 - global: 97
+Node, domain: 60 - global: 100
+Node, domain: 61 - global: 101
+Node, domain: 62 - global: 102
+Node, domain: 63 - global: 105
+Node, domain: 64 - global: 106
+Node, domain: 65 - global: 107
+Node, domain: 66 - global: 110
+Node, domain: 67 - global: 111
+Node, domain: 68 - global: 112
+Node, domain: 69 - global: 115
+Node, domain: 70 - global: 116
+Node, domain: 71 - global: 117
+Node, domain: 72 - global: 120
+Node, domain: 73 - global: 121
+Node, domain: 74 - global: 122
+Node, domain: 75 - global: 3
+Node, domain: 76 - global: 4
+Node, domain: 77 - global: 8
+Node, domain: 78 - global: 9
+Node, domain: 79 - global: 13
+Node, domain: 80 - global: 14
+Node, domain: 81 - global: 18
+Node, domain: 82 - global: 19
+Node, domain: 83 - global: 23
+Node, domain: 84 - global: 24
+Node, domain: 85 - global: 28
+Node, domain: 86 - global: 29
+Node, domain: 87 - global: 33
+Node, domain: 88 - global: 34
+Node, domain: 89 - global: 38
+Node, domain: 90 - global: 39
+Node, domain: 91 - global: 43
+Node, domain: 92 - global: 44
+Node, domain: 93 - global: 48
+Node, domain: 94 - global: 49
+Node, domain: 95 - global: 53
+Node, domain: 96 - global: 54
+Node, domain: 97 - global: 58
+Node, domain: 98 - global: 59
+Node, domain: 99 - global: 63
+Node, domain: 100 - global: 64
+Node, domain: 101 - global: 68
+Node, domain: 102 - global: 69
+Node, domain: 103 - global: 73
+Node, domain: 104 - global: 74
+Node, domain: 105 - global: 78
+Node, domain: 106 - global: 79
+Node, domain: 107 - global: 83
+Node, domain: 108 - global: 84
+Node, domain: 109 - global: 88
+Node, domain: 110 - global: 89
+Node, domain: 111 - global: 93
+Node, domain: 112 - global: 94
+Node, domain: 113 - global: 98
+Node, domain: 114 - global: 99
+Node, domain: 115 - global: 103
+Node, domain: 116 - global: 104
+Node, domain: 117 - global: 108
+Node, domain: 118 - global: 109
+Node, domain: 119 - global: 113
+Node, domain: 120 - global: 114
+Node, domain: 121 - global: 118
+Node, domain: 122 - global: 119
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,527 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 2 in use (3 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8061728)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 32
+Element, global: 3 - local: X - shadow: 1 - domain: 33
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 2 - domain: 34
+Element, global: 7 - local: X - shadow: 3 - domain: 35
+Element, global: 8 - local: 4 - shadow: X - domain: 4
+Element, global: 9 - local: 5 - shadow: X - domain: 5
+Element, global: 10 - local: X - shadow: 4 - domain: 36
+Element, global: 11 - local: X - shadow: 5 - domain: 37
+Element, global: 12 - local: 6 - shadow: X - domain: 6
+Element, global: 13 - local: 7 - shadow: X - domain: 7
+Element, global: 14 - local: X - shadow: 6 - domain: 38
+Element, global: 15 - local: X - shadow: 7 - domain: 39
+Element, global: 16 - local: 8 - shadow: X - domain: 8
+Element, global: 17 - local: 9 - shadow: X - domain: 9
+Element, global: 18 - local: X - shadow: 8 - domain: 40
+Element, global: 19 - local: X - shadow: 9 - domain: 41
+Element, global: 20 - local: 10 - shadow: X - domain: 10
+Element, global: 21 - local: 11 - shadow: X - domain: 11
+Element, global: 22 - local: X - shadow: 10 - domain: 42
+Element, global: 23 - local: X - shadow: 11 - domain: 43
+Element, global: 24 - local: 12 - shadow: X - domain: 12
+Element, global: 25 - local: 13 - shadow: X - domain: 13
+Element, global: 26 - local: X - shadow: 12 - domain: 44
+Element, global: 27 - local: X - shadow: 13 - domain: 45
+Element, global: 28 - local: 14 - shadow: X - domain: 14
+Element, global: 29 - local: 15 - shadow: X - domain: 15
+Element, global: 30 - local: X - shadow: 14 - domain: 46
+Element, global: 31 - local: X - shadow: 15 - domain: 47
+Element, global: 32 - local: 16 - shadow: X - domain: 16
+Element, global: 33 - local: 17 - shadow: X - domain: 17
+Element, global: 34 - local: X - shadow: 16 - domain: 48
+Element, global: 35 - local: X - shadow: 17 - domain: 49
+Element, global: 36 - local: 18 - shadow: X - domain: 18
+Element, global: 37 - local: 19 - shadow: X - domain: 19
+Element, global: 38 - local: X - shadow: 18 - domain: 50
+Element, global: 39 - local: X - shadow: 19 - domain: 51
+Element, global: 40 - local: 20 - shadow: X - domain: 20
+Element, global: 41 - local: 21 - shadow: X - domain: 21
+Element, global: 42 - local: X - shadow: 20 - domain: 52
+Element, global: 43 - local: X - shadow: 21 - domain: 53
+Element, global: 44 - local: 22 - shadow: X - domain: 22
+Element, global: 45 - local: 23 - shadow: X - domain: 23
+Element, global: 46 - local: X - shadow: 22 - domain: 54
+Element, global: 47 - local: X - shadow: 23 - domain: 55
+Element, global: 48 - local: 24 - shadow: X - domain: 24
+Element, global: 49 - local: 25 - shadow: X - domain: 25
+Element, global: 50 - local: X - shadow: 24 - domain: 56
+Element, global: 51 - local: X - shadow: 25 - domain: 57
+Element, global: 52 - local: 26 - shadow: X - domain: 26
+Element, global: 53 - local: 27 - shadow: X - domain: 27
+Element, global: 54 - local: X - shadow: 26 - domain: 58
+Element, global: 55 - local: X - shadow: 27 - domain: 59
+Element, global: 56 - local: 28 - shadow: X - domain: 28
+Element, global: 57 - local: 29 - shadow: X - domain: 29
+Element, global: 58 - local: X - shadow: 28 - domain: 60
+Element, global: 59 - local: X - shadow: 29 - domain: 61
+Element, global: 60 - local: 30 - shadow: X - domain: 30
+Element, global: 61 - local: 31 - shadow: X - domain: 31
+Element, global: 62 - local: X - shadow: 30 - domain: 62
+Element, global: 63 - local: X - shadow: 31 - domain: 63
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 8
+Element, local: 5 - global: 9
+Element, local: 6 - global: 12
+Element, local: 7 - global: 13
+Element, local: 8 - global: 16
+Element, local: 9 - global: 17
+Element, local: 10 - global: 20
+Element, local: 11 - global: 21
+Element, local: 12 - global: 24
+Element, local: 13 - global: 25
+Element, local: 14 - global: 28
+Element, local: 15 - global: 29
+Element, local: 16 - global: 32
+Element, local: 17 - global: 33
+Element, local: 18 - global: 36
+Element, local: 19 - global: 37
+Element, local: 20 - global: 40
+Element, local: 21 - global: 41
+Element, local: 22 - global: 44
+Element, local: 23 - global: 45
+Element, local: 24 - global: 48
+Element, local: 25 - global: 49
+Element, local: 26 - global: 52
+Element, local: 27 - global: 53
+Element, local: 28 - global: 56
+Element, local: 29 - global: 57
+Element, local: 30 - global: 60
+Element, local: 31 - global: 61
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+Element, domain: 6 - global: 12
+Element, domain: 7 - global: 13
+Element, domain: 8 - global: 16
+Element, domain: 9 - global: 17
+Element, domain: 10 - global: 20
+Element, domain: 11 - global: 21
+Element, domain: 12 - global: 24
+Element, domain: 13 - global: 25
+Element, domain: 14 - global: 28
+Element, domain: 15 - global: 29
+Element, domain: 16 - global: 32
+Element, domain: 17 - global: 33
+Element, domain: 18 - global: 36
+Element, domain: 19 - global: 37
+Element, domain: 20 - global: 40
+Element, domain: 21 - global: 41
+Element, domain: 22 - global: 44
+Element, domain: 23 - global: 45
+Element, domain: 24 - global: 48
+Element, domain: 25 - global: 49
+Element, domain: 26 - global: 52
+Element, domain: 27 - global: 53
+Element, domain: 28 - global: 56
+Element, domain: 29 - global: 57
+Element, domain: 30 - global: 60
+Element, domain: 31 - global: 61
+Element, domain: 32 - global: 2
+Element, domain: 33 - global: 3
+Element, domain: 34 - global: 6
+Element, domain: 35 - global: 7
+Element, domain: 36 - global: 10
+Element, domain: 37 - global: 11
+Element, domain: 38 - global: 14
+Element, domain: 39 - global: 15
+Element, domain: 40 - global: 18
+Element, domain: 41 - global: 19
+Element, domain: 42 - global: 22
+Element, domain: 43 - global: 23
+Element, domain: 44 - global: 26
+Element, domain: 45 - global: 27
+Element, domain: 46 - global: 30
+Element, domain: 47 - global: 31
+Element, domain: 48 - global: 34
+Element, domain: 49 - global: 35
+Element, domain: 50 - global: 38
+Element, domain: 51 - global: 39
+Element, domain: 52 - global: 42
+Element, domain: 53 - global: 43
+Element, domain: 54 - global: 46
+Element, domain: 55 - global: 47
+Element, domain: 56 - global: 50
+Element, domain: 57 - global: 51
+Element, domain: 58 - global: 54
+Element, domain: 59 - global: 55
+Element, domain: 60 - global: 58
+Element, domain: 61 - global: 59
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 75
+Node, global: 4 - local: X - shadow: 1 - domain: 76
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 2 - domain: 77
+Node, global: 9 - local: X - shadow: 3 - domain: 78
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 4 - domain: 79
+Node, global: 14 - local: X - shadow: 5 - domain: 80
+Node, global: 15 - local: 9 - shadow: X - domain: 9
+Node, global: 16 - local: 10 - shadow: X - domain: 10
+Node, global: 17 - local: 11 - shadow: X - domain: 11
+Node, global: 18 - local: X - shadow: 6 - domain: 81
+Node, global: 19 - local: X - shadow: 7 - domain: 82
+Node, global: 20 - local: 12 - shadow: X - domain: 12
+Node, global: 21 - local: 13 - shadow: X - domain: 13
+Node, global: 22 - local: 14 - shadow: X - domain: 14
+Node, global: 23 - local: X - shadow: 8 - domain: 83
+Node, global: 24 - local: X - shadow: 9 - domain: 84
+Node, global: 25 - local: 15 - shadow: X - domain: 15
+Node, global: 26 - local: 16 - shadow: X - domain: 16
+Node, global: 27 - local: 17 - shadow: X - domain: 17
+Node, global: 28 - local: X - shadow: 10 - domain: 85
+Node, global: 29 - local: X - shadow: 11 - domain: 86
+Node, global: 30 - local: 18 - shadow: X - domain: 18
+Node, global: 31 - local: 19 - shadow: X - domain: 19
+Node, global: 32 - local: 20 - shadow: X - domain: 20
+Node, global: 33 - local: X - shadow: 12 - domain: 87
+Node, global: 34 - local: X - shadow: 13 - domain: 88
+Node, global: 35 - local: 21 - shadow: X - domain: 21
+Node, global: 36 - local: 22 - shadow: X - domain: 22
+Node, global: 37 - local: 23 - shadow: X - domain: 23
+Node, global: 38 - local: X - shadow: 14 - domain: 89
+Node, global: 39 - local: X - shadow: 15 - domain: 90
+Node, global: 40 - local: 24 - shadow: X - domain: 24
+Node, global: 41 - local: 25 - shadow: X - domain: 25
+Node, global: 42 - local: 26 - shadow: X - domain: 26
+Node, global: 43 - local: X - shadow: 16 - domain: 91
+Node, global: 44 - local: X - shadow: 17 - domain: 92
+Node, global: 45 - local: 27 - shadow: X - domain: 27
+Node, global: 46 - local: 28 - shadow: X - domain: 28
+Node, global: 47 - local: 29 - shadow: X - domain: 29
+Node, global: 48 - local: X - shadow: 18 - domain: 93
+Node, global: 49 - local: X - shadow: 19 - domain: 94
+Node, global: 50 - local: 30 - shadow: X - domain: 30
+Node, global: 51 - local: 31 - shadow: X - domain: 31
+Node, global: 52 - local: 32 - shadow: X - domain: 32
+Node, global: 53 - local: X - shadow: 20 - domain: 95
+Node, global: 54 - local: X - shadow: 21 - domain: 96
+Node, global: 55 - local: 33 - shadow: X - domain: 33
+Node, global: 56 - local: 34 - shadow: X - domain: 34
+Node, global: 57 - local: 35 - shadow: X - domain: 35
+Node, global: 58 - local: X - shadow: 22 - domain: 97
+Node, global: 59 - local: X - shadow: 23 - domain: 98
+Node, global: 60 - local: 36 - shadow: X - domain: 36
+Node, global: 61 - local: 37 - shadow: X - domain: 37
+Node, global: 62 - local: 38 - shadow: X - domain: 38
+Node, global: 63 - local: X - shadow: 24 - domain: 99
+Node, global: 64 - local: X - shadow: 25 - domain: 100
+Node, global: 65 - local: 39 - shadow: X - domain: 39
+Node, global: 66 - local: 40 - shadow: X - domain: 40
+Node, global: 67 - local: 41 - shadow: X - domain: 41
+Node, global: 68 - local: X - shadow: 26 - domain: 101
+Node, global: 69 - local: X - shadow: 27 - domain: 102
+Node, global: 70 - local: 42 - shadow: X - domain: 42
+Node, global: 71 - local: 43 - shadow: X - domain: 43
+Node, global: 72 - local: 44 - shadow: X - domain: 44
+Node, global: 73 - local: X - shadow: 28 - domain: 103
+Node, global: 74 - local: X - shadow: 29 - domain: 104
+Node, global: 75 - local: 45 - shadow: X - domain: 45
+Node, global: 76 - local: 46 - shadow: X - domain: 46
+Node, global: 77 - local: 47 - shadow: X - domain: 47
+Node, global: 78 - local: X - shadow: 30 - domain: 105
+Node, global: 79 - local: X - shadow: 31 - domain: 106
+Node, global: 80 - local: 48 - shadow: X - domain: 48
+Node, global: 81 - local: 49 - shadow: X - domain: 49
+Node, global: 82 - local: 50 - shadow: X - domain: 50
+Node, global: 83 - local: X - shadow: 32 - domain: 107
+Node, global: 84 - local: X - shadow: 33 - domain: 108
+Node, global: 85 - local: 51 - shadow: X - domain: 51
+Node, global: 86 - local: 52 - shadow: X - domain: 52
+Node, global: 87 - local: 53 - shadow: X - domain: 53
+Node, global: 88 - local: X - shadow: 34 - domain: 109
+Node, global: 89 - local: X - shadow: 35 - domain: 110
+Node, global: 90 - local: 54 - shadow: X - domain: 54
+Node, global: 91 - local: 55 - shadow: X - domain: 55
+Node, global: 92 - local: 56 - shadow: X - domain: 56
+Node, global: 93 - local: X - shadow: 36 - domain: 111
+Node, global: 94 - local: X - shadow: 37 - domain: 112
+Node, global: 95 - local: 57 - shadow: X - domain: 57
+Node, global: 96 - local: 58 - shadow: X - domain: 58
+Node, global: 97 - local: 59 - shadow: X - domain: 59
+Node, global: 98 - local: X - shadow: 38 - domain: 113
+Node, global: 99 - local: X - shadow: 39 - domain: 114
+Node, global: 100 - local: 60 - shadow: X - domain: 60
+Node, global: 101 - local: 61 - shadow: X - domain: 61
+Node, global: 102 - local: 62 - shadow: X - domain: 62
+Node, global: 103 - local: X - shadow: 40 - domain: 115
+Node, global: 104 - local: X - shadow: 41 - domain: 116
+Node, global: 105 - local: 63 - shadow: X - domain: 63
+Node, global: 106 - local: 64 - shadow: X - domain: 64
+Node, global: 107 - local: 65 - shadow: X - domain: 65
+Node, global: 108 - local: X - shadow: 42 - domain: 117
+Node, global: 109 - local: X - shadow: 43 - domain: 118
+Node, global: 110 - local: 66 - shadow: X - domain: 66
+Node, global: 111 - local: 67 - shadow: X - domain: 67
+Node, global: 112 - local: 68 - shadow: X - domain: 68
+Node, global: 113 - local: X - shadow: 44 - domain: 119
+Node, global: 114 - local: X - shadow: 45 - domain: 120
+Node, global: 115 - local: 69 - shadow: X - domain: 69
+Node, global: 116 - local: 70 - shadow: X - domain: 70
+Node, global: 117 - local: 71 - shadow: X - domain: 71
+Node, global: 118 - local: X - shadow: 46 - domain: 121
+Node, global: 119 - local: X - shadow: 47 - domain: 122
+Node, global: 120 - local: 72 - shadow: X - domain: 72
+Node, global: 121 - local: 73 - shadow: X - domain: 73
+Node, global: 122 - local: 74 - shadow: X - domain: 74
+Node, global: 123 - local: X - shadow: 48 - domain: 123
+Node, global: 124 - local: X - shadow: 49 - domain: 124
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 15
+Node, local: 10 - global: 16
+Node, local: 11 - global: 17
+Node, local: 12 - global: 20
+Node, local: 13 - global: 21
+Node, local: 14 - global: 22
+Node, local: 15 - global: 25
+Node, local: 16 - global: 26
+Node, local: 17 - global: 27
+Node, local: 18 - global: 30
+Node, local: 19 - global: 31
+Node, local: 20 - global: 32
+Node, local: 21 - global: 35
+Node, local: 22 - global: 36
+Node, local: 23 - global: 37
+Node, local: 24 - global: 40
+Node, local: 25 - global: 41
+Node, local: 26 - global: 42
+Node, local: 27 - global: 45
+Node, local: 28 - global: 46
+Node, local: 29 - global: 47
+Node, local: 30 - global: 50
+Node, local: 31 - global: 51
+Node, local: 32 - global: 52
+Node, local: 33 - global: 55
+Node, local: 34 - global: 56
+Node, local: 35 - global: 57
+Node, local: 36 - global: 60
+Node, local: 37 - global: 61
+Node, local: 38 - global: 62
+Node, local: 39 - global: 65
+Node, local: 40 - global: 66
+Node, local: 41 - global: 67
+Node, local: 42 - global: 70
+Node, local: 43 - global: 71
+Node, local: 44 - global: 72
+Node, local: 45 - global: 75
+Node, local: 46 - global: 76
+Node, local: 47 - global: 77
+Node, local: 48 - global: 80
+Node, local: 49 - global: 81
+Node, local: 50 - global: 82
+Node, local: 51 - global: 85
+Node, local: 52 - global: 86
+Node, local: 53 - global: 87
+Node, local: 54 - global: 90
+Node, local: 55 - global: 91
+Node, local: 56 - global: 92
+Node, local: 57 - global: 95
+Node, local: 58 - global: 96
+Node, local: 59 - global: 97
+Node, local: 60 - global: 100
+Node, local: 61 - global: 101
+Node, local: 62 - global: 102
+Node, local: 63 - global: 105
+Node, local: 64 - global: 106
+Node, local: 65 - global: 107
+Node, local: 66 - global: 110
+Node, local: 67 - global: 111
+Node, local: 68 - global: 112
+Node, local: 69 - global: 115
+Node, local: 70 - global: 116
+Node, local: 71 - global: 117
+Node, local: 72 - global: 120
+Node, local: 73 - global: 121
+Node, local: 74 - global: 122
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 15
+Node, domain: 10 - global: 16
+Node, domain: 11 - global: 17
+Node, domain: 12 - global: 20
+Node, domain: 13 - global: 21
+Node, domain: 14 - global: 22
+Node, domain: 15 - global: 25
+Node, domain: 16 - global: 26
+Node, domain: 17 - global: 27
+Node, domain: 18 - global: 30
+Node, domain: 19 - global: 31
+Node, domain: 20 - global: 32
+Node, domain: 21 - global: 35
+Node, domain: 22 - global: 36
+Node, domain: 23 - global: 37
+Node, domain: 24 - global: 40
+Node, domain: 25 - global: 41
+Node, domain: 26 - global: 42
+Node, domain: 27 - global: 45
+Node, domain: 28 - global: 46
+Node, domain: 29 - global: 47
+Node, domain: 30 - global: 50
+Node, domain: 31 - global: 51
+Node, domain: 32 - global: 52
+Node, domain: 33 - global: 55
+Node, domain: 34 - global: 56
+Node, domain: 35 - global: 57
+Node, domain: 36 - global: 60
+Node, domain: 37 - global: 61
+Node, domain: 38 - global: 62
+Node, domain: 39 - global: 65
+Node, domain: 40 - global: 66
+Node, domain: 41 - global: 67
+Node, domain: 42 - global: 70
+Node, domain: 43 - global: 71
+Node, domain: 44 - global: 72
+Node, domain: 45 - global: 75
+Node, domain: 46 - global: 76
+Node, domain: 47 - global: 77
+Node, domain: 48 - global: 80
+Node, domain: 49 - global: 81
+Node, domain: 50 - global: 82
+Node, domain: 51 - global: 85
+Node, domain: 52 - global: 86
+Node, domain: 53 - global: 87
+Node, domain: 54 - global: 90
+Node, domain: 55 - global: 91
+Node, domain: 56 - global: 92
+Node, domain: 57 - global: 95
+Node, domain: 58 - global: 96
+Node, domain: 59 - global: 97
+Node, domain: 60 - global: 100
+Node, domain: 61 - global: 101
+Node, domain: 62 - global: 102
+Node, domain: 63 - global: 105
+Node, domain: 64 - global: 106
+Node, domain: 65 - global: 107
+Node, domain: 66 - global: 110
+Node, domain: 67 - global: 111
+Node, domain: 68 - global: 112
+Node, domain: 69 - global: 115
+Node, domain: 70 - global: 116
+Node, domain: 71 - global: 117
+Node, domain: 72 - global: 120
+Node, domain: 73 - global: 121
+Node, domain: 74 - global: 122
+Node, domain: 75 - global: 3
+Node, domain: 76 - global: 4
+Node, domain: 77 - global: 8
+Node, domain: 78 - global: 9
+Node, domain: 79 - global: 13
+Node, domain: 80 - global: 14
+Node, domain: 81 - global: 18
+Node, domain: 82 - global: 19
+Node, domain: 83 - global: 23
+Node, domain: 84 - global: 24
+Node, domain: 85 - global: 28
+Node, domain: 86 - global: 29
+Node, domain: 87 - global: 33
+Node, domain: 88 - global: 34
+Node, domain: 89 - global: 38
+Node, domain: 90 - global: 39
+Node, domain: 91 - global: 43
+Node, domain: 92 - global: 44
+Node, domain: 93 - global: 48
+Node, domain: 94 - global: 49
+Node, domain: 95 - global: 53
+Node, domain: 96 - global: 54
+Node, domain: 97 - global: 58
+Node, domain: 98 - global: 59
+Node, domain: 99 - global: 63
+Node, domain: 100 - global: 64
+Node, domain: 101 - global: 68
+Node, domain: 102 - global: 69
+Node, domain: 103 - global: 73
+Node, domain: 104 - global: 74
+Node, domain: 105 - global: 78
+Node, domain: 106 - global: 79
+Node, domain: 107 - global: 83
+Node, domain: 108 - global: 84
+Node, domain: 109 - global: 88
+Node, domain: 110 - global: 89
+Node, domain: 111 - global: 93
+Node, domain: 112 - global: 94
+Node, domain: 113 - global: 98
+Node, domain: 114 - global: 99
+Node, domain: 115 - global: 103
+Node, domain: 116 - global: 104
+Node, domain: 117 - global: 108
+Node, domain: 118 - global: 109
+Node, domain: 119 - global: 113
+Node, domain: 120 - global: 114
+Node, domain: 121 - global: 118
+Node, domain: 122 - global: 119
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,527 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x80606d0)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 32
+Element, global: 1 - local: X - shadow: 1 - domain: 33
+Element, global: 2 - local: 0 - shadow: X - domain: 0
+Element, global: 3 - local: 1 - shadow: X - domain: 1
+Element, global: 4 - local: X - shadow: 2 - domain: 34
+Element, global: 5 - local: X - shadow: 3 - domain: 35
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: 4 - domain: 36
+Element, global: 9 - local: X - shadow: 5 - domain: 37
+Element, global: 10 - local: 4 - shadow: X - domain: 4
+Element, global: 11 - local: 5 - shadow: X - domain: 5
+Element, global: 12 - local: X - shadow: 6 - domain: 38
+Element, global: 13 - local: X - shadow: 7 - domain: 39
+Element, global: 14 - local: 6 - shadow: X - domain: 6
+Element, global: 15 - local: 7 - shadow: X - domain: 7
+Element, global: 16 - local: X - shadow: 8 - domain: 40
+Element, global: 17 - local: X - shadow: 9 - domain: 41
+Element, global: 18 - local: 8 - shadow: X - domain: 8
+Element, global: 19 - local: 9 - shadow: X - domain: 9
+Element, global: 20 - local: X - shadow: 10 - domain: 42
+Element, global: 21 - local: X - shadow: 11 - domain: 43
+Element, global: 22 - local: 10 - shadow: X - domain: 10
+Element, global: 23 - local: 11 - shadow: X - domain: 11
+Element, global: 24 - local: X - shadow: 12 - domain: 44
+Element, global: 25 - local: X - shadow: 13 - domain: 45
+Element, global: 26 - local: 12 - shadow: X - domain: 12
+Element, global: 27 - local: 13 - shadow: X - domain: 13
+Element, global: 28 - local: X - shadow: 14 - domain: 46
+Element, global: 29 - local: X - shadow: 15 - domain: 47
+Element, global: 30 - local: 14 - shadow: X - domain: 14
+Element, global: 31 - local: 15 - shadow: X - domain: 15
+Element, global: 32 - local: X - shadow: 16 - domain: 48
+Element, global: 33 - local: X - shadow: 17 - domain: 49
+Element, global: 34 - local: 16 - shadow: X - domain: 16
+Element, global: 35 - local: 17 - shadow: X - domain: 17
+Element, global: 36 - local: X - shadow: 18 - domain: 50
+Element, global: 37 - local: X - shadow: 19 - domain: 51
+Element, global: 38 - local: 18 - shadow: X - domain: 18
+Element, global: 39 - local: 19 - shadow: X - domain: 19
+Element, global: 40 - local: X - shadow: 20 - domain: 52
+Element, global: 41 - local: X - shadow: 21 - domain: 53
+Element, global: 42 - local: 20 - shadow: X - domain: 20
+Element, global: 43 - local: 21 - shadow: X - domain: 21
+Element, global: 44 - local: X - shadow: 22 - domain: 54
+Element, global: 45 - local: X - shadow: 23 - domain: 55
+Element, global: 46 - local: 22 - shadow: X - domain: 22
+Element, global: 47 - local: 23 - shadow: X - domain: 23
+Element, global: 48 - local: X - shadow: 24 - domain: 56
+Element, global: 49 - local: X - shadow: 25 - domain: 57
+Element, global: 50 - local: 24 - shadow: X - domain: 24
+Element, global: 51 - local: 25 - shadow: X - domain: 25
+Element, global: 52 - local: X - shadow: 26 - domain: 58
+Element, global: 53 - local: X - shadow: 27 - domain: 59
+Element, global: 54 - local: 26 - shadow: X - domain: 26
+Element, global: 55 - local: 27 - shadow: X - domain: 27
+Element, global: 56 - local: X - shadow: 28 - domain: 60
+Element, global: 57 - local: X - shadow: 29 - domain: 61
+Element, global: 58 - local: 28 - shadow: X - domain: 28
+Element, global: 59 - local: 29 - shadow: X - domain: 29
+Element, global: 60 - local: X - shadow: 30 - domain: 62
+Element, global: 61 - local: X - shadow: 31 - domain: 63
+Element, global: 62 - local: 30 - shadow: X - domain: 30
+Element, global: 63 - local: 31 - shadow: X - domain: 31
+
+Element, local: 0 - global: 2
+Element, local: 1 - global: 3
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 10
+Element, local: 5 - global: 11
+Element, local: 6 - global: 14
+Element, local: 7 - global: 15
+Element, local: 8 - global: 18
+Element, local: 9 - global: 19
+Element, local: 10 - global: 22
+Element, local: 11 - global: 23
+Element, local: 12 - global: 26
+Element, local: 13 - global: 27
+Element, local: 14 - global: 30
+Element, local: 15 - global: 31
+Element, local: 16 - global: 34
+Element, local: 17 - global: 35
+Element, local: 18 - global: 38
+Element, local: 19 - global: 39
+Element, local: 20 - global: 42
+Element, local: 21 - global: 43
+Element, local: 22 - global: 46
+Element, local: 23 - global: 47
+Element, local: 24 - global: 50
+Element, local: 25 - global: 51
+Element, local: 26 - global: 54
+Element, local: 27 - global: 55
+Element, local: 28 - global: 58
+Element, local: 29 - global: 59
+Element, local: 30 - global: 62
+Element, local: 31 - global: 63
+
+Element, domain: 0 - global: 2
+Element, domain: 1 - global: 3
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 10
+Element, domain: 5 - global: 11
+Element, domain: 6 - global: 14
+Element, domain: 7 - global: 15
+Element, domain: 8 - global: 18
+Element, domain: 9 - global: 19
+Element, domain: 10 - global: 22
+Element, domain: 11 - global: 23
+Element, domain: 12 - global: 26
+Element, domain: 13 - global: 27
+Element, domain: 14 - global: 30
+Element, domain: 15 - global: 31
+Element, domain: 16 - global: 34
+Element, domain: 17 - global: 35
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 42
+Element, domain: 21 - global: 43
+Element, domain: 22 - global: 46
+Element, domain: 23 - global: 47
+Element, domain: 24 - global: 50
+Element, domain: 25 - global: 51
+Element, domain: 26 - global: 54
+Element, domain: 27 - global: 55
+Element, domain: 28 - global: 58
+Element, domain: 29 - global: 59
+Element, domain: 30 - global: 62
+Element, domain: 31 - global: 63
+Element, domain: 32 - global: 0
+Element, domain: 33 - global: 1
+Element, domain: 34 - global: 4
+Element, domain: 35 - global: 5
+Element, domain: 36 - global: 8
+Element, domain: 37 - global: 9
+Element, domain: 38 - global: 12
+Element, domain: 39 - global: 13
+Element, domain: 40 - global: 16
+Element, domain: 41 - global: 17
+Element, domain: 42 - global: 20
+Element, domain: 43 - global: 21
+Element, domain: 44 - global: 24
+Element, domain: 45 - global: 25
+Element, domain: 46 - global: 28
+Element, domain: 47 - global: 29
+Element, domain: 48 - global: 32
+Element, domain: 49 - global: 33
+Element, domain: 50 - global: 36
+Element, domain: 51 - global: 37
+Element, domain: 52 - global: 40
+Element, domain: 53 - global: 41
+Element, domain: 54 - global: 44
+Element, domain: 55 - global: 45
+Element, domain: 56 - global: 48
+Element, domain: 57 - global: 49
+Element, domain: 58 - global: 52
+Element, domain: 59 - global: 53
+Element, domain: 60 - global: 56
+Element, domain: 61 - global: 57
+Element, domain: 62 - global: 60
+Element, domain: 63 - global: 61
+
+Node, global: 0 - local: X - shadow: 0 - domain: 75
+Node, global: 1 - local: X - shadow: 1 - domain: 76
+Node, global: 2 - local: 0 - shadow: X - domain: 0
+Node, global: 3 - local: 1 - shadow: X - domain: 1
+Node, global: 4 - local: 2 - shadow: X - domain: 2
+Node, global: 5 - local: X - shadow: 2 - domain: 77
+Node, global: 6 - local: X - shadow: 3 - domain: 78
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: X - shadow: 4 - domain: 79
+Node, global: 11 - local: X - shadow: 5 - domain: 80
+Node, global: 12 - local: 6 - shadow: X - domain: 6
+Node, global: 13 - local: 7 - shadow: X - domain: 7
+Node, global: 14 - local: 8 - shadow: X - domain: 8
+Node, global: 15 - local: X - shadow: 6 - domain: 81
+Node, global: 16 - local: X - shadow: 7 - domain: 82
+Node, global: 17 - local: 9 - shadow: X - domain: 9
+Node, global: 18 - local: 10 - shadow: X - domain: 10
+Node, global: 19 - local: 11 - shadow: X - domain: 11
+Node, global: 20 - local: X - shadow: 8 - domain: 83
+Node, global: 21 - local: X - shadow: 9 - domain: 84
+Node, global: 22 - local: 12 - shadow: X - domain: 12
+Node, global: 23 - local: 13 - shadow: X - domain: 13
+Node, global: 24 - local: 14 - shadow: X - domain: 14
+Node, global: 25 - local: X - shadow: 10 - domain: 85
+Node, global: 26 - local: X - shadow: 11 - domain: 86
+Node, global: 27 - local: 15 - shadow: X - domain: 15
+Node, global: 28 - local: 16 - shadow: X - domain: 16
+Node, global: 29 - local: 17 - shadow: X - domain: 17
+Node, global: 30 - local: X - shadow: 12 - domain: 87
+Node, global: 31 - local: X - shadow: 13 - domain: 88
+Node, global: 32 - local: 18 - shadow: X - domain: 18
+Node, global: 33 - local: 19 - shadow: X - domain: 19
+Node, global: 34 - local: 20 - shadow: X - domain: 20
+Node, global: 35 - local: X - shadow: 14 - domain: 89
+Node, global: 36 - local: X - shadow: 15 - domain: 90
+Node, global: 37 - local: 21 - shadow: X - domain: 21
+Node, global: 38 - local: 22 - shadow: X - domain: 22
+Node, global: 39 - local: 23 - shadow: X - domain: 23
+Node, global: 40 - local: X - shadow: 16 - domain: 91
+Node, global: 41 - local: X - shadow: 17 - domain: 92
+Node, global: 42 - local: 24 - shadow: X - domain: 24
+Node, global: 43 - local: 25 - shadow: X - domain: 25
+Node, global: 44 - local: 26 - shadow: X - domain: 26
+Node, global: 45 - local: X - shadow: 18 - domain: 93
+Node, global: 46 - local: X - shadow: 19 - domain: 94
+Node, global: 47 - local: 27 - shadow: X - domain: 27
+Node, global: 48 - local: 28 - shadow: X - domain: 28
+Node, global: 49 - local: 29 - shadow: X - domain: 29
+Node, global: 50 - local: X - shadow: 20 - domain: 95
+Node, global: 51 - local: X - shadow: 21 - domain: 96
+Node, global: 52 - local: 30 - shadow: X - domain: 30
+Node, global: 53 - local: 31 - shadow: X - domain: 31
+Node, global: 54 - local: 32 - shadow: X - domain: 32
+Node, global: 55 - local: X - shadow: 22 - domain: 97
+Node, global: 56 - local: X - shadow: 23 - domain: 98
+Node, global: 57 - local: 33 - shadow: X - domain: 33
+Node, global: 58 - local: 34 - shadow: X - domain: 34
+Node, global: 59 - local: 35 - shadow: X - domain: 35
+Node, global: 60 - local: X - shadow: 24 - domain: 99
+Node, global: 61 - local: X - shadow: 25 - domain: 100
+Node, global: 62 - local: 36 - shadow: X - domain: 36
+Node, global: 63 - local: 37 - shadow: X - domain: 37
+Node, global: 64 - local: 38 - shadow: X - domain: 38
+Node, global: 65 - local: X - shadow: 26 - domain: 101
+Node, global: 66 - local: X - shadow: 27 - domain: 102
+Node, global: 67 - local: 39 - shadow: X - domain: 39
+Node, global: 68 - local: 40 - shadow: X - domain: 40
+Node, global: 69 - local: 41 - shadow: X - domain: 41
+Node, global: 70 - local: X - shadow: 28 - domain: 103
+Node, global: 71 - local: X - shadow: 29 - domain: 104
+Node, global: 72 - local: 42 - shadow: X - domain: 42
+Node, global: 73 - local: 43 - shadow: X - domain: 43
+Node, global: 74 - local: 44 - shadow: X - domain: 44
+Node, global: 75 - local: X - shadow: 30 - domain: 105
+Node, global: 76 - local: X - shadow: 31 - domain: 106
+Node, global: 77 - local: 45 - shadow: X - domain: 45
+Node, global: 78 - local: 46 - shadow: X - domain: 46
+Node, global: 79 - local: 47 - shadow: X - domain: 47
+Node, global: 80 - local: X - shadow: 32 - domain: 107
+Node, global: 81 - local: X - shadow: 33 - domain: 108
+Node, global: 82 - local: 48 - shadow: X - domain: 48
+Node, global: 83 - local: 49 - shadow: X - domain: 49
+Node, global: 84 - local: 50 - shadow: X - domain: 50
+Node, global: 85 - local: X - shadow: 34 - domain: 109
+Node, global: 86 - local: X - shadow: 35 - domain: 110
+Node, global: 87 - local: 51 - shadow: X - domain: 51
+Node, global: 88 - local: 52 - shadow: X - domain: 52
+Node, global: 89 - local: 53 - shadow: X - domain: 53
+Node, global: 90 - local: X - shadow: 36 - domain: 111
+Node, global: 91 - local: X - shadow: 37 - domain: 112
+Node, global: 92 - local: 54 - shadow: X - domain: 54
+Node, global: 93 - local: 55 - shadow: X - domain: 55
+Node, global: 94 - local: 56 - shadow: X - domain: 56
+Node, global: 95 - local: X - shadow: 38 - domain: 113
+Node, global: 96 - local: X - shadow: 39 - domain: 114
+Node, global: 97 - local: 57 - shadow: X - domain: 57
+Node, global: 98 - local: 58 - shadow: X - domain: 58
+Node, global: 99 - local: 59 - shadow: X - domain: 59
+Node, global: 100 - local: X - shadow: 40 - domain: 115
+Node, global: 101 - local: X - shadow: 41 - domain: 116
+Node, global: 102 - local: 60 - shadow: X - domain: 60
+Node, global: 103 - local: 61 - shadow: X - domain: 61
+Node, global: 104 - local: 62 - shadow: X - domain: 62
+Node, global: 105 - local: X - shadow: 42 - domain: 117
+Node, global: 106 - local: X - shadow: 43 - domain: 118
+Node, global: 107 - local: 63 - shadow: X - domain: 63
+Node, global: 108 - local: 64 - shadow: X - domain: 64
+Node, global: 109 - local: 65 - shadow: X - domain: 65
+Node, global: 110 - local: X - shadow: 44 - domain: 119
+Node, global: 111 - local: X - shadow: 45 - domain: 120
+Node, global: 112 - local: 66 - shadow: X - domain: 66
+Node, global: 113 - local: 67 - shadow: X - domain: 67
+Node, global: 114 - local: 68 - shadow: X - domain: 68
+Node, global: 115 - local: X - shadow: 46 - domain: 121
+Node, global: 116 - local: X - shadow: 47 - domain: 122
+Node, global: 117 - local: 69 - shadow: X - domain: 69
+Node, global: 118 - local: 70 - shadow: X - domain: 70
+Node, global: 119 - local: 71 - shadow: X - domain: 71
+Node, global: 120 - local: X - shadow: 48 - domain: 123
+Node, global: 121 - local: X - shadow: 49 - domain: 124
+Node, global: 122 - local: 72 - shadow: X - domain: 72
+Node, global: 123 - local: 73 - shadow: X - domain: 73
+Node, global: 124 - local: 74 - shadow: X - domain: 74
+
+Node, local: 0 - global: 2
+Node, local: 1 - global: 3
+Node, local: 2 - global: 4
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 9
+Node, local: 6 - global: 12
+Node, local: 7 - global: 13
+Node, local: 8 - global: 14
+Node, local: 9 - global: 17
+Node, local: 10 - global: 18
+Node, local: 11 - global: 19
+Node, local: 12 - global: 22
+Node, local: 13 - global: 23
+Node, local: 14 - global: 24
+Node, local: 15 - global: 27
+Node, local: 16 - global: 28
+Node, local: 17 - global: 29
+Node, local: 18 - global: 32
+Node, local: 19 - global: 33
+Node, local: 20 - global: 34
+Node, local: 21 - global: 37
+Node, local: 22 - global: 38
+Node, local: 23 - global: 39
+Node, local: 24 - global: 42
+Node, local: 25 - global: 43
+Node, local: 26 - global: 44
+Node, local: 27 - global: 47
+Node, local: 28 - global: 48
+Node, local: 29 - global: 49
+Node, local: 30 - global: 52
+Node, local: 31 - global: 53
+Node, local: 32 - global: 54
+Node, local: 33 - global: 57
+Node, local: 34 - global: 58
+Node, local: 35 - global: 59
+Node, local: 36 - global: 62
+Node, local: 37 - global: 63
+Node, local: 38 - global: 64
+Node, local: 39 - global: 67
+Node, local: 40 - global: 68
+Node, local: 41 - global: 69
+Node, local: 42 - global: 72
+Node, local: 43 - global: 73
+Node, local: 44 - global: 74
+Node, local: 45 - global: 77
+Node, local: 46 - global: 78
+Node, local: 47 - global: 79
+Node, local: 48 - global: 82
+Node, local: 49 - global: 83
+Node, local: 50 - global: 84
+Node, local: 51 - global: 87
+Node, local: 52 - global: 88
+Node, local: 53 - global: 89
+Node, local: 54 - global: 92
+Node, local: 55 - global: 93
+Node, local: 56 - global: 94
+Node, local: 57 - global: 97
+Node, local: 58 - global: 98
+Node, local: 59 - global: 99
+Node, local: 60 - global: 102
+Node, local: 61 - global: 103
+Node, local: 62 - global: 104
+Node, local: 63 - global: 107
+Node, local: 64 - global: 108
+Node, local: 65 - global: 109
+Node, local: 66 - global: 112
+Node, local: 67 - global: 113
+Node, local: 68 - global: 114
+Node, local: 69 - global: 117
+Node, local: 70 - global: 118
+Node, local: 71 - global: 119
+Node, local: 72 - global: 122
+Node, local: 73 - global: 123
+Node, local: 74 - global: 124
+
+Node, domain: 0 - global: 2
+Node, domain: 1 - global: 3
+Node, domain: 2 - global: 4
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 12
+Node, domain: 7 - global: 13
+Node, domain: 8 - global: 14
+Node, domain: 9 - global: 17
+Node, domain: 10 - global: 18
+Node, domain: 11 - global: 19
+Node, domain: 12 - global: 22
+Node, domain: 13 - global: 23
+Node, domain: 14 - global: 24
+Node, domain: 15 - global: 27
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 32
+Node, domain: 19 - global: 33
+Node, domain: 20 - global: 34
+Node, domain: 21 - global: 37
+Node, domain: 22 - global: 38
+Node, domain: 23 - global: 39
+Node, domain: 24 - global: 42
+Node, domain: 25 - global: 43
+Node, domain: 26 - global: 44
+Node, domain: 27 - global: 47
+Node, domain: 28 - global: 48
+Node, domain: 29 - global: 49
+Node, domain: 30 - global: 52
+Node, domain: 31 - global: 53
+Node, domain: 32 - global: 54
+Node, domain: 33 - global: 57
+Node, domain: 34 - global: 58
+Node, domain: 35 - global: 59
+Node, domain: 36 - global: 62
+Node, domain: 37 - global: 63
+Node, domain: 38 - global: 64
+Node, domain: 39 - global: 67
+Node, domain: 40 - global: 68
+Node, domain: 41 - global: 69
+Node, domain: 42 - global: 72
+Node, domain: 43 - global: 73
+Node, domain: 44 - global: 74
+Node, domain: 45 - global: 77
+Node, domain: 46 - global: 78
+Node, domain: 47 - global: 79
+Node, domain: 48 - global: 82
+Node, domain: 49 - global: 83
+Node, domain: 50 - global: 84
+Node, domain: 51 - global: 87
+Node, domain: 52 - global: 88
+Node, domain: 53 - global: 89
+Node, domain: 54 - global: 92
+Node, domain: 55 - global: 93
+Node, domain: 56 - global: 94
+Node, domain: 57 - global: 97
+Node, domain: 58 - global: 98
+Node, domain: 59 - global: 99
+Node, domain: 60 - global: 102
+Node, domain: 61 - global: 103
+Node, domain: 62 - global: 104
+Node, domain: 63 - global: 107
+Node, domain: 64 - global: 108
+Node, domain: 65 - global: 109
+Node, domain: 66 - global: 112
+Node, domain: 67 - global: 113
+Node, domain: 68 - global: 114
+Node, domain: 69 - global: 117
+Node, domain: 70 - global: 118
+Node, domain: 71 - global: 119
+Node, domain: 72 - global: 122
+Node, domain: 73 - global: 123
+Node, domain: 74 - global: 124
+Node, domain: 75 - global: 0
+Node, domain: 76 - global: 1
+Node, domain: 77 - global: 5
+Node, domain: 78 - global: 6
+Node, domain: 79 - global: 10
+Node, domain: 80 - global: 11
+Node, domain: 81 - global: 15
+Node, domain: 82 - global: 16
+Node, domain: 83 - global: 20
+Node, domain: 84 - global: 21
+Node, domain: 85 - global: 25
+Node, domain: 86 - global: 26
+Node, domain: 87 - global: 30
+Node, domain: 88 - global: 31
+Node, domain: 89 - global: 35
+Node, domain: 90 - global: 36
+Node, domain: 91 - global: 40
+Node, domain: 92 - global: 41
+Node, domain: 93 - global: 45
+Node, domain: 94 - global: 46
+Node, domain: 95 - global: 50
+Node, domain: 96 - global: 51
+Node, domain: 97 - global: 55
+Node, domain: 98 - global: 56
+Node, domain: 99 - global: 60
+Node, domain: 100 - global: 61
+Node, domain: 101 - global: 65
+Node, domain: 102 - global: 66
+Node, domain: 103 - global: 70
+Node, domain: 104 - global: 71
+Node, domain: 105 - global: 75
+Node, domain: 106 - global: 76
+Node, domain: 107 - global: 80
+Node, domain: 108 - global: 81
+Node, domain: 109 - global: 85
+Node, domain: 110 - global: 86
+Node, domain: 111 - global: 90
+Node, domain: 112 - global: 91
+Node, domain: 113 - global: 95
+Node, domain: 114 - global: 96
+Node, domain: 115 - global: 100
+Node, domain: 116 - global: 101
+Node, domain: 117 - global: 105
+Node, domain: 118 - global: 106
+Node, domain: 119 - global: 110
+Node, domain: 120 - global: 111
+Node, domain: 121 - global: 115
+Node, domain: 122 - global: 116
+Node, domain: 123 - global: 120
+Node, domain: 124 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,527 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 2 in use (3 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060b20)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: X - shadow: 0 - domain: 32
+Element, global: 1 - local: X - shadow: 1 - domain: 33
+Element, global: 2 - local: 0 - shadow: X - domain: 0
+Element, global: 3 - local: 1 - shadow: X - domain: 1
+Element, global: 4 - local: X - shadow: 2 - domain: 34
+Element, global: 5 - local: X - shadow: 3 - domain: 35
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: 4 - domain: 36
+Element, global: 9 - local: X - shadow: 5 - domain: 37
+Element, global: 10 - local: 4 - shadow: X - domain: 4
+Element, global: 11 - local: 5 - shadow: X - domain: 5
+Element, global: 12 - local: X - shadow: 6 - domain: 38
+Element, global: 13 - local: X - shadow: 7 - domain: 39
+Element, global: 14 - local: 6 - shadow: X - domain: 6
+Element, global: 15 - local: 7 - shadow: X - domain: 7
+Element, global: 16 - local: X - shadow: 8 - domain: 40
+Element, global: 17 - local: X - shadow: 9 - domain: 41
+Element, global: 18 - local: 8 - shadow: X - domain: 8
+Element, global: 19 - local: 9 - shadow: X - domain: 9
+Element, global: 20 - local: X - shadow: 10 - domain: 42
+Element, global: 21 - local: X - shadow: 11 - domain: 43
+Element, global: 22 - local: 10 - shadow: X - domain: 10
+Element, global: 23 - local: 11 - shadow: X - domain: 11
+Element, global: 24 - local: X - shadow: 12 - domain: 44
+Element, global: 25 - local: X - shadow: 13 - domain: 45
+Element, global: 26 - local: 12 - shadow: X - domain: 12
+Element, global: 27 - local: 13 - shadow: X - domain: 13
+Element, global: 28 - local: X - shadow: 14 - domain: 46
+Element, global: 29 - local: X - shadow: 15 - domain: 47
+Element, global: 30 - local: 14 - shadow: X - domain: 14
+Element, global: 31 - local: 15 - shadow: X - domain: 15
+Element, global: 32 - local: X - shadow: 16 - domain: 48
+Element, global: 33 - local: X - shadow: 17 - domain: 49
+Element, global: 34 - local: 16 - shadow: X - domain: 16
+Element, global: 35 - local: 17 - shadow: X - domain: 17
+Element, global: 36 - local: X - shadow: 18 - domain: 50
+Element, global: 37 - local: X - shadow: 19 - domain: 51
+Element, global: 38 - local: 18 - shadow: X - domain: 18
+Element, global: 39 - local: 19 - shadow: X - domain: 19
+Element, global: 40 - local: X - shadow: 20 - domain: 52
+Element, global: 41 - local: X - shadow: 21 - domain: 53
+Element, global: 42 - local: 20 - shadow: X - domain: 20
+Element, global: 43 - local: 21 - shadow: X - domain: 21
+Element, global: 44 - local: X - shadow: 22 - domain: 54
+Element, global: 45 - local: X - shadow: 23 - domain: 55
+Element, global: 46 - local: 22 - shadow: X - domain: 22
+Element, global: 47 - local: 23 - shadow: X - domain: 23
+Element, global: 48 - local: X - shadow: 24 - domain: 56
+Element, global: 49 - local: X - shadow: 25 - domain: 57
+Element, global: 50 - local: 24 - shadow: X - domain: 24
+Element, global: 51 - local: 25 - shadow: X - domain: 25
+Element, global: 52 - local: X - shadow: 26 - domain: 58
+Element, global: 53 - local: X - shadow: 27 - domain: 59
+Element, global: 54 - local: 26 - shadow: X - domain: 26
+Element, global: 55 - local: 27 - shadow: X - domain: 27
+Element, global: 56 - local: X - shadow: 28 - domain: 60
+Element, global: 57 - local: X - shadow: 29 - domain: 61
+Element, global: 58 - local: 28 - shadow: X - domain: 28
+Element, global: 59 - local: 29 - shadow: X - domain: 29
+Element, global: 60 - local: X - shadow: 30 - domain: 62
+Element, global: 61 - local: X - shadow: 31 - domain: 63
+Element, global: 62 - local: 30 - shadow: X - domain: 30
+Element, global: 63 - local: 31 - shadow: X - domain: 31
+
+Element, local: 0 - global: 2
+Element, local: 1 - global: 3
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 10
+Element, local: 5 - global: 11
+Element, local: 6 - global: 14
+Element, local: 7 - global: 15
+Element, local: 8 - global: 18
+Element, local: 9 - global: 19
+Element, local: 10 - global: 22
+Element, local: 11 - global: 23
+Element, local: 12 - global: 26
+Element, local: 13 - global: 27
+Element, local: 14 - global: 30
+Element, local: 15 - global: 31
+Element, local: 16 - global: 34
+Element, local: 17 - global: 35
+Element, local: 18 - global: 38
+Element, local: 19 - global: 39
+Element, local: 20 - global: 42
+Element, local: 21 - global: 43
+Element, local: 22 - global: 46
+Element, local: 23 - global: 47
+Element, local: 24 - global: 50
+Element, local: 25 - global: 51
+Element, local: 26 - global: 54
+Element, local: 27 - global: 55
+Element, local: 28 - global: 58
+Element, local: 29 - global: 59
+Element, local: 30 - global: 62
+Element, local: 31 - global: 63
+
+Element, domain: 0 - global: 2
+Element, domain: 1 - global: 3
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 10
+Element, domain: 5 - global: 11
+Element, domain: 6 - global: 14
+Element, domain: 7 - global: 15
+Element, domain: 8 - global: 18
+Element, domain: 9 - global: 19
+Element, domain: 10 - global: 22
+Element, domain: 11 - global: 23
+Element, domain: 12 - global: 26
+Element, domain: 13 - global: 27
+Element, domain: 14 - global: 30
+Element, domain: 15 - global: 31
+Element, domain: 16 - global: 34
+Element, domain: 17 - global: 35
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 42
+Element, domain: 21 - global: 43
+Element, domain: 22 - global: 46
+Element, domain: 23 - global: 47
+Element, domain: 24 - global: 50
+Element, domain: 25 - global: 51
+Element, domain: 26 - global: 54
+Element, domain: 27 - global: 55
+Element, domain: 28 - global: 58
+Element, domain: 29 - global: 59
+Element, domain: 30 - global: 62
+Element, domain: 31 - global: 63
+Element, domain: 32 - global: 0
+Element, domain: 33 - global: 1
+Element, domain: 34 - global: 4
+Element, domain: 35 - global: 5
+Element, domain: 36 - global: 8
+Element, domain: 37 - global: 9
+Element, domain: 38 - global: 12
+Element, domain: 39 - global: 13
+Element, domain: 40 - global: 16
+Element, domain: 41 - global: 17
+Element, domain: 42 - global: 20
+Element, domain: 43 - global: 21
+Element, domain: 44 - global: 24
+Element, domain: 45 - global: 25
+Element, domain: 46 - global: 28
+Element, domain: 47 - global: 29
+Element, domain: 48 - global: 32
+Element, domain: 49 - global: 33
+Element, domain: 50 - global: 36
+Element, domain: 51 - global: 37
+Element, domain: 52 - global: 40
+Element, domain: 53 - global: 41
+Element, domain: 54 - global: 44
+Element, domain: 55 - global: 45
+Element, domain: 56 - global: 48
+Element, domain: 57 - global: 49
+Element, domain: 58 - global: 52
+Element, domain: 59 - global: 53
+Element, domain: 60 - global: 56
+Element, domain: 61 - global: 57
+Element, domain: 62 - global: 60
+Element, domain: 63 - global: 61
+
+Node, global: 0 - local: X - shadow: 0 - domain: 75
+Node, global: 1 - local: X - shadow: 1 - domain: 76
+Node, global: 2 - local: 0 - shadow: X - domain: 0
+Node, global: 3 - local: 1 - shadow: X - domain: 1
+Node, global: 4 - local: 2 - shadow: X - domain: 2
+Node, global: 5 - local: X - shadow: 2 - domain: 77
+Node, global: 6 - local: X - shadow: 3 - domain: 78
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: X - shadow: 4 - domain: 79
+Node, global: 11 - local: X - shadow: 5 - domain: 80
+Node, global: 12 - local: 6 - shadow: X - domain: 6
+Node, global: 13 - local: 7 - shadow: X - domain: 7
+Node, global: 14 - local: 8 - shadow: X - domain: 8
+Node, global: 15 - local: X - shadow: 6 - domain: 81
+Node, global: 16 - local: X - shadow: 7 - domain: 82
+Node, global: 17 - local: 9 - shadow: X - domain: 9
+Node, global: 18 - local: 10 - shadow: X - domain: 10
+Node, global: 19 - local: 11 - shadow: X - domain: 11
+Node, global: 20 - local: X - shadow: 8 - domain: 83
+Node, global: 21 - local: X - shadow: 9 - domain: 84
+Node, global: 22 - local: 12 - shadow: X - domain: 12
+Node, global: 23 - local: 13 - shadow: X - domain: 13
+Node, global: 24 - local: 14 - shadow: X - domain: 14
+Node, global: 25 - local: X - shadow: 10 - domain: 85
+Node, global: 26 - local: X - shadow: 11 - domain: 86
+Node, global: 27 - local: 15 - shadow: X - domain: 15
+Node, global: 28 - local: 16 - shadow: X - domain: 16
+Node, global: 29 - local: 17 - shadow: X - domain: 17
+Node, global: 30 - local: X - shadow: 12 - domain: 87
+Node, global: 31 - local: X - shadow: 13 - domain: 88
+Node, global: 32 - local: 18 - shadow: X - domain: 18
+Node, global: 33 - local: 19 - shadow: X - domain: 19
+Node, global: 34 - local: 20 - shadow: X - domain: 20
+Node, global: 35 - local: X - shadow: 14 - domain: 89
+Node, global: 36 - local: X - shadow: 15 - domain: 90
+Node, global: 37 - local: 21 - shadow: X - domain: 21
+Node, global: 38 - local: 22 - shadow: X - domain: 22
+Node, global: 39 - local: 23 - shadow: X - domain: 23
+Node, global: 40 - local: X - shadow: 16 - domain: 91
+Node, global: 41 - local: X - shadow: 17 - domain: 92
+Node, global: 42 - local: 24 - shadow: X - domain: 24
+Node, global: 43 - local: 25 - shadow: X - domain: 25
+Node, global: 44 - local: 26 - shadow: X - domain: 26
+Node, global: 45 - local: X - shadow: 18 - domain: 93
+Node, global: 46 - local: X - shadow: 19 - domain: 94
+Node, global: 47 - local: 27 - shadow: X - domain: 27
+Node, global: 48 - local: 28 - shadow: X - domain: 28
+Node, global: 49 - local: 29 - shadow: X - domain: 29
+Node, global: 50 - local: X - shadow: 20 - domain: 95
+Node, global: 51 - local: X - shadow: 21 - domain: 96
+Node, global: 52 - local: 30 - shadow: X - domain: 30
+Node, global: 53 - local: 31 - shadow: X - domain: 31
+Node, global: 54 - local: 32 - shadow: X - domain: 32
+Node, global: 55 - local: X - shadow: 22 - domain: 97
+Node, global: 56 - local: X - shadow: 23 - domain: 98
+Node, global: 57 - local: 33 - shadow: X - domain: 33
+Node, global: 58 - local: 34 - shadow: X - domain: 34
+Node, global: 59 - local: 35 - shadow: X - domain: 35
+Node, global: 60 - local: X - shadow: 24 - domain: 99
+Node, global: 61 - local: X - shadow: 25 - domain: 100
+Node, global: 62 - local: 36 - shadow: X - domain: 36
+Node, global: 63 - local: 37 - shadow: X - domain: 37
+Node, global: 64 - local: 38 - shadow: X - domain: 38
+Node, global: 65 - local: X - shadow: 26 - domain: 101
+Node, global: 66 - local: X - shadow: 27 - domain: 102
+Node, global: 67 - local: 39 - shadow: X - domain: 39
+Node, global: 68 - local: 40 - shadow: X - domain: 40
+Node, global: 69 - local: 41 - shadow: X - domain: 41
+Node, global: 70 - local: X - shadow: 28 - domain: 103
+Node, global: 71 - local: X - shadow: 29 - domain: 104
+Node, global: 72 - local: 42 - shadow: X - domain: 42
+Node, global: 73 - local: 43 - shadow: X - domain: 43
+Node, global: 74 - local: 44 - shadow: X - domain: 44
+Node, global: 75 - local: X - shadow: 30 - domain: 105
+Node, global: 76 - local: X - shadow: 31 - domain: 106
+Node, global: 77 - local: 45 - shadow: X - domain: 45
+Node, global: 78 - local: 46 - shadow: X - domain: 46
+Node, global: 79 - local: 47 - shadow: X - domain: 47
+Node, global: 80 - local: X - shadow: 32 - domain: 107
+Node, global: 81 - local: X - shadow: 33 - domain: 108
+Node, global: 82 - local: 48 - shadow: X - domain: 48
+Node, global: 83 - local: 49 - shadow: X - domain: 49
+Node, global: 84 - local: 50 - shadow: X - domain: 50
+Node, global: 85 - local: X - shadow: 34 - domain: 109
+Node, global: 86 - local: X - shadow: 35 - domain: 110
+Node, global: 87 - local: 51 - shadow: X - domain: 51
+Node, global: 88 - local: 52 - shadow: X - domain: 52
+Node, global: 89 - local: 53 - shadow: X - domain: 53
+Node, global: 90 - local: X - shadow: 36 - domain: 111
+Node, global: 91 - local: X - shadow: 37 - domain: 112
+Node, global: 92 - local: 54 - shadow: X - domain: 54
+Node, global: 93 - local: 55 - shadow: X - domain: 55
+Node, global: 94 - local: 56 - shadow: X - domain: 56
+Node, global: 95 - local: X - shadow: 38 - domain: 113
+Node, global: 96 - local: X - shadow: 39 - domain: 114
+Node, global: 97 - local: 57 - shadow: X - domain: 57
+Node, global: 98 - local: 58 - shadow: X - domain: 58
+Node, global: 99 - local: 59 - shadow: X - domain: 59
+Node, global: 100 - local: X - shadow: 40 - domain: 115
+Node, global: 101 - local: X - shadow: 41 - domain: 116
+Node, global: 102 - local: 60 - shadow: X - domain: 60
+Node, global: 103 - local: 61 - shadow: X - domain: 61
+Node, global: 104 - local: 62 - shadow: X - domain: 62
+Node, global: 105 - local: X - shadow: 42 - domain: 117
+Node, global: 106 - local: X - shadow: 43 - domain: 118
+Node, global: 107 - local: 63 - shadow: X - domain: 63
+Node, global: 108 - local: 64 - shadow: X - domain: 64
+Node, global: 109 - local: 65 - shadow: X - domain: 65
+Node, global: 110 - local: X - shadow: 44 - domain: 119
+Node, global: 111 - local: X - shadow: 45 - domain: 120
+Node, global: 112 - local: 66 - shadow: X - domain: 66
+Node, global: 113 - local: 67 - shadow: X - domain: 67
+Node, global: 114 - local: 68 - shadow: X - domain: 68
+Node, global: 115 - local: X - shadow: 46 - domain: 121
+Node, global: 116 - local: X - shadow: 47 - domain: 122
+Node, global: 117 - local: 69 - shadow: X - domain: 69
+Node, global: 118 - local: 70 - shadow: X - domain: 70
+Node, global: 119 - local: 71 - shadow: X - domain: 71
+Node, global: 120 - local: X - shadow: 48 - domain: 123
+Node, global: 121 - local: X - shadow: 49 - domain: 124
+Node, global: 122 - local: 72 - shadow: X - domain: 72
+Node, global: 123 - local: 73 - shadow: X - domain: 73
+Node, global: 124 - local: 74 - shadow: X - domain: 74
+
+Node, local: 0 - global: 2
+Node, local: 1 - global: 3
+Node, local: 2 - global: 4
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 9
+Node, local: 6 - global: 12
+Node, local: 7 - global: 13
+Node, local: 8 - global: 14
+Node, local: 9 - global: 17
+Node, local: 10 - global: 18
+Node, local: 11 - global: 19
+Node, local: 12 - global: 22
+Node, local: 13 - global: 23
+Node, local: 14 - global: 24
+Node, local: 15 - global: 27
+Node, local: 16 - global: 28
+Node, local: 17 - global: 29
+Node, local: 18 - global: 32
+Node, local: 19 - global: 33
+Node, local: 20 - global: 34
+Node, local: 21 - global: 37
+Node, local: 22 - global: 38
+Node, local: 23 - global: 39
+Node, local: 24 - global: 42
+Node, local: 25 - global: 43
+Node, local: 26 - global: 44
+Node, local: 27 - global: 47
+Node, local: 28 - global: 48
+Node, local: 29 - global: 49
+Node, local: 30 - global: 52
+Node, local: 31 - global: 53
+Node, local: 32 - global: 54
+Node, local: 33 - global: 57
+Node, local: 34 - global: 58
+Node, local: 35 - global: 59
+Node, local: 36 - global: 62
+Node, local: 37 - global: 63
+Node, local: 38 - global: 64
+Node, local: 39 - global: 67
+Node, local: 40 - global: 68
+Node, local: 41 - global: 69
+Node, local: 42 - global: 72
+Node, local: 43 - global: 73
+Node, local: 44 - global: 74
+Node, local: 45 - global: 77
+Node, local: 46 - global: 78
+Node, local: 47 - global: 79
+Node, local: 48 - global: 82
+Node, local: 49 - global: 83
+Node, local: 50 - global: 84
+Node, local: 51 - global: 87
+Node, local: 52 - global: 88
+Node, local: 53 - global: 89
+Node, local: 54 - global: 92
+Node, local: 55 - global: 93
+Node, local: 56 - global: 94
+Node, local: 57 - global: 97
+Node, local: 58 - global: 98
+Node, local: 59 - global: 99
+Node, local: 60 - global: 102
+Node, local: 61 - global: 103
+Node, local: 62 - global: 104
+Node, local: 63 - global: 107
+Node, local: 64 - global: 108
+Node, local: 65 - global: 109
+Node, local: 66 - global: 112
+Node, local: 67 - global: 113
+Node, local: 68 - global: 114
+Node, local: 69 - global: 117
+Node, local: 70 - global: 118
+Node, local: 71 - global: 119
+Node, local: 72 - global: 122
+Node, local: 73 - global: 123
+Node, local: 74 - global: 124
+
+Node, domain: 0 - global: 2
+Node, domain: 1 - global: 3
+Node, domain: 2 - global: 4
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 12
+Node, domain: 7 - global: 13
+Node, domain: 8 - global: 14
+Node, domain: 9 - global: 17
+Node, domain: 10 - global: 18
+Node, domain: 11 - global: 19
+Node, domain: 12 - global: 22
+Node, domain: 13 - global: 23
+Node, domain: 14 - global: 24
+Node, domain: 15 - global: 27
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 32
+Node, domain: 19 - global: 33
+Node, domain: 20 - global: 34
+Node, domain: 21 - global: 37
+Node, domain: 22 - global: 38
+Node, domain: 23 - global: 39
+Node, domain: 24 - global: 42
+Node, domain: 25 - global: 43
+Node, domain: 26 - global: 44
+Node, domain: 27 - global: 47
+Node, domain: 28 - global: 48
+Node, domain: 29 - global: 49
+Node, domain: 30 - global: 52
+Node, domain: 31 - global: 53
+Node, domain: 32 - global: 54
+Node, domain: 33 - global: 57
+Node, domain: 34 - global: 58
+Node, domain: 35 - global: 59
+Node, domain: 36 - global: 62
+Node, domain: 37 - global: 63
+Node, domain: 38 - global: 64
+Node, domain: 39 - global: 67
+Node, domain: 40 - global: 68
+Node, domain: 41 - global: 69
+Node, domain: 42 - global: 72
+Node, domain: 43 - global: 73
+Node, domain: 44 - global: 74
+Node, domain: 45 - global: 77
+Node, domain: 46 - global: 78
+Node, domain: 47 - global: 79
+Node, domain: 48 - global: 82
+Node, domain: 49 - global: 83
+Node, domain: 50 - global: 84
+Node, domain: 51 - global: 87
+Node, domain: 52 - global: 88
+Node, domain: 53 - global: 89
+Node, domain: 54 - global: 92
+Node, domain: 55 - global: 93
+Node, domain: 56 - global: 94
+Node, domain: 57 - global: 97
+Node, domain: 58 - global: 98
+Node, domain: 59 - global: 99
+Node, domain: 60 - global: 102
+Node, domain: 61 - global: 103
+Node, domain: 62 - global: 104
+Node, domain: 63 - global: 107
+Node, domain: 64 - global: 108
+Node, domain: 65 - global: 109
+Node, domain: 66 - global: 112
+Node, domain: 67 - global: 113
+Node, domain: 68 - global: 114
+Node, domain: 69 - global: 117
+Node, domain: 70 - global: 118
+Node, domain: 71 - global: 119
+Node, domain: 72 - global: 122
+Node, domain: 73 - global: 123
+Node, domain: 74 - global: 124
+Node, domain: 75 - global: 0
+Node, domain: 76 - global: 1
+Node, domain: 77 - global: 5
+Node, domain: 78 - global: 6
+Node, domain: 79 - global: 10
+Node, domain: 80 - global: 11
+Node, domain: 81 - global: 15
+Node, domain: 82 - global: 16
+Node, domain: 83 - global: 20
+Node, domain: 84 - global: 21
+Node, domain: 85 - global: 25
+Node, domain: 86 - global: 26
+Node, domain: 87 - global: 30
+Node, domain: 88 - global: 31
+Node, domain: 89 - global: 35
+Node, domain: 90 - global: 36
+Node, domain: 91 - global: 40
+Node, domain: 92 - global: 41
+Node, domain: 93 - global: 45
+Node, domain: 94 - global: 46
+Node, domain: 95 - global: 50
+Node, domain: 96 - global: 51
+Node, domain: 97 - global: 55
+Node, domain: 98 - global: 56
+Node, domain: 99 - global: 60
+Node, domain: 100 - global: 61
+Node, domain: 101 - global: 65
+Node, domain: 102 - global: 66
+Node, domain: 103 - global: 70
+Node, domain: 104 - global: 71
+Node, domain: 105 - global: 75
+Node, domain: 106 - global: 76
+Node, domain: 107 - global: 80
+Node, domain: 108 - global: 81
+Node, domain: 109 - global: 85
+Node, domain: 110 - global: 86
+Node, domain: 111 - global: 90
+Node, domain: 112 - global: 91
+Node, domain: 113 - global: 95
+Node, domain: 114 - global: 96
+Node, domain: 115 - global: 100
+Node, domain: 116 - global: 101
+Node, domain: 117 - global: 105
+Node, domain: 118 - global: 106
+Node, domain: 119 - global: 110
+Node, domain: 120 - global: 111
+Node, domain: 121 - global: 115
+Node, domain: 122 - global: 116
+Node, domain: 123 - global: 120
+Node, domain: 124 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2 @@
+StGermain Framework revision 3556. Copyright (C) 2003-2005 VPAC.
+Rank 2 not in use.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,148 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8061c78)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 5, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: 2 - shadow: X - domain: 2
+Element, global: 3 - local: X - shadow: 0 - domain: 3
+Element, global: 4 - local: X - shadow: 1 - domain: 4
+Element, global: 5 - local: X - shadow: X - domain: X
+Element, global: 6 - local: X - shadow: X - domain: X
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 2
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 2
+Element, domain: 3 - global: 3
+Element, domain: 4 - global: 4
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: 3 - shadow: X - domain: 3
+Node, global: 4 - local: X - shadow: 0 - domain: 16
+Node, global: 5 - local: X - shadow: 1 - domain: 17
+Node, global: 6 - local: X - shadow: X - domain: X
+Node, global: 7 - local: X - shadow: X - domain: X
+Node, global: 8 - local: X - shadow: X - domain: X
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: 4 - shadow: X - domain: 4
+Node, global: 12 - local: 5 - shadow: X - domain: 5
+Node, global: 13 - local: 6 - shadow: X - domain: 6
+Node, global: 14 - local: 7 - shadow: X - domain: 7
+Node, global: 15 - local: X - shadow: 2 - domain: 18
+Node, global: 16 - local: X - shadow: 3 - domain: 19
+Node, global: 17 - local: X - shadow: X - domain: X
+Node, global: 18 - local: X - shadow: X - domain: X
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: 8 - shadow: X - domain: 8
+Node, global: 23 - local: 9 - shadow: X - domain: 9
+Node, global: 24 - local: 10 - shadow: X - domain: 10
+Node, global: 25 - local: 11 - shadow: X - domain: 11
+Node, global: 26 - local: X - shadow: 4 - domain: 20
+Node, global: 27 - local: X - shadow: 5 - domain: 21
+Node, global: 28 - local: X - shadow: X - domain: X
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: X - domain: X
+Node, global: 32 - local: X - shadow: X - domain: X
+Node, global: 33 - local: 12 - shadow: X - domain: 12
+Node, global: 34 - local: 13 - shadow: X - domain: 13
+Node, global: 35 - local: 14 - shadow: X - domain: 14
+Node, global: 36 - local: 15 - shadow: X - domain: 15
+Node, global: 37 - local: X - shadow: 6 - domain: 22
+Node, global: 38 - local: X - shadow: 7 - domain: 23
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: X - domain: X
+Node, global: 42 - local: X - shadow: X - domain: X
+Node, global: 43 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 3
+Node, local: 4 - global: 11
+Node, local: 5 - global: 12
+Node, local: 6 - global: 13
+Node, local: 7 - global: 14
+Node, local: 8 - global: 22
+Node, local: 9 - global: 23
+Node, local: 10 - global: 24
+Node, local: 11 - global: 25
+Node, local: 12 - global: 33
+Node, local: 13 - global: 34
+Node, local: 14 - global: 35
+Node, local: 15 - global: 36
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 3
+Node, domain: 4 - global: 11
+Node, domain: 5 - global: 12
+Node, domain: 6 - global: 13
+Node, domain: 7 - global: 14
+Node, domain: 8 - global: 22
+Node, domain: 9 - global: 23
+Node, domain: 10 - global: 24
+Node, domain: 11 - global: 25
+Node, domain: 12 - global: 33
+Node, domain: 13 - global: 34
+Node, domain: 14 - global: 35
+Node, domain: 15 - global: 36
+Node, domain: 16 - global: 4
+Node, domain: 17 - global: 5
+Node, domain: 18 - global: 15
+Node, domain: 19 - global: 16
+Node, domain: 20 - global: 26
+Node, domain: 21 - global: 27
+Node, domain: 22 - global: 37
+Node, domain: 23 - global: 38
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,158 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060df0)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 7, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: 0 - domain: 3
+Element, global: 2 - local: X - shadow: 1 - domain: 4
+Element, global: 3 - local: 0 - shadow: X - domain: 0
+Element, global: 4 - local: 1 - shadow: X - domain: 1
+Element, global: 5 - local: 2 - shadow: X - domain: 2
+Element, global: 6 - local: X - shadow: 2 - domain: 5
+Element, global: 7 - local: X - shadow: 3 - domain: 6
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 3
+Element, local: 1 - global: 4
+Element, local: 2 - global: 5
+
+Element, domain: 0 - global: 3
+Element, domain: 1 - global: 4
+Element, domain: 2 - global: 5
+Element, domain: 3 - global: 1
+Element, domain: 4 - global: 2
+Element, domain: 5 - global: 6
+Element, domain: 6 - global: 7
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: 0 - domain: 16
+Node, global: 2 - local: X - shadow: 1 - domain: 17
+Node, global: 3 - local: 0 - shadow: X - domain: 0
+Node, global: 4 - local: 1 - shadow: X - domain: 1
+Node, global: 5 - local: 2 - shadow: X - domain: 2
+Node, global: 6 - local: 3 - shadow: X - domain: 3
+Node, global: 7 - local: X - shadow: 2 - domain: 18
+Node, global: 8 - local: X - shadow: 3 - domain: 19
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: 4 - domain: 20
+Node, global: 13 - local: X - shadow: 5 - domain: 21
+Node, global: 14 - local: 4 - shadow: X - domain: 4
+Node, global: 15 - local: 5 - shadow: X - domain: 5
+Node, global: 16 - local: 6 - shadow: X - domain: 6
+Node, global: 17 - local: 7 - shadow: X - domain: 7
+Node, global: 18 - local: X - shadow: 6 - domain: 22
+Node, global: 19 - local: X - shadow: 7 - domain: 23
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: 8 - domain: 24
+Node, global: 24 - local: X - shadow: 9 - domain: 25
+Node, global: 25 - local: 8 - shadow: X - domain: 8
+Node, global: 26 - local: 9 - shadow: X - domain: 9
+Node, global: 27 - local: 10 - shadow: X - domain: 10
+Node, global: 28 - local: 11 - shadow: X - domain: 11
+Node, global: 29 - local: X - shadow: 10 - domain: 26
+Node, global: 30 - local: X - shadow: 11 - domain: 27
+Node, global: 31 - local: X - shadow: X - domain: X
+Node, global: 32 - local: X - shadow: X - domain: X
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: 12 - domain: 28
+Node, global: 35 - local: X - shadow: 13 - domain: 29
+Node, global: 36 - local: 12 - shadow: X - domain: 12
+Node, global: 37 - local: 13 - shadow: X - domain: 13
+Node, global: 38 - local: 14 - shadow: X - domain: 14
+Node, global: 39 - local: 15 - shadow: X - domain: 15
+Node, global: 40 - local: X - shadow: 14 - domain: 30
+Node, global: 41 - local: X - shadow: 15 - domain: 31
+Node, global: 42 - local: X - shadow: X - domain: X
+Node, global: 43 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 3
+Node, local: 1 - global: 4
+Node, local: 2 - global: 5
+Node, local: 3 - global: 6
+Node, local: 4 - global: 14
+Node, local: 5 - global: 15
+Node, local: 6 - global: 16
+Node, local: 7 - global: 17
+Node, local: 8 - global: 25
+Node, local: 9 - global: 26
+Node, local: 10 - global: 27
+Node, local: 11 - global: 28
+Node, local: 12 - global: 36
+Node, local: 13 - global: 37
+Node, local: 14 - global: 38
+Node, local: 15 - global: 39
+
+Node, domain: 0 - global: 3
+Node, domain: 1 - global: 4
+Node, domain: 2 - global: 5
+Node, domain: 3 - global: 6
+Node, domain: 4 - global: 14
+Node, domain: 5 - global: 15
+Node, domain: 6 - global: 16
+Node, domain: 7 - global: 17
+Node, domain: 8 - global: 25
+Node, domain: 9 - global: 26
+Node, domain: 10 - global: 27
+Node, domain: 11 - global: 28
+Node, domain: 12 - global: 36
+Node, domain: 13 - global: 37
+Node, domain: 14 - global: 38
+Node, domain: 15 - global: 39
+Node, domain: 16 - global: 1
+Node, domain: 17 - global: 2
+Node, domain: 18 - global: 7
+Node, domain: 19 - global: 8
+Node, domain: 20 - global: 12
+Node, domain: 21 - global: 13
+Node, domain: 22 - global: 18
+Node, domain: 23 - global: 19
+Node, domain: 24 - global: 23
+Node, domain: 25 - global: 24
+Node, domain: 26 - global: 29
+Node, domain: 27 - global: 30
+Node, domain: 28 - global: 34
+Node, domain: 29 - global: 35
+Node, domain: 30 - global: 40
+Node, domain: 31 - global: 41
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,148 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 2 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060df0)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 6, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: 0 - domain: 2
+Element, global: 5 - local: X - shadow: 1 - domain: 3
+Element, global: 6 - local: 0 - shadow: X - domain: 0
+Element, global: 7 - local: 1 - shadow: X - domain: 1
+Element, global: 8 - local: X - shadow: 2 - domain: 4
+Element, global: 9 - local: X - shadow: 3 - domain: 5
+
+Element, local: 0 - global: 6
+Element, local: 1 - global: 7
+
+Element, domain: 0 - global: 6
+Element, domain: 1 - global: 7
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: 0 - domain: 12
+Node, global: 5 - local: X - shadow: 1 - domain: 13
+Node, global: 6 - local: 0 - shadow: X - domain: 0
+Node, global: 7 - local: 1 - shadow: X - domain: 1
+Node, global: 8 - local: 2 - shadow: X - domain: 2
+Node, global: 9 - local: X - shadow: 2 - domain: 14
+Node, global: 10 - local: X - shadow: 3 - domain: 15
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: X - domain: X
+Node, global: 13 - local: X - shadow: X - domain: X
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: 4 - domain: 16
+Node, global: 16 - local: X - shadow: 5 - domain: 17
+Node, global: 17 - local: 3 - shadow: X - domain: 3
+Node, global: 18 - local: 4 - shadow: X - domain: 4
+Node, global: 19 - local: 5 - shadow: X - domain: 5
+Node, global: 20 - local: X - shadow: 6 - domain: 18
+Node, global: 21 - local: X - shadow: 7 - domain: 19
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: 8 - domain: 20
+Node, global: 27 - local: X - shadow: 9 - domain: 21
+Node, global: 28 - local: 6 - shadow: X - domain: 6
+Node, global: 29 - local: 7 - shadow: X - domain: 7
+Node, global: 30 - local: 8 - shadow: X - domain: 8
+Node, global: 31 - local: X - shadow: 10 - domain: 22
+Node, global: 32 - local: X - shadow: 11 - domain: 23
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: X - domain: X
+Node, global: 37 - local: X - shadow: 12 - domain: 24
+Node, global: 38 - local: X - shadow: 13 - domain: 25
+Node, global: 39 - local: 9 - shadow: X - domain: 9
+Node, global: 40 - local: 10 - shadow: X - domain: 10
+Node, global: 41 - local: 11 - shadow: X - domain: 11
+Node, global: 42 - local: X - shadow: 14 - domain: 26
+Node, global: 43 - local: X - shadow: 15 - domain: 27
+
+Node, local: 0 - global: 6
+Node, local: 1 - global: 7
+Node, local: 2 - global: 8
+Node, local: 3 - global: 17
+Node, local: 4 - global: 18
+Node, local: 5 - global: 19
+Node, local: 6 - global: 28
+Node, local: 7 - global: 29
+Node, local: 8 - global: 30
+Node, local: 9 - global: 39
+Node, local: 10 - global: 40
+Node, local: 11 - global: 41
+
+Node, domain: 0 - global: 6
+Node, domain: 1 - global: 7
+Node, domain: 2 - global: 8
+Node, domain: 3 - global: 17
+Node, domain: 4 - global: 18
+Node, domain: 5 - global: 19
+Node, domain: 6 - global: 28
+Node, domain: 7 - global: 29
+Node, domain: 8 - global: 30
+Node, domain: 9 - global: 39
+Node, domain: 10 - global: 40
+Node, domain: 11 - global: 41
+Node, domain: 12 - global: 4
+Node, domain: 13 - global: 5
+Node, domain: 14 - global: 9
+Node, domain: 15 - global: 10
+Node, domain: 16 - global: 15
+Node, domain: 17 - global: 16
+Node, domain: 18 - global: 20
+Node, domain: 19 - global: 21
+Node, domain: 20 - global: 26
+Node, domain: 21 - global: 27
+Node, domain: 22 - global: 31
+Node, domain: 23 - global: 32
+Node, domain: 24 - global: 37
+Node, domain: 25 - global: 38
+Node, domain: 26 - global: 42
+Node, domain: 27 - global: 43
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,138 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 3 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 2
+procTopology:
+	IJKTopology (ptr): (0x8060df0)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 4, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: X - domain: X
+Element, global: 6 - local: X - shadow: 0 - domain: 2
+Element, global: 7 - local: X - shadow: 1 - domain: 3
+Element, global: 8 - local: 0 - shadow: X - domain: 0
+Element, global: 9 - local: 1 - shadow: X - domain: 1
+
+Element, local: 0 - global: 8
+Element, local: 1 - global: 9
+
+Element, domain: 0 - global: 8
+Element, domain: 1 - global: 9
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: 0 - domain: 12
+Node, global: 7 - local: X - shadow: 1 - domain: 13
+Node, global: 8 - local: 0 - shadow: X - domain: 0
+Node, global: 9 - local: 1 - shadow: X - domain: 1
+Node, global: 10 - local: 2 - shadow: X - domain: 2
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: X - domain: X
+Node, global: 13 - local: X - shadow: X - domain: X
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: X - domain: X
+Node, global: 17 - local: X - shadow: 2 - domain: 14
+Node, global: 18 - local: X - shadow: 3 - domain: 15
+Node, global: 19 - local: 3 - shadow: X - domain: 3
+Node, global: 20 - local: 4 - shadow: X - domain: 4
+Node, global: 21 - local: 5 - shadow: X - domain: 5
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: X - domain: X
+Node, global: 27 - local: X - shadow: X - domain: X
+Node, global: 28 - local: X - shadow: 4 - domain: 16
+Node, global: 29 - local: X - shadow: 5 - domain: 17
+Node, global: 30 - local: 6 - shadow: X - domain: 6
+Node, global: 31 - local: 7 - shadow: X - domain: 7
+Node, global: 32 - local: 8 - shadow: X - domain: 8
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: X - domain: X
+Node, global: 37 - local: X - shadow: X - domain: X
+Node, global: 38 - local: X - shadow: X - domain: X
+Node, global: 39 - local: X - shadow: 6 - domain: 18
+Node, global: 40 - local: X - shadow: 7 - domain: 19
+Node, global: 41 - local: 9 - shadow: X - domain: 9
+Node, global: 42 - local: 10 - shadow: X - domain: 10
+Node, global: 43 - local: 11 - shadow: X - domain: 11
+
+Node, local: 0 - global: 8
+Node, local: 1 - global: 9
+Node, local: 2 - global: 10
+Node, local: 3 - global: 19
+Node, local: 4 - global: 20
+Node, local: 5 - global: 21
+Node, local: 6 - global: 30
+Node, local: 7 - global: 31
+Node, local: 8 - global: 32
+Node, local: 9 - global: 41
+Node, local: 10 - global: 42
+Node, local: 11 - global: 43
+
+Node, domain: 0 - global: 8
+Node, domain: 1 - global: 9
+Node, domain: 2 - global: 10
+Node, domain: 3 - global: 19
+Node, domain: 4 - global: 20
+Node, domain: 5 - global: 21
+Node, domain: 6 - global: 30
+Node, domain: 7 - global: 31
+Node, domain: 8 - global: 32
+Node, domain: 9 - global: 41
+Node, domain: 10 - global: 42
+Node, domain: 11 - global: 43
+Node, domain: 12 - global: 6
+Node, domain: 13 - global: 7
+Node, domain: 14 - global: 17
+Node, domain: 15 - global: 18
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 39
+Node, domain: 19 - global: 40
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2 --shadowDepth=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,143 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8061c70)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 4, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: 2 - shadow: X - domain: 2
+Element, global: 3 - local: X - shadow: 0 - domain: 3
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: X - domain: X
+Element, global: 6 - local: X - shadow: X - domain: X
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 2
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 2
+Element, domain: 3 - global: 3
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: 3 - shadow: X - domain: 3
+Node, global: 4 - local: X - shadow: 0 - domain: 16
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: X - domain: X
+Node, global: 7 - local: X - shadow: X - domain: X
+Node, global: 8 - local: X - shadow: X - domain: X
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: 4 - shadow: X - domain: 4
+Node, global: 12 - local: 5 - shadow: X - domain: 5
+Node, global: 13 - local: 6 - shadow: X - domain: 6
+Node, global: 14 - local: 7 - shadow: X - domain: 7
+Node, global: 15 - local: X - shadow: 1 - domain: 17
+Node, global: 16 - local: X - shadow: X - domain: X
+Node, global: 17 - local: X - shadow: X - domain: X
+Node, global: 18 - local: X - shadow: X - domain: X
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: 8 - shadow: X - domain: 8
+Node, global: 23 - local: 9 - shadow: X - domain: 9
+Node, global: 24 - local: 10 - shadow: X - domain: 10
+Node, global: 25 - local: 11 - shadow: X - domain: 11
+Node, global: 26 - local: X - shadow: 2 - domain: 18
+Node, global: 27 - local: X - shadow: X - domain: X
+Node, global: 28 - local: X - shadow: X - domain: X
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: X - domain: X
+Node, global: 32 - local: X - shadow: X - domain: X
+Node, global: 33 - local: 12 - shadow: X - domain: 12
+Node, global: 34 - local: 13 - shadow: X - domain: 13
+Node, global: 35 - local: 14 - shadow: X - domain: 14
+Node, global: 36 - local: 15 - shadow: X - domain: 15
+Node, global: 37 - local: X - shadow: 3 - domain: 19
+Node, global: 38 - local: X - shadow: X - domain: X
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: X - domain: X
+Node, global: 42 - local: X - shadow: X - domain: X
+Node, global: 43 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 3
+Node, local: 4 - global: 11
+Node, local: 5 - global: 12
+Node, local: 6 - global: 13
+Node, local: 7 - global: 14
+Node, local: 8 - global: 22
+Node, local: 9 - global: 23
+Node, local: 10 - global: 24
+Node, local: 11 - global: 25
+Node, local: 12 - global: 33
+Node, local: 13 - global: 34
+Node, local: 14 - global: 35
+Node, local: 15 - global: 36
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 3
+Node, domain: 4 - global: 11
+Node, domain: 5 - global: 12
+Node, domain: 6 - global: 13
+Node, domain: 7 - global: 14
+Node, domain: 8 - global: 22
+Node, domain: 9 - global: 23
+Node, domain: 10 - global: 24
+Node, domain: 11 - global: 25
+Node, domain: 12 - global: 33
+Node, domain: 13 - global: 34
+Node, domain: 14 - global: 35
+Node, domain: 15 - global: 36
+Node, domain: 16 - global: 4
+Node, domain: 17 - global: 15
+Node, domain: 18 - global: 26
+Node, domain: 19 - global: 37
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,148 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060da8)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 5, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: 0 - domain: 3
+Element, global: 3 - local: 0 - shadow: X - domain: 0
+Element, global: 4 - local: 1 - shadow: X - domain: 1
+Element, global: 5 - local: 2 - shadow: X - domain: 2
+Element, global: 6 - local: X - shadow: 1 - domain: 4
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 3
+Element, local: 1 - global: 4
+Element, local: 2 - global: 5
+
+Element, domain: 0 - global: 3
+Element, domain: 1 - global: 4
+Element, domain: 2 - global: 5
+Element, domain: 3 - global: 2
+Element, domain: 4 - global: 6
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: 0 - domain: 16
+Node, global: 3 - local: 0 - shadow: X - domain: 0
+Node, global: 4 - local: 1 - shadow: X - domain: 1
+Node, global: 5 - local: 2 - shadow: X - domain: 2
+Node, global: 6 - local: 3 - shadow: X - domain: 3
+Node, global: 7 - local: X - shadow: 1 - domain: 17
+Node, global: 8 - local: X - shadow: X - domain: X
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: X - domain: X
+Node, global: 13 - local: X - shadow: 2 - domain: 18
+Node, global: 14 - local: 4 - shadow: X - domain: 4
+Node, global: 15 - local: 5 - shadow: X - domain: 5
+Node, global: 16 - local: 6 - shadow: X - domain: 6
+Node, global: 17 - local: 7 - shadow: X - domain: 7
+Node, global: 18 - local: X - shadow: 3 - domain: 19
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: 4 - domain: 20
+Node, global: 25 - local: 8 - shadow: X - domain: 8
+Node, global: 26 - local: 9 - shadow: X - domain: 9
+Node, global: 27 - local: 10 - shadow: X - domain: 10
+Node, global: 28 - local: 11 - shadow: X - domain: 11
+Node, global: 29 - local: X - shadow: 5 - domain: 21
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: X - domain: X
+Node, global: 32 - local: X - shadow: X - domain: X
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: X - shadow: 6 - domain: 22
+Node, global: 36 - local: 12 - shadow: X - domain: 12
+Node, global: 37 - local: 13 - shadow: X - domain: 13
+Node, global: 38 - local: 14 - shadow: X - domain: 14
+Node, global: 39 - local: 15 - shadow: X - domain: 15
+Node, global: 40 - local: X - shadow: 7 - domain: 23
+Node, global: 41 - local: X - shadow: X - domain: X
+Node, global: 42 - local: X - shadow: X - domain: X
+Node, global: 43 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 3
+Node, local: 1 - global: 4
+Node, local: 2 - global: 5
+Node, local: 3 - global: 6
+Node, local: 4 - global: 14
+Node, local: 5 - global: 15
+Node, local: 6 - global: 16
+Node, local: 7 - global: 17
+Node, local: 8 - global: 25
+Node, local: 9 - global: 26
+Node, local: 10 - global: 27
+Node, local: 11 - global: 28
+Node, local: 12 - global: 36
+Node, local: 13 - global: 37
+Node, local: 14 - global: 38
+Node, local: 15 - global: 39
+
+Node, domain: 0 - global: 3
+Node, domain: 1 - global: 4
+Node, domain: 2 - global: 5
+Node, domain: 3 - global: 6
+Node, domain: 4 - global: 14
+Node, domain: 5 - global: 15
+Node, domain: 6 - global: 16
+Node, domain: 7 - global: 17
+Node, domain: 8 - global: 25
+Node, domain: 9 - global: 26
+Node, domain: 10 - global: 27
+Node, domain: 11 - global: 28
+Node, domain: 12 - global: 36
+Node, domain: 13 - global: 37
+Node, domain: 14 - global: 38
+Node, domain: 15 - global: 39
+Node, domain: 16 - global: 2
+Node, domain: 17 - global: 7
+Node, domain: 18 - global: 13
+Node, domain: 19 - global: 18
+Node, domain: 20 - global: 24
+Node, domain: 21 - global: 29
+Node, domain: 22 - global: 35
+Node, domain: 23 - global: 40
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,138 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 2 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060da8)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 4, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: 0 - domain: 2
+Element, global: 6 - local: 0 - shadow: X - domain: 0
+Element, global: 7 - local: 1 - shadow: X - domain: 1
+Element, global: 8 - local: X - shadow: 1 - domain: 3
+Element, global: 9 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 6
+Element, local: 1 - global: 7
+
+Element, domain: 0 - global: 6
+Element, domain: 1 - global: 7
+Element, domain: 2 - global: 5
+Element, domain: 3 - global: 8
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: X - shadow: 0 - domain: 12
+Node, global: 6 - local: 0 - shadow: X - domain: 0
+Node, global: 7 - local: 1 - shadow: X - domain: 1
+Node, global: 8 - local: 2 - shadow: X - domain: 2
+Node, global: 9 - local: X - shadow: 1 - domain: 13
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: X - domain: X
+Node, global: 13 - local: X - shadow: X - domain: X
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: 2 - domain: 14
+Node, global: 17 - local: 3 - shadow: X - domain: 3
+Node, global: 18 - local: 4 - shadow: X - domain: 4
+Node, global: 19 - local: 5 - shadow: X - domain: 5
+Node, global: 20 - local: X - shadow: 3 - domain: 15
+Node, global: 21 - local: X - shadow: X - domain: X
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: X - domain: X
+Node, global: 27 - local: X - shadow: 4 - domain: 16
+Node, global: 28 - local: 6 - shadow: X - domain: 6
+Node, global: 29 - local: 7 - shadow: X - domain: 7
+Node, global: 30 - local: 8 - shadow: X - domain: 8
+Node, global: 31 - local: X - shadow: 5 - domain: 17
+Node, global: 32 - local: X - shadow: X - domain: X
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: X - domain: X
+Node, global: 37 - local: X - shadow: X - domain: X
+Node, global: 38 - local: X - shadow: 6 - domain: 18
+Node, global: 39 - local: 9 - shadow: X - domain: 9
+Node, global: 40 - local: 10 - shadow: X - domain: 10
+Node, global: 41 - local: 11 - shadow: X - domain: 11
+Node, global: 42 - local: X - shadow: 7 - domain: 19
+Node, global: 43 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 6
+Node, local: 1 - global: 7
+Node, local: 2 - global: 8
+Node, local: 3 - global: 17
+Node, local: 4 - global: 18
+Node, local: 5 - global: 19
+Node, local: 6 - global: 28
+Node, local: 7 - global: 29
+Node, local: 8 - global: 30
+Node, local: 9 - global: 39
+Node, local: 10 - global: 40
+Node, local: 11 - global: 41
+
+Node, domain: 0 - global: 6
+Node, domain: 1 - global: 7
+Node, domain: 2 - global: 8
+Node, domain: 3 - global: 17
+Node, domain: 4 - global: 18
+Node, domain: 5 - global: 19
+Node, domain: 6 - global: 28
+Node, domain: 7 - global: 29
+Node, domain: 8 - global: 30
+Node, domain: 9 - global: 39
+Node, domain: 10 - global: 40
+Node, domain: 11 - global: 41
+Node, domain: 12 - global: 5
+Node, domain: 13 - global: 9
+Node, domain: 14 - global: 16
+Node, domain: 15 - global: 20
+Node, domain: 16 - global: 27
+Node, domain: 17 - global: 31
+Node, domain: 18 - global: 38
+Node, domain: 19 - global: 42
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,133 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 3 of 4 in use (4 total).
+allowUnusedCPUs: False
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: True
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060da8)
+		size : (4,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 10, 1, 1 }
+elementGlobalCount: 10
+	elementLocalCounts[0]: { 3, 1, 1 }
+	elementLocalCounts[1]: { 3, 1, 1 }
+	elementLocalCounts[2]: { 2, 1, 1 }
+	elementLocalCounts[3]: { 2, 1, 1 }
+elementDomainCounts: { 3, 1, 1 }
+nodeGlobalCounts: { 11, 2, 2 }
+nodeGlobalCount: 44
+	nodeLocalCounts[0]: { 4, 2, 2 }
+	nodeLocalCounts[1]: { 4, 2, 2 }
+	nodeLocalCounts[2]: { 3, 2, 2 }
+	nodeLocalCounts[3]: { 3, 2, 2 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: X - domain: X
+Element, global: 2 - local: X - shadow: X - domain: X
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: X - domain: X
+Element, global: 6 - local: X - shadow: X - domain: X
+Element, global: 7 - local: X - shadow: 0 - domain: 2
+Element, global: 8 - local: 0 - shadow: X - domain: 0
+Element, global: 9 - local: 1 - shadow: X - domain: 1
+
+Element, local: 0 - global: 8
+Element, local: 1 - global: 9
+
+Element, domain: 0 - global: 8
+Element, domain: 1 - global: 9
+Element, domain: 2 - global: 7
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: X - domain: X
+Node, global: 2 - local: X - shadow: X - domain: X
+Node, global: 3 - local: X - shadow: X - domain: X
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: X - domain: X
+Node, global: 7 - local: X - shadow: 0 - domain: 12
+Node, global: 8 - local: 0 - shadow: X - domain: 0
+Node, global: 9 - local: 1 - shadow: X - domain: 1
+Node, global: 10 - local: 2 - shadow: X - domain: 2
+Node, global: 11 - local: X - shadow: X - domain: X
+Node, global: 12 - local: X - shadow: X - domain: X
+Node, global: 13 - local: X - shadow: X - domain: X
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: X - domain: X
+Node, global: 17 - local: X - shadow: X - domain: X
+Node, global: 18 - local: X - shadow: 1 - domain: 13
+Node, global: 19 - local: 3 - shadow: X - domain: 3
+Node, global: 20 - local: 4 - shadow: X - domain: 4
+Node, global: 21 - local: 5 - shadow: X - domain: 5
+Node, global: 22 - local: X - shadow: X - domain: X
+Node, global: 23 - local: X - shadow: X - domain: X
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: X - domain: X
+Node, global: 27 - local: X - shadow: X - domain: X
+Node, global: 28 - local: X - shadow: X - domain: X
+Node, global: 29 - local: X - shadow: 2 - domain: 14
+Node, global: 30 - local: 6 - shadow: X - domain: 6
+Node, global: 31 - local: 7 - shadow: X - domain: 7
+Node, global: 32 - local: 8 - shadow: X - domain: 8
+Node, global: 33 - local: X - shadow: X - domain: X
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: X - domain: X
+Node, global: 37 - local: X - shadow: X - domain: X
+Node, global: 38 - local: X - shadow: X - domain: X
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: X - shadow: 3 - domain: 15
+Node, global: 41 - local: 9 - shadow: X - domain: 9
+Node, global: 42 - local: 10 - shadow: X - domain: 10
+Node, global: 43 - local: 11 - shadow: X - domain: 11
+
+Node, local: 0 - global: 8
+Node, local: 1 - global: 9
+Node, local: 2 - global: 10
+Node, local: 3 - global: 19
+Node, local: 4 - global: 20
+Node, local: 5 - global: 21
+Node, local: 6 - global: 30
+Node, local: 7 - global: 31
+Node, local: 8 - global: 32
+Node, local: 9 - global: 41
+Node, local: 10 - global: 42
+Node, local: 11 - global: 43
+
+Node, domain: 0 - global: 8
+Node, domain: 1 - global: 9
+Node, domain: 2 - global: 10
+Node, domain: 3 - global: 19
+Node, domain: 4 - global: 20
+Node, domain: 5 - global: 21
+Node, domain: 6 - global: 30
+Node, domain: 7 - global: 31
+Node, domain: 8 - global: 32
+Node, domain: 9 - global: 41
+Node, domain: 10 - global: 42
+Node, domain: 11 - global: 43
+Node, domain: 12 - global: 7
+Node, domain: 13 - global: 18
+Node, domain: 14 - global: 29
+Node, domain: 15 - global: 40
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 10 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD --allowUnusedCPUs=False --allowUnbalancing=True --meshSizeI=11 --meshSizeJ=2 --meshSizeK=2" "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,607 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 1 in use (1 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x80610c8)
+		size : (1,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { False, False, False }
+partitionCounts: { 1, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 4, 4, 4 }
+elementDomainCounts: { 4, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 5, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: 2 - shadow: X - domain: 2
+Element, global: 3 - local: 3 - shadow: X - domain: 3
+Element, global: 4 - local: 4 - shadow: X - domain: 4
+Element, global: 5 - local: 5 - shadow: X - domain: 5
+Element, global: 6 - local: 6 - shadow: X - domain: 6
+Element, global: 7 - local: 7 - shadow: X - domain: 7
+Element, global: 8 - local: 8 - shadow: X - domain: 8
+Element, global: 9 - local: 9 - shadow: X - domain: 9
+Element, global: 10 - local: 10 - shadow: X - domain: 10
+Element, global: 11 - local: 11 - shadow: X - domain: 11
+Element, global: 12 - local: 12 - shadow: X - domain: 12
+Element, global: 13 - local: 13 - shadow: X - domain: 13
+Element, global: 14 - local: 14 - shadow: X - domain: 14
+Element, global: 15 - local: 15 - shadow: X - domain: 15
+Element, global: 16 - local: 16 - shadow: X - domain: 16
+Element, global: 17 - local: 17 - shadow: X - domain: 17
+Element, global: 18 - local: 18 - shadow: X - domain: 18
+Element, global: 19 - local: 19 - shadow: X - domain: 19
+Element, global: 20 - local: 20 - shadow: X - domain: 20
+Element, global: 21 - local: 21 - shadow: X - domain: 21
+Element, global: 22 - local: 22 - shadow: X - domain: 22
+Element, global: 23 - local: 23 - shadow: X - domain: 23
+Element, global: 24 - local: 24 - shadow: X - domain: 24
+Element, global: 25 - local: 25 - shadow: X - domain: 25
+Element, global: 26 - local: 26 - shadow: X - domain: 26
+Element, global: 27 - local: 27 - shadow: X - domain: 27
+Element, global: 28 - local: 28 - shadow: X - domain: 28
+Element, global: 29 - local: 29 - shadow: X - domain: 29
+Element, global: 30 - local: 30 - shadow: X - domain: 30
+Element, global: 31 - local: 31 - shadow: X - domain: 31
+Element, global: 32 - local: 32 - shadow: X - domain: 32
+Element, global: 33 - local: 33 - shadow: X - domain: 33
+Element, global: 34 - local: 34 - shadow: X - domain: 34
+Element, global: 35 - local: 35 - shadow: X - domain: 35
+Element, global: 36 - local: 36 - shadow: X - domain: 36
+Element, global: 37 - local: 37 - shadow: X - domain: 37
+Element, global: 38 - local: 38 - shadow: X - domain: 38
+Element, global: 39 - local: 39 - shadow: X - domain: 39
+Element, global: 40 - local: 40 - shadow: X - domain: 40
+Element, global: 41 - local: 41 - shadow: X - domain: 41
+Element, global: 42 - local: 42 - shadow: X - domain: 42
+Element, global: 43 - local: 43 - shadow: X - domain: 43
+Element, global: 44 - local: 44 - shadow: X - domain: 44
+Element, global: 45 - local: 45 - shadow: X - domain: 45
+Element, global: 46 - local: 46 - shadow: X - domain: 46
+Element, global: 47 - local: 47 - shadow: X - domain: 47
+Element, global: 48 - local: 48 - shadow: X - domain: 48
+Element, global: 49 - local: 49 - shadow: X - domain: 49
+Element, global: 50 - local: 50 - shadow: X - domain: 50
+Element, global: 51 - local: 51 - shadow: X - domain: 51
+Element, global: 52 - local: 52 - shadow: X - domain: 52
+Element, global: 53 - local: 53 - shadow: X - domain: 53
+Element, global: 54 - local: 54 - shadow: X - domain: 54
+Element, global: 55 - local: 55 - shadow: X - domain: 55
+Element, global: 56 - local: 56 - shadow: X - domain: 56
+Element, global: 57 - local: 57 - shadow: X - domain: 57
+Element, global: 58 - local: 58 - shadow: X - domain: 58
+Element, global: 59 - local: 59 - shadow: X - domain: 59
+Element, global: 60 - local: 60 - shadow: X - domain: 60
+Element, global: 61 - local: 61 - shadow: X - domain: 61
+Element, global: 62 - local: 62 - shadow: X - domain: 62
+Element, global: 63 - local: 63 - shadow: X - domain: 63
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 2
+Element, local: 3 - global: 3
+Element, local: 4 - global: 4
+Element, local: 5 - global: 5
+Element, local: 6 - global: 6
+Element, local: 7 - global: 7
+Element, local: 8 - global: 8
+Element, local: 9 - global: 9
+Element, local: 10 - global: 10
+Element, local: 11 - global: 11
+Element, local: 12 - global: 12
+Element, local: 13 - global: 13
+Element, local: 14 - global: 14
+Element, local: 15 - global: 15
+Element, local: 16 - global: 16
+Element, local: 17 - global: 17
+Element, local: 18 - global: 18
+Element, local: 19 - global: 19
+Element, local: 20 - global: 20
+Element, local: 21 - global: 21
+Element, local: 22 - global: 22
+Element, local: 23 - global: 23
+Element, local: 24 - global: 24
+Element, local: 25 - global: 25
+Element, local: 26 - global: 26
+Element, local: 27 - global: 27
+Element, local: 28 - global: 28
+Element, local: 29 - global: 29
+Element, local: 30 - global: 30
+Element, local: 31 - global: 31
+Element, local: 32 - global: 32
+Element, local: 33 - global: 33
+Element, local: 34 - global: 34
+Element, local: 35 - global: 35
+Element, local: 36 - global: 36
+Element, local: 37 - global: 37
+Element, local: 38 - global: 38
+Element, local: 39 - global: 39
+Element, local: 40 - global: 40
+Element, local: 41 - global: 41
+Element, local: 42 - global: 42
+Element, local: 43 - global: 43
+Element, local: 44 - global: 44
+Element, local: 45 - global: 45
+Element, local: 46 - global: 46
+Element, local: 47 - global: 47
+Element, local: 48 - global: 48
+Element, local: 49 - global: 49
+Element, local: 50 - global: 50
+Element, local: 51 - global: 51
+Element, local: 52 - global: 52
+Element, local: 53 - global: 53
+Element, local: 54 - global: 54
+Element, local: 55 - global: 55
+Element, local: 56 - global: 56
+Element, local: 57 - global: 57
+Element, local: 58 - global: 58
+Element, local: 59 - global: 59
+Element, local: 60 - global: 60
+Element, local: 61 - global: 61
+Element, local: 62 - global: 62
+Element, local: 63 - global: 63
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 2
+Element, domain: 3 - global: 3
+Element, domain: 4 - global: 4
+Element, domain: 5 - global: 5
+Element, domain: 6 - global: 6
+Element, domain: 7 - global: 7
+Element, domain: 8 - global: 8
+Element, domain: 9 - global: 9
+Element, domain: 10 - global: 10
+Element, domain: 11 - global: 11
+Element, domain: 12 - global: 12
+Element, domain: 13 - global: 13
+Element, domain: 14 - global: 14
+Element, domain: 15 - global: 15
+Element, domain: 16 - global: 16
+Element, domain: 17 - global: 17
+Element, domain: 18 - global: 18
+Element, domain: 19 - global: 19
+Element, domain: 20 - global: 20
+Element, domain: 21 - global: 21
+Element, domain: 22 - global: 22
+Element, domain: 23 - global: 23
+Element, domain: 24 - global: 24
+Element, domain: 25 - global: 25
+Element, domain: 26 - global: 26
+Element, domain: 27 - global: 27
+Element, domain: 28 - global: 28
+Element, domain: 29 - global: 29
+Element, domain: 30 - global: 30
+Element, domain: 31 - global: 31
+Element, domain: 32 - global: 32
+Element, domain: 33 - global: 33
+Element, domain: 34 - global: 34
+Element, domain: 35 - global: 35
+Element, domain: 36 - global: 36
+Element, domain: 37 - global: 37
+Element, domain: 38 - global: 38
+Element, domain: 39 - global: 39
+Element, domain: 40 - global: 40
+Element, domain: 41 - global: 41
+Element, domain: 42 - global: 42
+Element, domain: 43 - global: 43
+Element, domain: 44 - global: 44
+Element, domain: 45 - global: 45
+Element, domain: 46 - global: 46
+Element, domain: 47 - global: 47
+Element, domain: 48 - global: 48
+Element, domain: 49 - global: 49
+Element, domain: 50 - global: 50
+Element, domain: 51 - global: 51
+Element, domain: 52 - global: 52
+Element, domain: 53 - global: 53
+Element, domain: 54 - global: 54
+Element, domain: 55 - global: 55
+Element, domain: 56 - global: 56
+Element, domain: 57 - global: 57
+Element, domain: 58 - global: 58
+Element, domain: 59 - global: 59
+Element, domain: 60 - global: 60
+Element, domain: 61 - global: 61
+Element, domain: 62 - global: 62
+Element, domain: 63 - global: 63
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: 3 - shadow: X - domain: 3
+Node, global: 4 - local: 4 - shadow: X - domain: 4
+Node, global: 5 - local: 5 - shadow: X - domain: 5
+Node, global: 6 - local: 6 - shadow: X - domain: 6
+Node, global: 7 - local: 7 - shadow: X - domain: 7
+Node, global: 8 - local: 8 - shadow: X - domain: 8
+Node, global: 9 - local: 9 - shadow: X - domain: 9
+Node, global: 10 - local: 10 - shadow: X - domain: 10
+Node, global: 11 - local: 11 - shadow: X - domain: 11
+Node, global: 12 - local: 12 - shadow: X - domain: 12
+Node, global: 13 - local: 13 - shadow: X - domain: 13
+Node, global: 14 - local: 14 - shadow: X - domain: 14
+Node, global: 15 - local: 15 - shadow: X - domain: 15
+Node, global: 16 - local: 16 - shadow: X - domain: 16
+Node, global: 17 - local: 17 - shadow: X - domain: 17
+Node, global: 18 - local: 18 - shadow: X - domain: 18
+Node, global: 19 - local: 19 - shadow: X - domain: 19
+Node, global: 20 - local: 20 - shadow: X - domain: 20
+Node, global: 21 - local: 21 - shadow: X - domain: 21
+Node, global: 22 - local: 22 - shadow: X - domain: 22
+Node, global: 23 - local: 23 - shadow: X - domain: 23
+Node, global: 24 - local: 24 - shadow: X - domain: 24
+Node, global: 25 - local: 25 - shadow: X - domain: 25
+Node, global: 26 - local: 26 - shadow: X - domain: 26
+Node, global: 27 - local: 27 - shadow: X - domain: 27
+Node, global: 28 - local: 28 - shadow: X - domain: 28
+Node, global: 29 - local: 29 - shadow: X - domain: 29
+Node, global: 30 - local: 30 - shadow: X - domain: 30
+Node, global: 31 - local: 31 - shadow: X - domain: 31
+Node, global: 32 - local: 32 - shadow: X - domain: 32
+Node, global: 33 - local: 33 - shadow: X - domain: 33
+Node, global: 34 - local: 34 - shadow: X - domain: 34
+Node, global: 35 - local: 35 - shadow: X - domain: 35
+Node, global: 36 - local: 36 - shadow: X - domain: 36
+Node, global: 37 - local: 37 - shadow: X - domain: 37
+Node, global: 38 - local: 38 - shadow: X - domain: 38
+Node, global: 39 - local: 39 - shadow: X - domain: 39
+Node, global: 40 - local: 40 - shadow: X - domain: 40
+Node, global: 41 - local: 41 - shadow: X - domain: 41
+Node, global: 42 - local: 42 - shadow: X - domain: 42
+Node, global: 43 - local: 43 - shadow: X - domain: 43
+Node, global: 44 - local: 44 - shadow: X - domain: 44
+Node, global: 45 - local: 45 - shadow: X - domain: 45
+Node, global: 46 - local: 46 - shadow: X - domain: 46
+Node, global: 47 - local: 47 - shadow: X - domain: 47
+Node, global: 48 - local: 48 - shadow: X - domain: 48
+Node, global: 49 - local: 49 - shadow: X - domain: 49
+Node, global: 50 - local: 50 - shadow: X - domain: 50
+Node, global: 51 - local: 51 - shadow: X - domain: 51
+Node, global: 52 - local: 52 - shadow: X - domain: 52
+Node, global: 53 - local: 53 - shadow: X - domain: 53
+Node, global: 54 - local: 54 - shadow: X - domain: 54
+Node, global: 55 - local: 55 - shadow: X - domain: 55
+Node, global: 56 - local: 56 - shadow: X - domain: 56
+Node, global: 57 - local: 57 - shadow: X - domain: 57
+Node, global: 58 - local: 58 - shadow: X - domain: 58
+Node, global: 59 - local: 59 - shadow: X - domain: 59
+Node, global: 60 - local: 60 - shadow: X - domain: 60
+Node, global: 61 - local: 61 - shadow: X - domain: 61
+Node, global: 62 - local: 62 - shadow: X - domain: 62
+Node, global: 63 - local: 63 - shadow: X - domain: 63
+Node, global: 64 - local: 64 - shadow: X - domain: 64
+Node, global: 65 - local: 65 - shadow: X - domain: 65
+Node, global: 66 - local: 66 - shadow: X - domain: 66
+Node, global: 67 - local: 67 - shadow: X - domain: 67
+Node, global: 68 - local: 68 - shadow: X - domain: 68
+Node, global: 69 - local: 69 - shadow: X - domain: 69
+Node, global: 70 - local: 70 - shadow: X - domain: 70
+Node, global: 71 - local: 71 - shadow: X - domain: 71
+Node, global: 72 - local: 72 - shadow: X - domain: 72
+Node, global: 73 - local: 73 - shadow: X - domain: 73
+Node, global: 74 - local: 74 - shadow: X - domain: 74
+Node, global: 75 - local: 75 - shadow: X - domain: 75
+Node, global: 76 - local: 76 - shadow: X - domain: 76
+Node, global: 77 - local: 77 - shadow: X - domain: 77
+Node, global: 78 - local: 78 - shadow: X - domain: 78
+Node, global: 79 - local: 79 - shadow: X - domain: 79
+Node, global: 80 - local: 80 - shadow: X - domain: 80
+Node, global: 81 - local: 81 - shadow: X - domain: 81
+Node, global: 82 - local: 82 - shadow: X - domain: 82
+Node, global: 83 - local: 83 - shadow: X - domain: 83
+Node, global: 84 - local: 84 - shadow: X - domain: 84
+Node, global: 85 - local: 85 - shadow: X - domain: 85
+Node, global: 86 - local: 86 - shadow: X - domain: 86
+Node, global: 87 - local: 87 - shadow: X - domain: 87
+Node, global: 88 - local: 88 - shadow: X - domain: 88
+Node, global: 89 - local: 89 - shadow: X - domain: 89
+Node, global: 90 - local: 90 - shadow: X - domain: 90
+Node, global: 91 - local: 91 - shadow: X - domain: 91
+Node, global: 92 - local: 92 - shadow: X - domain: 92
+Node, global: 93 - local: 93 - shadow: X - domain: 93
+Node, global: 94 - local: 94 - shadow: X - domain: 94
+Node, global: 95 - local: 95 - shadow: X - domain: 95
+Node, global: 96 - local: 96 - shadow: X - domain: 96
+Node, global: 97 - local: 97 - shadow: X - domain: 97
+Node, global: 98 - local: 98 - shadow: X - domain: 98
+Node, global: 99 - local: 99 - shadow: X - domain: 99
+Node, global: 100 - local: 100 - shadow: X - domain: 100
+Node, global: 101 - local: 101 - shadow: X - domain: 101
+Node, global: 102 - local: 102 - shadow: X - domain: 102
+Node, global: 103 - local: 103 - shadow: X - domain: 103
+Node, global: 104 - local: 104 - shadow: X - domain: 104
+Node, global: 105 - local: 105 - shadow: X - domain: 105
+Node, global: 106 - local: 106 - shadow: X - domain: 106
+Node, global: 107 - local: 107 - shadow: X - domain: 107
+Node, global: 108 - local: 108 - shadow: X - domain: 108
+Node, global: 109 - local: 109 - shadow: X - domain: 109
+Node, global: 110 - local: 110 - shadow: X - domain: 110
+Node, global: 111 - local: 111 - shadow: X - domain: 111
+Node, global: 112 - local: 112 - shadow: X - domain: 112
+Node, global: 113 - local: 113 - shadow: X - domain: 113
+Node, global: 114 - local: 114 - shadow: X - domain: 114
+Node, global: 115 - local: 115 - shadow: X - domain: 115
+Node, global: 116 - local: 116 - shadow: X - domain: 116
+Node, global: 117 - local: 117 - shadow: X - domain: 117
+Node, global: 118 - local: 118 - shadow: X - domain: 118
+Node, global: 119 - local: 119 - shadow: X - domain: 119
+Node, global: 120 - local: 120 - shadow: X - domain: 120
+Node, global: 121 - local: 121 - shadow: X - domain: 121
+Node, global: 122 - local: 122 - shadow: X - domain: 122
+Node, global: 123 - local: 123 - shadow: X - domain: 123
+Node, global: 124 - local: 124 - shadow: X - domain: 124
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 3
+Node, local: 4 - global: 4
+Node, local: 5 - global: 5
+Node, local: 6 - global: 6
+Node, local: 7 - global: 7
+Node, local: 8 - global: 8
+Node, local: 9 - global: 9
+Node, local: 10 - global: 10
+Node, local: 11 - global: 11
+Node, local: 12 - global: 12
+Node, local: 13 - global: 13
+Node, local: 14 - global: 14
+Node, local: 15 - global: 15
+Node, local: 16 - global: 16
+Node, local: 17 - global: 17
+Node, local: 18 - global: 18
+Node, local: 19 - global: 19
+Node, local: 20 - global: 20
+Node, local: 21 - global: 21
+Node, local: 22 - global: 22
+Node, local: 23 - global: 23
+Node, local: 24 - global: 24
+Node, local: 25 - global: 25
+Node, local: 26 - global: 26
+Node, local: 27 - global: 27
+Node, local: 28 - global: 28
+Node, local: 29 - global: 29
+Node, local: 30 - global: 30
+Node, local: 31 - global: 31
+Node, local: 32 - global: 32
+Node, local: 33 - global: 33
+Node, local: 34 - global: 34
+Node, local: 35 - global: 35
+Node, local: 36 - global: 36
+Node, local: 37 - global: 37
+Node, local: 38 - global: 38
+Node, local: 39 - global: 39
+Node, local: 40 - global: 40
+Node, local: 41 - global: 41
+Node, local: 42 - global: 42
+Node, local: 43 - global: 43
+Node, local: 44 - global: 44
+Node, local: 45 - global: 45
+Node, local: 46 - global: 46
+Node, local: 47 - global: 47
+Node, local: 48 - global: 48
+Node, local: 49 - global: 49
+Node, local: 50 - global: 50
+Node, local: 51 - global: 51
+Node, local: 52 - global: 52
+Node, local: 53 - global: 53
+Node, local: 54 - global: 54
+Node, local: 55 - global: 55
+Node, local: 56 - global: 56
+Node, local: 57 - global: 57
+Node, local: 58 - global: 58
+Node, local: 59 - global: 59
+Node, local: 60 - global: 60
+Node, local: 61 - global: 61
+Node, local: 62 - global: 62
+Node, local: 63 - global: 63
+Node, local: 64 - global: 64
+Node, local: 65 - global: 65
+Node, local: 66 - global: 66
+Node, local: 67 - global: 67
+Node, local: 68 - global: 68
+Node, local: 69 - global: 69
+Node, local: 70 - global: 70
+Node, local: 71 - global: 71
+Node, local: 72 - global: 72
+Node, local: 73 - global: 73
+Node, local: 74 - global: 74
+Node, local: 75 - global: 75
+Node, local: 76 - global: 76
+Node, local: 77 - global: 77
+Node, local: 78 - global: 78
+Node, local: 79 - global: 79
+Node, local: 80 - global: 80
+Node, local: 81 - global: 81
+Node, local: 82 - global: 82
+Node, local: 83 - global: 83
+Node, local: 84 - global: 84
+Node, local: 85 - global: 85
+Node, local: 86 - global: 86
+Node, local: 87 - global: 87
+Node, local: 88 - global: 88
+Node, local: 89 - global: 89
+Node, local: 90 - global: 90
+Node, local: 91 - global: 91
+Node, local: 92 - global: 92
+Node, local: 93 - global: 93
+Node, local: 94 - global: 94
+Node, local: 95 - global: 95
+Node, local: 96 - global: 96
+Node, local: 97 - global: 97
+Node, local: 98 - global: 98
+Node, local: 99 - global: 99
+Node, local: 100 - global: 100
+Node, local: 101 - global: 101
+Node, local: 102 - global: 102
+Node, local: 103 - global: 103
+Node, local: 104 - global: 104
+Node, local: 105 - global: 105
+Node, local: 106 - global: 106
+Node, local: 107 - global: 107
+Node, local: 108 - global: 108
+Node, local: 109 - global: 109
+Node, local: 110 - global: 110
+Node, local: 111 - global: 111
+Node, local: 112 - global: 112
+Node, local: 113 - global: 113
+Node, local: 114 - global: 114
+Node, local: 115 - global: 115
+Node, local: 116 - global: 116
+Node, local: 117 - global: 117
+Node, local: 118 - global: 118
+Node, local: 119 - global: 119
+Node, local: 120 - global: 120
+Node, local: 121 - global: 121
+Node, local: 122 - global: 122
+Node, local: 123 - global: 123
+Node, local: 124 - global: 124
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 3
+Node, domain: 4 - global: 4
+Node, domain: 5 - global: 5
+Node, domain: 6 - global: 6
+Node, domain: 7 - global: 7
+Node, domain: 8 - global: 8
+Node, domain: 9 - global: 9
+Node, domain: 10 - global: 10
+Node, domain: 11 - global: 11
+Node, domain: 12 - global: 12
+Node, domain: 13 - global: 13
+Node, domain: 14 - global: 14
+Node, domain: 15 - global: 15
+Node, domain: 16 - global: 16
+Node, domain: 17 - global: 17
+Node, domain: 18 - global: 18
+Node, domain: 19 - global: 19
+Node, domain: 20 - global: 20
+Node, domain: 21 - global: 21
+Node, domain: 22 - global: 22
+Node, domain: 23 - global: 23
+Node, domain: 24 - global: 24
+Node, domain: 25 - global: 25
+Node, domain: 26 - global: 26
+Node, domain: 27 - global: 27
+Node, domain: 28 - global: 28
+Node, domain: 29 - global: 29
+Node, domain: 30 - global: 30
+Node, domain: 31 - global: 31
+Node, domain: 32 - global: 32
+Node, domain: 33 - global: 33
+Node, domain: 34 - global: 34
+Node, domain: 35 - global: 35
+Node, domain: 36 - global: 36
+Node, domain: 37 - global: 37
+Node, domain: 38 - global: 38
+Node, domain: 39 - global: 39
+Node, domain: 40 - global: 40
+Node, domain: 41 - global: 41
+Node, domain: 42 - global: 42
+Node, domain: 43 - global: 43
+Node, domain: 44 - global: 44
+Node, domain: 45 - global: 45
+Node, domain: 46 - global: 46
+Node, domain: 47 - global: 47
+Node, domain: 48 - global: 48
+Node, domain: 49 - global: 49
+Node, domain: 50 - global: 50
+Node, domain: 51 - global: 51
+Node, domain: 52 - global: 52
+Node, domain: 53 - global: 53
+Node, domain: 54 - global: 54
+Node, domain: 55 - global: 55
+Node, domain: 56 - global: 56
+Node, domain: 57 - global: 57
+Node, domain: 58 - global: 58
+Node, domain: 59 - global: 59
+Node, domain: 60 - global: 60
+Node, domain: 61 - global: 61
+Node, domain: 62 - global: 62
+Node, domain: 63 - global: 63
+Node, domain: 64 - global: 64
+Node, domain: 65 - global: 65
+Node, domain: 66 - global: 66
+Node, domain: 67 - global: 67
+Node, domain: 68 - global: 68
+Node, domain: 69 - global: 69
+Node, domain: 70 - global: 70
+Node, domain: 71 - global: 71
+Node, domain: 72 - global: 72
+Node, domain: 73 - global: 73
+Node, domain: 74 - global: 74
+Node, domain: 75 - global: 75
+Node, domain: 76 - global: 76
+Node, domain: 77 - global: 77
+Node, domain: 78 - global: 78
+Node, domain: 79 - global: 79
+Node, domain: 80 - global: 80
+Node, domain: 81 - global: 81
+Node, domain: 82 - global: 82
+Node, domain: 83 - global: 83
+Node, domain: 84 - global: 84
+Node, domain: 85 - global: 85
+Node, domain: 86 - global: 86
+Node, domain: 87 - global: 87
+Node, domain: 88 - global: 88
+Node, domain: 89 - global: 89
+Node, domain: 90 - global: 90
+Node, domain: 91 - global: 91
+Node, domain: 92 - global: 92
+Node, domain: 93 - global: 93
+Node, domain: 94 - global: 94
+Node, domain: 95 - global: 95
+Node, domain: 96 - global: 96
+Node, domain: 97 - global: 97
+Node, domain: 98 - global: 98
+Node, domain: 99 - global: 99
+Node, domain: 100 - global: 100
+Node, domain: 101 - global: 101
+Node, domain: 102 - global: 102
+Node, domain: 103 - global: 103
+Node, domain: 104 - global: 104
+Node, domain: 105 - global: 105
+Node, domain: 106 - global: 106
+Node, domain: 107 - global: 107
+Node, domain: 108 - global: 108
+Node, domain: 109 - global: 109
+Node, domain: 110 - global: 110
+Node, domain: 111 - global: 111
+Node, domain: 112 - global: 112
+Node, domain: 113 - global: 113
+Node, domain: 114 - global: 114
+Node, domain: 115 - global: 115
+Node, domain: 116 - global: 116
+Node, domain: 117 - global: 117
+Node, domain: 118 - global: 118
+Node, domain: 119 - global: 119
+Node, domain: 120 - global: 120
+Node, domain: 121 - global: 121
+Node, domain: 122 - global: 122
+Node, domain: 123 - global: 123
+Node, domain: 124 - global: 124
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,486 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8061400)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 3, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 32
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 1 - domain: 33
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: 4 - shadow: X - domain: 4
+Element, global: 9 - local: 5 - shadow: X - domain: 5
+Element, global: 10 - local: X - shadow: 2 - domain: 34
+Element, global: 11 - local: X - shadow: X - domain: X
+Element, global: 12 - local: 6 - shadow: X - domain: 6
+Element, global: 13 - local: 7 - shadow: X - domain: 7
+Element, global: 14 - local: X - shadow: 3 - domain: 35
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: 8 - shadow: X - domain: 8
+Element, global: 17 - local: 9 - shadow: X - domain: 9
+Element, global: 18 - local: X - shadow: 4 - domain: 36
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: 10 - shadow: X - domain: 10
+Element, global: 21 - local: 11 - shadow: X - domain: 11
+Element, global: 22 - local: X - shadow: 5 - domain: 37
+Element, global: 23 - local: X - shadow: X - domain: X
+Element, global: 24 - local: 12 - shadow: X - domain: 12
+Element, global: 25 - local: 13 - shadow: X - domain: 13
+Element, global: 26 - local: X - shadow: 6 - domain: 38
+Element, global: 27 - local: X - shadow: X - domain: X
+Element, global: 28 - local: 14 - shadow: X - domain: 14
+Element, global: 29 - local: 15 - shadow: X - domain: 15
+Element, global: 30 - local: X - shadow: 7 - domain: 39
+Element, global: 31 - local: X - shadow: X - domain: X
+Element, global: 32 - local: 16 - shadow: X - domain: 16
+Element, global: 33 - local: 17 - shadow: X - domain: 17
+Element, global: 34 - local: X - shadow: 8 - domain: 40
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: 18 - shadow: X - domain: 18
+Element, global: 37 - local: 19 - shadow: X - domain: 19
+Element, global: 38 - local: X - shadow: 9 - domain: 41
+Element, global: 39 - local: X - shadow: X - domain: X
+Element, global: 40 - local: 20 - shadow: X - domain: 20
+Element, global: 41 - local: 21 - shadow: X - domain: 21
+Element, global: 42 - local: X - shadow: 10 - domain: 42
+Element, global: 43 - local: X - shadow: X - domain: X
+Element, global: 44 - local: 22 - shadow: X - domain: 22
+Element, global: 45 - local: 23 - shadow: X - domain: 23
+Element, global: 46 - local: X - shadow: 11 - domain: 43
+Element, global: 47 - local: X - shadow: X - domain: X
+Element, global: 48 - local: 24 - shadow: X - domain: 24
+Element, global: 49 - local: 25 - shadow: X - domain: 25
+Element, global: 50 - local: X - shadow: 12 - domain: 44
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: 26 - shadow: X - domain: 26
+Element, global: 53 - local: 27 - shadow: X - domain: 27
+Element, global: 54 - local: X - shadow: 13 - domain: 45
+Element, global: 55 - local: X - shadow: X - domain: X
+Element, global: 56 - local: 28 - shadow: X - domain: 28
+Element, global: 57 - local: 29 - shadow: X - domain: 29
+Element, global: 58 - local: X - shadow: 14 - domain: 46
+Element, global: 59 - local: X - shadow: X - domain: X
+Element, global: 60 - local: 30 - shadow: X - domain: 30
+Element, global: 61 - local: 31 - shadow: X - domain: 31
+Element, global: 62 - local: X - shadow: 15 - domain: 47
+Element, global: 63 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 8
+Element, local: 5 - global: 9
+Element, local: 6 - global: 12
+Element, local: 7 - global: 13
+Element, local: 8 - global: 16
+Element, local: 9 - global: 17
+Element, local: 10 - global: 20
+Element, local: 11 - global: 21
+Element, local: 12 - global: 24
+Element, local: 13 - global: 25
+Element, local: 14 - global: 28
+Element, local: 15 - global: 29
+Element, local: 16 - global: 32
+Element, local: 17 - global: 33
+Element, local: 18 - global: 36
+Element, local: 19 - global: 37
+Element, local: 20 - global: 40
+Element, local: 21 - global: 41
+Element, local: 22 - global: 44
+Element, local: 23 - global: 45
+Element, local: 24 - global: 48
+Element, local: 25 - global: 49
+Element, local: 26 - global: 52
+Element, local: 27 - global: 53
+Element, local: 28 - global: 56
+Element, local: 29 - global: 57
+Element, local: 30 - global: 60
+Element, local: 31 - global: 61
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+Element, domain: 6 - global: 12
+Element, domain: 7 - global: 13
+Element, domain: 8 - global: 16
+Element, domain: 9 - global: 17
+Element, domain: 10 - global: 20
+Element, domain: 11 - global: 21
+Element, domain: 12 - global: 24
+Element, domain: 13 - global: 25
+Element, domain: 14 - global: 28
+Element, domain: 15 - global: 29
+Element, domain: 16 - global: 32
+Element, domain: 17 - global: 33
+Element, domain: 18 - global: 36
+Element, domain: 19 - global: 37
+Element, domain: 20 - global: 40
+Element, domain: 21 - global: 41
+Element, domain: 22 - global: 44
+Element, domain: 23 - global: 45
+Element, domain: 24 - global: 48
+Element, domain: 25 - global: 49
+Element, domain: 26 - global: 52
+Element, domain: 27 - global: 53
+Element, domain: 28 - global: 56
+Element, domain: 29 - global: 57
+Element, domain: 30 - global: 60
+Element, domain: 31 - global: 61
+Element, domain: 32 - global: 2
+Element, domain: 33 - global: 6
+Element, domain: 34 - global: 10
+Element, domain: 35 - global: 14
+Element, domain: 36 - global: 18
+Element, domain: 37 - global: 22
+Element, domain: 38 - global: 26
+Element, domain: 39 - global: 30
+Element, domain: 40 - global: 34
+Element, domain: 41 - global: 38
+Element, domain: 42 - global: 42
+Element, domain: 43 - global: 46
+Element, domain: 44 - global: 50
+Element, domain: 45 - global: 54
+Element, domain: 46 - global: 58
+Element, domain: 47 - global: 62
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 75
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 1 - domain: 76
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 2 - domain: 77
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: 9 - shadow: X - domain: 9
+Node, global: 16 - local: 10 - shadow: X - domain: 10
+Node, global: 17 - local: 11 - shadow: X - domain: 11
+Node, global: 18 - local: X - shadow: 3 - domain: 78
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: 12 - shadow: X - domain: 12
+Node, global: 21 - local: 13 - shadow: X - domain: 13
+Node, global: 22 - local: 14 - shadow: X - domain: 14
+Node, global: 23 - local: X - shadow: 4 - domain: 79
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: 15 - shadow: X - domain: 15
+Node, global: 26 - local: 16 - shadow: X - domain: 16
+Node, global: 27 - local: 17 - shadow: X - domain: 17
+Node, global: 28 - local: X - shadow: 5 - domain: 80
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: 18 - shadow: X - domain: 18
+Node, global: 31 - local: 19 - shadow: X - domain: 19
+Node, global: 32 - local: 20 - shadow: X - domain: 20
+Node, global: 33 - local: X - shadow: 6 - domain: 81
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: 21 - shadow: X - domain: 21
+Node, global: 36 - local: 22 - shadow: X - domain: 22
+Node, global: 37 - local: 23 - shadow: X - domain: 23
+Node, global: 38 - local: X - shadow: 7 - domain: 82
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: 24 - shadow: X - domain: 24
+Node, global: 41 - local: 25 - shadow: X - domain: 25
+Node, global: 42 - local: 26 - shadow: X - domain: 26
+Node, global: 43 - local: X - shadow: 8 - domain: 83
+Node, global: 44 - local: X - shadow: X - domain: X
+Node, global: 45 - local: 27 - shadow: X - domain: 27
+Node, global: 46 - local: 28 - shadow: X - domain: 28
+Node, global: 47 - local: 29 - shadow: X - domain: 29
+Node, global: 48 - local: X - shadow: 9 - domain: 84
+Node, global: 49 - local: X - shadow: X - domain: X
+Node, global: 50 - local: 30 - shadow: X - domain: 30
+Node, global: 51 - local: 31 - shadow: X - domain: 31
+Node, global: 52 - local: 32 - shadow: X - domain: 32
+Node, global: 53 - local: X - shadow: 10 - domain: 85
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: 33 - shadow: X - domain: 33
+Node, global: 56 - local: 34 - shadow: X - domain: 34
+Node, global: 57 - local: 35 - shadow: X - domain: 35
+Node, global: 58 - local: X - shadow: 11 - domain: 86
+Node, global: 59 - local: X - shadow: X - domain: X
+Node, global: 60 - local: 36 - shadow: X - domain: 36
+Node, global: 61 - local: 37 - shadow: X - domain: 37
+Node, global: 62 - local: 38 - shadow: X - domain: 38
+Node, global: 63 - local: X - shadow: 12 - domain: 87
+Node, global: 64 - local: X - shadow: X - domain: X
+Node, global: 65 - local: 39 - shadow: X - domain: 39
+Node, global: 66 - local: 40 - shadow: X - domain: 40
+Node, global: 67 - local: 41 - shadow: X - domain: 41
+Node, global: 68 - local: X - shadow: 13 - domain: 88
+Node, global: 69 - local: X - shadow: X - domain: X
+Node, global: 70 - local: 42 - shadow: X - domain: 42
+Node, global: 71 - local: 43 - shadow: X - domain: 43
+Node, global: 72 - local: 44 - shadow: X - domain: 44
+Node, global: 73 - local: X - shadow: 14 - domain: 89
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: 45 - shadow: X - domain: 45
+Node, global: 76 - local: 46 - shadow: X - domain: 46
+Node, global: 77 - local: 47 - shadow: X - domain: 47
+Node, global: 78 - local: X - shadow: 15 - domain: 90
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: 48 - shadow: X - domain: 48
+Node, global: 81 - local: 49 - shadow: X - domain: 49
+Node, global: 82 - local: 50 - shadow: X - domain: 50
+Node, global: 83 - local: X - shadow: 16 - domain: 91
+Node, global: 84 - local: X - shadow: X - domain: X
+Node, global: 85 - local: 51 - shadow: X - domain: 51
+Node, global: 86 - local: 52 - shadow: X - domain: 52
+Node, global: 87 - local: 53 - shadow: X - domain: 53
+Node, global: 88 - local: X - shadow: 17 - domain: 92
+Node, global: 89 - local: X - shadow: X - domain: X
+Node, global: 90 - local: 54 - shadow: X - domain: 54
+Node, global: 91 - local: 55 - shadow: X - domain: 55
+Node, global: 92 - local: 56 - shadow: X - domain: 56
+Node, global: 93 - local: X - shadow: 18 - domain: 93
+Node, global: 94 - local: X - shadow: X - domain: X
+Node, global: 95 - local: 57 - shadow: X - domain: 57
+Node, global: 96 - local: 58 - shadow: X - domain: 58
+Node, global: 97 - local: 59 - shadow: X - domain: 59
+Node, global: 98 - local: X - shadow: 19 - domain: 94
+Node, global: 99 - local: X - shadow: X - domain: X
+Node, global: 100 - local: 60 - shadow: X - domain: 60
+Node, global: 101 - local: 61 - shadow: X - domain: 61
+Node, global: 102 - local: 62 - shadow: X - domain: 62
+Node, global: 103 - local: X - shadow: 20 - domain: 95
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: 63 - shadow: X - domain: 63
+Node, global: 106 - local: 64 - shadow: X - domain: 64
+Node, global: 107 - local: 65 - shadow: X - domain: 65
+Node, global: 108 - local: X - shadow: 21 - domain: 96
+Node, global: 109 - local: X - shadow: X - domain: X
+Node, global: 110 - local: 66 - shadow: X - domain: 66
+Node, global: 111 - local: 67 - shadow: X - domain: 67
+Node, global: 112 - local: 68 - shadow: X - domain: 68
+Node, global: 113 - local: X - shadow: 22 - domain: 97
+Node, global: 114 - local: X - shadow: X - domain: X
+Node, global: 115 - local: 69 - shadow: X - domain: 69
+Node, global: 116 - local: 70 - shadow: X - domain: 70
+Node, global: 117 - local: 71 - shadow: X - domain: 71
+Node, global: 118 - local: X - shadow: 23 - domain: 98
+Node, global: 119 - local: X - shadow: X - domain: X
+Node, global: 120 - local: 72 - shadow: X - domain: 72
+Node, global: 121 - local: 73 - shadow: X - domain: 73
+Node, global: 122 - local: 74 - shadow: X - domain: 74
+Node, global: 123 - local: X - shadow: 24 - domain: 99
+Node, global: 124 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 15
+Node, local: 10 - global: 16
+Node, local: 11 - global: 17
+Node, local: 12 - global: 20
+Node, local: 13 - global: 21
+Node, local: 14 - global: 22
+Node, local: 15 - global: 25
+Node, local: 16 - global: 26
+Node, local: 17 - global: 27
+Node, local: 18 - global: 30
+Node, local: 19 - global: 31
+Node, local: 20 - global: 32
+Node, local: 21 - global: 35
+Node, local: 22 - global: 36
+Node, local: 23 - global: 37
+Node, local: 24 - global: 40
+Node, local: 25 - global: 41
+Node, local: 26 - global: 42
+Node, local: 27 - global: 45
+Node, local: 28 - global: 46
+Node, local: 29 - global: 47
+Node, local: 30 - global: 50
+Node, local: 31 - global: 51
+Node, local: 32 - global: 52
+Node, local: 33 - global: 55
+Node, local: 34 - global: 56
+Node, local: 35 - global: 57
+Node, local: 36 - global: 60
+Node, local: 37 - global: 61
+Node, local: 38 - global: 62
+Node, local: 39 - global: 65
+Node, local: 40 - global: 66
+Node, local: 41 - global: 67
+Node, local: 42 - global: 70
+Node, local: 43 - global: 71
+Node, local: 44 - global: 72
+Node, local: 45 - global: 75
+Node, local: 46 - global: 76
+Node, local: 47 - global: 77
+Node, local: 48 - global: 80
+Node, local: 49 - global: 81
+Node, local: 50 - global: 82
+Node, local: 51 - global: 85
+Node, local: 52 - global: 86
+Node, local: 53 - global: 87
+Node, local: 54 - global: 90
+Node, local: 55 - global: 91
+Node, local: 56 - global: 92
+Node, local: 57 - global: 95
+Node, local: 58 - global: 96
+Node, local: 59 - global: 97
+Node, local: 60 - global: 100
+Node, local: 61 - global: 101
+Node, local: 62 - global: 102
+Node, local: 63 - global: 105
+Node, local: 64 - global: 106
+Node, local: 65 - global: 107
+Node, local: 66 - global: 110
+Node, local: 67 - global: 111
+Node, local: 68 - global: 112
+Node, local: 69 - global: 115
+Node, local: 70 - global: 116
+Node, local: 71 - global: 117
+Node, local: 72 - global: 120
+Node, local: 73 - global: 121
+Node, local: 74 - global: 122
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 15
+Node, domain: 10 - global: 16
+Node, domain: 11 - global: 17
+Node, domain: 12 - global: 20
+Node, domain: 13 - global: 21
+Node, domain: 14 - global: 22
+Node, domain: 15 - global: 25
+Node, domain: 16 - global: 26
+Node, domain: 17 - global: 27
+Node, domain: 18 - global: 30
+Node, domain: 19 - global: 31
+Node, domain: 20 - global: 32
+Node, domain: 21 - global: 35
+Node, domain: 22 - global: 36
+Node, domain: 23 - global: 37
+Node, domain: 24 - global: 40
+Node, domain: 25 - global: 41
+Node, domain: 26 - global: 42
+Node, domain: 27 - global: 45
+Node, domain: 28 - global: 46
+Node, domain: 29 - global: 47
+Node, domain: 30 - global: 50
+Node, domain: 31 - global: 51
+Node, domain: 32 - global: 52
+Node, domain: 33 - global: 55
+Node, domain: 34 - global: 56
+Node, domain: 35 - global: 57
+Node, domain: 36 - global: 60
+Node, domain: 37 - global: 61
+Node, domain: 38 - global: 62
+Node, domain: 39 - global: 65
+Node, domain: 40 - global: 66
+Node, domain: 41 - global: 67
+Node, domain: 42 - global: 70
+Node, domain: 43 - global: 71
+Node, domain: 44 - global: 72
+Node, domain: 45 - global: 75
+Node, domain: 46 - global: 76
+Node, domain: 47 - global: 77
+Node, domain: 48 - global: 80
+Node, domain: 49 - global: 81
+Node, domain: 50 - global: 82
+Node, domain: 51 - global: 85
+Node, domain: 52 - global: 86
+Node, domain: 53 - global: 87
+Node, domain: 54 - global: 90
+Node, domain: 55 - global: 91
+Node, domain: 56 - global: 92
+Node, domain: 57 - global: 95
+Node, domain: 58 - global: 96
+Node, domain: 59 - global: 97
+Node, domain: 60 - global: 100
+Node, domain: 61 - global: 101
+Node, domain: 62 - global: 102
+Node, domain: 63 - global: 105
+Node, domain: 64 - global: 106
+Node, domain: 65 - global: 107
+Node, domain: 66 - global: 110
+Node, domain: 67 - global: 111
+Node, domain: 68 - global: 112
+Node, domain: 69 - global: 115
+Node, domain: 70 - global: 116
+Node, domain: 71 - global: 117
+Node, domain: 72 - global: 120
+Node, domain: 73 - global: 121
+Node, domain: 74 - global: 122
+Node, domain: 75 - global: 3
+Node, domain: 76 - global: 8
+Node, domain: 77 - global: 13
+Node, domain: 78 - global: 18
+Node, domain: 79 - global: 23
+Node, domain: 80 - global: 28
+Node, domain: 81 - global: 33
+Node, domain: 82 - global: 38
+Node, domain: 83 - global: 43
+Node, domain: 84 - global: 48
+Node, domain: 85 - global: 53
+Node, domain: 86 - global: 58
+Node, domain: 87 - global: 63
+Node, domain: 88 - global: 68
+Node, domain: 89 - global: 73
+Node, domain: 90 - global: 78
+Node, domain: 91 - global: 83
+Node, domain: 92 - global: 88
+Node, domain: 93 - global: 93
+Node, domain: 94 - global: 98
+Node, domain: 95 - global: 103
+Node, domain: 96 - global: 108
+Node, domain: 97 - global: 113
+Node, domain: 98 - global: 118
+Node, domain: 99 - global: 123
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,486 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 0 of 2 in use (3 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8061728)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 3, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: 0 - shadow: X - domain: 0
+Element, global: 1 - local: 1 - shadow: X - domain: 1
+Element, global: 2 - local: X - shadow: 0 - domain: 32
+Element, global: 3 - local: X - shadow: X - domain: X
+Element, global: 4 - local: 2 - shadow: X - domain: 2
+Element, global: 5 - local: 3 - shadow: X - domain: 3
+Element, global: 6 - local: X - shadow: 1 - domain: 33
+Element, global: 7 - local: X - shadow: X - domain: X
+Element, global: 8 - local: 4 - shadow: X - domain: 4
+Element, global: 9 - local: 5 - shadow: X - domain: 5
+Element, global: 10 - local: X - shadow: 2 - domain: 34
+Element, global: 11 - local: X - shadow: X - domain: X
+Element, global: 12 - local: 6 - shadow: X - domain: 6
+Element, global: 13 - local: 7 - shadow: X - domain: 7
+Element, global: 14 - local: X - shadow: 3 - domain: 35
+Element, global: 15 - local: X - shadow: X - domain: X
+Element, global: 16 - local: 8 - shadow: X - domain: 8
+Element, global: 17 - local: 9 - shadow: X - domain: 9
+Element, global: 18 - local: X - shadow: 4 - domain: 36
+Element, global: 19 - local: X - shadow: X - domain: X
+Element, global: 20 - local: 10 - shadow: X - domain: 10
+Element, global: 21 - local: 11 - shadow: X - domain: 11
+Element, global: 22 - local: X - shadow: 5 - domain: 37
+Element, global: 23 - local: X - shadow: X - domain: X
+Element, global: 24 - local: 12 - shadow: X - domain: 12
+Element, global: 25 - local: 13 - shadow: X - domain: 13
+Element, global: 26 - local: X - shadow: 6 - domain: 38
+Element, global: 27 - local: X - shadow: X - domain: X
+Element, global: 28 - local: 14 - shadow: X - domain: 14
+Element, global: 29 - local: 15 - shadow: X - domain: 15
+Element, global: 30 - local: X - shadow: 7 - domain: 39
+Element, global: 31 - local: X - shadow: X - domain: X
+Element, global: 32 - local: 16 - shadow: X - domain: 16
+Element, global: 33 - local: 17 - shadow: X - domain: 17
+Element, global: 34 - local: X - shadow: 8 - domain: 40
+Element, global: 35 - local: X - shadow: X - domain: X
+Element, global: 36 - local: 18 - shadow: X - domain: 18
+Element, global: 37 - local: 19 - shadow: X - domain: 19
+Element, global: 38 - local: X - shadow: 9 - domain: 41
+Element, global: 39 - local: X - shadow: X - domain: X
+Element, global: 40 - local: 20 - shadow: X - domain: 20
+Element, global: 41 - local: 21 - shadow: X - domain: 21
+Element, global: 42 - local: X - shadow: 10 - domain: 42
+Element, global: 43 - local: X - shadow: X - domain: X
+Element, global: 44 - local: 22 - shadow: X - domain: 22
+Element, global: 45 - local: 23 - shadow: X - domain: 23
+Element, global: 46 - local: X - shadow: 11 - domain: 43
+Element, global: 47 - local: X - shadow: X - domain: X
+Element, global: 48 - local: 24 - shadow: X - domain: 24
+Element, global: 49 - local: 25 - shadow: X - domain: 25
+Element, global: 50 - local: X - shadow: 12 - domain: 44
+Element, global: 51 - local: X - shadow: X - domain: X
+Element, global: 52 - local: 26 - shadow: X - domain: 26
+Element, global: 53 - local: 27 - shadow: X - domain: 27
+Element, global: 54 - local: X - shadow: 13 - domain: 45
+Element, global: 55 - local: X - shadow: X - domain: X
+Element, global: 56 - local: 28 - shadow: X - domain: 28
+Element, global: 57 - local: 29 - shadow: X - domain: 29
+Element, global: 58 - local: X - shadow: 14 - domain: 46
+Element, global: 59 - local: X - shadow: X - domain: X
+Element, global: 60 - local: 30 - shadow: X - domain: 30
+Element, global: 61 - local: 31 - shadow: X - domain: 31
+Element, global: 62 - local: X - shadow: 15 - domain: 47
+Element, global: 63 - local: X - shadow: X - domain: X
+
+Element, local: 0 - global: 0
+Element, local: 1 - global: 1
+Element, local: 2 - global: 4
+Element, local: 3 - global: 5
+Element, local: 4 - global: 8
+Element, local: 5 - global: 9
+Element, local: 6 - global: 12
+Element, local: 7 - global: 13
+Element, local: 8 - global: 16
+Element, local: 9 - global: 17
+Element, local: 10 - global: 20
+Element, local: 11 - global: 21
+Element, local: 12 - global: 24
+Element, local: 13 - global: 25
+Element, local: 14 - global: 28
+Element, local: 15 - global: 29
+Element, local: 16 - global: 32
+Element, local: 17 - global: 33
+Element, local: 18 - global: 36
+Element, local: 19 - global: 37
+Element, local: 20 - global: 40
+Element, local: 21 - global: 41
+Element, local: 22 - global: 44
+Element, local: 23 - global: 45
+Element, local: 24 - global: 48
+Element, local: 25 - global: 49
+Element, local: 26 - global: 52
+Element, local: 27 - global: 53
+Element, local: 28 - global: 56
+Element, local: 29 - global: 57
+Element, local: 30 - global: 60
+Element, local: 31 - global: 61
+
+Element, domain: 0 - global: 0
+Element, domain: 1 - global: 1
+Element, domain: 2 - global: 4
+Element, domain: 3 - global: 5
+Element, domain: 4 - global: 8
+Element, domain: 5 - global: 9
+Element, domain: 6 - global: 12
+Element, domain: 7 - global: 13
+Element, domain: 8 - global: 16
+Element, domain: 9 - global: 17
+Element, domain: 10 - global: 20
+Element, domain: 11 - global: 21
+Element, domain: 12 - global: 24
+Element, domain: 13 - global: 25
+Element, domain: 14 - global: 28
+Element, domain: 15 - global: 29
+Element, domain: 16 - global: 32
+Element, domain: 17 - global: 33
+Element, domain: 18 - global: 36
+Element, domain: 19 - global: 37
+Element, domain: 20 - global: 40
+Element, domain: 21 - global: 41
+Element, domain: 22 - global: 44
+Element, domain: 23 - global: 45
+Element, domain: 24 - global: 48
+Element, domain: 25 - global: 49
+Element, domain: 26 - global: 52
+Element, domain: 27 - global: 53
+Element, domain: 28 - global: 56
+Element, domain: 29 - global: 57
+Element, domain: 30 - global: 60
+Element, domain: 31 - global: 61
+Element, domain: 32 - global: 2
+Element, domain: 33 - global: 6
+Element, domain: 34 - global: 10
+Element, domain: 35 - global: 14
+Element, domain: 36 - global: 18
+Element, domain: 37 - global: 22
+Element, domain: 38 - global: 26
+Element, domain: 39 - global: 30
+Element, domain: 40 - global: 34
+Element, domain: 41 - global: 38
+Element, domain: 42 - global: 42
+Element, domain: 43 - global: 46
+Element, domain: 44 - global: 50
+Element, domain: 45 - global: 54
+Element, domain: 46 - global: 58
+Element, domain: 47 - global: 62
+
+Node, global: 0 - local: 0 - shadow: X - domain: 0
+Node, global: 1 - local: 1 - shadow: X - domain: 1
+Node, global: 2 - local: 2 - shadow: X - domain: 2
+Node, global: 3 - local: X - shadow: 0 - domain: 75
+Node, global: 4 - local: X - shadow: X - domain: X
+Node, global: 5 - local: 3 - shadow: X - domain: 3
+Node, global: 6 - local: 4 - shadow: X - domain: 4
+Node, global: 7 - local: 5 - shadow: X - domain: 5
+Node, global: 8 - local: X - shadow: 1 - domain: 76
+Node, global: 9 - local: X - shadow: X - domain: X
+Node, global: 10 - local: 6 - shadow: X - domain: 6
+Node, global: 11 - local: 7 - shadow: X - domain: 7
+Node, global: 12 - local: 8 - shadow: X - domain: 8
+Node, global: 13 - local: X - shadow: 2 - domain: 77
+Node, global: 14 - local: X - shadow: X - domain: X
+Node, global: 15 - local: 9 - shadow: X - domain: 9
+Node, global: 16 - local: 10 - shadow: X - domain: 10
+Node, global: 17 - local: 11 - shadow: X - domain: 11
+Node, global: 18 - local: X - shadow: 3 - domain: 78
+Node, global: 19 - local: X - shadow: X - domain: X
+Node, global: 20 - local: 12 - shadow: X - domain: 12
+Node, global: 21 - local: 13 - shadow: X - domain: 13
+Node, global: 22 - local: 14 - shadow: X - domain: 14
+Node, global: 23 - local: X - shadow: 4 - domain: 79
+Node, global: 24 - local: X - shadow: X - domain: X
+Node, global: 25 - local: 15 - shadow: X - domain: 15
+Node, global: 26 - local: 16 - shadow: X - domain: 16
+Node, global: 27 - local: 17 - shadow: X - domain: 17
+Node, global: 28 - local: X - shadow: 5 - domain: 80
+Node, global: 29 - local: X - shadow: X - domain: X
+Node, global: 30 - local: 18 - shadow: X - domain: 18
+Node, global: 31 - local: 19 - shadow: X - domain: 19
+Node, global: 32 - local: 20 - shadow: X - domain: 20
+Node, global: 33 - local: X - shadow: 6 - domain: 81
+Node, global: 34 - local: X - shadow: X - domain: X
+Node, global: 35 - local: 21 - shadow: X - domain: 21
+Node, global: 36 - local: 22 - shadow: X - domain: 22
+Node, global: 37 - local: 23 - shadow: X - domain: 23
+Node, global: 38 - local: X - shadow: 7 - domain: 82
+Node, global: 39 - local: X - shadow: X - domain: X
+Node, global: 40 - local: 24 - shadow: X - domain: 24
+Node, global: 41 - local: 25 - shadow: X - domain: 25
+Node, global: 42 - local: 26 - shadow: X - domain: 26
+Node, global: 43 - local: X - shadow: 8 - domain: 83
+Node, global: 44 - local: X - shadow: X - domain: X
+Node, global: 45 - local: 27 - shadow: X - domain: 27
+Node, global: 46 - local: 28 - shadow: X - domain: 28
+Node, global: 47 - local: 29 - shadow: X - domain: 29
+Node, global: 48 - local: X - shadow: 9 - domain: 84
+Node, global: 49 - local: X - shadow: X - domain: X
+Node, global: 50 - local: 30 - shadow: X - domain: 30
+Node, global: 51 - local: 31 - shadow: X - domain: 31
+Node, global: 52 - local: 32 - shadow: X - domain: 32
+Node, global: 53 - local: X - shadow: 10 - domain: 85
+Node, global: 54 - local: X - shadow: X - domain: X
+Node, global: 55 - local: 33 - shadow: X - domain: 33
+Node, global: 56 - local: 34 - shadow: X - domain: 34
+Node, global: 57 - local: 35 - shadow: X - domain: 35
+Node, global: 58 - local: X - shadow: 11 - domain: 86
+Node, global: 59 - local: X - shadow: X - domain: X
+Node, global: 60 - local: 36 - shadow: X - domain: 36
+Node, global: 61 - local: 37 - shadow: X - domain: 37
+Node, global: 62 - local: 38 - shadow: X - domain: 38
+Node, global: 63 - local: X - shadow: 12 - domain: 87
+Node, global: 64 - local: X - shadow: X - domain: X
+Node, global: 65 - local: 39 - shadow: X - domain: 39
+Node, global: 66 - local: 40 - shadow: X - domain: 40
+Node, global: 67 - local: 41 - shadow: X - domain: 41
+Node, global: 68 - local: X - shadow: 13 - domain: 88
+Node, global: 69 - local: X - shadow: X - domain: X
+Node, global: 70 - local: 42 - shadow: X - domain: 42
+Node, global: 71 - local: 43 - shadow: X - domain: 43
+Node, global: 72 - local: 44 - shadow: X - domain: 44
+Node, global: 73 - local: X - shadow: 14 - domain: 89
+Node, global: 74 - local: X - shadow: X - domain: X
+Node, global: 75 - local: 45 - shadow: X - domain: 45
+Node, global: 76 - local: 46 - shadow: X - domain: 46
+Node, global: 77 - local: 47 - shadow: X - domain: 47
+Node, global: 78 - local: X - shadow: 15 - domain: 90
+Node, global: 79 - local: X - shadow: X - domain: X
+Node, global: 80 - local: 48 - shadow: X - domain: 48
+Node, global: 81 - local: 49 - shadow: X - domain: 49
+Node, global: 82 - local: 50 - shadow: X - domain: 50
+Node, global: 83 - local: X - shadow: 16 - domain: 91
+Node, global: 84 - local: X - shadow: X - domain: X
+Node, global: 85 - local: 51 - shadow: X - domain: 51
+Node, global: 86 - local: 52 - shadow: X - domain: 52
+Node, global: 87 - local: 53 - shadow: X - domain: 53
+Node, global: 88 - local: X - shadow: 17 - domain: 92
+Node, global: 89 - local: X - shadow: X - domain: X
+Node, global: 90 - local: 54 - shadow: X - domain: 54
+Node, global: 91 - local: 55 - shadow: X - domain: 55
+Node, global: 92 - local: 56 - shadow: X - domain: 56
+Node, global: 93 - local: X - shadow: 18 - domain: 93
+Node, global: 94 - local: X - shadow: X - domain: X
+Node, global: 95 - local: 57 - shadow: X - domain: 57
+Node, global: 96 - local: 58 - shadow: X - domain: 58
+Node, global: 97 - local: 59 - shadow: X - domain: 59
+Node, global: 98 - local: X - shadow: 19 - domain: 94
+Node, global: 99 - local: X - shadow: X - domain: X
+Node, global: 100 - local: 60 - shadow: X - domain: 60
+Node, global: 101 - local: 61 - shadow: X - domain: 61
+Node, global: 102 - local: 62 - shadow: X - domain: 62
+Node, global: 103 - local: X - shadow: 20 - domain: 95
+Node, global: 104 - local: X - shadow: X - domain: X
+Node, global: 105 - local: 63 - shadow: X - domain: 63
+Node, global: 106 - local: 64 - shadow: X - domain: 64
+Node, global: 107 - local: 65 - shadow: X - domain: 65
+Node, global: 108 - local: X - shadow: 21 - domain: 96
+Node, global: 109 - local: X - shadow: X - domain: X
+Node, global: 110 - local: 66 - shadow: X - domain: 66
+Node, global: 111 - local: 67 - shadow: X - domain: 67
+Node, global: 112 - local: 68 - shadow: X - domain: 68
+Node, global: 113 - local: X - shadow: 22 - domain: 97
+Node, global: 114 - local: X - shadow: X - domain: X
+Node, global: 115 - local: 69 - shadow: X - domain: 69
+Node, global: 116 - local: 70 - shadow: X - domain: 70
+Node, global: 117 - local: 71 - shadow: X - domain: 71
+Node, global: 118 - local: X - shadow: 23 - domain: 98
+Node, global: 119 - local: X - shadow: X - domain: X
+Node, global: 120 - local: 72 - shadow: X - domain: 72
+Node, global: 121 - local: 73 - shadow: X - domain: 73
+Node, global: 122 - local: 74 - shadow: X - domain: 74
+Node, global: 123 - local: X - shadow: 24 - domain: 99
+Node, global: 124 - local: X - shadow: X - domain: X
+
+Node, local: 0 - global: 0
+Node, local: 1 - global: 1
+Node, local: 2 - global: 2
+Node, local: 3 - global: 5
+Node, local: 4 - global: 6
+Node, local: 5 - global: 7
+Node, local: 6 - global: 10
+Node, local: 7 - global: 11
+Node, local: 8 - global: 12
+Node, local: 9 - global: 15
+Node, local: 10 - global: 16
+Node, local: 11 - global: 17
+Node, local: 12 - global: 20
+Node, local: 13 - global: 21
+Node, local: 14 - global: 22
+Node, local: 15 - global: 25
+Node, local: 16 - global: 26
+Node, local: 17 - global: 27
+Node, local: 18 - global: 30
+Node, local: 19 - global: 31
+Node, local: 20 - global: 32
+Node, local: 21 - global: 35
+Node, local: 22 - global: 36
+Node, local: 23 - global: 37
+Node, local: 24 - global: 40
+Node, local: 25 - global: 41
+Node, local: 26 - global: 42
+Node, local: 27 - global: 45
+Node, local: 28 - global: 46
+Node, local: 29 - global: 47
+Node, local: 30 - global: 50
+Node, local: 31 - global: 51
+Node, local: 32 - global: 52
+Node, local: 33 - global: 55
+Node, local: 34 - global: 56
+Node, local: 35 - global: 57
+Node, local: 36 - global: 60
+Node, local: 37 - global: 61
+Node, local: 38 - global: 62
+Node, local: 39 - global: 65
+Node, local: 40 - global: 66
+Node, local: 41 - global: 67
+Node, local: 42 - global: 70
+Node, local: 43 - global: 71
+Node, local: 44 - global: 72
+Node, local: 45 - global: 75
+Node, local: 46 - global: 76
+Node, local: 47 - global: 77
+Node, local: 48 - global: 80
+Node, local: 49 - global: 81
+Node, local: 50 - global: 82
+Node, local: 51 - global: 85
+Node, local: 52 - global: 86
+Node, local: 53 - global: 87
+Node, local: 54 - global: 90
+Node, local: 55 - global: 91
+Node, local: 56 - global: 92
+Node, local: 57 - global: 95
+Node, local: 58 - global: 96
+Node, local: 59 - global: 97
+Node, local: 60 - global: 100
+Node, local: 61 - global: 101
+Node, local: 62 - global: 102
+Node, local: 63 - global: 105
+Node, local: 64 - global: 106
+Node, local: 65 - global: 107
+Node, local: 66 - global: 110
+Node, local: 67 - global: 111
+Node, local: 68 - global: 112
+Node, local: 69 - global: 115
+Node, local: 70 - global: 116
+Node, local: 71 - global: 117
+Node, local: 72 - global: 120
+Node, local: 73 - global: 121
+Node, local: 74 - global: 122
+
+Node, domain: 0 - global: 0
+Node, domain: 1 - global: 1
+Node, domain: 2 - global: 2
+Node, domain: 3 - global: 5
+Node, domain: 4 - global: 6
+Node, domain: 5 - global: 7
+Node, domain: 6 - global: 10
+Node, domain: 7 - global: 11
+Node, domain: 8 - global: 12
+Node, domain: 9 - global: 15
+Node, domain: 10 - global: 16
+Node, domain: 11 - global: 17
+Node, domain: 12 - global: 20
+Node, domain: 13 - global: 21
+Node, domain: 14 - global: 22
+Node, domain: 15 - global: 25
+Node, domain: 16 - global: 26
+Node, domain: 17 - global: 27
+Node, domain: 18 - global: 30
+Node, domain: 19 - global: 31
+Node, domain: 20 - global: 32
+Node, domain: 21 - global: 35
+Node, domain: 22 - global: 36
+Node, domain: 23 - global: 37
+Node, domain: 24 - global: 40
+Node, domain: 25 - global: 41
+Node, domain: 26 - global: 42
+Node, domain: 27 - global: 45
+Node, domain: 28 - global: 46
+Node, domain: 29 - global: 47
+Node, domain: 30 - global: 50
+Node, domain: 31 - global: 51
+Node, domain: 32 - global: 52
+Node, domain: 33 - global: 55
+Node, domain: 34 - global: 56
+Node, domain: 35 - global: 57
+Node, domain: 36 - global: 60
+Node, domain: 37 - global: 61
+Node, domain: 38 - global: 62
+Node, domain: 39 - global: 65
+Node, domain: 40 - global: 66
+Node, domain: 41 - global: 67
+Node, domain: 42 - global: 70
+Node, domain: 43 - global: 71
+Node, domain: 44 - global: 72
+Node, domain: 45 - global: 75
+Node, domain: 46 - global: 76
+Node, domain: 47 - global: 77
+Node, domain: 48 - global: 80
+Node, domain: 49 - global: 81
+Node, domain: 50 - global: 82
+Node, domain: 51 - global: 85
+Node, domain: 52 - global: 86
+Node, domain: 53 - global: 87
+Node, domain: 54 - global: 90
+Node, domain: 55 - global: 91
+Node, domain: 56 - global: 92
+Node, domain: 57 - global: 95
+Node, domain: 58 - global: 96
+Node, domain: 59 - global: 97
+Node, domain: 60 - global: 100
+Node, domain: 61 - global: 101
+Node, domain: 62 - global: 102
+Node, domain: 63 - global: 105
+Node, domain: 64 - global: 106
+Node, domain: 65 - global: 107
+Node, domain: 66 - global: 110
+Node, domain: 67 - global: 111
+Node, domain: 68 - global: 112
+Node, domain: 69 - global: 115
+Node, domain: 70 - global: 116
+Node, domain: 71 - global: 117
+Node, domain: 72 - global: 120
+Node, domain: 73 - global: 121
+Node, domain: 74 - global: 122
+Node, domain: 75 - global: 3
+Node, domain: 76 - global: 8
+Node, domain: 77 - global: 13
+Node, domain: 78 - global: 18
+Node, domain: 79 - global: 23
+Node, domain: 80 - global: 28
+Node, domain: 81 - global: 33
+Node, domain: 82 - global: 38
+Node, domain: 83 - global: 43
+Node, domain: 84 - global: 48
+Node, domain: 85 - global: 53
+Node, domain: 86 - global: 58
+Node, domain: 87 - global: 63
+Node, domain: 88 - global: 68
+Node, domain: 89 - global: 73
+Node, domain: 90 - global: 78
+Node, domain: 91 - global: 83
+Node, domain: 92 - global: 88
+Node, domain: 93 - global: 93
+Node, domain: 94 - global: 98
+Node, domain: 95 - global: 103
+Node, domain: 96 - global: 108
+Node, domain: 97 - global: 113
+Node, domain: 98 - global: 118
+Node, domain: 99 - global: 123
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,486 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 2 in use (2 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060680)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 3, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: 0 - domain: 32
+Element, global: 2 - local: 0 - shadow: X - domain: 0
+Element, global: 3 - local: 1 - shadow: X - domain: 1
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: 1 - domain: 33
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: 2 - domain: 34
+Element, global: 10 - local: 4 - shadow: X - domain: 4
+Element, global: 11 - local: 5 - shadow: X - domain: 5
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: 3 - domain: 35
+Element, global: 14 - local: 6 - shadow: X - domain: 6
+Element, global: 15 - local: 7 - shadow: X - domain: 7
+Element, global: 16 - local: X - shadow: X - domain: X
+Element, global: 17 - local: X - shadow: 4 - domain: 36
+Element, global: 18 - local: 8 - shadow: X - domain: 8
+Element, global: 19 - local: 9 - shadow: X - domain: 9
+Element, global: 20 - local: X - shadow: X - domain: X
+Element, global: 21 - local: X - shadow: 5 - domain: 37
+Element, global: 22 - local: 10 - shadow: X - domain: 10
+Element, global: 23 - local: 11 - shadow: X - domain: 11
+Element, global: 24 - local: X - shadow: X - domain: X
+Element, global: 25 - local: X - shadow: 6 - domain: 38
+Element, global: 26 - local: 12 - shadow: X - domain: 12
+Element, global: 27 - local: 13 - shadow: X - domain: 13
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: 7 - domain: 39
+Element, global: 30 - local: 14 - shadow: X - domain: 14
+Element, global: 31 - local: 15 - shadow: X - domain: 15
+Element, global: 32 - local: X - shadow: X - domain: X
+Element, global: 33 - local: X - shadow: 8 - domain: 40
+Element, global: 34 - local: 16 - shadow: X - domain: 16
+Element, global: 35 - local: 17 - shadow: X - domain: 17
+Element, global: 36 - local: X - shadow: X - domain: X
+Element, global: 37 - local: X - shadow: 9 - domain: 41
+Element, global: 38 - local: 18 - shadow: X - domain: 18
+Element, global: 39 - local: 19 - shadow: X - domain: 19
+Element, global: 40 - local: X - shadow: X - domain: X
+Element, global: 41 - local: X - shadow: 10 - domain: 42
+Element, global: 42 - local: 20 - shadow: X - domain: 20
+Element, global: 43 - local: 21 - shadow: X - domain: 21
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: 11 - domain: 43
+Element, global: 46 - local: 22 - shadow: X - domain: 22
+Element, global: 47 - local: 23 - shadow: X - domain: 23
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: 12 - domain: 44
+Element, global: 50 - local: 24 - shadow: X - domain: 24
+Element, global: 51 - local: 25 - shadow: X - domain: 25
+Element, global: 52 - local: X - shadow: X - domain: X
+Element, global: 53 - local: X - shadow: 13 - domain: 45
+Element, global: 54 - local: 26 - shadow: X - domain: 26
+Element, global: 55 - local: 27 - shadow: X - domain: 27
+Element, global: 56 - local: X - shadow: X - domain: X
+Element, global: 57 - local: X - shadow: 14 - domain: 46
+Element, global: 58 - local: 28 - shadow: X - domain: 28
+Element, global: 59 - local: 29 - shadow: X - domain: 29
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: 15 - domain: 47
+Element, global: 62 - local: 30 - shadow: X - domain: 30
+Element, global: 63 - local: 31 - shadow: X - domain: 31
+
+Element, local: 0 - global: 2
+Element, local: 1 - global: 3
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 10
+Element, local: 5 - global: 11
+Element, local: 6 - global: 14
+Element, local: 7 - global: 15
+Element, local: 8 - global: 18
+Element, local: 9 - global: 19
+Element, local: 10 - global: 22
+Element, local: 11 - global: 23
+Element, local: 12 - global: 26
+Element, local: 13 - global: 27
+Element, local: 14 - global: 30
+Element, local: 15 - global: 31
+Element, local: 16 - global: 34
+Element, local: 17 - global: 35
+Element, local: 18 - global: 38
+Element, local: 19 - global: 39
+Element, local: 20 - global: 42
+Element, local: 21 - global: 43
+Element, local: 22 - global: 46
+Element, local: 23 - global: 47
+Element, local: 24 - global: 50
+Element, local: 25 - global: 51
+Element, local: 26 - global: 54
+Element, local: 27 - global: 55
+Element, local: 28 - global: 58
+Element, local: 29 - global: 59
+Element, local: 30 - global: 62
+Element, local: 31 - global: 63
+
+Element, domain: 0 - global: 2
+Element, domain: 1 - global: 3
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 10
+Element, domain: 5 - global: 11
+Element, domain: 6 - global: 14
+Element, domain: 7 - global: 15
+Element, domain: 8 - global: 18
+Element, domain: 9 - global: 19
+Element, domain: 10 - global: 22
+Element, domain: 11 - global: 23
+Element, domain: 12 - global: 26
+Element, domain: 13 - global: 27
+Element, domain: 14 - global: 30
+Element, domain: 15 - global: 31
+Element, domain: 16 - global: 34
+Element, domain: 17 - global: 35
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 42
+Element, domain: 21 - global: 43
+Element, domain: 22 - global: 46
+Element, domain: 23 - global: 47
+Element, domain: 24 - global: 50
+Element, domain: 25 - global: 51
+Element, domain: 26 - global: 54
+Element, domain: 27 - global: 55
+Element, domain: 28 - global: 58
+Element, domain: 29 - global: 59
+Element, domain: 30 - global: 62
+Element, domain: 31 - global: 63
+Element, domain: 32 - global: 1
+Element, domain: 33 - global: 5
+Element, domain: 34 - global: 9
+Element, domain: 35 - global: 13
+Element, domain: 36 - global: 17
+Element, domain: 37 - global: 21
+Element, domain: 38 - global: 25
+Element, domain: 39 - global: 29
+Element, domain: 40 - global: 33
+Element, domain: 41 - global: 37
+Element, domain: 42 - global: 41
+Element, domain: 43 - global: 45
+Element, domain: 44 - global: 49
+Element, domain: 45 - global: 53
+Element, domain: 46 - global: 57
+Element, domain: 47 - global: 61
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: 0 - domain: 75
+Node, global: 2 - local: 0 - shadow: X - domain: 0
+Node, global: 3 - local: 1 - shadow: X - domain: 1
+Node, global: 4 - local: 2 - shadow: X - domain: 2
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: 1 - domain: 76
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: 2 - domain: 77
+Node, global: 12 - local: 6 - shadow: X - domain: 6
+Node, global: 13 - local: 7 - shadow: X - domain: 7
+Node, global: 14 - local: 8 - shadow: X - domain: 8
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: 3 - domain: 78
+Node, global: 17 - local: 9 - shadow: X - domain: 9
+Node, global: 18 - local: 10 - shadow: X - domain: 10
+Node, global: 19 - local: 11 - shadow: X - domain: 11
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: 4 - domain: 79
+Node, global: 22 - local: 12 - shadow: X - domain: 12
+Node, global: 23 - local: 13 - shadow: X - domain: 13
+Node, global: 24 - local: 14 - shadow: X - domain: 14
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: 5 - domain: 80
+Node, global: 27 - local: 15 - shadow: X - domain: 15
+Node, global: 28 - local: 16 - shadow: X - domain: 16
+Node, global: 29 - local: 17 - shadow: X - domain: 17
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: 6 - domain: 81
+Node, global: 32 - local: 18 - shadow: X - domain: 18
+Node, global: 33 - local: 19 - shadow: X - domain: 19
+Node, global: 34 - local: 20 - shadow: X - domain: 20
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: 7 - domain: 82
+Node, global: 37 - local: 21 - shadow: X - domain: 21
+Node, global: 38 - local: 22 - shadow: X - domain: 22
+Node, global: 39 - local: 23 - shadow: X - domain: 23
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: 8 - domain: 83
+Node, global: 42 - local: 24 - shadow: X - domain: 24
+Node, global: 43 - local: 25 - shadow: X - domain: 25
+Node, global: 44 - local: 26 - shadow: X - domain: 26
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: 9 - domain: 84
+Node, global: 47 - local: 27 - shadow: X - domain: 27
+Node, global: 48 - local: 28 - shadow: X - domain: 28
+Node, global: 49 - local: 29 - shadow: X - domain: 29
+Node, global: 50 - local: X - shadow: X - domain: X
+Node, global: 51 - local: X - shadow: 10 - domain: 85
+Node, global: 52 - local: 30 - shadow: X - domain: 30
+Node, global: 53 - local: 31 - shadow: X - domain: 31
+Node, global: 54 - local: 32 - shadow: X - domain: 32
+Node, global: 55 - local: X - shadow: X - domain: X
+Node, global: 56 - local: X - shadow: 11 - domain: 86
+Node, global: 57 - local: 33 - shadow: X - domain: 33
+Node, global: 58 - local: 34 - shadow: X - domain: 34
+Node, global: 59 - local: 35 - shadow: X - domain: 35
+Node, global: 60 - local: X - shadow: X - domain: X
+Node, global: 61 - local: X - shadow: 12 - domain: 87
+Node, global: 62 - local: 36 - shadow: X - domain: 36
+Node, global: 63 - local: 37 - shadow: X - domain: 37
+Node, global: 64 - local: 38 - shadow: X - domain: 38
+Node, global: 65 - local: X - shadow: X - domain: X
+Node, global: 66 - local: X - shadow: 13 - domain: 88
+Node, global: 67 - local: 39 - shadow: X - domain: 39
+Node, global: 68 - local: 40 - shadow: X - domain: 40
+Node, global: 69 - local: 41 - shadow: X - domain: 41
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: 14 - domain: 89
+Node, global: 72 - local: 42 - shadow: X - domain: 42
+Node, global: 73 - local: 43 - shadow: X - domain: 43
+Node, global: 74 - local: 44 - shadow: X - domain: 44
+Node, global: 75 - local: X - shadow: X - domain: X
+Node, global: 76 - local: X - shadow: 15 - domain: 90
+Node, global: 77 - local: 45 - shadow: X - domain: 45
+Node, global: 78 - local: 46 - shadow: X - domain: 46
+Node, global: 79 - local: 47 - shadow: X - domain: 47
+Node, global: 80 - local: X - shadow: X - domain: X
+Node, global: 81 - local: X - shadow: 16 - domain: 91
+Node, global: 82 - local: 48 - shadow: X - domain: 48
+Node, global: 83 - local: 49 - shadow: X - domain: 49
+Node, global: 84 - local: 50 - shadow: X - domain: 50
+Node, global: 85 - local: X - shadow: X - domain: X
+Node, global: 86 - local: X - shadow: 17 - domain: 92
+Node, global: 87 - local: 51 - shadow: X - domain: 51
+Node, global: 88 - local: 52 - shadow: X - domain: 52
+Node, global: 89 - local: 53 - shadow: X - domain: 53
+Node, global: 90 - local: X - shadow: X - domain: X
+Node, global: 91 - local: X - shadow: 18 - domain: 93
+Node, global: 92 - local: 54 - shadow: X - domain: 54
+Node, global: 93 - local: 55 - shadow: X - domain: 55
+Node, global: 94 - local: 56 - shadow: X - domain: 56
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: 19 - domain: 94
+Node, global: 97 - local: 57 - shadow: X - domain: 57
+Node, global: 98 - local: 58 - shadow: X - domain: 58
+Node, global: 99 - local: 59 - shadow: X - domain: 59
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: 20 - domain: 95
+Node, global: 102 - local: 60 - shadow: X - domain: 60
+Node, global: 103 - local: 61 - shadow: X - domain: 61
+Node, global: 104 - local: 62 - shadow: X - domain: 62
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: 21 - domain: 96
+Node, global: 107 - local: 63 - shadow: X - domain: 63
+Node, global: 108 - local: 64 - shadow: X - domain: 64
+Node, global: 109 - local: 65 - shadow: X - domain: 65
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: 22 - domain: 97
+Node, global: 112 - local: 66 - shadow: X - domain: 66
+Node, global: 113 - local: 67 - shadow: X - domain: 67
+Node, global: 114 - local: 68 - shadow: X - domain: 68
+Node, global: 115 - local: X - shadow: X - domain: X
+Node, global: 116 - local: X - shadow: 23 - domain: 98
+Node, global: 117 - local: 69 - shadow: X - domain: 69
+Node, global: 118 - local: 70 - shadow: X - domain: 70
+Node, global: 119 - local: 71 - shadow: X - domain: 71
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: 24 - domain: 99
+Node, global: 122 - local: 72 - shadow: X - domain: 72
+Node, global: 123 - local: 73 - shadow: X - domain: 73
+Node, global: 124 - local: 74 - shadow: X - domain: 74
+
+Node, local: 0 - global: 2
+Node, local: 1 - global: 3
+Node, local: 2 - global: 4
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 9
+Node, local: 6 - global: 12
+Node, local: 7 - global: 13
+Node, local: 8 - global: 14
+Node, local: 9 - global: 17
+Node, local: 10 - global: 18
+Node, local: 11 - global: 19
+Node, local: 12 - global: 22
+Node, local: 13 - global: 23
+Node, local: 14 - global: 24
+Node, local: 15 - global: 27
+Node, local: 16 - global: 28
+Node, local: 17 - global: 29
+Node, local: 18 - global: 32
+Node, local: 19 - global: 33
+Node, local: 20 - global: 34
+Node, local: 21 - global: 37
+Node, local: 22 - global: 38
+Node, local: 23 - global: 39
+Node, local: 24 - global: 42
+Node, local: 25 - global: 43
+Node, local: 26 - global: 44
+Node, local: 27 - global: 47
+Node, local: 28 - global: 48
+Node, local: 29 - global: 49
+Node, local: 30 - global: 52
+Node, local: 31 - global: 53
+Node, local: 32 - global: 54
+Node, local: 33 - global: 57
+Node, local: 34 - global: 58
+Node, local: 35 - global: 59
+Node, local: 36 - global: 62
+Node, local: 37 - global: 63
+Node, local: 38 - global: 64
+Node, local: 39 - global: 67
+Node, local: 40 - global: 68
+Node, local: 41 - global: 69
+Node, local: 42 - global: 72
+Node, local: 43 - global: 73
+Node, local: 44 - global: 74
+Node, local: 45 - global: 77
+Node, local: 46 - global: 78
+Node, local: 47 - global: 79
+Node, local: 48 - global: 82
+Node, local: 49 - global: 83
+Node, local: 50 - global: 84
+Node, local: 51 - global: 87
+Node, local: 52 - global: 88
+Node, local: 53 - global: 89
+Node, local: 54 - global: 92
+Node, local: 55 - global: 93
+Node, local: 56 - global: 94
+Node, local: 57 - global: 97
+Node, local: 58 - global: 98
+Node, local: 59 - global: 99
+Node, local: 60 - global: 102
+Node, local: 61 - global: 103
+Node, local: 62 - global: 104
+Node, local: 63 - global: 107
+Node, local: 64 - global: 108
+Node, local: 65 - global: 109
+Node, local: 66 - global: 112
+Node, local: 67 - global: 113
+Node, local: 68 - global: 114
+Node, local: 69 - global: 117
+Node, local: 70 - global: 118
+Node, local: 71 - global: 119
+Node, local: 72 - global: 122
+Node, local: 73 - global: 123
+Node, local: 74 - global: 124
+
+Node, domain: 0 - global: 2
+Node, domain: 1 - global: 3
+Node, domain: 2 - global: 4
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 12
+Node, domain: 7 - global: 13
+Node, domain: 8 - global: 14
+Node, domain: 9 - global: 17
+Node, domain: 10 - global: 18
+Node, domain: 11 - global: 19
+Node, domain: 12 - global: 22
+Node, domain: 13 - global: 23
+Node, domain: 14 - global: 24
+Node, domain: 15 - global: 27
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 32
+Node, domain: 19 - global: 33
+Node, domain: 20 - global: 34
+Node, domain: 21 - global: 37
+Node, domain: 22 - global: 38
+Node, domain: 23 - global: 39
+Node, domain: 24 - global: 42
+Node, domain: 25 - global: 43
+Node, domain: 26 - global: 44
+Node, domain: 27 - global: 47
+Node, domain: 28 - global: 48
+Node, domain: 29 - global: 49
+Node, domain: 30 - global: 52
+Node, domain: 31 - global: 53
+Node, domain: 32 - global: 54
+Node, domain: 33 - global: 57
+Node, domain: 34 - global: 58
+Node, domain: 35 - global: 59
+Node, domain: 36 - global: 62
+Node, domain: 37 - global: 63
+Node, domain: 38 - global: 64
+Node, domain: 39 - global: 67
+Node, domain: 40 - global: 68
+Node, domain: 41 - global: 69
+Node, domain: 42 - global: 72
+Node, domain: 43 - global: 73
+Node, domain: 44 - global: 74
+Node, domain: 45 - global: 77
+Node, domain: 46 - global: 78
+Node, domain: 47 - global: 79
+Node, domain: 48 - global: 82
+Node, domain: 49 - global: 83
+Node, domain: 50 - global: 84
+Node, domain: 51 - global: 87
+Node, domain: 52 - global: 88
+Node, domain: 53 - global: 89
+Node, domain: 54 - global: 92
+Node, domain: 55 - global: 93
+Node, domain: 56 - global: 94
+Node, domain: 57 - global: 97
+Node, domain: 58 - global: 98
+Node, domain: 59 - global: 99
+Node, domain: 60 - global: 102
+Node, domain: 61 - global: 103
+Node, domain: 62 - global: 104
+Node, domain: 63 - global: 107
+Node, domain: 64 - global: 108
+Node, domain: 65 - global: 109
+Node, domain: 66 - global: 112
+Node, domain: 67 - global: 113
+Node, domain: 68 - global: 114
+Node, domain: 69 - global: 117
+Node, domain: 70 - global: 118
+Node, domain: 71 - global: 119
+Node, domain: 72 - global: 122
+Node, domain: 73 - global: 123
+Node, domain: 74 - global: 124
+Node, domain: 75 - global: 1
+Node, domain: 76 - global: 6
+Node, domain: 77 - global: 11
+Node, domain: 78 - global: 16
+Node, domain: 79 - global: 21
+Node, domain: 80 - global: 26
+Node, domain: 81 - global: 31
+Node, domain: 82 - global: 36
+Node, domain: 83 - global: 41
+Node, domain: 84 - global: 46
+Node, domain: 85 - global: 51
+Node, domain: 86 - global: 56
+Node, domain: 87 - global: 61
+Node, domain: 88 - global: 66
+Node, domain: 89 - global: 71
+Node, domain: 90 - global: 76
+Node, domain: 91 - global: 81
+Node, domain: 92 - global: 86
+Node, domain: 93 - global: 91
+Node, domain: 94 - global: 96
+Node, domain: 95 - global: 101
+Node, domain: 96 - global: 106
+Node, domain: 97 - global: 111
+Node, domain: 98 - global: 116
+Node, domain: 99 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,486 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Current processor is 1 of 2 in use (3 total).
+allowUnusedCPUs: True
+allowPartitionOnNode: True
+allowPartitionOnElement: False
+allowUnbalancing: False
+shadowDepth: 1
+procTopology:
+	IJKTopology (ptr): (0x8060ad0)
+		size : (2,1,1)
+		isPeriodic : (False,False,False)
+		dynamicSizes : True
+partitionedAxis: { True, False, False }
+partitionCounts: { 2, 1, 1 }
+elementGlobalCounts: { 4, 4, 4 }
+elementGlobalCount: 64
+	elementLocalCounts[0]: { 2, 4, 4 }
+	elementLocalCounts[1]: { 2, 4, 4 }
+elementDomainCounts: { 3, 4, 4 }
+nodeGlobalCounts: { 5, 5, 5 }
+nodeGlobalCount: 125
+	nodeLocalCounts[0]: { 3, 5, 5 }
+	nodeLocalCounts[1]: { 3, 5, 5 }
+Element, global: 0 - local: X - shadow: X - domain: X
+Element, global: 1 - local: X - shadow: 0 - domain: 32
+Element, global: 2 - local: 0 - shadow: X - domain: 0
+Element, global: 3 - local: 1 - shadow: X - domain: 1
+Element, global: 4 - local: X - shadow: X - domain: X
+Element, global: 5 - local: X - shadow: 1 - domain: 33
+Element, global: 6 - local: 2 - shadow: X - domain: 2
+Element, global: 7 - local: 3 - shadow: X - domain: 3
+Element, global: 8 - local: X - shadow: X - domain: X
+Element, global: 9 - local: X - shadow: 2 - domain: 34
+Element, global: 10 - local: 4 - shadow: X - domain: 4
+Element, global: 11 - local: 5 - shadow: X - domain: 5
+Element, global: 12 - local: X - shadow: X - domain: X
+Element, global: 13 - local: X - shadow: 3 - domain: 35
+Element, global: 14 - local: 6 - shadow: X - domain: 6
+Element, global: 15 - local: 7 - shadow: X - domain: 7
+Element, global: 16 - local: X - shadow: X - domain: X
+Element, global: 17 - local: X - shadow: 4 - domain: 36
+Element, global: 18 - local: 8 - shadow: X - domain: 8
+Element, global: 19 - local: 9 - shadow: X - domain: 9
+Element, global: 20 - local: X - shadow: X - domain: X
+Element, global: 21 - local: X - shadow: 5 - domain: 37
+Element, global: 22 - local: 10 - shadow: X - domain: 10
+Element, global: 23 - local: 11 - shadow: X - domain: 11
+Element, global: 24 - local: X - shadow: X - domain: X
+Element, global: 25 - local: X - shadow: 6 - domain: 38
+Element, global: 26 - local: 12 - shadow: X - domain: 12
+Element, global: 27 - local: 13 - shadow: X - domain: 13
+Element, global: 28 - local: X - shadow: X - domain: X
+Element, global: 29 - local: X - shadow: 7 - domain: 39
+Element, global: 30 - local: 14 - shadow: X - domain: 14
+Element, global: 31 - local: 15 - shadow: X - domain: 15
+Element, global: 32 - local: X - shadow: X - domain: X
+Element, global: 33 - local: X - shadow: 8 - domain: 40
+Element, global: 34 - local: 16 - shadow: X - domain: 16
+Element, global: 35 - local: 17 - shadow: X - domain: 17
+Element, global: 36 - local: X - shadow: X - domain: X
+Element, global: 37 - local: X - shadow: 9 - domain: 41
+Element, global: 38 - local: 18 - shadow: X - domain: 18
+Element, global: 39 - local: 19 - shadow: X - domain: 19
+Element, global: 40 - local: X - shadow: X - domain: X
+Element, global: 41 - local: X - shadow: 10 - domain: 42
+Element, global: 42 - local: 20 - shadow: X - domain: 20
+Element, global: 43 - local: 21 - shadow: X - domain: 21
+Element, global: 44 - local: X - shadow: X - domain: X
+Element, global: 45 - local: X - shadow: 11 - domain: 43
+Element, global: 46 - local: 22 - shadow: X - domain: 22
+Element, global: 47 - local: 23 - shadow: X - domain: 23
+Element, global: 48 - local: X - shadow: X - domain: X
+Element, global: 49 - local: X - shadow: 12 - domain: 44
+Element, global: 50 - local: 24 - shadow: X - domain: 24
+Element, global: 51 - local: 25 - shadow: X - domain: 25
+Element, global: 52 - local: X - shadow: X - domain: X
+Element, global: 53 - local: X - shadow: 13 - domain: 45
+Element, global: 54 - local: 26 - shadow: X - domain: 26
+Element, global: 55 - local: 27 - shadow: X - domain: 27
+Element, global: 56 - local: X - shadow: X - domain: X
+Element, global: 57 - local: X - shadow: 14 - domain: 46
+Element, global: 58 - local: 28 - shadow: X - domain: 28
+Element, global: 59 - local: 29 - shadow: X - domain: 29
+Element, global: 60 - local: X - shadow: X - domain: X
+Element, global: 61 - local: X - shadow: 15 - domain: 47
+Element, global: 62 - local: 30 - shadow: X - domain: 30
+Element, global: 63 - local: 31 - shadow: X - domain: 31
+
+Element, local: 0 - global: 2
+Element, local: 1 - global: 3
+Element, local: 2 - global: 6
+Element, local: 3 - global: 7
+Element, local: 4 - global: 10
+Element, local: 5 - global: 11
+Element, local: 6 - global: 14
+Element, local: 7 - global: 15
+Element, local: 8 - global: 18
+Element, local: 9 - global: 19
+Element, local: 10 - global: 22
+Element, local: 11 - global: 23
+Element, local: 12 - global: 26
+Element, local: 13 - global: 27
+Element, local: 14 - global: 30
+Element, local: 15 - global: 31
+Element, local: 16 - global: 34
+Element, local: 17 - global: 35
+Element, local: 18 - global: 38
+Element, local: 19 - global: 39
+Element, local: 20 - global: 42
+Element, local: 21 - global: 43
+Element, local: 22 - global: 46
+Element, local: 23 - global: 47
+Element, local: 24 - global: 50
+Element, local: 25 - global: 51
+Element, local: 26 - global: 54
+Element, local: 27 - global: 55
+Element, local: 28 - global: 58
+Element, local: 29 - global: 59
+Element, local: 30 - global: 62
+Element, local: 31 - global: 63
+
+Element, domain: 0 - global: 2
+Element, domain: 1 - global: 3
+Element, domain: 2 - global: 6
+Element, domain: 3 - global: 7
+Element, domain: 4 - global: 10
+Element, domain: 5 - global: 11
+Element, domain: 6 - global: 14
+Element, domain: 7 - global: 15
+Element, domain: 8 - global: 18
+Element, domain: 9 - global: 19
+Element, domain: 10 - global: 22
+Element, domain: 11 - global: 23
+Element, domain: 12 - global: 26
+Element, domain: 13 - global: 27
+Element, domain: 14 - global: 30
+Element, domain: 15 - global: 31
+Element, domain: 16 - global: 34
+Element, domain: 17 - global: 35
+Element, domain: 18 - global: 38
+Element, domain: 19 - global: 39
+Element, domain: 20 - global: 42
+Element, domain: 21 - global: 43
+Element, domain: 22 - global: 46
+Element, domain: 23 - global: 47
+Element, domain: 24 - global: 50
+Element, domain: 25 - global: 51
+Element, domain: 26 - global: 54
+Element, domain: 27 - global: 55
+Element, domain: 28 - global: 58
+Element, domain: 29 - global: 59
+Element, domain: 30 - global: 62
+Element, domain: 31 - global: 63
+Element, domain: 32 - global: 1
+Element, domain: 33 - global: 5
+Element, domain: 34 - global: 9
+Element, domain: 35 - global: 13
+Element, domain: 36 - global: 17
+Element, domain: 37 - global: 21
+Element, domain: 38 - global: 25
+Element, domain: 39 - global: 29
+Element, domain: 40 - global: 33
+Element, domain: 41 - global: 37
+Element, domain: 42 - global: 41
+Element, domain: 43 - global: 45
+Element, domain: 44 - global: 49
+Element, domain: 45 - global: 53
+Element, domain: 46 - global: 57
+Element, domain: 47 - global: 61
+
+Node, global: 0 - local: X - shadow: X - domain: X
+Node, global: 1 - local: X - shadow: 0 - domain: 75
+Node, global: 2 - local: 0 - shadow: X - domain: 0
+Node, global: 3 - local: 1 - shadow: X - domain: 1
+Node, global: 4 - local: 2 - shadow: X - domain: 2
+Node, global: 5 - local: X - shadow: X - domain: X
+Node, global: 6 - local: X - shadow: 1 - domain: 76
+Node, global: 7 - local: 3 - shadow: X - domain: 3
+Node, global: 8 - local: 4 - shadow: X - domain: 4
+Node, global: 9 - local: 5 - shadow: X - domain: 5
+Node, global: 10 - local: X - shadow: X - domain: X
+Node, global: 11 - local: X - shadow: 2 - domain: 77
+Node, global: 12 - local: 6 - shadow: X - domain: 6
+Node, global: 13 - local: 7 - shadow: X - domain: 7
+Node, global: 14 - local: 8 - shadow: X - domain: 8
+Node, global: 15 - local: X - shadow: X - domain: X
+Node, global: 16 - local: X - shadow: 3 - domain: 78
+Node, global: 17 - local: 9 - shadow: X - domain: 9
+Node, global: 18 - local: 10 - shadow: X - domain: 10
+Node, global: 19 - local: 11 - shadow: X - domain: 11
+Node, global: 20 - local: X - shadow: X - domain: X
+Node, global: 21 - local: X - shadow: 4 - domain: 79
+Node, global: 22 - local: 12 - shadow: X - domain: 12
+Node, global: 23 - local: 13 - shadow: X - domain: 13
+Node, global: 24 - local: 14 - shadow: X - domain: 14
+Node, global: 25 - local: X - shadow: X - domain: X
+Node, global: 26 - local: X - shadow: 5 - domain: 80
+Node, global: 27 - local: 15 - shadow: X - domain: 15
+Node, global: 28 - local: 16 - shadow: X - domain: 16
+Node, global: 29 - local: 17 - shadow: X - domain: 17
+Node, global: 30 - local: X - shadow: X - domain: X
+Node, global: 31 - local: X - shadow: 6 - domain: 81
+Node, global: 32 - local: 18 - shadow: X - domain: 18
+Node, global: 33 - local: 19 - shadow: X - domain: 19
+Node, global: 34 - local: 20 - shadow: X - domain: 20
+Node, global: 35 - local: X - shadow: X - domain: X
+Node, global: 36 - local: X - shadow: 7 - domain: 82
+Node, global: 37 - local: 21 - shadow: X - domain: 21
+Node, global: 38 - local: 22 - shadow: X - domain: 22
+Node, global: 39 - local: 23 - shadow: X - domain: 23
+Node, global: 40 - local: X - shadow: X - domain: X
+Node, global: 41 - local: X - shadow: 8 - domain: 83
+Node, global: 42 - local: 24 - shadow: X - domain: 24
+Node, global: 43 - local: 25 - shadow: X - domain: 25
+Node, global: 44 - local: 26 - shadow: X - domain: 26
+Node, global: 45 - local: X - shadow: X - domain: X
+Node, global: 46 - local: X - shadow: 9 - domain: 84
+Node, global: 47 - local: 27 - shadow: X - domain: 27
+Node, global: 48 - local: 28 - shadow: X - domain: 28
+Node, global: 49 - local: 29 - shadow: X - domain: 29
+Node, global: 50 - local: X - shadow: X - domain: X
+Node, global: 51 - local: X - shadow: 10 - domain: 85
+Node, global: 52 - local: 30 - shadow: X - domain: 30
+Node, global: 53 - local: 31 - shadow: X - domain: 31
+Node, global: 54 - local: 32 - shadow: X - domain: 32
+Node, global: 55 - local: X - shadow: X - domain: X
+Node, global: 56 - local: X - shadow: 11 - domain: 86
+Node, global: 57 - local: 33 - shadow: X - domain: 33
+Node, global: 58 - local: 34 - shadow: X - domain: 34
+Node, global: 59 - local: 35 - shadow: X - domain: 35
+Node, global: 60 - local: X - shadow: X - domain: X
+Node, global: 61 - local: X - shadow: 12 - domain: 87
+Node, global: 62 - local: 36 - shadow: X - domain: 36
+Node, global: 63 - local: 37 - shadow: X - domain: 37
+Node, global: 64 - local: 38 - shadow: X - domain: 38
+Node, global: 65 - local: X - shadow: X - domain: X
+Node, global: 66 - local: X - shadow: 13 - domain: 88
+Node, global: 67 - local: 39 - shadow: X - domain: 39
+Node, global: 68 - local: 40 - shadow: X - domain: 40
+Node, global: 69 - local: 41 - shadow: X - domain: 41
+Node, global: 70 - local: X - shadow: X - domain: X
+Node, global: 71 - local: X - shadow: 14 - domain: 89
+Node, global: 72 - local: 42 - shadow: X - domain: 42
+Node, global: 73 - local: 43 - shadow: X - domain: 43
+Node, global: 74 - local: 44 - shadow: X - domain: 44
+Node, global: 75 - local: X - shadow: X - domain: X
+Node, global: 76 - local: X - shadow: 15 - domain: 90
+Node, global: 77 - local: 45 - shadow: X - domain: 45
+Node, global: 78 - local: 46 - shadow: X - domain: 46
+Node, global: 79 - local: 47 - shadow: X - domain: 47
+Node, global: 80 - local: X - shadow: X - domain: X
+Node, global: 81 - local: X - shadow: 16 - domain: 91
+Node, global: 82 - local: 48 - shadow: X - domain: 48
+Node, global: 83 - local: 49 - shadow: X - domain: 49
+Node, global: 84 - local: 50 - shadow: X - domain: 50
+Node, global: 85 - local: X - shadow: X - domain: X
+Node, global: 86 - local: X - shadow: 17 - domain: 92
+Node, global: 87 - local: 51 - shadow: X - domain: 51
+Node, global: 88 - local: 52 - shadow: X - domain: 52
+Node, global: 89 - local: 53 - shadow: X - domain: 53
+Node, global: 90 - local: X - shadow: X - domain: X
+Node, global: 91 - local: X - shadow: 18 - domain: 93
+Node, global: 92 - local: 54 - shadow: X - domain: 54
+Node, global: 93 - local: 55 - shadow: X - domain: 55
+Node, global: 94 - local: 56 - shadow: X - domain: 56
+Node, global: 95 - local: X - shadow: X - domain: X
+Node, global: 96 - local: X - shadow: 19 - domain: 94
+Node, global: 97 - local: 57 - shadow: X - domain: 57
+Node, global: 98 - local: 58 - shadow: X - domain: 58
+Node, global: 99 - local: 59 - shadow: X - domain: 59
+Node, global: 100 - local: X - shadow: X - domain: X
+Node, global: 101 - local: X - shadow: 20 - domain: 95
+Node, global: 102 - local: 60 - shadow: X - domain: 60
+Node, global: 103 - local: 61 - shadow: X - domain: 61
+Node, global: 104 - local: 62 - shadow: X - domain: 62
+Node, global: 105 - local: X - shadow: X - domain: X
+Node, global: 106 - local: X - shadow: 21 - domain: 96
+Node, global: 107 - local: 63 - shadow: X - domain: 63
+Node, global: 108 - local: 64 - shadow: X - domain: 64
+Node, global: 109 - local: 65 - shadow: X - domain: 65
+Node, global: 110 - local: X - shadow: X - domain: X
+Node, global: 111 - local: X - shadow: 22 - domain: 97
+Node, global: 112 - local: 66 - shadow: X - domain: 66
+Node, global: 113 - local: 67 - shadow: X - domain: 67
+Node, global: 114 - local: 68 - shadow: X - domain: 68
+Node, global: 115 - local: X - shadow: X - domain: X
+Node, global: 116 - local: X - shadow: 23 - domain: 98
+Node, global: 117 - local: 69 - shadow: X - domain: 69
+Node, global: 118 - local: 70 - shadow: X - domain: 70
+Node, global: 119 - local: 71 - shadow: X - domain: 71
+Node, global: 120 - local: X - shadow: X - domain: X
+Node, global: 121 - local: X - shadow: 24 - domain: 99
+Node, global: 122 - local: 72 - shadow: X - domain: 72
+Node, global: 123 - local: 73 - shadow: X - domain: 73
+Node, global: 124 - local: 74 - shadow: X - domain: 74
+
+Node, local: 0 - global: 2
+Node, local: 1 - global: 3
+Node, local: 2 - global: 4
+Node, local: 3 - global: 7
+Node, local: 4 - global: 8
+Node, local: 5 - global: 9
+Node, local: 6 - global: 12
+Node, local: 7 - global: 13
+Node, local: 8 - global: 14
+Node, local: 9 - global: 17
+Node, local: 10 - global: 18
+Node, local: 11 - global: 19
+Node, local: 12 - global: 22
+Node, local: 13 - global: 23
+Node, local: 14 - global: 24
+Node, local: 15 - global: 27
+Node, local: 16 - global: 28
+Node, local: 17 - global: 29
+Node, local: 18 - global: 32
+Node, local: 19 - global: 33
+Node, local: 20 - global: 34
+Node, local: 21 - global: 37
+Node, local: 22 - global: 38
+Node, local: 23 - global: 39
+Node, local: 24 - global: 42
+Node, local: 25 - global: 43
+Node, local: 26 - global: 44
+Node, local: 27 - global: 47
+Node, local: 28 - global: 48
+Node, local: 29 - global: 49
+Node, local: 30 - global: 52
+Node, local: 31 - global: 53
+Node, local: 32 - global: 54
+Node, local: 33 - global: 57
+Node, local: 34 - global: 58
+Node, local: 35 - global: 59
+Node, local: 36 - global: 62
+Node, local: 37 - global: 63
+Node, local: 38 - global: 64
+Node, local: 39 - global: 67
+Node, local: 40 - global: 68
+Node, local: 41 - global: 69
+Node, local: 42 - global: 72
+Node, local: 43 - global: 73
+Node, local: 44 - global: 74
+Node, local: 45 - global: 77
+Node, local: 46 - global: 78
+Node, local: 47 - global: 79
+Node, local: 48 - global: 82
+Node, local: 49 - global: 83
+Node, local: 50 - global: 84
+Node, local: 51 - global: 87
+Node, local: 52 - global: 88
+Node, local: 53 - global: 89
+Node, local: 54 - global: 92
+Node, local: 55 - global: 93
+Node, local: 56 - global: 94
+Node, local: 57 - global: 97
+Node, local: 58 - global: 98
+Node, local: 59 - global: 99
+Node, local: 60 - global: 102
+Node, local: 61 - global: 103
+Node, local: 62 - global: 104
+Node, local: 63 - global: 107
+Node, local: 64 - global: 108
+Node, local: 65 - global: 109
+Node, local: 66 - global: 112
+Node, local: 67 - global: 113
+Node, local: 68 - global: 114
+Node, local: 69 - global: 117
+Node, local: 70 - global: 118
+Node, local: 71 - global: 119
+Node, local: 72 - global: 122
+Node, local: 73 - global: 123
+Node, local: 74 - global: 124
+
+Node, domain: 0 - global: 2
+Node, domain: 1 - global: 3
+Node, domain: 2 - global: 4
+Node, domain: 3 - global: 7
+Node, domain: 4 - global: 8
+Node, domain: 5 - global: 9
+Node, domain: 6 - global: 12
+Node, domain: 7 - global: 13
+Node, domain: 8 - global: 14
+Node, domain: 9 - global: 17
+Node, domain: 10 - global: 18
+Node, domain: 11 - global: 19
+Node, domain: 12 - global: 22
+Node, domain: 13 - global: 23
+Node, domain: 14 - global: 24
+Node, domain: 15 - global: 27
+Node, domain: 16 - global: 28
+Node, domain: 17 - global: 29
+Node, domain: 18 - global: 32
+Node, domain: 19 - global: 33
+Node, domain: 20 - global: 34
+Node, domain: 21 - global: 37
+Node, domain: 22 - global: 38
+Node, domain: 23 - global: 39
+Node, domain: 24 - global: 42
+Node, domain: 25 - global: 43
+Node, domain: 26 - global: 44
+Node, domain: 27 - global: 47
+Node, domain: 28 - global: 48
+Node, domain: 29 - global: 49
+Node, domain: 30 - global: 52
+Node, domain: 31 - global: 53
+Node, domain: 32 - global: 54
+Node, domain: 33 - global: 57
+Node, domain: 34 - global: 58
+Node, domain: 35 - global: 59
+Node, domain: 36 - global: 62
+Node, domain: 37 - global: 63
+Node, domain: 38 - global: 64
+Node, domain: 39 - global: 67
+Node, domain: 40 - global: 68
+Node, domain: 41 - global: 69
+Node, domain: 42 - global: 72
+Node, domain: 43 - global: 73
+Node, domain: 44 - global: 74
+Node, domain: 45 - global: 77
+Node, domain: 46 - global: 78
+Node, domain: 47 - global: 79
+Node, domain: 48 - global: 82
+Node, domain: 49 - global: 83
+Node, domain: 50 - global: 84
+Node, domain: 51 - global: 87
+Node, domain: 52 - global: 88
+Node, domain: 53 - global: 89
+Node, domain: 54 - global: 92
+Node, domain: 55 - global: 93
+Node, domain: 56 - global: 94
+Node, domain: 57 - global: 97
+Node, domain: 58 - global: 98
+Node, domain: 59 - global: 99
+Node, domain: 60 - global: 102
+Node, domain: 61 - global: 103
+Node, domain: 62 - global: 104
+Node, domain: 63 - global: 107
+Node, domain: 64 - global: 108
+Node, domain: 65 - global: 109
+Node, domain: 66 - global: 112
+Node, domain: 67 - global: 113
+Node, domain: 68 - global: 114
+Node, domain: 69 - global: 117
+Node, domain: 70 - global: 118
+Node, domain: 71 - global: 119
+Node, domain: 72 - global: 122
+Node, domain: 73 - global: 123
+Node, domain: 74 - global: 124
+Node, domain: 75 - global: 1
+Node, domain: 76 - global: 6
+Node, domain: 77 - global: 11
+Node, domain: 78 - global: 16
+Node, domain: 79 - global: 21
+Node, domain: 80 - global: 26
+Node, domain: 81 - global: 31
+Node, domain: 82 - global: 36
+Node, domain: 83 - global: 41
+Node, domain: 84 - global: 46
+Node, domain: 85 - global: 51
+Node, domain: 86 - global: 56
+Node, domain: 87 - global: 61
+Node, domain: 88 - global: 66
+Node, domain: 89 - global: 71
+Node, domain: 90 - global: 76
+Node, domain: 91 - global: 81
+Node, domain: 92 - global: 86
+Node, domain: 93 - global: 91
+Node, domain: 94 - global: 96
+Node, domain: 95 - global: 101
+Node, domain: 96 - global: 106
+Node, domain: 97 - global: 111
+Node, domain: 98 - global: 116
+Node, domain: 99 - global: 121
+
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+	Checking general partitions etc
+	Checking the 64 individual items
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,13 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Corner Node Layout
+Rank 2 not in use.
+
+Body Node Layout
+Checking body node decomp has same element decomp as corner node decomp:
+Rank 2 not in use.
+	The decomps matched for the given item types
+	Passed.
+Checking body node decomp has same node decomp as it's element decomp:
+Rank 2 not in use.
+	The decomps matched for the given item types
+	Passed.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,439 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testHexaMD.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include <assert.h>
+
+struct _Node
+{
+	double temp;
+};
+
+struct _Element
+{
+	double temp;
+};
+
+
+void PrintDecompInfoOfHexaMD( HexaMD* decomp, int rank ) {	
+
+	if( rank < decomp->procsInUse ) {
+		Partition_Index		proc_I;
+		Node_GlobalIndex	gNode_I;
+		Node_LocalIndex		lNode_I;
+		Node_DomainIndex	dNode_I;
+		Element_GlobalIndex	gElt_I;
+		Element_LocalIndex	lElt_I;
+		Element_DomainIndex	dElt_I;
+		Stream*                 outStream = Journal_Register( Info_Type, "testHexaMD" );
+		
+		printf( "Current processor is %d of %d in use (%d total).\n",
+			rank, decomp->procsInUse, decomp->nproc );
+		printf( "allowUnusedCPUs: %s\n", StG_BoolToStringMap[decomp->allowUnusedCPUs] );
+		printf( "allowPartitionOnNode: %s\n", StG_BoolToStringMap[decomp->allowPartitionOnNode] );
+		printf( "allowPartitionOnElement: %s\n", StG_BoolToStringMap[decomp->allowPartitionOnElement] );
+		printf( "allowUnbalancing: %s\n", StG_BoolToStringMap[decomp->allowUnbalancing] );
+		printf( "shadowDepth: %u\n", decomp->shadowDepth );
+		printf( "procTopology:\n" );
+		Stream_Indent( outStream );
+		IJKTopology_PrintConcise( (IJKTopology*)decomp->procTopology, outStream );
+		Stream_UnIndent( outStream );
+		
+		printf( "partitionedAxis: { %s, %s, %s }\n",
+			StG_BoolToStringMap[decomp->partitionedAxis[0]], 
+			StG_BoolToStringMap[decomp->partitionedAxis[1]],
+			StG_BoolToStringMap[decomp->partitionedAxis[2]] );
+		printf( "partitionCounts: { %u, %u, %u }\n", decomp->partition3DCounts[0], decomp->partition3DCounts[1], 
+			decomp->partition3DCounts[2] );
+		
+		printf( "elementGlobalCounts: { %u, %u, %u }\n", decomp->elementGlobal3DCounts[0], decomp->elementGlobal3DCounts[1], 
+			decomp->elementGlobal3DCounts[2] );
+		printf( "elementGlobalCount: %u\n", decomp->elementGlobalCount ); 
+		assert( decomp->elementGlobalCount == ( decomp->elementGlobal3DCounts[0] * decomp->elementGlobal3DCounts[1]
+			* decomp->elementGlobal3DCounts[2] ) );
+		for( proc_I = 0; proc_I < decomp->procsInUse; proc_I++ ) {
+			printf( "\telementLocalCounts[%u]: { %u, %u, %u }\n", proc_I, decomp->elementLocal3DCounts[proc_I][0], 
+				decomp->elementLocal3DCounts[proc_I][1], decomp->elementLocal3DCounts[proc_I][2] );
+		}
+		printf( "elementDomainCounts: { %u, %u, %u }\n", decomp->elementDomain3DCounts[0], decomp->elementDomain3DCounts[1], 
+			decomp->elementDomain3DCounts[2] );
+		
+		printf( "nodeGlobalCounts: { %u, %u, %u }\n", decomp->nodeGlobal3DCounts[0], decomp->nodeGlobal3DCounts[1], 
+			decomp->nodeGlobal3DCounts[2] );
+		printf( "nodeGlobalCount: %u\n", decomp->nodeGlobalCount ); 
+		assert( decomp->nodeGlobalCount == ( decomp->nodeGlobal3DCounts[0] * decomp->nodeGlobal3DCounts[1]
+			* decomp->nodeGlobal3DCounts[2] ) );
+		for( proc_I = 0; proc_I < decomp->procsInUse; proc_I++ ) {
+			printf( "\tnodeLocalCounts[%u]: { %u, %u, %u }\n", proc_I, decomp->nodeLocal3DCounts[proc_I][0], 
+				decomp->nodeLocal3DCounts[proc_I][1], decomp->nodeLocal3DCounts[proc_I][2] );
+		}
+
+		
+		for (gElt_I = 0; gElt_I < decomp->elementGlobalCount; gElt_I++)
+		{
+			Element_LocalIndex	localElt;
+			Element_ShadowIndex	shadowElt;
+			Element_DomainIndex	domainElt;
+			
+			localElt = decomp->elementMapGlobalToLocal(decomp, gElt_I);
+			shadowElt = decomp->elementMapGlobalToShadow(decomp, gElt_I);
+			domainElt = decomp->elementMapGlobalToDomain(decomp, gElt_I);
+			printf("Element, global: %u - ", gElt_I);
+			if (localElt < decomp->elementLocalCount)
+				printf("local: %u - ", localElt);
+			else
+				printf("local: X - ");
+			if (shadowElt < decomp->elementShadowCount)
+				printf("shadow: %u - ", shadowElt);
+			else
+				printf("shadow: X - ");
+			if (domainElt < decomp->elementDomainCount)
+				printf("domain: %u\n", domainElt);
+			else
+				printf("domain: X\n");
+		}
+		printf("\n");
+		
+		for (lElt_I = 0; lElt_I < decomp->elementLocalCount; lElt_I++)
+		{
+			Element_GlobalIndex	globalElement;
+			
+			globalElement = decomp->elementMapLocalToGlobal(decomp, lElt_I);
+			printf("Element, local: %u - ", lElt_I);
+			if (globalElement < decomp->elementGlobalCount)
+				printf("global: %u\n", globalElement);
+			else
+				printf("global: X\n");
+		}
+		printf("\n");
+		
+		for (dElt_I = 0; dElt_I < decomp->elementDomainCount; dElt_I++)
+		{
+			Element_GlobalIndex	globalElement;
+			
+			globalElement = decomp->elementMapDomainToGlobal(decomp, dElt_I);
+			printf("Element, domain: %u - ", dElt_I);
+			if (globalElement < decomp->elementGlobalCount)
+				printf("global: %u\n", globalElement);
+			else
+				printf("global: X\n");
+		}
+		printf("\n");
+		
+		for (gNode_I = 0; gNode_I < decomp->nodeGlobalCount; gNode_I++)
+		{
+			Node_LocalIndex		localNode;
+			Node_ShadowIndex	shadowNode;
+			Node_DomainIndex	domainNode;
+			
+			localNode = decomp->nodeMapGlobalToLocal(decomp, gNode_I);
+			shadowNode = decomp->nodeMapGlobalToShadow(decomp, gNode_I);
+			domainNode = decomp->nodeMapGlobalToDomain(decomp, gNode_I);
+			printf("Node, global: %u - ", gNode_I);
+			if (localNode < decomp->nodeLocalCount)
+				printf("local: %u - ", localNode);
+			else
+				printf("local: X - ");
+			if (shadowNode < decomp->nodeShadowCount)
+				printf("shadow: %u - ", shadowNode);
+			else
+				printf("shadow: X - ");
+			if (domainNode < decomp->nodeDomainCount)
+				printf("domain: %u\n", domainNode);
+			else
+				printf("domain: X\n");
+		}
+		printf("\n");
+		
+		for (lNode_I = 0; lNode_I < decomp->nodeLocalCount; lNode_I++)
+		{
+			Node_GlobalIndex	globalNode;
+			
+			globalNode = decomp->nodeMapLocalToGlobal(decomp, lNode_I);
+			printf("Node, local: %u - ", lNode_I);
+			if (globalNode < decomp->nodeGlobalCount)
+				printf("global: %u\n", globalNode);
+			else
+				printf("global: X\n");
+		}
+		printf("\n");
+		
+		for (dNode_I = 0; dNode_I < decomp->nodeDomainCount; dNode_I++)
+		{
+			Node_GlobalIndex globalNode;
+			
+			globalNode = decomp->nodeMapDomainToGlobal(decomp, dNode_I);
+			printf("Node, domain: %u - ", dNode_I);
+			if (globalNode < decomp->nodeGlobalCount)
+				printf("global: %u\n", globalNode);
+			else
+				printf("global: X\n");
+		}
+		printf("\n");
+	}
+	else {
+		printf( "Rank %u not in use.\n", rank );
+	}	
+}
+
+
+Bool CheckDecompItemsAreDecomposedIdentically( HexaMD* decomp1, MeshItemType decomp1ItemType, 
+		HexaMD* decomp2, MeshItemType decomp2ItemType, int rank )
+{	
+
+	if( rank < decomp1->procsInUse ) {
+		int                     ii;
+		Partition_Index		proc_I;
+		Element_GlobalIndex	gItem_I;
+		Dimension_Index         dim_I;
+		Index*                  itemGlobal3DCounts[2];
+		Element_LocalIJK*       itemLocal3DCounts[2];
+		MeshDecomp_Node_MapGlobalToLocalFunction*   itemGlobalToLocalMap[2];
+		MeshDecomp_Node_MapGlobalToShadowFunction*  itemGlobalToShadowMap[2];
+		MeshDecomp_Node_MapGlobalToDomainFunction*  itemGlobalToDomainMap[2];
+		HexaMD*                 decomp;
+		MeshItemType            decompItemType;
+		GlobalIndex             globalCount;
+		
+		printf("\tChecking general partitions etc\n" );
+		for ( dim_I = 0; dim_I < 3; dim_I++ )
+			assert( decomp1->partitionedAxis[dim_I] == decomp2->partitionedAxis[dim_I] );
+		for ( dim_I = 0; dim_I < 3; dim_I++ )
+			assert( decomp1->partition3DCounts[dim_I] == decomp2->partition3DCounts[dim_I] );
+
+		/* Set up which tables to check betweenm depending on which item types we want to check are equal */
+		for ( ii=0; ii < 2; ii++ ) {	
+			if ( ii == 0 ) {
+				decomp = decomp1;
+				decompItemType = decomp1ItemType;
+			}
+			else {
+				decomp = decomp2;
+				decompItemType = decomp2ItemType;
+			}
+
+			if ( decompItemType == ELEMENT_ITEM_TYPE ) {
+				itemGlobal3DCounts[ii] = decomp->elementGlobal3DCounts;
+				itemLocal3DCounts[ii] = decomp->elementLocal3DCounts;
+				itemGlobalToLocalMap[ii] = decomp->elementMapGlobalToLocal;
+				itemGlobalToShadowMap[ii] = decomp->elementMapGlobalToShadow;
+				itemGlobalToDomainMap[ii] = decomp->elementMapGlobalToDomain;
+			}
+			else {	/* NODE_ITEM_TYPE */
+				itemGlobal3DCounts[ii] = decomp->nodeGlobal3DCounts;
+				itemLocal3DCounts[ii] = decomp->nodeLocal3DCounts;
+				itemGlobalToLocalMap[ii] = decomp->nodeMapGlobalToLocal;
+				itemGlobalToShadowMap[ii] = decomp->nodeMapGlobalToShadow;
+				itemGlobalToDomainMap[ii] = decomp->nodeMapGlobalToDomain;
+			}
+		}
+		
+		for ( dim_I = 0; dim_I < 3; dim_I++ )
+			assert( itemGlobal3DCounts[0][dim_I] == itemGlobal3DCounts[1][dim_I] );
+
+		for( proc_I = 0; proc_I < decomp1->procsInUse; proc_I++ ) {
+			for ( dim_I = 0; dim_I < 3; dim_I++ )
+				assert( itemLocal3DCounts[0][proc_I][dim_I] == itemLocal3DCounts[1][proc_I][dim_I] );
+		}
+
+		if ( ( decomp1ItemType == ELEMENT_ITEM_TYPE ) && ( decomp2ItemType == ELEMENT_ITEM_TYPE ) ) {
+			for ( dim_I = 0; dim_I < 3; dim_I++ )
+				assert( decomp1->elementDomain3DCounts[dim_I] == decomp2->elementDomain3DCounts[dim_I] );
+		}		
+
+		if ( decomp1ItemType == ELEMENT_ITEM_TYPE ) {
+			globalCount = decomp1->elementGlobalCount;
+		}
+		else {
+			globalCount = decomp1->nodeGlobalCount;
+		}
+		if ( ( decomp1ItemType == ELEMENT_ITEM_TYPE ) && ( decomp2ItemType == NODE_ITEM_TYPE ) ) {
+			assert( decomp1->elementGlobalCount == decomp2->nodeGlobalCount );
+		}
+		if ( ( decomp1ItemType == NODE_ITEM_TYPE ) && ( decomp2ItemType == ELEMENT_ITEM_TYPE ) ) {
+			assert( decomp1->nodeGlobalCount == decomp2->elementGlobalCount );
+		}
+
+		printf("\tChecking the %d individual items\n", globalCount );
+		for (gItem_I = 0; gItem_I < globalCount; gItem_I++)
+		{
+			LocalIndex	localItem1;
+			ShadowIndex	shadowItem1;
+			DomainIndex	domainItem1;
+			LocalIndex	localItem2;
+			ShadowIndex	shadowItem2;
+			DomainIndex	domainItem2;
+			
+			//printf("\tChecking item %d\n", gItem_I );
+			localItem1 = (itemGlobalToLocalMap[0])(decomp1, gItem_I);
+			shadowItem1 = (itemGlobalToShadowMap[0])(decomp1, gItem_I);
+			domainItem1 = (itemGlobalToDomainMap[0])(decomp1, gItem_I);
+			localItem2 = (itemGlobalToLocalMap[1])(decomp2, gItem_I);
+			shadowItem2 = (itemGlobalToShadowMap[1])(decomp2, gItem_I);
+			domainItem2 = (itemGlobalToDomainMap[1])(decomp2, gItem_I);
+
+			assert( localItem1 == localItem2 );
+			assert( shadowItem1 == shadowItem2 );
+			assert( domainItem1 == domainItem2 );
+		}
+	}
+	else {
+		printf( "Rank %u not in use.\n", rank );
+	}	
+
+	printf("\tThe decomps matched for the given item types\n" );
+	return True;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Dictionary*		dictionary;
+	Topology*		nTopology;
+	ElementLayout*		eLayout;
+	NodeLayout*		nLayout;
+	HexaMD*			decompCorner;
+	HexaMD*			decompBody;
+	Stream*                 stream;
+	Index			decompDims;
+	XML_IO_Handler*         ioHandler;
+	Dimension_Index         dim_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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+
+	Journal_Enable_TypedStream( DebugStream_Type, False );
+	stream = Journal_Register( DebugStream_Type, HexaMD_Type );
+	Stream_EnableBranch( stream, True );
+	Stream_SetLevelBranch( stream, 3 );
+	
+	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( 5 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( False ) );
+	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( 1 ) );
+
+	/* Moved afterwards to allow command line to over-ride */
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	decompDims = Dictionary_GetUnsignedInt_WithDefault( dictionary, "decompDims", 1 );
+	
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "PPHexaEL", 3, dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	decompCorner = HexaMD_New_All( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout, decompDims );
+
+	if( rank == procToWatch ) {
+		printf( "Corner Node Layout\n" );
+		PrintDecompInfoOfHexaMD( decompCorner, rank );
+		printf( "\n" );
+	}
+
+	/* Do a run with body nodes */
+	Stg_Class_Delete( nLayout );
+	/* TODO: the following is a bit of a hack because of the weird way mesh size is defined by default in
+	the dictionary (assumes a corner mesh ) */
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		if ( ((IJKTopology*)nTopology)->size[dim_I] > 1 ) {
+			((IJKTopology*)nTopology)->size[dim_I]--;
+		}
+	}	
+	nLayout = (NodeLayout*)BodyNL_New( "BodyNL", dictionary, eLayout, nTopology );
+	decompBody = HexaMD_New_All( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout, decompDims );
+	if( rank == procToWatch ) {
+		Bool    result;
+
+		printf( "Body Node Layout\n" );
+		//PrintDecompInfoOfHexaMD( decompBody, rank );
+		printf( "Checking body node decomp has same element decomp as corner node decomp:\n" );
+		result = CheckDecompItemsAreDecomposedIdentically( decompCorner, ELEMENT_ITEM_TYPE, 
+			decompBody, ELEMENT_ITEM_TYPE, rank );
+		if ( result == True ) printf( "\tPassed.\n" );
+		else printf( "\tFailed.\n" );
+
+		printf( "Checking body node decomp has same node decomp as it's element decomp:\n" );
+		result = CheckDecompItemsAreDecomposedIdentically( decompBody, ELEMENT_ITEM_TYPE, 
+			decompBody, NODE_ITEM_TYPE, rank );
+		if ( result == True ) printf( "\tPassed.\n" );
+		else printf( "\tFailed.\n" );
+	}
+
+	Stg_Class_Delete( decompBody );
+	Stg_Class_Delete( decompCorner );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8761 @@
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 1, 1}
+	element3DCounts: {0, 0, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 1
+	elementCount: 0
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8054468
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 0
+
+Node global: 0, Elements: 0
+
+Node (0, 0, 0) -> global 0
+
+Node global 0 -> (0, 0, 0)
+
+
+
+Element (0, 0, 0) -> global XXX
+
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 1, 1}
+	element3DCounts: {1, 0, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 2
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8054630
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {X, 0}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+
+Element global: 0, Neighbours: 2, {X, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 1, 1}
+	element3DCounts: {2, 0, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 3
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8054808
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {2, 0}
+Node global: 2, Neighbours: 2, {X, 1}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, 1}
+Node global: 2, Elements: 2, {1, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+
+Element global: 0, Neighbours: 2, {X, 1}
+Element global: 1, Neighbours: 2, {0, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+Element global: 1, Nodes: 2, {1, 2}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 1, 1}
+	element3DCounts: {3, 0, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 4
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80549d0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {2, 0}
+Node global: 2, Neighbours: 2, {3, 1}
+Node global: 3, Neighbours: 2, {X, 2}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, 1}
+Node global: 2, Elements: 2, {1, 2}
+Node global: 3, Elements: 2, {2, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+
+Element global: 0, Neighbours: 2, {X, 1}
+Element global: 1, Neighbours: 2, {0, 2}
+Element global: 2, Neighbours: 2, {1, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+Element global: 1, Nodes: 2, {1, 2}
+Element global: 2, Nodes: 2, {2, 3}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 2, 1}
+	element3DCounts: {0, 1, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 2
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8054b98
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {X, 0}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+
+Element global: 0, Neighbours: 2, {X, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 2, 1}
+	element3DCounts: {1, 1, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 4
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8054d60
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, X, X, 0}
+Node global: 3, Neighbours: 4, {X, X, 2, 1}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, X}
+Node global: 3, Elements: 4, {0, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 2, 1}
+	element3DCounts: {2, 1, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 6
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8054f80
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, X, X, 0}
+Node global: 4, Neighbours: 4, {5, X, 3, 1}
+Node global: 5, Neighbours: 4, {X, X, 4, 2}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, X}
+Node global: 4, Elements: 4, {0, 1, X, X}
+Node global: 5, Elements: 4, {1, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, X, X}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 2, 1}
+	element3DCounts: {3, 1, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80550a8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, X, X, 0}
+Node global: 5, Neighbours: 4, {6, X, 4, 1}
+Node global: 6, Neighbours: 4, {7, X, 5, 2}
+Node global: 7, Neighbours: 4, {X, X, 6, 3}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, X}
+Node global: 5, Elements: 4, {0, 1, X, X}
+Node global: 6, Elements: 4, {1, 2, X, X}
+Node global: 7, Elements: 4, {2, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, X, X}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, X, X, X}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 3, 1}
+	element3DCounts: {0, 2, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 3
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055268
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {2, 0}
+Node global: 2, Neighbours: 2, {X, 1}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, 1}
+Node global: 2, Elements: 2, {1, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+
+Element global: 0, Neighbours: 2, {X, 1}
+Element global: 1, Neighbours: 2, {0, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+Element global: 1, Nodes: 2, {1, 2}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 3, 1}
+	element3DCounts: {1, 2, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 6
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055390
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, 4, X, 0}
+Node global: 3, Neighbours: 4, {X, 5, 2, 1}
+Node global: 4, Neighbours: 4, {5, X, X, 2}
+Node global: 5, Neighbours: 4, {X, X, 4, 3}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, 1}
+Node global: 3, Elements: 4, {0, X, 1, X}
+Node global: 4, Elements: 4, {X, 1, X, X}
+Node global: 5, Elements: 4, {1, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, 1, X}
+Element global: 1, Neighbours: 8, {X, 0, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+Element global: 1, Nodes: 4, {2, 3, 5, 4}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 3, 1}
+	element3DCounts: {2, 2, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 9
+	elementCount: 4
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055608
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, 6, X, 0}
+Node global: 4, Neighbours: 4, {5, 7, 3, 1}
+Node global: 5, Neighbours: 4, {X, 8, 4, 2}
+Node global: 6, Neighbours: 4, {7, X, X, 3}
+Node global: 7, Neighbours: 4, {8, X, 6, 4}
+Node global: 8, Neighbours: 4, {X, X, 7, 5}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, 2}
+Node global: 4, Elements: 4, {0, 1, 2, 3}
+Node global: 5, Elements: 4, {1, X, 3, X}
+Node global: 6, Elements: 4, {X, 2, X, X}
+Node global: 7, Elements: 4, {2, 3, X, X}
+Node global: 8, Elements: 4, {3, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 2, 3}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, 2, 3, X}
+Element global: 2, Neighbours: 8, {X, 0, 1, X, 3, X, X, X}
+Element global: 3, Neighbours: 8, {0, 1, X, 2, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+Element global: 2, Nodes: 4, {3, 4, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 8, 7}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 3, 1}
+	element3DCounts: {3, 2, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055608
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, 8, X, 0}
+Node global: 5, Neighbours: 4, {6, 9, 4, 1}
+Node global: 6, Neighbours: 4, {7, 10, 5, 2}
+Node global: 7, Neighbours: 4, {X, 11, 6, 3}
+Node global: 8, Neighbours: 4, {9, X, X, 4}
+Node global: 9, Neighbours: 4, {10, X, 8, 5}
+Node global: 10, Neighbours: 4, {11, X, 9, 6}
+Node global: 11, Neighbours: 4, {X, X, 10, 7}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, 3}
+Node global: 5, Elements: 4, {0, 1, 3, 4}
+Node global: 6, Elements: 4, {1, 2, 4, 5}
+Node global: 7, Elements: 4, {2, X, 5, X}
+Node global: 8, Elements: 4, {X, 3, X, X}
+Node global: 9, Elements: 4, {3, 4, X, X}
+Node global: 10, Elements: 4, {4, 5, X, X}
+Node global: 11, Elements: 4, {5, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 3, 4}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, 3, 4, 5}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, 4, 5, X}
+Element global: 3, Neighbours: 8, {X, 0, 1, X, 4, X, X, X}
+Element global: 4, Neighbours: 8, {0, 1, 2, 3, 5, X, X, X}
+Element global: 5, Neighbours: 8, {1, 2, X, 4, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 9, 8}
+Element global: 4, Nodes: 4, {5, 6, 10, 9}
+Element global: 5, Nodes: 4, {6, 7, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 4, 1}
+	element3DCounts: {0, 3, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 4
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055ab8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {2, 0}
+Node global: 2, Neighbours: 2, {3, 1}
+Node global: 3, Neighbours: 2, {X, 2}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, 1}
+Node global: 2, Elements: 2, {1, 2}
+Node global: 3, Elements: 2, {2, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 3, 0) -> global 3
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 3, 0)
+
+Element global: 0, Neighbours: 2, {X, 1}
+Element global: 1, Neighbours: 2, {0, 2}
+Element global: 2, Neighbours: 2, {1, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+Element global: 1, Nodes: 2, {1, 2}
+Element global: 2, Nodes: 2, {2, 3}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 4, 1}
+	element3DCounts: {1, 3, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055b38
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, 4, X, 0}
+Node global: 3, Neighbours: 4, {X, 5, 2, 1}
+Node global: 4, Neighbours: 4, {5, 6, X, 2}
+Node global: 5, Neighbours: 4, {X, 7, 4, 3}
+Node global: 6, Neighbours: 4, {7, X, X, 4}
+Node global: 7, Neighbours: 4, {X, X, 6, 5}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, 1}
+Node global: 3, Elements: 4, {0, X, 1, X}
+Node global: 4, Elements: 4, {X, 1, X, 2}
+Node global: 5, Elements: 4, {1, X, 2, X}
+Node global: 6, Elements: 4, {X, 2, X, X}
+Node global: 7, Elements: 4, {2, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 3, 0) -> global 6
+Node (1, 3, 0) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 3, 0)
+Node global 7 -> (1, 3, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, 1, X}
+Element global: 1, Neighbours: 8, {X, 0, X, X, X, X, 2, X}
+Element global: 2, Neighbours: 8, {X, 1, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+Element global: 1, Nodes: 4, {2, 3, 5, 4}
+Element global: 2, Nodes: 4, {4, 5, 7, 6}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 4, 1}
+	element3DCounts: {2, 3, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055d30
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, 6, X, 0}
+Node global: 4, Neighbours: 4, {5, 7, 3, 1}
+Node global: 5, Neighbours: 4, {X, 8, 4, 2}
+Node global: 6, Neighbours: 4, {7, 9, X, 3}
+Node global: 7, Neighbours: 4, {8, 10, 6, 4}
+Node global: 8, Neighbours: 4, {X, 11, 7, 5}
+Node global: 9, Neighbours: 4, {10, X, X, 6}
+Node global: 10, Neighbours: 4, {11, X, 9, 7}
+Node global: 11, Neighbours: 4, {X, X, 10, 8}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, 2}
+Node global: 4, Elements: 4, {0, 1, 2, 3}
+Node global: 5, Elements: 4, {1, X, 3, X}
+Node global: 6, Elements: 4, {X, 2, X, 4}
+Node global: 7, Elements: 4, {2, 3, 4, 5}
+Node global: 8, Elements: 4, {3, X, 5, X}
+Node global: 9, Elements: 4, {X, 4, X, X}
+Node global: 10, Elements: 4, {4, 5, X, X}
+Node global: 11, Elements: 4, {5, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 3, 0) -> global 9
+Node (1, 3, 0) -> global 10
+Node (2, 3, 0) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 3, 0)
+Node global 10 -> (1, 3, 0)
+Node global 11 -> (2, 3, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 2, 3}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, 2, 3, X}
+Element global: 2, Neighbours: 8, {X, 0, 1, X, 3, X, 4, 5}
+Element global: 3, Neighbours: 8, {0, 1, X, 2, X, 4, 5, X}
+Element global: 4, Neighbours: 8, {X, 2, 3, X, 5, X, X, X}
+Element global: 5, Neighbours: 8, {2, 3, X, 4, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+Element global: 2, Nodes: 4, {3, 4, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 8, 7}
+Element global: 4, Nodes: 4, {6, 7, 10, 9}
+Element global: 5, Nodes: 4, {7, 8, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+Element (0, 2, 0) -> global 4
+Element (1, 2, 0) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+Element global 4 -> (0, 2, 0)
+Element global 5 -> (1, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 4, 1}
+	element3DCounts: {3, 3, 0}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 16
+	elementCount: 9
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8055e80
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, 8, X, 0}
+Node global: 5, Neighbours: 4, {6, 9, 4, 1}
+Node global: 6, Neighbours: 4, {7, 10, 5, 2}
+Node global: 7, Neighbours: 4, {X, 11, 6, 3}
+Node global: 8, Neighbours: 4, {9, 12, X, 4}
+Node global: 9, Neighbours: 4, {10, 13, 8, 5}
+Node global: 10, Neighbours: 4, {11, 14, 9, 6}
+Node global: 11, Neighbours: 4, {X, 15, 10, 7}
+Node global: 12, Neighbours: 4, {13, X, X, 8}
+Node global: 13, Neighbours: 4, {14, X, 12, 9}
+Node global: 14, Neighbours: 4, {15, X, 13, 10}
+Node global: 15, Neighbours: 4, {X, X, 14, 11}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, 3}
+Node global: 5, Elements: 4, {0, 1, 3, 4}
+Node global: 6, Elements: 4, {1, 2, 4, 5}
+Node global: 7, Elements: 4, {2, X, 5, X}
+Node global: 8, Elements: 4, {X, 3, X, 6}
+Node global: 9, Elements: 4, {3, 4, 6, 7}
+Node global: 10, Elements: 4, {4, 5, 7, 8}
+Node global: 11, Elements: 4, {5, X, 8, X}
+Node global: 12, Elements: 4, {X, 6, X, X}
+Node global: 13, Elements: 4, {6, 7, X, X}
+Node global: 14, Elements: 4, {7, 8, X, X}
+Node global: 15, Elements: 4, {8, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 3, 0) -> global 12
+Node (1, 3, 0) -> global 13
+Node (2, 3, 0) -> global 14
+Node (3, 3, 0) -> global 15
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 3, 0)
+Node global 13 -> (1, 3, 0)
+Node global 14 -> (2, 3, 0)
+Node global 15 -> (3, 3, 0)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 3, 4}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, 3, 4, 5}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, 4, 5, X}
+Element global: 3, Neighbours: 8, {X, 0, 1, X, 4, X, 6, 7}
+Element global: 4, Neighbours: 8, {0, 1, 2, 3, 5, 6, 7, 8}
+Element global: 5, Neighbours: 8, {1, 2, X, 4, X, 7, 8, X}
+Element global: 6, Neighbours: 8, {X, 3, 4, X, 7, X, X, X}
+Element global: 7, Neighbours: 8, {3, 4, 5, 6, 8, X, X, X}
+Element global: 8, Neighbours: 8, {4, 5, X, 7, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 9, 8}
+Element global: 4, Nodes: 4, {5, 6, 10, 9}
+Element global: 5, Nodes: 4, {6, 7, 11, 10}
+Element global: 6, Nodes: 4, {8, 9, 13, 12}
+Element global: 7, Nodes: 4, {9, 10, 14, 13}
+Element global: 8, Nodes: 4, {10, 11, 15, 14}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+Element (0, 2, 0) -> global 6
+Element (1, 2, 0) -> global 7
+Element (2, 2, 0) -> global 8
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+Element global 6 -> (0, 2, 0)
+Element global 7 -> (1, 2, 0)
+Element global 8 -> (2, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 1, 2}
+	element3DCounts: {0, 0, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 2
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8056238
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {X, 0}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 0, 1) -> global 1
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 0, 1)
+
+Element global: 0, Neighbours: 2, {X, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 1, 2}
+	element3DCounts: {1, 0, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 4
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8056250
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, X, X, 0}
+Node global: 3, Neighbours: 4, {X, X, 2, 1}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, X}
+Node global: 3, Elements: 4, {0, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 0, 1) -> global 2
+Node (1, 0, 1) -> global 3
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 0, 1)
+Node global 3 -> (1, 0, 1)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 1, 2}
+	element3DCounts: {2, 0, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 6
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80563d8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, X, X, 0}
+Node global: 4, Neighbours: 4, {5, X, 3, 1}
+Node global: 5, Neighbours: 4, {X, X, 4, 2}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, X}
+Node global: 4, Elements: 4, {0, 1, X, X}
+Node global: 5, Elements: 4, {1, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 0, 1) -> global 3
+Node (1, 0, 1) -> global 4
+Node (2, 0, 1) -> global 5
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 0, 1)
+Node global 4 -> (1, 0, 1)
+Node global 5 -> (2, 0, 1)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, X, X}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 1, 2}
+	element3DCounts: {3, 0, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80565a8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, X, X, 0}
+Node global: 5, Neighbours: 4, {6, X, 4, 1}
+Node global: 6, Neighbours: 4, {7, X, 5, 2}
+Node global: 7, Neighbours: 4, {X, X, 6, 3}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, X}
+Node global: 5, Elements: 4, {0, 1, X, X}
+Node global: 6, Elements: 4, {1, 2, X, X}
+Node global: 7, Elements: 4, {2, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (1, 0, 1) -> global 5
+Node (2, 0, 1) -> global 6
+Node (3, 0, 1) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (1, 0, 1)
+Node global 6 -> (2, 0, 1)
+Node global 7 -> (3, 0, 1)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, X, X}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, X, X, X}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 2, 2}
+	element3DCounts: {0, 1, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 4
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80569d0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, X, X, 0}
+Node global: 3, Neighbours: 4, {X, X, 2, 1}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, X}
+Node global: 3, Elements: 4, {0, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 0, 1) -> global 2
+Node (0, 1, 1) -> global 3
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 0, 1)
+Node global 3 -> (0, 1, 1)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 2, 2}
+	element3DCounts: {1, 1, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 1
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80569c0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 4, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 5, 0, X, X}
+Node global: 2, Neighbours: 6, {3, X, 6, X, 0, X}
+Node global: 3, Neighbours: 6, {X, X, 7, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, 6, X, X, X, 0}
+Node global: 5, Neighbours: 6, {X, 7, X, 4, X, 1}
+Node global: 6, Neighbours: 6, {7, X, X, X, 4, 2}
+Node global: 7, Neighbours: 6, {X, X, X, 6, 5, 3}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, X, X}
+Node global: 4, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 5, Elements: 8, {X, X, 0, X, X, X, X, X}
+Node global: 6, Elements: 8, {X, 0, X, X, X, X, X, X}
+Node global: 7, Elements: 8, {0, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (1, 0, 1) -> global 5
+Node (0, 1, 1) -> global 6
+Node (1, 1, 1) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (1, 0, 1)
+Node global 6 -> (0, 1, 1)
+Node global 7 -> (1, 1, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 4, 5, 7, 6}
+
+Element (0, 0, 0) -> global 0
+
+Element global 0 -> (0, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 2, 2}
+	element3DCounts: {2, 1, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8056b50
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 6, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 7, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 8, 1, X, X}
+Node global: 3, Neighbours: 6, {4, X, 9, X, 0, X}
+Node global: 4, Neighbours: 6, {5, X, 10, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, X, 11, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, 9, X, X, X, 0}
+Node global: 7, Neighbours: 6, {8, 10, X, 6, X, 1}
+Node global: 8, Neighbours: 6, {X, 11, X, 7, X, 2}
+Node global: 9, Neighbours: 6, {10, X, X, X, 6, 3}
+Node global: 10, Neighbours: 6, {11, X, X, 9, 7, 4}
+Node global: 11, Neighbours: 6, {X, X, X, 10, 8, 5}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, X, X}
+Node global: 6, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 7, Elements: 8, {X, X, 0, 1, X, X, X, X}
+Node global: 8, Elements: 8, {X, X, 1, X, X, X, X, X}
+Node global: 9, Elements: 8, {X, 0, X, X, X, X, X, X}
+Node global: 10, Elements: 8, {0, 1, X, X, X, X, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 0, 1) -> global 6
+Node (1, 0, 1) -> global 7
+Node (2, 0, 1) -> global 8
+Node (0, 1, 1) -> global 9
+Node (1, 1, 1) -> global 10
+Node (2, 1, 1) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 0, 1)
+Node global 7 -> (1, 0, 1)
+Node global 8 -> (2, 0, 1)
+Node global 9 -> (0, 1, 1)
+Node global 10 -> (1, 1, 1)
+Node global 11 -> (2, 1, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 6, 7, 10, 9}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 7, 8, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 2, 2}
+	element3DCounts: {3, 1, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 16
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8056cf0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 8, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 9, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 10, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 11, 2, X, X}
+Node global: 4, Neighbours: 6, {5, X, 12, X, 0, X}
+Node global: 5, Neighbours: 6, {6, X, 13, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, X, 14, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, X, 15, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, 12, X, X, X, 0}
+Node global: 9, Neighbours: 6, {10, 13, X, 8, X, 1}
+Node global: 10, Neighbours: 6, {11, 14, X, 9, X, 2}
+Node global: 11, Neighbours: 6, {X, 15, X, 10, X, 3}
+Node global: 12, Neighbours: 6, {13, X, X, X, 8, 4}
+Node global: 13, Neighbours: 6, {14, X, X, 12, 9, 5}
+Node global: 14, Neighbours: 6, {15, X, X, 13, 10, 6}
+Node global: 15, Neighbours: 6, {X, X, X, 14, 11, 7}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, X, X}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 9, Elements: 8, {X, X, 0, 1, X, X, X, X}
+Node global: 10, Elements: 8, {X, X, 1, 2, X, X, X, X}
+Node global: 11, Elements: 8, {X, X, 2, X, X, X, X, X}
+Node global: 12, Elements: 8, {X, 0, X, X, X, X, X, X}
+Node global: 13, Elements: 8, {0, 1, X, X, X, X, X, X}
+Node global: 14, Elements: 8, {1, 2, X, X, X, X, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 0, 1) -> global 8
+Node (1, 0, 1) -> global 9
+Node (2, 0, 1) -> global 10
+Node (3, 0, 1) -> global 11
+Node (0, 1, 1) -> global 12
+Node (1, 1, 1) -> global 13
+Node (2, 1, 1) -> global 14
+Node (3, 1, 1) -> global 15
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 0, 1)
+Node global 9 -> (1, 0, 1)
+Node global 10 -> (2, 0, 1)
+Node global 11 -> (3, 0, 1)
+Node global 12 -> (0, 1, 1)
+Node global 13 -> (1, 1, 1)
+Node global 14 -> (2, 1, 1)
+Node global 15 -> (3, 1, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 8, 9, 13, 12}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 9, 10, 14, 13}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 10, 11, 15, 14}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 3, 2}
+	element3DCounts: {0, 2, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 6
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057148
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, X, X, 0}
+Node global: 4, Neighbours: 4, {5, X, 3, 1}
+Node global: 5, Neighbours: 4, {X, X, 4, 2}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, X}
+Node global: 4, Elements: 4, {0, 1, X, X}
+Node global: 5, Elements: 4, {1, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 0, 1) -> global 3
+Node (0, 1, 1) -> global 4
+Node (0, 2, 1) -> global 5
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 0, 1)
+Node global 4 -> (0, 1, 1)
+Node global 5 -> (0, 2, 1)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, X, X}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 3, 2}
+	element3DCounts: {1, 2, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057098
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 6, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 7, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 4, 8, X, 0, X}
+Node global: 3, Neighbours: 6, {X, 5, 9, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, X, 10, X, 2, X}
+Node global: 5, Neighbours: 6, {X, X, 11, 4, 3, X}
+Node global: 6, Neighbours: 6, {7, 8, X, X, X, 0}
+Node global: 7, Neighbours: 6, {X, 9, X, 6, X, 1}
+Node global: 8, Neighbours: 6, {9, 10, X, X, 6, 2}
+Node global: 9, Neighbours: 6, {X, 11, X, 8, 7, 3}
+Node global: 10, Neighbours: 6, {11, X, X, X, 8, 4}
+Node global: 11, Neighbours: 6, {X, X, X, 10, 9, 5}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, 1}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, 1, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 1, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, X, X}
+Node global: 6, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 7, Elements: 8, {X, X, 0, X, X, X, X, X}
+Node global: 8, Elements: 8, {X, 0, X, 1, X, X, X, X}
+Node global: 9, Elements: 8, {0, X, 1, X, X, X, X, X}
+Node global: 10, Elements: 8, {X, 1, X, X, X, X, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 0, 1) -> global 6
+Node (1, 0, 1) -> global 7
+Node (0, 1, 1) -> global 8
+Node (1, 1, 1) -> global 9
+Node (0, 2, 1) -> global 10
+Node (1, 2, 1) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 0, 1)
+Node global 7 -> (1, 0, 1)
+Node global 8 -> (0, 1, 1)
+Node global 9 -> (1, 1, 1)
+Node global 10 -> (0, 2, 1)
+Node global 11 -> (1, 2, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 6, 7, 9, 8}
+Element global: 1, Nodes: 8, {2, 3, 5, 4, 8, 9, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 3, 2}
+	element3DCounts: {2, 2, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 18
+	elementCount: 4
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057288
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 9, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 10, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 11, 1, X, X}
+Node global: 3, Neighbours: 6, {4, 6, 12, X, 0, X}
+Node global: 4, Neighbours: 6, {5, 7, 13, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, 8, 14, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, X, 15, X, 3, X}
+Node global: 7, Neighbours: 6, {8, X, 16, 6, 4, X}
+Node global: 8, Neighbours: 6, {X, X, 17, 7, 5, X}
+Node global: 9, Neighbours: 6, {10, 12, X, X, X, 0}
+Node global: 10, Neighbours: 6, {11, 13, X, 9, X, 1}
+Node global: 11, Neighbours: 6, {X, 14, X, 10, X, 2}
+Node global: 12, Neighbours: 6, {13, 15, X, X, 9, 3}
+Node global: 13, Neighbours: 6, {14, 16, X, 12, 10, 4}
+Node global: 14, Neighbours: 6, {X, 17, X, 13, 11, 5}
+Node global: 15, Neighbours: 6, {16, X, X, X, 12, 6}
+Node global: 16, Neighbours: 6, {17, X, X, 15, 13, 7}
+Node global: 17, Neighbours: 6, {X, X, X, 16, 14, 8}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, 2}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, 2, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 3, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, 3, X, X}
+Node global: 8, Elements: 8, {X, X, X, X, 3, X, X, X}
+Node global: 9, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 10, Elements: 8, {X, X, 0, 1, X, X, X, X}
+Node global: 11, Elements: 8, {X, X, 1, X, X, X, X, X}
+Node global: 12, Elements: 8, {X, 0, X, 2, X, X, X, X}
+Node global: 13, Elements: 8, {0, 1, 2, 3, X, X, X, X}
+Node global: 14, Elements: 8, {1, X, 3, X, X, X, X, X}
+Node global: 15, Elements: 8, {X, 2, X, X, X, X, X, X}
+Node global: 16, Elements: 8, {2, 3, X, X, X, X, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 0, 1) -> global 9
+Node (1, 0, 1) -> global 10
+Node (2, 0, 1) -> global 11
+Node (0, 1, 1) -> global 12
+Node (1, 1, 1) -> global 13
+Node (2, 1, 1) -> global 14
+Node (0, 2, 1) -> global 15
+Node (1, 2, 1) -> global 16
+Node (2, 2, 1) -> global 17
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 0, 1)
+Node global 10 -> (1, 0, 1)
+Node global 11 -> (2, 0, 1)
+Node global 12 -> (0, 1, 1)
+Node global 13 -> (1, 1, 1)
+Node global 14 -> (2, 1, 1)
+Node global 15 -> (0, 2, 1)
+Node global 16 -> (1, 2, 1)
+Node global 17 -> (2, 2, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 2, 3, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, 2, 3, X, X, X, X, X, X, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 3, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, X, 2, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 9, 10, 13, 12}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 10, 11, 14, 13}
+Element global: 2, Nodes: 8, {3, 4, 7, 6, 12, 13, 16, 15}
+Element global: 3, Nodes: 8, {4, 5, 8, 7, 13, 14, 17, 16}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 3, 2}
+	element3DCounts: {3, 2, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 24
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057488
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 12, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 13, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 14, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 15, 2, X, X}
+Node global: 4, Neighbours: 6, {5, 8, 16, X, 0, X}
+Node global: 5, Neighbours: 6, {6, 9, 17, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, 10, 18, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, 11, 19, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, X, 20, X, 4, X}
+Node global: 9, Neighbours: 6, {10, X, 21, 8, 5, X}
+Node global: 10, Neighbours: 6, {11, X, 22, 9, 6, X}
+Node global: 11, Neighbours: 6, {X, X, 23, 10, 7, X}
+Node global: 12, Neighbours: 6, {13, 16, X, X, X, 0}
+Node global: 13, Neighbours: 6, {14, 17, X, 12, X, 1}
+Node global: 14, Neighbours: 6, {15, 18, X, 13, X, 2}
+Node global: 15, Neighbours: 6, {X, 19, X, 14, X, 3}
+Node global: 16, Neighbours: 6, {17, 20, X, X, 12, 4}
+Node global: 17, Neighbours: 6, {18, 21, X, 16, 13, 5}
+Node global: 18, Neighbours: 6, {19, 22, X, 17, 14, 6}
+Node global: 19, Neighbours: 6, {X, 23, X, 18, 15, 7}
+Node global: 20, Neighbours: 6, {21, X, X, X, 16, 8}
+Node global: 21, Neighbours: 6, {22, X, X, 20, 17, 9}
+Node global: 22, Neighbours: 6, {23, X, X, 21, 18, 10}
+Node global: 23, Neighbours: 6, {X, X, X, 22, 19, 11}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, 3, 4}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, 4, 5}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, 5, X}
+Node global: 8, Elements: 8, {X, X, X, X, X, 3, X, X}
+Node global: 9, Elements: 8, {X, X, X, X, 3, 4, X, X}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, X, X}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 13, Elements: 8, {X, X, 0, 1, X, X, X, X}
+Node global: 14, Elements: 8, {X, X, 1, 2, X, X, X, X}
+Node global: 15, Elements: 8, {X, X, 2, X, X, X, X, X}
+Node global: 16, Elements: 8, {X, 0, X, 3, X, X, X, X}
+Node global: 17, Elements: 8, {0, 1, 3, 4, X, X, X, X}
+Node global: 18, Elements: 8, {1, 2, 4, 5, X, X, X, X}
+Node global: 19, Elements: 8, {2, X, 5, X, X, X, X, X}
+Node global: 20, Elements: 8, {X, 3, X, X, X, X, X, X}
+Node global: 21, Elements: 8, {3, 4, X, X, X, X, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 0, 1) -> global 12
+Node (1, 0, 1) -> global 13
+Node (2, 0, 1) -> global 14
+Node (3, 0, 1) -> global 15
+Node (0, 1, 1) -> global 16
+Node (1, 1, 1) -> global 17
+Node (2, 1, 1) -> global 18
+Node (3, 1, 1) -> global 19
+Node (0, 2, 1) -> global 20
+Node (1, 2, 1) -> global 21
+Node (2, 2, 1) -> global 22
+Node (3, 2, 1) -> global 23
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 0, 1)
+Node global 13 -> (1, 0, 1)
+Node global 14 -> (2, 0, 1)
+Node global 15 -> (3, 0, 1)
+Node global 16 -> (0, 1, 1)
+Node global 17 -> (1, 1, 1)
+Node global 18 -> (2, 1, 1)
+Node global 19 -> (3, 1, 1)
+Node global 20 -> (0, 2, 1)
+Node global 21 -> (1, 2, 1)
+Node global 22 -> (2, 2, 1)
+Node global 23 -> (3, 2, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 3, 4, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, 3, 4, 5, X, X, X, X, X, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 4, 5, X, X, X, X, X, X, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 4, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, 2, 3, 5, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 1, 2, X, 4, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 12, 13, 17, 16}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 13, 14, 18, 17}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 14, 15, 19, 18}
+Element global: 3, Nodes: 8, {4, 5, 9, 8, 16, 17, 21, 20}
+Element global: 4, Nodes: 8, {5, 6, 10, 9, 17, 18, 22, 21}
+Element global: 5, Nodes: 8, {6, 7, 11, 10, 18, 19, 23, 22}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 4, 2}
+	element3DCounts: {0, 3, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057600
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, X, X, 0}
+Node global: 5, Neighbours: 4, {6, X, 4, 1}
+Node global: 6, Neighbours: 4, {7, X, 5, 2}
+Node global: 7, Neighbours: 4, {X, X, 6, 3}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, X}
+Node global: 5, Elements: 4, {0, 1, X, X}
+Node global: 6, Elements: 4, {1, 2, X, X}
+Node global: 7, Elements: 4, {2, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 3, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (0, 1, 1) -> global 5
+Node (0, 2, 1) -> global 6
+Node (0, 3, 1) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 3, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (0, 1, 1)
+Node global 6 -> (0, 2, 1)
+Node global 7 -> (0, 3, 1)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, X, X}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, X, X, X}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 4, 2}
+	element3DCounts: {1, 3, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 16
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057600
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 8, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 9, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 4, 10, X, 0, X}
+Node global: 3, Neighbours: 6, {X, 5, 11, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, 6, 12, X, 2, X}
+Node global: 5, Neighbours: 6, {X, 7, 13, 4, 3, X}
+Node global: 6, Neighbours: 6, {7, X, 14, X, 4, X}
+Node global: 7, Neighbours: 6, {X, X, 15, 6, 5, X}
+Node global: 8, Neighbours: 6, {9, 10, X, X, X, 0}
+Node global: 9, Neighbours: 6, {X, 11, X, 8, X, 1}
+Node global: 10, Neighbours: 6, {11, 12, X, X, 8, 2}
+Node global: 11, Neighbours: 6, {X, 13, X, 10, 9, 3}
+Node global: 12, Neighbours: 6, {13, 14, X, X, 10, 4}
+Node global: 13, Neighbours: 6, {X, 15, X, 12, 11, 5}
+Node global: 14, Neighbours: 6, {15, X, X, X, 12, 6}
+Node global: 15, Neighbours: 6, {X, X, X, 14, 13, 7}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, 1}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, 1, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 1, X, 2}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 2, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 9, Elements: 8, {X, X, 0, X, X, X, X, X}
+Node global: 10, Elements: 8, {X, 0, X, 1, X, X, X, X}
+Node global: 11, Elements: 8, {0, X, 1, X, X, X, X, X}
+Node global: 12, Elements: 8, {X, 1, X, 2, X, X, X, X}
+Node global: 13, Elements: 8, {1, X, 2, X, X, X, X, X}
+Node global: 14, Elements: 8, {X, 2, X, X, X, X, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 3, 0) -> global 6
+Node (1, 3, 0) -> global 7
+Node (0, 0, 1) -> global 8
+Node (1, 0, 1) -> global 9
+Node (0, 1, 1) -> global 10
+Node (1, 1, 1) -> global 11
+Node (0, 2, 1) -> global 12
+Node (1, 2, 1) -> global 13
+Node (0, 3, 1) -> global 14
+Node (1, 3, 1) -> global 15
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 3, 0)
+Node global 7 -> (1, 3, 0)
+Node global 8 -> (0, 0, 1)
+Node global 9 -> (1, 0, 1)
+Node global 10 -> (0, 1, 1)
+Node global 11 -> (1, 1, 1)
+Node global 12 -> (0, 2, 1)
+Node global 13 -> (1, 2, 1)
+Node global 14 -> (0, 3, 1)
+Node global 15 -> (1, 3, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, 2, X, X, X, X, X, X, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 8, 9, 11, 10}
+Element global: 1, Nodes: 8, {2, 3, 5, 4, 10, 11, 13, 12}
+Element global: 2, Nodes: 8, {4, 5, 7, 6, 12, 13, 15, 14}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8054390
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8054390
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 4, 2}
+	element3DCounts: {2, 3, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8054390
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 24
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057c98
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8054390
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 12, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 13, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 14, 1, X, X}
+Node global: 3, Neighbours: 6, {4, 6, 15, X, 0, X}
+Node global: 4, Neighbours: 6, {5, 7, 16, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, 8, 17, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, 9, 18, X, 3, X}
+Node global: 7, Neighbours: 6, {8, 10, 19, 6, 4, X}
+Node global: 8, Neighbours: 6, {X, 11, 20, 7, 5, X}
+Node global: 9, Neighbours: 6, {10, X, 21, X, 6, X}
+Node global: 10, Neighbours: 6, {11, X, 22, 9, 7, X}
+Node global: 11, Neighbours: 6, {X, X, 23, 10, 8, X}
+Node global: 12, Neighbours: 6, {13, 15, X, X, X, 0}
+Node global: 13, Neighbours: 6, {14, 16, X, 12, X, 1}
+Node global: 14, Neighbours: 6, {X, 17, X, 13, X, 2}
+Node global: 15, Neighbours: 6, {16, 18, X, X, 12, 3}
+Node global: 16, Neighbours: 6, {17, 19, X, 15, 13, 4}
+Node global: 17, Neighbours: 6, {X, 20, X, 16, 14, 5}
+Node global: 18, Neighbours: 6, {19, 21, X, X, 15, 6}
+Node global: 19, Neighbours: 6, {20, 22, X, 18, 16, 7}
+Node global: 20, Neighbours: 6, {X, 23, X, 19, 17, 8}
+Node global: 21, Neighbours: 6, {22, X, X, X, 18, 9}
+Node global: 22, Neighbours: 6, {23, X, X, 21, 19, 10}
+Node global: 23, Neighbours: 6, {X, X, X, 22, 20, 11}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, 2}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, 2, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 3, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, 4}
+Node global: 7, Elements: 8, {X, X, X, X, 2, 3, 4, 5}
+Node global: 8, Elements: 8, {X, X, X, X, 3, X, 5, X}
+Node global: 9, Elements: 8, {X, X, X, X, X, 4, X, X}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, X, X}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 13, Elements: 8, {X, X, 0, 1, X, X, X, X}
+Node global: 14, Elements: 8, {X, X, 1, X, X, X, X, X}
+Node global: 15, Elements: 8, {X, 0, X, 2, X, X, X, X}
+Node global: 16, Elements: 8, {0, 1, 2, 3, X, X, X, X}
+Node global: 17, Elements: 8, {1, X, 3, X, X, X, X, X}
+Node global: 18, Elements: 8, {X, 2, X, 4, X, X, X, X}
+Node global: 19, Elements: 8, {2, 3, 4, 5, X, X, X, X}
+Node global: 20, Elements: 8, {3, X, 5, X, X, X, X, X}
+Node global: 21, Elements: 8, {X, 4, X, X, X, X, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 3, 0) -> global 9
+Node (1, 3, 0) -> global 10
+Node (2, 3, 0) -> global 11
+Node (0, 0, 1) -> global 12
+Node (1, 0, 1) -> global 13
+Node (2, 0, 1) -> global 14
+Node (0, 1, 1) -> global 15
+Node (1, 1, 1) -> global 16
+Node (2, 1, 1) -> global 17
+Node (0, 2, 1) -> global 18
+Node (1, 2, 1) -> global 19
+Node (2, 2, 1) -> global 20
+Node (0, 3, 1) -> global 21
+Node (1, 3, 1) -> global 22
+Node (2, 3, 1) -> global 23
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 3, 0)
+Node global 10 -> (1, 3, 0)
+Node global 11 -> (2, 3, 0)
+Node global 12 -> (0, 0, 1)
+Node global 13 -> (1, 0, 1)
+Node global 14 -> (2, 0, 1)
+Node global 15 -> (0, 1, 1)
+Node global 16 -> (1, 1, 1)
+Node global 17 -> (2, 1, 1)
+Node global 18 -> (0, 2, 1)
+Node global 19 -> (1, 2, 1)
+Node global 20 -> (2, 2, 1)
+Node global 21 -> (0, 3, 1)
+Node global 22 -> (1, 3, 1)
+Node global 23 -> (2, 3, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 2, 3, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, 2, 3, X, X, X, X, X, X, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 3, X, 4, 5, X, X, X, X, X, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, X, 2, X, 4, 5, X, X, X, X, X, X, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 2, 3, X, 5, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 2, 3, X, 4, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 12, 13, 16, 15}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 13, 14, 17, 16}
+Element global: 2, Nodes: 8, {3, 4, 7, 6, 15, 16, 19, 18}
+Element global: 3, Nodes: 8, {4, 5, 8, 7, 16, 17, 20, 19}
+Element global: 4, Nodes: 8, {6, 7, 10, 9, 18, 19, 22, 21}
+Element global: 5, Nodes: 8, {7, 8, 11, 10, 19, 20, 23, 22}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+Element (0, 2, 0) -> global 4
+Element (1, 2, 0) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+Element global 4 -> (0, 2, 0)
+Element global 5 -> (1, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8057ad8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ad8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 4, 2}
+	element3DCounts: {3, 3, 1}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ad8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 32
+	elementCount: 9
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057b88
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ad8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 16, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 17, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 18, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 19, 2, X, X}
+Node global: 4, Neighbours: 6, {5, 8, 20, X, 0, X}
+Node global: 5, Neighbours: 6, {6, 9, 21, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, 10, 22, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, 11, 23, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, 12, 24, X, 4, X}
+Node global: 9, Neighbours: 6, {10, 13, 25, 8, 5, X}
+Node global: 10, Neighbours: 6, {11, 14, 26, 9, 6, X}
+Node global: 11, Neighbours: 6, {X, 15, 27, 10, 7, X}
+Node global: 12, Neighbours: 6, {13, X, 28, X, 8, X}
+Node global: 13, Neighbours: 6, {14, X, 29, 12, 9, X}
+Node global: 14, Neighbours: 6, {15, X, 30, 13, 10, X}
+Node global: 15, Neighbours: 6, {X, X, 31, 14, 11, X}
+Node global: 16, Neighbours: 6, {17, 20, X, X, X, 0}
+Node global: 17, Neighbours: 6, {18, 21, X, 16, X, 1}
+Node global: 18, Neighbours: 6, {19, 22, X, 17, X, 2}
+Node global: 19, Neighbours: 6, {X, 23, X, 18, X, 3}
+Node global: 20, Neighbours: 6, {21, 24, X, X, 16, 4}
+Node global: 21, Neighbours: 6, {22, 25, X, 20, 17, 5}
+Node global: 22, Neighbours: 6, {23, 26, X, 21, 18, 6}
+Node global: 23, Neighbours: 6, {X, 27, X, 22, 19, 7}
+Node global: 24, Neighbours: 6, {25, 28, X, X, 20, 8}
+Node global: 25, Neighbours: 6, {26, 29, X, 24, 21, 9}
+Node global: 26, Neighbours: 6, {27, 30, X, 25, 22, 10}
+Node global: 27, Neighbours: 6, {X, 31, X, 26, 23, 11}
+Node global: 28, Neighbours: 6, {29, X, X, X, 24, 12}
+Node global: 29, Neighbours: 6, {30, X, X, 28, 25, 13}
+Node global: 30, Neighbours: 6, {31, X, X, 29, 26, 14}
+Node global: 31, Neighbours: 6, {X, X, X, 30, 27, 15}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, 3, 4}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, 4, 5}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, 5, X}
+Node global: 8, Elements: 8, {X, X, X, X, X, 3, X, 6}
+Node global: 9, Elements: 8, {X, X, X, X, 3, 4, 6, 7}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, 7, 8}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, 8, X}
+Node global: 12, Elements: 8, {X, X, X, X, X, 6, X, X}
+Node global: 13, Elements: 8, {X, X, X, X, 6, 7, X, X}
+Node global: 14, Elements: 8, {X, X, X, X, 7, 8, X, X}
+Node global: 15, Elements: 8, {X, X, X, X, 8, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 0, X, X, X, X}
+Node global: 17, Elements: 8, {X, X, 0, 1, X, X, X, X}
+Node global: 18, Elements: 8, {X, X, 1, 2, X, X, X, X}
+Node global: 19, Elements: 8, {X, X, 2, X, X, X, X, X}
+Node global: 20, Elements: 8, {X, 0, X, 3, X, X, X, X}
+Node global: 21, Elements: 8, {0, 1, 3, 4, X, X, X, X}
+Node global: 22, Elements: 8, {1, 2, 4, 5, X, X, X, X}
+Node global: 23, Elements: 8, {2, X, 5, X, X, X, X, X}
+Node global: 24, Elements: 8, {X, 3, X, 6, X, X, X, X}
+Node global: 25, Elements: 8, {3, 4, 6, 7, X, X, X, X}
+Node global: 26, Elements: 8, {4, 5, 7, 8, X, X, X, X}
+Node global: 27, Elements: 8, {5, X, 8, X, X, X, X, X}
+Node global: 28, Elements: 8, {X, 6, X, X, X, X, X, X}
+Node global: 29, Elements: 8, {6, 7, X, X, X, X, X, X}
+Node global: 30, Elements: 8, {7, 8, X, X, X, X, X, X}
+Node global: 31, Elements: 8, {8, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 3, 0) -> global 12
+Node (1, 3, 0) -> global 13
+Node (2, 3, 0) -> global 14
+Node (3, 3, 0) -> global 15
+Node (0, 0, 1) -> global 16
+Node (1, 0, 1) -> global 17
+Node (2, 0, 1) -> global 18
+Node (3, 0, 1) -> global 19
+Node (0, 1, 1) -> global 20
+Node (1, 1, 1) -> global 21
+Node (2, 1, 1) -> global 22
+Node (3, 1, 1) -> global 23
+Node (0, 2, 1) -> global 24
+Node (1, 2, 1) -> global 25
+Node (2, 2, 1) -> global 26
+Node (3, 2, 1) -> global 27
+Node (0, 3, 1) -> global 28
+Node (1, 3, 1) -> global 29
+Node (2, 3, 1) -> global 30
+Node (3, 3, 1) -> global 31
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 3, 0)
+Node global 13 -> (1, 3, 0)
+Node global 14 -> (2, 3, 0)
+Node global 15 -> (3, 3, 0)
+Node global 16 -> (0, 0, 1)
+Node global 17 -> (1, 0, 1)
+Node global 18 -> (2, 0, 1)
+Node global 19 -> (3, 0, 1)
+Node global 20 -> (0, 1, 1)
+Node global 21 -> (1, 1, 1)
+Node global 22 -> (2, 1, 1)
+Node global 23 -> (3, 1, 1)
+Node global 24 -> (0, 2, 1)
+Node global 25 -> (1, 2, 1)
+Node global 26 -> (2, 2, 1)
+Node global 27 -> (3, 2, 1)
+Node global 28 -> (0, 3, 1)
+Node global 29 -> (1, 3, 1)
+Node global 30 -> (2, 3, 1)
+Node global 31 -> (3, 3, 1)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 3, 4, X, X, X, X, X, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, 3, 4, 5, X, X, X, X, X, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 4, 5, X, X, X, X, X, X, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 4, X, 6, 7, X, X, X, X, X, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, 2, 3, 5, 6, 7, 8, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 1, 2, X, 4, X, 7, 8, X, X, X, X, X, X, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 3, 4, X, 7, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 7, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 3, 4, 5, 6, 8, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 8, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 4, 5, X, 7, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 16, 17, 21, 20}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 17, 18, 22, 21}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 18, 19, 23, 22}
+Element global: 3, Nodes: 8, {4, 5, 9, 8, 20, 21, 25, 24}
+Element global: 4, Nodes: 8, {5, 6, 10, 9, 21, 22, 26, 25}
+Element global: 5, Nodes: 8, {6, 7, 11, 10, 22, 23, 27, 26}
+Element global: 6, Nodes: 8, {8, 9, 13, 12, 24, 25, 29, 28}
+Element global: 7, Nodes: 8, {9, 10, 14, 13, 25, 26, 30, 29}
+Element global: 8, Nodes: 8, {10, 11, 15, 14, 26, 27, 31, 30}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+Element (0, 2, 0) -> global 6
+Element (1, 2, 0) -> global 7
+Element (2, 2, 0) -> global 8
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+Element global 6 -> (0, 2, 0)
+Element global 7 -> (1, 2, 0)
+Element global 8 -> (2, 2, 0)
+
+
+HexaMeshTopology (ptr): 0x8057ac0
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ac0
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 1, 3}
+	element3DCounts: {0, 0, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ac0
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 3
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057da0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ac0
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {2, 0}
+Node global: 2, Neighbours: 2, {X, 1}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, 1}
+Node global: 2, Elements: 2, {1, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 0, 1) -> global 1
+Node (0, 0, 2) -> global 2
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 0, 1)
+Node global 2 -> (0, 0, 2)
+
+Element global: 0, Neighbours: 2, {X, 1}
+Element global: 1, Neighbours: 2, {0, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+Element global: 1, Nodes: 2, {1, 2}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8057ac0
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ac0
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 1, 3}
+	element3DCounts: {1, 0, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ac0
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 6
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057ed0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ac0
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, 4, X, 0}
+Node global: 3, Neighbours: 4, {X, 5, 2, 1}
+Node global: 4, Neighbours: 4, {5, X, X, 2}
+Node global: 5, Neighbours: 4, {X, X, 4, 3}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, 1}
+Node global: 3, Elements: 4, {0, X, 1, X}
+Node global: 4, Elements: 4, {X, 1, X, X}
+Node global: 5, Elements: 4, {1, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 0, 1) -> global 2
+Node (1, 0, 1) -> global 3
+Node (0, 0, 2) -> global 4
+Node (1, 0, 2) -> global 5
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 0, 1)
+Node global 3 -> (1, 0, 1)
+Node global 4 -> (0, 0, 2)
+Node global 5 -> (1, 0, 2)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, 1, X}
+Element global: 1, Neighbours: 8, {X, 0, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+Element global: 1, Nodes: 4, {2, 3, 5, 4}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8057ac0
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ac0
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 1, 3}
+	element3DCounts: {2, 0, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ac0
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 9
+	elementCount: 4
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8057ed0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ac0
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, 6, X, 0}
+Node global: 4, Neighbours: 4, {5, 7, 3, 1}
+Node global: 5, Neighbours: 4, {X, 8, 4, 2}
+Node global: 6, Neighbours: 4, {7, X, X, 3}
+Node global: 7, Neighbours: 4, {8, X, 6, 4}
+Node global: 8, Neighbours: 4, {X, X, 7, 5}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, 2}
+Node global: 4, Elements: 4, {0, 1, 2, 3}
+Node global: 5, Elements: 4, {1, X, 3, X}
+Node global: 6, Elements: 4, {X, 2, X, X}
+Node global: 7, Elements: 4, {2, 3, X, X}
+Node global: 8, Elements: 4, {3, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 0, 1) -> global 3
+Node (1, 0, 1) -> global 4
+Node (2, 0, 1) -> global 5
+Node (0, 0, 2) -> global 6
+Node (1, 0, 2) -> global 7
+Node (2, 0, 2) -> global 8
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 0, 1)
+Node global 4 -> (1, 0, 1)
+Node global 5 -> (2, 0, 1)
+Node global 6 -> (0, 0, 2)
+Node global 7 -> (1, 0, 2)
+Node global 8 -> (2, 0, 2)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 2, 3}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, 2, 3, X}
+Element global: 2, Neighbours: 8, {X, 0, 1, X, 3, X, X, X}
+Element global: 3, Neighbours: 8, {0, 1, X, 2, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+Element global: 2, Nodes: 4, {3, 4, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 8, 7}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (1, 0, 1) -> global 3
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (1, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8057ac0
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ac0
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 1, 3}
+	element3DCounts: {3, 0, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ac0
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8058230
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ac0
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, 8, X, 0}
+Node global: 5, Neighbours: 4, {6, 9, 4, 1}
+Node global: 6, Neighbours: 4, {7, 10, 5, 2}
+Node global: 7, Neighbours: 4, {X, 11, 6, 3}
+Node global: 8, Neighbours: 4, {9, X, X, 4}
+Node global: 9, Neighbours: 4, {10, X, 8, 5}
+Node global: 10, Neighbours: 4, {11, X, 9, 6}
+Node global: 11, Neighbours: 4, {X, X, 10, 7}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, 3}
+Node global: 5, Elements: 4, {0, 1, 3, 4}
+Node global: 6, Elements: 4, {1, 2, 4, 5}
+Node global: 7, Elements: 4, {2, X, 5, X}
+Node global: 8, Elements: 4, {X, 3, X, X}
+Node global: 9, Elements: 4, {3, 4, X, X}
+Node global: 10, Elements: 4, {4, 5, X, X}
+Node global: 11, Elements: 4, {5, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (1, 0, 1) -> global 5
+Node (2, 0, 1) -> global 6
+Node (3, 0, 1) -> global 7
+Node (0, 0, 2) -> global 8
+Node (1, 0, 2) -> global 9
+Node (2, 0, 2) -> global 10
+Node (3, 0, 2) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (1, 0, 1)
+Node global 6 -> (2, 0, 1)
+Node global 7 -> (3, 0, 1)
+Node global 8 -> (0, 0, 2)
+Node global 9 -> (1, 0, 2)
+Node global 10 -> (2, 0, 2)
+Node global 11 -> (3, 0, 2)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 3, 4}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, 3, 4, 5}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, 4, 5, X}
+Element global: 3, Neighbours: 8, {X, 0, 1, X, 4, X, X, X}
+Element global: 4, Neighbours: 8, {0, 1, 2, 3, 5, X, X, X}
+Element global: 5, Neighbours: 8, {1, 2, X, 4, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 9, 8}
+Element global: 4, Nodes: 4, {5, 6, 10, 9}
+Element global: 5, Nodes: 4, {6, 7, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (1, 0, 1) -> global 4
+Element (2, 0, 1) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (1, 0, 1)
+Element global 5 -> (2, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8057ac0
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ac0
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 2, 3}
+	element3DCounts: {0, 1, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ac0
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 6
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80583f8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ac0
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, 4, X, 0}
+Node global: 3, Neighbours: 4, {X, 5, 2, 1}
+Node global: 4, Neighbours: 4, {5, X, X, 2}
+Node global: 5, Neighbours: 4, {X, X, 4, 3}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, 1}
+Node global: 3, Elements: 4, {0, X, 1, X}
+Node global: 4, Elements: 4, {X, 1, X, X}
+Node global: 5, Elements: 4, {1, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 0, 1) -> global 2
+Node (0, 1, 1) -> global 3
+Node (0, 0, 2) -> global 4
+Node (0, 1, 2) -> global 5
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 0, 1)
+Node global 3 -> (0, 1, 1)
+Node global 4 -> (0, 0, 2)
+Node global 5 -> (0, 1, 2)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, 1, X}
+Element global: 1, Neighbours: 8, {X, 0, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+Element global: 1, Nodes: 4, {2, 3, 5, 4}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8057ac0
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8057ac0
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 2, 3}
+	element3DCounts: {1, 1, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8057ac0
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 2
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80589c0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8057ac0
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 4, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 5, 0, X, X}
+Node global: 2, Neighbours: 6, {3, X, 6, X, 0, X}
+Node global: 3, Neighbours: 6, {X, X, 7, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, 6, 8, X, X, 0}
+Node global: 5, Neighbours: 6, {X, 7, 9, 4, X, 1}
+Node global: 6, Neighbours: 6, {7, X, 10, X, 4, 2}
+Node global: 7, Neighbours: 6, {X, X, 11, 6, 5, 3}
+Node global: 8, Neighbours: 6, {9, 10, X, X, X, 4}
+Node global: 9, Neighbours: 6, {X, 11, X, 8, X, 5}
+Node global: 10, Neighbours: 6, {11, X, X, X, 8, 6}
+Node global: 11, Neighbours: 6, {X, X, X, 10, 9, 7}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, X, X}
+Node global: 4, Elements: 8, {X, X, X, 0, X, X, X, 1}
+Node global: 5, Elements: 8, {X, X, 0, X, X, X, 1, X}
+Node global: 6, Elements: 8, {X, 0, X, X, X, 1, X, X}
+Node global: 7, Elements: 8, {0, X, X, X, 1, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 1, X, X, X, X}
+Node global: 9, Elements: 8, {X, X, 1, X, X, X, X, X}
+Node global: 10, Elements: 8, {X, 1, X, X, X, X, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (1, 0, 1) -> global 5
+Node (0, 1, 1) -> global 6
+Node (1, 1, 1) -> global 7
+Node (0, 0, 2) -> global 8
+Node (1, 0, 2) -> global 9
+Node (0, 1, 2) -> global 10
+Node (1, 1, 2) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (1, 0, 1)
+Node global 6 -> (0, 1, 1)
+Node global 7 -> (1, 1, 1)
+Node global 8 -> (0, 0, 2)
+Node global 9 -> (1, 0, 2)
+Node global 10 -> (0, 1, 2)
+Node global 11 -> (1, 1, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, 0, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 4, 5, 7, 6}
+Element global: 1, Nodes: 8, {4, 5, 7, 6, 8, 9, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 2, 3}
+	element3DCounts: {2, 1, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 18
+	elementCount: 4
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80587b8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 6, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 7, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 8, 1, X, X}
+Node global: 3, Neighbours: 6, {4, X, 9, X, 0, X}
+Node global: 4, Neighbours: 6, {5, X, 10, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, X, 11, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, 9, 12, X, X, 0}
+Node global: 7, Neighbours: 6, {8, 10, 13, 6, X, 1}
+Node global: 8, Neighbours: 6, {X, 11, 14, 7, X, 2}
+Node global: 9, Neighbours: 6, {10, X, 15, X, 6, 3}
+Node global: 10, Neighbours: 6, {11, X, 16, 9, 7, 4}
+Node global: 11, Neighbours: 6, {X, X, 17, 10, 8, 5}
+Node global: 12, Neighbours: 6, {13, 15, X, X, X, 6}
+Node global: 13, Neighbours: 6, {14, 16, X, 12, X, 7}
+Node global: 14, Neighbours: 6, {X, 17, X, 13, X, 8}
+Node global: 15, Neighbours: 6, {16, X, X, X, 12, 9}
+Node global: 16, Neighbours: 6, {17, X, X, 15, 13, 10}
+Node global: 17, Neighbours: 6, {X, X, X, 16, 14, 11}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, X, X}
+Node global: 6, Elements: 8, {X, X, X, 0, X, X, X, 2}
+Node global: 7, Elements: 8, {X, X, 0, 1, X, X, 2, 3}
+Node global: 8, Elements: 8, {X, X, 1, X, X, X, 3, X}
+Node global: 9, Elements: 8, {X, 0, X, X, X, 2, X, X}
+Node global: 10, Elements: 8, {0, 1, X, X, 2, 3, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, 3, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 2, X, X, X, X}
+Node global: 13, Elements: 8, {X, X, 2, 3, X, X, X, X}
+Node global: 14, Elements: 8, {X, X, 3, X, X, X, X, X}
+Node global: 15, Elements: 8, {X, 2, X, X, X, X, X, X}
+Node global: 16, Elements: 8, {2, 3, X, X, X, X, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 0, 1) -> global 6
+Node (1, 0, 1) -> global 7
+Node (2, 0, 1) -> global 8
+Node (0, 1, 1) -> global 9
+Node (1, 1, 1) -> global 10
+Node (2, 1, 1) -> global 11
+Node (0, 0, 2) -> global 12
+Node (1, 0, 2) -> global 13
+Node (2, 0, 2) -> global 14
+Node (0, 1, 2) -> global 15
+Node (1, 1, 2) -> global 16
+Node (2, 1, 2) -> global 17
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 0, 1)
+Node global 7 -> (1, 0, 1)
+Node global 8 -> (2, 0, 1)
+Node global 9 -> (0, 1, 1)
+Node global 10 -> (1, 1, 1)
+Node global 11 -> (2, 1, 1)
+Node global 12 -> (0, 0, 2)
+Node global 13 -> (1, 0, 2)
+Node global 14 -> (2, 0, 2)
+Node global 15 -> (0, 1, 2)
+Node global 16 -> (1, 1, 2)
+Node global 17 -> (2, 1, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 2, 3, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, X, X, X, 2, 3, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, 0, 1, X, X, X, X, X, X, X, 3, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, 0, 1, X, X, X, X, X, X, X, 2, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 6, 7, 10, 9}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 7, 8, 11, 10}
+Element global: 2, Nodes: 8, {6, 7, 10, 9, 12, 13, 16, 15}
+Element global: 3, Nodes: 8, {7, 8, 11, 10, 13, 14, 17, 16}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (1, 0, 1) -> global 3
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (1, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 2, 3}
+	element3DCounts: {3, 1, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 24
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80589e0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 8, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 9, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 10, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 11, 2, X, X}
+Node global: 4, Neighbours: 6, {5, X, 12, X, 0, X}
+Node global: 5, Neighbours: 6, {6, X, 13, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, X, 14, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, X, 15, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, 12, 16, X, X, 0}
+Node global: 9, Neighbours: 6, {10, 13, 17, 8, X, 1}
+Node global: 10, Neighbours: 6, {11, 14, 18, 9, X, 2}
+Node global: 11, Neighbours: 6, {X, 15, 19, 10, X, 3}
+Node global: 12, Neighbours: 6, {13, X, 20, X, 8, 4}
+Node global: 13, Neighbours: 6, {14, X, 21, 12, 9, 5}
+Node global: 14, Neighbours: 6, {15, X, 22, 13, 10, 6}
+Node global: 15, Neighbours: 6, {X, X, 23, 14, 11, 7}
+Node global: 16, Neighbours: 6, {17, 20, X, X, X, 8}
+Node global: 17, Neighbours: 6, {18, 21, X, 16, X, 9}
+Node global: 18, Neighbours: 6, {19, 22, X, 17, X, 10}
+Node global: 19, Neighbours: 6, {X, 23, X, 18, X, 11}
+Node global: 20, Neighbours: 6, {21, X, X, X, 16, 12}
+Node global: 21, Neighbours: 6, {22, X, X, 20, 17, 13}
+Node global: 22, Neighbours: 6, {23, X, X, 21, 18, 14}
+Node global: 23, Neighbours: 6, {X, X, X, 22, 19, 15}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, X, X}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 0, X, X, X, 3}
+Node global: 9, Elements: 8, {X, X, 0, 1, X, X, 3, 4}
+Node global: 10, Elements: 8, {X, X, 1, 2, X, X, 4, 5}
+Node global: 11, Elements: 8, {X, X, 2, X, X, X, 5, X}
+Node global: 12, Elements: 8, {X, 0, X, X, X, 3, X, X}
+Node global: 13, Elements: 8, {0, 1, X, X, 3, 4, X, X}
+Node global: 14, Elements: 8, {1, 2, X, X, 4, 5, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, 5, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 3, X, X, X, X}
+Node global: 17, Elements: 8, {X, X, 3, 4, X, X, X, X}
+Node global: 18, Elements: 8, {X, X, 4, 5, X, X, X, X}
+Node global: 19, Elements: 8, {X, X, 5, X, X, X, X, X}
+Node global: 20, Elements: 8, {X, 3, X, X, X, X, X, X}
+Node global: 21, Elements: 8, {3, 4, X, X, X, X, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 0, 1) -> global 8
+Node (1, 0, 1) -> global 9
+Node (2, 0, 1) -> global 10
+Node (3, 0, 1) -> global 11
+Node (0, 1, 1) -> global 12
+Node (1, 1, 1) -> global 13
+Node (2, 1, 1) -> global 14
+Node (3, 1, 1) -> global 15
+Node (0, 0, 2) -> global 16
+Node (1, 0, 2) -> global 17
+Node (2, 0, 2) -> global 18
+Node (3, 0, 2) -> global 19
+Node (0, 1, 2) -> global 20
+Node (1, 1, 2) -> global 21
+Node (2, 1, 2) -> global 22
+Node (3, 1, 2) -> global 23
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 0, 1)
+Node global 9 -> (1, 0, 1)
+Node global 10 -> (2, 0, 1)
+Node global 11 -> (3, 0, 1)
+Node global 12 -> (0, 1, 1)
+Node global 13 -> (1, 1, 1)
+Node global 14 -> (2, 1, 1)
+Node global 15 -> (3, 1, 1)
+Node global 16 -> (0, 0, 2)
+Node global 17 -> (1, 0, 2)
+Node global 18 -> (2, 0, 2)
+Node global 19 -> (3, 0, 2)
+Node global 20 -> (0, 1, 2)
+Node global 21 -> (1, 1, 2)
+Node global 22 -> (2, 1, 2)
+Node global 23 -> (3, 1, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 3, 4, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, X, X, X, X, X, X, 3, 4, 5, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 4, 5, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, 0, 1, X, X, X, X, X, X, X, 4, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, 0, 1, 2, X, X, X, X, X, X, 3, 5, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, 1, 2, X, X, X, X, X, X, X, 4, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 8, 9, 13, 12}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 9, 10, 14, 13}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 10, 11, 15, 14}
+Element global: 3, Nodes: 8, {8, 9, 13, 12, 16, 17, 21, 20}
+Element global: 4, Nodes: 8, {9, 10, 14, 13, 17, 18, 22, 21}
+Element global: 5, Nodes: 8, {10, 11, 15, 14, 18, 19, 23, 22}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (1, 0, 1) -> global 4
+Element (2, 0, 1) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (1, 0, 1)
+Element global 5 -> (2, 0, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 3, 3}
+	element3DCounts: {0, 2, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 9
+	elementCount: 4
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8058b58
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, 6, X, 0}
+Node global: 4, Neighbours: 4, {5, 7, 3, 1}
+Node global: 5, Neighbours: 4, {X, 8, 4, 2}
+Node global: 6, Neighbours: 4, {7, X, X, 3}
+Node global: 7, Neighbours: 4, {8, X, 6, 4}
+Node global: 8, Neighbours: 4, {X, X, 7, 5}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, 2}
+Node global: 4, Elements: 4, {0, 1, 2, 3}
+Node global: 5, Elements: 4, {1, X, 3, X}
+Node global: 6, Elements: 4, {X, 2, X, X}
+Node global: 7, Elements: 4, {2, 3, X, X}
+Node global: 8, Elements: 4, {3, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 0, 1) -> global 3
+Node (0, 1, 1) -> global 4
+Node (0, 2, 1) -> global 5
+Node (0, 0, 2) -> global 6
+Node (0, 1, 2) -> global 7
+Node (0, 2, 2) -> global 8
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 0, 1)
+Node global 4 -> (0, 1, 1)
+Node global 5 -> (0, 2, 1)
+Node global 6 -> (0, 0, 2)
+Node global 7 -> (0, 1, 2)
+Node global 8 -> (0, 2, 2)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 2, 3}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, 2, 3, X}
+Element global: 2, Neighbours: 8, {X, 0, 1, X, 3, X, X, X}
+Element global: 3, Neighbours: 8, {0, 1, X, 2, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+Element global: 2, Nodes: 4, {3, 4, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 8, 7}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (0, 1, 1) -> global 3
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (0, 1, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 3, 3}
+	element3DCounts: {1, 2, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 18
+	elementCount: 4
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8058d20
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 6, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 7, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 4, 8, X, 0, X}
+Node global: 3, Neighbours: 6, {X, 5, 9, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, X, 10, X, 2, X}
+Node global: 5, Neighbours: 6, {X, X, 11, 4, 3, X}
+Node global: 6, Neighbours: 6, {7, 8, 12, X, X, 0}
+Node global: 7, Neighbours: 6, {X, 9, 13, 6, X, 1}
+Node global: 8, Neighbours: 6, {9, 10, 14, X, 6, 2}
+Node global: 9, Neighbours: 6, {X, 11, 15, 8, 7, 3}
+Node global: 10, Neighbours: 6, {11, X, 16, X, 8, 4}
+Node global: 11, Neighbours: 6, {X, X, 17, 10, 9, 5}
+Node global: 12, Neighbours: 6, {13, 14, X, X, X, 6}
+Node global: 13, Neighbours: 6, {X, 15, X, 12, X, 7}
+Node global: 14, Neighbours: 6, {15, 16, X, X, 12, 8}
+Node global: 15, Neighbours: 6, {X, 17, X, 14, 13, 9}
+Node global: 16, Neighbours: 6, {17, X, X, X, 14, 10}
+Node global: 17, Neighbours: 6, {X, X, X, 16, 15, 11}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, 1}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, 1, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 1, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, X, X}
+Node global: 6, Elements: 8, {X, X, X, 0, X, X, X, 2}
+Node global: 7, Elements: 8, {X, X, 0, X, X, X, 2, X}
+Node global: 8, Elements: 8, {X, 0, X, 1, X, 2, X, 3}
+Node global: 9, Elements: 8, {0, X, 1, X, 2, X, 3, X}
+Node global: 10, Elements: 8, {X, 1, X, X, X, 3, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, 3, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 2, X, X, X, X}
+Node global: 13, Elements: 8, {X, X, 2, X, X, X, X, X}
+Node global: 14, Elements: 8, {X, 2, X, 3, X, X, X, X}
+Node global: 15, Elements: 8, {2, X, 3, X, X, X, X, X}
+Node global: 16, Elements: 8, {X, 3, X, X, X, X, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 0, 1) -> global 6
+Node (1, 0, 1) -> global 7
+Node (0, 1, 1) -> global 8
+Node (1, 1, 1) -> global 9
+Node (0, 2, 1) -> global 10
+Node (1, 2, 1) -> global 11
+Node (0, 0, 2) -> global 12
+Node (1, 0, 2) -> global 13
+Node (0, 1, 2) -> global 14
+Node (1, 1, 2) -> global 15
+Node (0, 2, 2) -> global 16
+Node (1, 2, 2) -> global 17
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 0, 1)
+Node global 7 -> (1, 0, 1)
+Node global 8 -> (0, 1, 1)
+Node global 9 -> (1, 1, 1)
+Node global 10 -> (0, 2, 1)
+Node global 11 -> (1, 2, 1)
+Node global 12 -> (0, 0, 2)
+Node global 13 -> (1, 0, 2)
+Node global 14 -> (0, 1, 2)
+Node global 15 -> (1, 1, 2)
+Node global 16 -> (0, 2, 2)
+Node global 17 -> (1, 2, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, 2, X, X, 3, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, X, X, X, 2, X, X, 3, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, 0, X, X, 1, X, X, X, X, X, X, X, 3, X, X, X, X, X, X, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, 0, X, X, 1, X, X, X, X, X, 2, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 6, 7, 9, 8}
+Element global: 1, Nodes: 8, {2, 3, 5, 4, 8, 9, 11, 10}
+Element global: 2, Nodes: 8, {6, 7, 9, 8, 12, 13, 15, 14}
+Element global: 3, Nodes: 8, {8, 9, 11, 10, 14, 15, 17, 16}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (0, 1, 1) -> global 3
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (0, 1, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 3, 3}
+	element3DCounts: {2, 2, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 27
+	elementCount: 8
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8058ef0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 9, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 10, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 11, 1, X, X}
+Node global: 3, Neighbours: 6, {4, 6, 12, X, 0, X}
+Node global: 4, Neighbours: 6, {5, 7, 13, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, 8, 14, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, X, 15, X, 3, X}
+Node global: 7, Neighbours: 6, {8, X, 16, 6, 4, X}
+Node global: 8, Neighbours: 6, {X, X, 17, 7, 5, X}
+Node global: 9, Neighbours: 6, {10, 12, 18, X, X, 0}
+Node global: 10, Neighbours: 6, {11, 13, 19, 9, X, 1}
+Node global: 11, Neighbours: 6, {X, 14, 20, 10, X, 2}
+Node global: 12, Neighbours: 6, {13, 15, 21, X, 9, 3}
+Node global: 13, Neighbours: 6, {14, 16, 22, 12, 10, 4}
+Node global: 14, Neighbours: 6, {X, 17, 23, 13, 11, 5}
+Node global: 15, Neighbours: 6, {16, X, 24, X, 12, 6}
+Node global: 16, Neighbours: 6, {17, X, 25, 15, 13, 7}
+Node global: 17, Neighbours: 6, {X, X, 26, 16, 14, 8}
+Node global: 18, Neighbours: 6, {19, 21, X, X, X, 9}
+Node global: 19, Neighbours: 6, {20, 22, X, 18, X, 10}
+Node global: 20, Neighbours: 6, {X, 23, X, 19, X, 11}
+Node global: 21, Neighbours: 6, {22, 24, X, X, 18, 12}
+Node global: 22, Neighbours: 6, {23, 25, X, 21, 19, 13}
+Node global: 23, Neighbours: 6, {X, 26, X, 22, 20, 14}
+Node global: 24, Neighbours: 6, {25, X, X, X, 21, 15}
+Node global: 25, Neighbours: 6, {26, X, X, 24, 22, 16}
+Node global: 26, Neighbours: 6, {X, X, X, 25, 23, 17}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, 2}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, 2, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 3, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, 3, X, X}
+Node global: 8, Elements: 8, {X, X, X, X, 3, X, X, X}
+Node global: 9, Elements: 8, {X, X, X, 0, X, X, X, 4}
+Node global: 10, Elements: 8, {X, X, 0, 1, X, X, 4, 5}
+Node global: 11, Elements: 8, {X, X, 1, X, X, X, 5, X}
+Node global: 12, Elements: 8, {X, 0, X, 2, X, 4, X, 6}
+Node global: 13, Elements: 8, {0, 1, 2, 3, 4, 5, 6, 7}
+Node global: 14, Elements: 8, {1, X, 3, X, 5, X, 7, X}
+Node global: 15, Elements: 8, {X, 2, X, X, X, 6, X, X}
+Node global: 16, Elements: 8, {2, 3, X, X, 6, 7, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, 7, X, X, X}
+Node global: 18, Elements: 8, {X, X, X, 4, X, X, X, X}
+Node global: 19, Elements: 8, {X, X, 4, 5, X, X, X, X}
+Node global: 20, Elements: 8, {X, X, 5, X, X, X, X, X}
+Node global: 21, Elements: 8, {X, 4, X, 6, X, X, X, X}
+Node global: 22, Elements: 8, {4, 5, 6, 7, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, 7, X, X, X, X, X}
+Node global: 24, Elements: 8, {X, 6, X, X, X, X, X, X}
+Node global: 25, Elements: 8, {6, 7, X, X, X, X, X, X}
+Node global: 26, Elements: 8, {7, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 0, 1) -> global 9
+Node (1, 0, 1) -> global 10
+Node (2, 0, 1) -> global 11
+Node (0, 1, 1) -> global 12
+Node (1, 1, 1) -> global 13
+Node (2, 1, 1) -> global 14
+Node (0, 2, 1) -> global 15
+Node (1, 2, 1) -> global 16
+Node (2, 2, 1) -> global 17
+Node (0, 0, 2) -> global 18
+Node (1, 0, 2) -> global 19
+Node (2, 0, 2) -> global 20
+Node (0, 1, 2) -> global 21
+Node (1, 1, 2) -> global 22
+Node (2, 1, 2) -> global 23
+Node (0, 2, 2) -> global 24
+Node (1, 2, 2) -> global 25
+Node (2, 2, 2) -> global 26
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 0, 1)
+Node global 10 -> (1, 0, 1)
+Node global 11 -> (2, 0, 1)
+Node global 12 -> (0, 1, 1)
+Node global 13 -> (1, 1, 1)
+Node global 14 -> (2, 1, 1)
+Node global 15 -> (0, 2, 1)
+Node global 16 -> (1, 2, 1)
+Node global 17 -> (2, 2, 1)
+Node global 18 -> (0, 0, 2)
+Node global 19 -> (1, 0, 2)
+Node global 20 -> (2, 0, 2)
+Node global 21 -> (0, 1, 2)
+Node global 22 -> (1, 1, 2)
+Node global 23 -> (2, 1, 2)
+Node global 24 -> (0, 2, 2)
+Node global 25 -> (1, 2, 2)
+Node global 26 -> (2, 2, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 2, 3, X, X, X, X, 4, 5, X, 6, 7}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, 2, 3, X, X, X, X, 4, 5, X, 6, 7, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 3, X, X, X, X, 4, 5, X, 6, 7, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, X, 2, X, X, X, X, 4, 5, X, 6, 7, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, 0, 1, X, 2, 3, X, X, X, X, 5, X, 6, 7, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, 0, 1, X, 2, 3, X, X, X, X, 4, X, 6, 7, X, X, X, X, X, X, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, 0, 1, X, 2, 3, X, X, X, X, 4, 5, X, 7, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 7, Neighbours: 26, {0, 1, X, 2, 3, X, X, X, X, 4, 5, X, 6, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 9, 10, 13, 12}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 10, 11, 14, 13}
+Element global: 2, Nodes: 8, {3, 4, 7, 6, 12, 13, 16, 15}
+Element global: 3, Nodes: 8, {4, 5, 8, 7, 13, 14, 17, 16}
+Element global: 4, Nodes: 8, {9, 10, 13, 12, 18, 19, 22, 21}
+Element global: 5, Nodes: 8, {10, 11, 14, 13, 19, 20, 23, 22}
+Element global: 6, Nodes: 8, {12, 13, 16, 15, 21, 22, 25, 24}
+Element global: 7, Nodes: 8, {13, 14, 17, 16, 22, 23, 26, 25}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+Element (0, 0, 1) -> global 4
+Element (1, 0, 1) -> global 5
+Element (0, 1, 1) -> global 6
+Element (1, 1, 1) -> global 7
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+Element global 4 -> (0, 0, 1)
+Element global 5 -> (1, 0, 1)
+Element global 6 -> (0, 1, 1)
+Element global 7 -> (1, 1, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 3, 3}
+	element3DCounts: {3, 2, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 36
+	elementCount: 12
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80590c0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 12, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 13, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 14, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 15, 2, X, X}
+Node global: 4, Neighbours: 6, {5, 8, 16, X, 0, X}
+Node global: 5, Neighbours: 6, {6, 9, 17, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, 10, 18, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, 11, 19, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, X, 20, X, 4, X}
+Node global: 9, Neighbours: 6, {10, X, 21, 8, 5, X}
+Node global: 10, Neighbours: 6, {11, X, 22, 9, 6, X}
+Node global: 11, Neighbours: 6, {X, X, 23, 10, 7, X}
+Node global: 12, Neighbours: 6, {13, 16, 24, X, X, 0}
+Node global: 13, Neighbours: 6, {14, 17, 25, 12, X, 1}
+Node global: 14, Neighbours: 6, {15, 18, 26, 13, X, 2}
+Node global: 15, Neighbours: 6, {X, 19, 27, 14, X, 3}
+Node global: 16, Neighbours: 6, {17, 20, 28, X, 12, 4}
+Node global: 17, Neighbours: 6, {18, 21, 29, 16, 13, 5}
+Node global: 18, Neighbours: 6, {19, 22, 30, 17, 14, 6}
+Node global: 19, Neighbours: 6, {X, 23, 31, 18, 15, 7}
+Node global: 20, Neighbours: 6, {21, X, 32, X, 16, 8}
+Node global: 21, Neighbours: 6, {22, X, 33, 20, 17, 9}
+Node global: 22, Neighbours: 6, {23, X, 34, 21, 18, 10}
+Node global: 23, Neighbours: 6, {X, X, 35, 22, 19, 11}
+Node global: 24, Neighbours: 6, {25, 28, X, X, X, 12}
+Node global: 25, Neighbours: 6, {26, 29, X, 24, X, 13}
+Node global: 26, Neighbours: 6, {27, 30, X, 25, X, 14}
+Node global: 27, Neighbours: 6, {X, 31, X, 26, X, 15}
+Node global: 28, Neighbours: 6, {29, 32, X, X, 24, 16}
+Node global: 29, Neighbours: 6, {30, 33, X, 28, 25, 17}
+Node global: 30, Neighbours: 6, {31, 34, X, 29, 26, 18}
+Node global: 31, Neighbours: 6, {X, 35, X, 30, 27, 19}
+Node global: 32, Neighbours: 6, {33, X, X, X, 28, 20}
+Node global: 33, Neighbours: 6, {34, X, X, 32, 29, 21}
+Node global: 34, Neighbours: 6, {35, X, X, 33, 30, 22}
+Node global: 35, Neighbours: 6, {X, X, X, 34, 31, 23}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, 3, 4}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, 4, 5}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, 5, X}
+Node global: 8, Elements: 8, {X, X, X, X, X, 3, X, X}
+Node global: 9, Elements: 8, {X, X, X, X, 3, 4, X, X}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, X, X}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 0, X, X, X, 6}
+Node global: 13, Elements: 8, {X, X, 0, 1, X, X, 6, 7}
+Node global: 14, Elements: 8, {X, X, 1, 2, X, X, 7, 8}
+Node global: 15, Elements: 8, {X, X, 2, X, X, X, 8, X}
+Node global: 16, Elements: 8, {X, 0, X, 3, X, 6, X, 9}
+Node global: 17, Elements: 8, {0, 1, 3, 4, 6, 7, 9, 10}
+Node global: 18, Elements: 8, {1, 2, 4, 5, 7, 8, 10, 11}
+Node global: 19, Elements: 8, {2, X, 5, X, 8, X, 11, X}
+Node global: 20, Elements: 8, {X, 3, X, X, X, 9, X, X}
+Node global: 21, Elements: 8, {3, 4, X, X, 9, 10, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, 10, 11, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, 11, X, X, X}
+Node global: 24, Elements: 8, {X, X, X, 6, X, X, X, X}
+Node global: 25, Elements: 8, {X, X, 6, 7, X, X, X, X}
+Node global: 26, Elements: 8, {X, X, 7, 8, X, X, X, X}
+Node global: 27, Elements: 8, {X, X, 8, X, X, X, X, X}
+Node global: 28, Elements: 8, {X, 6, X, 9, X, X, X, X}
+Node global: 29, Elements: 8, {6, 7, 9, 10, X, X, X, X}
+Node global: 30, Elements: 8, {7, 8, 10, 11, X, X, X, X}
+Node global: 31, Elements: 8, {8, X, 11, X, X, X, X, X}
+Node global: 32, Elements: 8, {X, 9, X, X, X, X, X, X}
+Node global: 33, Elements: 8, {9, 10, X, X, X, X, X, X}
+Node global: 34, Elements: 8, {10, 11, X, X, X, X, X, X}
+Node global: 35, Elements: 8, {11, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 0, 1) -> global 12
+Node (1, 0, 1) -> global 13
+Node (2, 0, 1) -> global 14
+Node (3, 0, 1) -> global 15
+Node (0, 1, 1) -> global 16
+Node (1, 1, 1) -> global 17
+Node (2, 1, 1) -> global 18
+Node (3, 1, 1) -> global 19
+Node (0, 2, 1) -> global 20
+Node (1, 2, 1) -> global 21
+Node (2, 2, 1) -> global 22
+Node (3, 2, 1) -> global 23
+Node (0, 0, 2) -> global 24
+Node (1, 0, 2) -> global 25
+Node (2, 0, 2) -> global 26
+Node (3, 0, 2) -> global 27
+Node (0, 1, 2) -> global 28
+Node (1, 1, 2) -> global 29
+Node (2, 1, 2) -> global 30
+Node (3, 1, 2) -> global 31
+Node (0, 2, 2) -> global 32
+Node (1, 2, 2) -> global 33
+Node (2, 2, 2) -> global 34
+Node (3, 2, 2) -> global 35
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 0, 1)
+Node global 13 -> (1, 0, 1)
+Node global 14 -> (2, 0, 1)
+Node global 15 -> (3, 0, 1)
+Node global 16 -> (0, 1, 1)
+Node global 17 -> (1, 1, 1)
+Node global 18 -> (2, 1, 1)
+Node global 19 -> (3, 1, 1)
+Node global 20 -> (0, 2, 1)
+Node global 21 -> (1, 2, 1)
+Node global 22 -> (2, 2, 1)
+Node global 23 -> (3, 2, 1)
+Node global 24 -> (0, 0, 2)
+Node global 25 -> (1, 0, 2)
+Node global 26 -> (2, 0, 2)
+Node global 27 -> (3, 0, 2)
+Node global 28 -> (0, 1, 2)
+Node global 29 -> (1, 1, 2)
+Node global 30 -> (2, 1, 2)
+Node global 31 -> (3, 1, 2)
+Node global 32 -> (0, 2, 2)
+Node global 33 -> (1, 2, 2)
+Node global 34 -> (2, 2, 2)
+Node global 35 -> (3, 2, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 3, 4, X, X, X, X, 6, 7, X, 9, 10}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, 3, 4, 5, X, X, X, 6, 7, 8, 9, 10, 11}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 4, 5, X, X, X, X, 7, 8, X, 10, 11, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 4, X, X, X, X, 6, 7, X, 9, 10, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, 2, 3, 5, X, X, X, 6, 7, 8, 9, 10, 11, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 1, 2, X, 4, X, X, X, X, 7, 8, X, 10, 11, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, 0, 1, X, 3, 4, X, X, X, X, 7, X, 9, 10, X, X, X, X, X, X, X, X, X}
+Element global: 7, Neighbours: 26, {X, X, X, 0, 1, 2, 3, 4, 5, X, X, X, 6, 8, 9, 10, 11, X, X, X, X, X, X, X, X, X}
+Element global: 8, Neighbours: 26, {X, X, X, 1, 2, X, 4, 5, X, X, X, X, 7, X, 10, 11, X, X, X, X, X, X, X, X, X, X}
+Element global: 9, Neighbours: 26, {X, 0, 1, X, 3, 4, X, X, X, X, 6, 7, X, 10, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 10, Neighbours: 26, {0, 1, 2, 3, 4, 5, X, X, X, 6, 7, 8, 9, 11, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 11, Neighbours: 26, {1, 2, X, 4, 5, X, X, X, X, 7, 8, X, 10, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 12, 13, 17, 16}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 13, 14, 18, 17}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 14, 15, 19, 18}
+Element global: 3, Nodes: 8, {4, 5, 9, 8, 16, 17, 21, 20}
+Element global: 4, Nodes: 8, {5, 6, 10, 9, 17, 18, 22, 21}
+Element global: 5, Nodes: 8, {6, 7, 11, 10, 18, 19, 23, 22}
+Element global: 6, Nodes: 8, {12, 13, 17, 16, 24, 25, 29, 28}
+Element global: 7, Nodes: 8, {13, 14, 18, 17, 25, 26, 30, 29}
+Element global: 8, Nodes: 8, {14, 15, 19, 18, 26, 27, 31, 30}
+Element global: 9, Nodes: 8, {16, 17, 21, 20, 28, 29, 33, 32}
+Element global: 10, Nodes: 8, {17, 18, 22, 21, 29, 30, 34, 33}
+Element global: 11, Nodes: 8, {18, 19, 23, 22, 30, 31, 35, 34}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+Element (0, 0, 1) -> global 6
+Element (1, 0, 1) -> global 7
+Element (2, 0, 1) -> global 8
+Element (0, 1, 1) -> global 9
+Element (1, 1, 1) -> global 10
+Element (2, 1, 1) -> global 11
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+Element global 6 -> (0, 0, 1)
+Element global 7 -> (1, 0, 1)
+Element global 8 -> (2, 0, 1)
+Element global 9 -> (0, 1, 1)
+Element global 10 -> (1, 1, 1)
+Element global 11 -> (2, 1, 1)
+
+
+HexaMeshTopology (ptr): 0x8058708
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8058708
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 4, 3}
+	element3DCounts: {0, 3, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8058708
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8059718
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8058708
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, 8, X, 0}
+Node global: 5, Neighbours: 4, {6, 9, 4, 1}
+Node global: 6, Neighbours: 4, {7, 10, 5, 2}
+Node global: 7, Neighbours: 4, {X, 11, 6, 3}
+Node global: 8, Neighbours: 4, {9, X, X, 4}
+Node global: 9, Neighbours: 4, {10, X, 8, 5}
+Node global: 10, Neighbours: 4, {11, X, 9, 6}
+Node global: 11, Neighbours: 4, {X, X, 10, 7}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, 3}
+Node global: 5, Elements: 4, {0, 1, 3, 4}
+Node global: 6, Elements: 4, {1, 2, 4, 5}
+Node global: 7, Elements: 4, {2, X, 5, X}
+Node global: 8, Elements: 4, {X, 3, X, X}
+Node global: 9, Elements: 4, {3, 4, X, X}
+Node global: 10, Elements: 4, {4, 5, X, X}
+Node global: 11, Elements: 4, {5, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 3, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (0, 1, 1) -> global 5
+Node (0, 2, 1) -> global 6
+Node (0, 3, 1) -> global 7
+Node (0, 0, 2) -> global 8
+Node (0, 1, 2) -> global 9
+Node (0, 2, 2) -> global 10
+Node (0, 3, 2) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 3, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (0, 1, 1)
+Node global 6 -> (0, 2, 1)
+Node global 7 -> (0, 3, 1)
+Node global 8 -> (0, 0, 2)
+Node global 9 -> (0, 1, 2)
+Node global 10 -> (0, 2, 2)
+Node global 11 -> (0, 3, 2)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 3, 4}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, 3, 4, 5}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, 4, 5, X}
+Element global: 3, Neighbours: 8, {X, 0, 1, X, 4, X, X, X}
+Element global: 4, Neighbours: 8, {0, 1, 2, 3, 5, X, X, X}
+Element global: 5, Neighbours: 8, {1, 2, X, 4, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 9, 8}
+Element global: 4, Nodes: 4, {5, 6, 10, 9}
+Element global: 5, Nodes: 4, {6, 7, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (0, 1, 1) -> global 4
+Element (0, 2, 1) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (0, 1, 1)
+Element global 5 -> (0, 2, 1)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 4, 3}
+	element3DCounts: {1, 3, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 24
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80594c0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 8, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 9, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 4, 10, X, 0, X}
+Node global: 3, Neighbours: 6, {X, 5, 11, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, 6, 12, X, 2, X}
+Node global: 5, Neighbours: 6, {X, 7, 13, 4, 3, X}
+Node global: 6, Neighbours: 6, {7, X, 14, X, 4, X}
+Node global: 7, Neighbours: 6, {X, X, 15, 6, 5, X}
+Node global: 8, Neighbours: 6, {9, 10, 16, X, X, 0}
+Node global: 9, Neighbours: 6, {X, 11, 17, 8, X, 1}
+Node global: 10, Neighbours: 6, {11, 12, 18, X, 8, 2}
+Node global: 11, Neighbours: 6, {X, 13, 19, 10, 9, 3}
+Node global: 12, Neighbours: 6, {13, 14, 20, X, 10, 4}
+Node global: 13, Neighbours: 6, {X, 15, 21, 12, 11, 5}
+Node global: 14, Neighbours: 6, {15, X, 22, X, 12, 6}
+Node global: 15, Neighbours: 6, {X, X, 23, 14, 13, 7}
+Node global: 16, Neighbours: 6, {17, 18, X, X, X, 8}
+Node global: 17, Neighbours: 6, {X, 19, X, 16, X, 9}
+Node global: 18, Neighbours: 6, {19, 20, X, X, 16, 10}
+Node global: 19, Neighbours: 6, {X, 21, X, 18, 17, 11}
+Node global: 20, Neighbours: 6, {21, 22, X, X, 18, 12}
+Node global: 21, Neighbours: 6, {X, 23, X, 20, 19, 13}
+Node global: 22, Neighbours: 6, {23, X, X, X, 20, 14}
+Node global: 23, Neighbours: 6, {X, X, X, 22, 21, 15}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, 1}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, 1, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 1, X, 2}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 2, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 0, X, X, X, 3}
+Node global: 9, Elements: 8, {X, X, 0, X, X, X, 3, X}
+Node global: 10, Elements: 8, {X, 0, X, 1, X, 3, X, 4}
+Node global: 11, Elements: 8, {0, X, 1, X, 3, X, 4, X}
+Node global: 12, Elements: 8, {X, 1, X, 2, X, 4, X, 5}
+Node global: 13, Elements: 8, {1, X, 2, X, 4, X, 5, X}
+Node global: 14, Elements: 8, {X, 2, X, X, X, 5, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, 5, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 3, X, X, X, X}
+Node global: 17, Elements: 8, {X, X, 3, X, X, X, X, X}
+Node global: 18, Elements: 8, {X, 3, X, 4, X, X, X, X}
+Node global: 19, Elements: 8, {3, X, 4, X, X, X, X, X}
+Node global: 20, Elements: 8, {X, 4, X, 5, X, X, X, X}
+Node global: 21, Elements: 8, {4, X, 5, X, X, X, X, X}
+Node global: 22, Elements: 8, {X, 5, X, X, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 3, 0) -> global 6
+Node (1, 3, 0) -> global 7
+Node (0, 0, 1) -> global 8
+Node (1, 0, 1) -> global 9
+Node (0, 1, 1) -> global 10
+Node (1, 1, 1) -> global 11
+Node (0, 2, 1) -> global 12
+Node (1, 2, 1) -> global 13
+Node (0, 3, 1) -> global 14
+Node (1, 3, 1) -> global 15
+Node (0, 0, 2) -> global 16
+Node (1, 0, 2) -> global 17
+Node (0, 1, 2) -> global 18
+Node (1, 1, 2) -> global 19
+Node (0, 2, 2) -> global 20
+Node (1, 2, 2) -> global 21
+Node (0, 3, 2) -> global 22
+Node (1, 3, 2) -> global 23
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 3, 0)
+Node global 7 -> (1, 3, 0)
+Node global 8 -> (0, 0, 1)
+Node global 9 -> (1, 0, 1)
+Node global 10 -> (0, 1, 1)
+Node global 11 -> (1, 1, 1)
+Node global 12 -> (0, 2, 1)
+Node global 13 -> (1, 2, 1)
+Node global 14 -> (0, 3, 1)
+Node global 15 -> (1, 3, 1)
+Node global 16 -> (0, 0, 2)
+Node global 17 -> (1, 0, 2)
+Node global 18 -> (0, 1, 2)
+Node global 19 -> (1, 1, 2)
+Node global 20 -> (0, 2, 2)
+Node global 21 -> (1, 2, 2)
+Node global 22 -> (0, 3, 2)
+Node global 23 -> (1, 3, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, 3, X, X, 4, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, 2, X, X, 3, X, X, 4, X, X, 5, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 4, X, X, 5, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, 0, X, X, 1, X, X, X, X, X, X, X, 4, X, X, X, X, X, X, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, 0, X, X, 1, X, X, 2, X, X, 3, X, X, X, X, 5, X, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, 1, X, X, 2, X, X, X, X, X, 4, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 8, 9, 11, 10}
+Element global: 1, Nodes: 8, {2, 3, 5, 4, 10, 11, 13, 12}
+Element global: 2, Nodes: 8, {4, 5, 7, 6, 12, 13, 15, 14}
+Element global: 3, Nodes: 8, {8, 9, 11, 10, 16, 17, 19, 18}
+Element global: 4, Nodes: 8, {10, 11, 13, 12, 18, 19, 21, 20}
+Element global: 5, Nodes: 8, {12, 13, 15, 14, 20, 21, 23, 22}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (0, 1, 1) -> global 4
+Element (0, 2, 1) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (0, 1, 1)
+Element global 5 -> (0, 2, 1)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 4, 3}
+	element3DCounts: {2, 3, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 36
+	elementCount: 12
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8059630
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 12, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 13, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 14, 1, X, X}
+Node global: 3, Neighbours: 6, {4, 6, 15, X, 0, X}
+Node global: 4, Neighbours: 6, {5, 7, 16, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, 8, 17, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, 9, 18, X, 3, X}
+Node global: 7, Neighbours: 6, {8, 10, 19, 6, 4, X}
+Node global: 8, Neighbours: 6, {X, 11, 20, 7, 5, X}
+Node global: 9, Neighbours: 6, {10, X, 21, X, 6, X}
+Node global: 10, Neighbours: 6, {11, X, 22, 9, 7, X}
+Node global: 11, Neighbours: 6, {X, X, 23, 10, 8, X}
+Node global: 12, Neighbours: 6, {13, 15, 24, X, X, 0}
+Node global: 13, Neighbours: 6, {14, 16, 25, 12, X, 1}
+Node global: 14, Neighbours: 6, {X, 17, 26, 13, X, 2}
+Node global: 15, Neighbours: 6, {16, 18, 27, X, 12, 3}
+Node global: 16, Neighbours: 6, {17, 19, 28, 15, 13, 4}
+Node global: 17, Neighbours: 6, {X, 20, 29, 16, 14, 5}
+Node global: 18, Neighbours: 6, {19, 21, 30, X, 15, 6}
+Node global: 19, Neighbours: 6, {20, 22, 31, 18, 16, 7}
+Node global: 20, Neighbours: 6, {X, 23, 32, 19, 17, 8}
+Node global: 21, Neighbours: 6, {22, X, 33, X, 18, 9}
+Node global: 22, Neighbours: 6, {23, X, 34, 21, 19, 10}
+Node global: 23, Neighbours: 6, {X, X, 35, 22, 20, 11}
+Node global: 24, Neighbours: 6, {25, 27, X, X, X, 12}
+Node global: 25, Neighbours: 6, {26, 28, X, 24, X, 13}
+Node global: 26, Neighbours: 6, {X, 29, X, 25, X, 14}
+Node global: 27, Neighbours: 6, {28, 30, X, X, 24, 15}
+Node global: 28, Neighbours: 6, {29, 31, X, 27, 25, 16}
+Node global: 29, Neighbours: 6, {X, 32, X, 28, 26, 17}
+Node global: 30, Neighbours: 6, {31, 33, X, X, 27, 18}
+Node global: 31, Neighbours: 6, {32, 34, X, 30, 28, 19}
+Node global: 32, Neighbours: 6, {X, 35, X, 31, 29, 20}
+Node global: 33, Neighbours: 6, {34, X, X, X, 30, 21}
+Node global: 34, Neighbours: 6, {35, X, X, 33, 31, 22}
+Node global: 35, Neighbours: 6, {X, X, X, 34, 32, 23}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, 2}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, 2, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 3, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, 4}
+Node global: 7, Elements: 8, {X, X, X, X, 2, 3, 4, 5}
+Node global: 8, Elements: 8, {X, X, X, X, 3, X, 5, X}
+Node global: 9, Elements: 8, {X, X, X, X, X, 4, X, X}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, X, X}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 0, X, X, X, 6}
+Node global: 13, Elements: 8, {X, X, 0, 1, X, X, 6, 7}
+Node global: 14, Elements: 8, {X, X, 1, X, X, X, 7, X}
+Node global: 15, Elements: 8, {X, 0, X, 2, X, 6, X, 8}
+Node global: 16, Elements: 8, {0, 1, 2, 3, 6, 7, 8, 9}
+Node global: 17, Elements: 8, {1, X, 3, X, 7, X, 9, X}
+Node global: 18, Elements: 8, {X, 2, X, 4, X, 8, X, 10}
+Node global: 19, Elements: 8, {2, 3, 4, 5, 8, 9, 10, 11}
+Node global: 20, Elements: 8, {3, X, 5, X, 9, X, 11, X}
+Node global: 21, Elements: 8, {X, 4, X, X, X, 10, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, 10, 11, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, 11, X, X, X}
+Node global: 24, Elements: 8, {X, X, X, 6, X, X, X, X}
+Node global: 25, Elements: 8, {X, X, 6, 7, X, X, X, X}
+Node global: 26, Elements: 8, {X, X, 7, X, X, X, X, X}
+Node global: 27, Elements: 8, {X, 6, X, 8, X, X, X, X}
+Node global: 28, Elements: 8, {6, 7, 8, 9, X, X, X, X}
+Node global: 29, Elements: 8, {7, X, 9, X, X, X, X, X}
+Node global: 30, Elements: 8, {X, 8, X, 10, X, X, X, X}
+Node global: 31, Elements: 8, {8, 9, 10, 11, X, X, X, X}
+Node global: 32, Elements: 8, {9, X, 11, X, X, X, X, X}
+Node global: 33, Elements: 8, {X, 10, X, X, X, X, X, X}
+Node global: 34, Elements: 8, {10, 11, X, X, X, X, X, X}
+Node global: 35, Elements: 8, {11, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 3, 0) -> global 9
+Node (1, 3, 0) -> global 10
+Node (2, 3, 0) -> global 11
+Node (0, 0, 1) -> global 12
+Node (1, 0, 1) -> global 13
+Node (2, 0, 1) -> global 14
+Node (0, 1, 1) -> global 15
+Node (1, 1, 1) -> global 16
+Node (2, 1, 1) -> global 17
+Node (0, 2, 1) -> global 18
+Node (1, 2, 1) -> global 19
+Node (2, 2, 1) -> global 20
+Node (0, 3, 1) -> global 21
+Node (1, 3, 1) -> global 22
+Node (2, 3, 1) -> global 23
+Node (0, 0, 2) -> global 24
+Node (1, 0, 2) -> global 25
+Node (2, 0, 2) -> global 26
+Node (0, 1, 2) -> global 27
+Node (1, 1, 2) -> global 28
+Node (2, 1, 2) -> global 29
+Node (0, 2, 2) -> global 30
+Node (1, 2, 2) -> global 31
+Node (2, 2, 2) -> global 32
+Node (0, 3, 2) -> global 33
+Node (1, 3, 2) -> global 34
+Node (2, 3, 2) -> global 35
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 3, 0)
+Node global 10 -> (1, 3, 0)
+Node global 11 -> (2, 3, 0)
+Node global 12 -> (0, 0, 1)
+Node global 13 -> (1, 0, 1)
+Node global 14 -> (2, 0, 1)
+Node global 15 -> (0, 1, 1)
+Node global 16 -> (1, 1, 1)
+Node global 17 -> (2, 1, 1)
+Node global 18 -> (0, 2, 1)
+Node global 19 -> (1, 2, 1)
+Node global 20 -> (2, 2, 1)
+Node global 21 -> (0, 3, 1)
+Node global 22 -> (1, 3, 1)
+Node global 23 -> (2, 3, 1)
+Node global 24 -> (0, 0, 2)
+Node global 25 -> (1, 0, 2)
+Node global 26 -> (2, 0, 2)
+Node global 27 -> (0, 1, 2)
+Node global 28 -> (1, 1, 2)
+Node global 29 -> (2, 1, 2)
+Node global 30 -> (0, 2, 2)
+Node global 31 -> (1, 2, 2)
+Node global 32 -> (2, 2, 2)
+Node global 33 -> (0, 3, 2)
+Node global 34 -> (1, 3, 2)
+Node global 35 -> (2, 3, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 2, 3, X, X, X, X, 6, 7, X, 8, 9}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, 2, 3, X, X, X, X, 6, 7, X, 8, 9, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 3, X, 4, 5, X, 6, 7, X, 8, 9, X, 10, 11}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, X, 2, X, 4, 5, X, 6, 7, X, 8, 9, X, 10, 11, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 2, 3, X, 5, X, X, X, X, 8, 9, X, 10, 11, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 2, 3, X, 4, X, X, X, X, 8, 9, X, 10, 11, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, 0, 1, X, 2, 3, X, X, X, X, 7, X, 8, 9, X, X, X, X, X, X, X, X, X}
+Element global: 7, Neighbours: 26, {X, X, X, 0, 1, X, 2, 3, X, X, X, X, 6, X, 8, 9, X, X, X, X, X, X, X, X, X, X}
+Element global: 8, Neighbours: 26, {X, 0, 1, X, 2, 3, X, 4, 5, X, 6, 7, X, 9, X, 10, 11, X, X, X, X, X, X, X, X, X}
+Element global: 9, Neighbours: 26, {0, 1, X, 2, 3, X, 4, 5, X, 6, 7, X, 8, X, 10, 11, X, X, X, X, X, X, X, X, X, X}
+Element global: 10, Neighbours: 26, {X, 2, 3, X, 4, 5, X, X, X, X, 8, 9, X, 11, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 11, Neighbours: 26, {2, 3, X, 4, 5, X, X, X, X, 8, 9, X, 10, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 12, 13, 16, 15}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 13, 14, 17, 16}
+Element global: 2, Nodes: 8, {3, 4, 7, 6, 15, 16, 19, 18}
+Element global: 3, Nodes: 8, {4, 5, 8, 7, 16, 17, 20, 19}
+Element global: 4, Nodes: 8, {6, 7, 10, 9, 18, 19, 22, 21}
+Element global: 5, Nodes: 8, {7, 8, 11, 10, 19, 20, 23, 22}
+Element global: 6, Nodes: 8, {12, 13, 16, 15, 24, 25, 28, 27}
+Element global: 7, Nodes: 8, {13, 14, 17, 16, 25, 26, 29, 28}
+Element global: 8, Nodes: 8, {15, 16, 19, 18, 27, 28, 31, 30}
+Element global: 9, Nodes: 8, {16, 17, 20, 19, 28, 29, 32, 31}
+Element global: 10, Nodes: 8, {18, 19, 22, 21, 30, 31, 34, 33}
+Element global: 11, Nodes: 8, {19, 20, 23, 22, 31, 32, 35, 34}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+Element (0, 2, 0) -> global 4
+Element (1, 2, 0) -> global 5
+Element (0, 0, 1) -> global 6
+Element (1, 0, 1) -> global 7
+Element (0, 1, 1) -> global 8
+Element (1, 1, 1) -> global 9
+Element (0, 2, 1) -> global 10
+Element (1, 2, 1) -> global 11
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+Element global 4 -> (0, 2, 0)
+Element global 5 -> (1, 2, 0)
+Element global 6 -> (0, 0, 1)
+Element global 7 -> (1, 0, 1)
+Element global 8 -> (0, 1, 1)
+Element global 9 -> (1, 1, 1)
+Element global 10 -> (0, 2, 1)
+Element global 11 -> (1, 2, 1)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 4, 3}
+	element3DCounts: {3, 3, 2}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 48
+	elementCount: 18
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8059820
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 16, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 17, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 18, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 19, 2, X, X}
+Node global: 4, Neighbours: 6, {5, 8, 20, X, 0, X}
+Node global: 5, Neighbours: 6, {6, 9, 21, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, 10, 22, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, 11, 23, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, 12, 24, X, 4, X}
+Node global: 9, Neighbours: 6, {10, 13, 25, 8, 5, X}
+Node global: 10, Neighbours: 6, {11, 14, 26, 9, 6, X}
+Node global: 11, Neighbours: 6, {X, 15, 27, 10, 7, X}
+Node global: 12, Neighbours: 6, {13, X, 28, X, 8, X}
+Node global: 13, Neighbours: 6, {14, X, 29, 12, 9, X}
+Node global: 14, Neighbours: 6, {15, X, 30, 13, 10, X}
+Node global: 15, Neighbours: 6, {X, X, 31, 14, 11, X}
+Node global: 16, Neighbours: 6, {17, 20, 32, X, X, 0}
+Node global: 17, Neighbours: 6, {18, 21, 33, 16, X, 1}
+Node global: 18, Neighbours: 6, {19, 22, 34, 17, X, 2}
+Node global: 19, Neighbours: 6, {X, 23, 35, 18, X, 3}
+Node global: 20, Neighbours: 6, {21, 24, 36, X, 16, 4}
+Node global: 21, Neighbours: 6, {22, 25, 37, 20, 17, 5}
+Node global: 22, Neighbours: 6, {23, 26, 38, 21, 18, 6}
+Node global: 23, Neighbours: 6, {X, 27, 39, 22, 19, 7}
+Node global: 24, Neighbours: 6, {25, 28, 40, X, 20, 8}
+Node global: 25, Neighbours: 6, {26, 29, 41, 24, 21, 9}
+Node global: 26, Neighbours: 6, {27, 30, 42, 25, 22, 10}
+Node global: 27, Neighbours: 6, {X, 31, 43, 26, 23, 11}
+Node global: 28, Neighbours: 6, {29, X, 44, X, 24, 12}
+Node global: 29, Neighbours: 6, {30, X, 45, 28, 25, 13}
+Node global: 30, Neighbours: 6, {31, X, 46, 29, 26, 14}
+Node global: 31, Neighbours: 6, {X, X, 47, 30, 27, 15}
+Node global: 32, Neighbours: 6, {33, 36, X, X, X, 16}
+Node global: 33, Neighbours: 6, {34, 37, X, 32, X, 17}
+Node global: 34, Neighbours: 6, {35, 38, X, 33, X, 18}
+Node global: 35, Neighbours: 6, {X, 39, X, 34, X, 19}
+Node global: 36, Neighbours: 6, {37, 40, X, X, 32, 20}
+Node global: 37, Neighbours: 6, {38, 41, X, 36, 33, 21}
+Node global: 38, Neighbours: 6, {39, 42, X, 37, 34, 22}
+Node global: 39, Neighbours: 6, {X, 43, X, 38, 35, 23}
+Node global: 40, Neighbours: 6, {41, 44, X, X, 36, 24}
+Node global: 41, Neighbours: 6, {42, 45, X, 40, 37, 25}
+Node global: 42, Neighbours: 6, {43, 46, X, 41, 38, 26}
+Node global: 43, Neighbours: 6, {X, 47, X, 42, 39, 27}
+Node global: 44, Neighbours: 6, {45, X, X, X, 40, 28}
+Node global: 45, Neighbours: 6, {46, X, X, 44, 41, 29}
+Node global: 46, Neighbours: 6, {47, X, X, 45, 42, 30}
+Node global: 47, Neighbours: 6, {X, X, X, 46, 43, 31}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, 3, 4}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, 4, 5}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, 5, X}
+Node global: 8, Elements: 8, {X, X, X, X, X, 3, X, 6}
+Node global: 9, Elements: 8, {X, X, X, X, 3, 4, 6, 7}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, 7, 8}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, 8, X}
+Node global: 12, Elements: 8, {X, X, X, X, X, 6, X, X}
+Node global: 13, Elements: 8, {X, X, X, X, 6, 7, X, X}
+Node global: 14, Elements: 8, {X, X, X, X, 7, 8, X, X}
+Node global: 15, Elements: 8, {X, X, X, X, 8, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 0, X, X, X, 9}
+Node global: 17, Elements: 8, {X, X, 0, 1, X, X, 9, 10}
+Node global: 18, Elements: 8, {X, X, 1, 2, X, X, 10, 11}
+Node global: 19, Elements: 8, {X, X, 2, X, X, X, 11, X}
+Node global: 20, Elements: 8, {X, 0, X, 3, X, 9, X, 12}
+Node global: 21, Elements: 8, {0, 1, 3, 4, 9, 10, 12, 13}
+Node global: 22, Elements: 8, {1, 2, 4, 5, 10, 11, 13, 14}
+Node global: 23, Elements: 8, {2, X, 5, X, 11, X, 14, X}
+Node global: 24, Elements: 8, {X, 3, X, 6, X, 12, X, 15}
+Node global: 25, Elements: 8, {3, 4, 6, 7, 12, 13, 15, 16}
+Node global: 26, Elements: 8, {4, 5, 7, 8, 13, 14, 16, 17}
+Node global: 27, Elements: 8, {5, X, 8, X, 14, X, 17, X}
+Node global: 28, Elements: 8, {X, 6, X, X, X, 15, X, X}
+Node global: 29, Elements: 8, {6, 7, X, X, 15, 16, X, X}
+Node global: 30, Elements: 8, {7, 8, X, X, 16, 17, X, X}
+Node global: 31, Elements: 8, {8, X, X, X, 17, X, X, X}
+Node global: 32, Elements: 8, {X, X, X, 9, X, X, X, X}
+Node global: 33, Elements: 8, {X, X, 9, 10, X, X, X, X}
+Node global: 34, Elements: 8, {X, X, 10, 11, X, X, X, X}
+Node global: 35, Elements: 8, {X, X, 11, X, X, X, X, X}
+Node global: 36, Elements: 8, {X, 9, X, 12, X, X, X, X}
+Node global: 37, Elements: 8, {9, 10, 12, 13, X, X, X, X}
+Node global: 38, Elements: 8, {10, 11, 13, 14, X, X, X, X}
+Node global: 39, Elements: 8, {11, X, 14, X, X, X, X, X}
+Node global: 40, Elements: 8, {X, 12, X, 15, X, X, X, X}
+Node global: 41, Elements: 8, {12, 13, 15, 16, X, X, X, X}
+Node global: 42, Elements: 8, {13, 14, 16, 17, X, X, X, X}
+Node global: 43, Elements: 8, {14, X, 17, X, X, X, X, X}
+Node global: 44, Elements: 8, {X, 15, X, X, X, X, X, X}
+Node global: 45, Elements: 8, {15, 16, X, X, X, X, X, X}
+Node global: 46, Elements: 8, {16, 17, X, X, X, X, X, X}
+Node global: 47, Elements: 8, {17, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 3, 0) -> global 12
+Node (1, 3, 0) -> global 13
+Node (2, 3, 0) -> global 14
+Node (3, 3, 0) -> global 15
+Node (0, 0, 1) -> global 16
+Node (1, 0, 1) -> global 17
+Node (2, 0, 1) -> global 18
+Node (3, 0, 1) -> global 19
+Node (0, 1, 1) -> global 20
+Node (1, 1, 1) -> global 21
+Node (2, 1, 1) -> global 22
+Node (3, 1, 1) -> global 23
+Node (0, 2, 1) -> global 24
+Node (1, 2, 1) -> global 25
+Node (2, 2, 1) -> global 26
+Node (3, 2, 1) -> global 27
+Node (0, 3, 1) -> global 28
+Node (1, 3, 1) -> global 29
+Node (2, 3, 1) -> global 30
+Node (3, 3, 1) -> global 31
+Node (0, 0, 2) -> global 32
+Node (1, 0, 2) -> global 33
+Node (2, 0, 2) -> global 34
+Node (3, 0, 2) -> global 35
+Node (0, 1, 2) -> global 36
+Node (1, 1, 2) -> global 37
+Node (2, 1, 2) -> global 38
+Node (3, 1, 2) -> global 39
+Node (0, 2, 2) -> global 40
+Node (1, 2, 2) -> global 41
+Node (2, 2, 2) -> global 42
+Node (3, 2, 2) -> global 43
+Node (0, 3, 2) -> global 44
+Node (1, 3, 2) -> global 45
+Node (2, 3, 2) -> global 46
+Node (3, 3, 2) -> global 47
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 3, 0)
+Node global 13 -> (1, 3, 0)
+Node global 14 -> (2, 3, 0)
+Node global 15 -> (3, 3, 0)
+Node global 16 -> (0, 0, 1)
+Node global 17 -> (1, 0, 1)
+Node global 18 -> (2, 0, 1)
+Node global 19 -> (3, 0, 1)
+Node global 20 -> (0, 1, 1)
+Node global 21 -> (1, 1, 1)
+Node global 22 -> (2, 1, 1)
+Node global 23 -> (3, 1, 1)
+Node global 24 -> (0, 2, 1)
+Node global 25 -> (1, 2, 1)
+Node global 26 -> (2, 2, 1)
+Node global 27 -> (3, 2, 1)
+Node global 28 -> (0, 3, 1)
+Node global 29 -> (1, 3, 1)
+Node global 30 -> (2, 3, 1)
+Node global 31 -> (3, 3, 1)
+Node global 32 -> (0, 0, 2)
+Node global 33 -> (1, 0, 2)
+Node global 34 -> (2, 0, 2)
+Node global 35 -> (3, 0, 2)
+Node global 36 -> (0, 1, 2)
+Node global 37 -> (1, 1, 2)
+Node global 38 -> (2, 1, 2)
+Node global 39 -> (3, 1, 2)
+Node global 40 -> (0, 2, 2)
+Node global 41 -> (1, 2, 2)
+Node global 42 -> (2, 2, 2)
+Node global 43 -> (3, 2, 2)
+Node global 44 -> (0, 3, 2)
+Node global 45 -> (1, 3, 2)
+Node global 46 -> (2, 3, 2)
+Node global 47 -> (3, 3, 2)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 3, 4, X, X, X, X, 9, 10, X, 12, 13}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, 3, 4, 5, X, X, X, 9, 10, 11, 12, 13, 14}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 4, 5, X, X, X, X, 10, 11, X, 13, 14, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 4, X, 6, 7, X, 9, 10, X, 12, 13, X, 15, 16}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 1, 2, X, 4, X, 7, 8, X, 10, 11, X, 13, 14, X, 16, 17, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 3, 4, X, 7, X, X, X, X, 12, 13, X, 15, 16, X, X, X}
+Element global: 7, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 3, 4, 5, 6, 8, X, X, X, 12, 13, 14, 15, 16, 17, X, X, X}
+Element global: 8, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 4, 5, X, 7, X, X, X, X, 13, 14, X, 16, 17, X, X, X, X}
+Element global: 9, Neighbours: 26, {X, X, X, X, 0, 1, X, 3, 4, X, X, X, X, 10, X, 12, 13, X, X, X, X, X, X, X, X, X}
+Element global: 10, Neighbours: 26, {X, X, X, 0, 1, 2, 3, 4, 5, X, X, X, 9, 11, 12, 13, 14, X, X, X, X, X, X, X, X, X}
+Element global: 11, Neighbours: 26, {X, X, X, 1, 2, X, 4, 5, X, X, X, X, 10, X, 13, 14, X, X, X, X, X, X, X, X, X, X}
+Element global: 12, Neighbours: 26, {X, 0, 1, X, 3, 4, X, 6, 7, X, 9, 10, X, 13, X, 15, 16, X, X, X, X, X, X, X, X, X}
+Element global: 13, Neighbours: 26, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, X, X, X, X, X, X, X, X, X}
+Element global: 14, Neighbours: 26, {1, 2, X, 4, 5, X, 7, 8, X, 10, 11, X, 13, X, 16, 17, X, X, X, X, X, X, X, X, X, X}
+Element global: 15, Neighbours: 26, {X, 3, 4, X, 6, 7, X, X, X, X, 12, 13, X, 16, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 16, Neighbours: 26, {3, 4, 5, 6, 7, 8, X, X, X, 12, 13, 14, 15, 17, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 17, Neighbours: 26, {4, 5, X, 7, 8, X, X, X, X, 13, 14, X, 16, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 16, 17, 21, 20}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 17, 18, 22, 21}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 18, 19, 23, 22}
+Element global: 3, Nodes: 8, {4, 5, 9, 8, 20, 21, 25, 24}
+Element global: 4, Nodes: 8, {5, 6, 10, 9, 21, 22, 26, 25}
+Element global: 5, Nodes: 8, {6, 7, 11, 10, 22, 23, 27, 26}
+Element global: 6, Nodes: 8, {8, 9, 13, 12, 24, 25, 29, 28}
+Element global: 7, Nodes: 8, {9, 10, 14, 13, 25, 26, 30, 29}
+Element global: 8, Nodes: 8, {10, 11, 15, 14, 26, 27, 31, 30}
+Element global: 9, Nodes: 8, {16, 17, 21, 20, 32, 33, 37, 36}
+Element global: 10, Nodes: 8, {17, 18, 22, 21, 33, 34, 38, 37}
+Element global: 11, Nodes: 8, {18, 19, 23, 22, 34, 35, 39, 38}
+Element global: 12, Nodes: 8, {20, 21, 25, 24, 36, 37, 41, 40}
+Element global: 13, Nodes: 8, {21, 22, 26, 25, 37, 38, 42, 41}
+Element global: 14, Nodes: 8, {22, 23, 27, 26, 38, 39, 43, 42}
+Element global: 15, Nodes: 8, {24, 25, 29, 28, 40, 41, 45, 44}
+Element global: 16, Nodes: 8, {25, 26, 30, 29, 41, 42, 46, 45}
+Element global: 17, Nodes: 8, {26, 27, 31, 30, 42, 43, 47, 46}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+Element (0, 2, 0) -> global 6
+Element (1, 2, 0) -> global 7
+Element (2, 2, 0) -> global 8
+Element (0, 0, 1) -> global 9
+Element (1, 0, 1) -> global 10
+Element (2, 0, 1) -> global 11
+Element (0, 1, 1) -> global 12
+Element (1, 1, 1) -> global 13
+Element (2, 1, 1) -> global 14
+Element (0, 2, 1) -> global 15
+Element (1, 2, 1) -> global 16
+Element (2, 2, 1) -> global 17
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+Element global 6 -> (0, 2, 0)
+Element global 7 -> (1, 2, 0)
+Element global 8 -> (2, 2, 0)
+Element global 9 -> (0, 0, 1)
+Element global 10 -> (1, 0, 1)
+Element global 11 -> (2, 0, 1)
+Element global 12 -> (0, 1, 1)
+Element global 13 -> (1, 1, 1)
+Element global 14 -> (2, 1, 1)
+Element global 15 -> (0, 2, 1)
+Element global 16 -> (1, 2, 1)
+Element global 17 -> (2, 2, 1)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 1, 4}
+	element3DCounts: {0, 0, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 4
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x80599f0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 2, {1, X}
+Node global: 1, Neighbours: 2, {2, 0}
+Node global: 2, Neighbours: 2, {3, 1}
+Node global: 3, Neighbours: 2, {X, 2}
+
+Node global: 0, Elements: 2, {X, 0}
+Node global: 1, Elements: 2, {0, 1}
+Node global: 2, Elements: 2, {1, 2}
+Node global: 3, Elements: 2, {2, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 0, 1) -> global 1
+Node (0, 0, 2) -> global 2
+Node (0, 0, 3) -> global 3
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 0, 1)
+Node global 2 -> (0, 0, 2)
+Node global 3 -> (0, 0, 3)
+
+Element global: 0, Neighbours: 2, {X, 1}
+Element global: 1, Neighbours: 2, {0, 2}
+Element global: 2, Neighbours: 2, {1, X}
+
+Element global: 0, Nodes: 2, {0, 1}
+Element global: 1, Nodes: 2, {1, 2}
+Element global: 2, Nodes: 2, {2, 3}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+Element (0, 0, 2) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+Element global 2 -> (0, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 1, 4}
+	element3DCounts: {1, 0, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8059ba8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, 4, X, 0}
+Node global: 3, Neighbours: 4, {X, 5, 2, 1}
+Node global: 4, Neighbours: 4, {5, 6, X, 2}
+Node global: 5, Neighbours: 4, {X, 7, 4, 3}
+Node global: 6, Neighbours: 4, {7, X, X, 4}
+Node global: 7, Neighbours: 4, {X, X, 6, 5}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, 1}
+Node global: 3, Elements: 4, {0, X, 1, X}
+Node global: 4, Elements: 4, {X, 1, X, 2}
+Node global: 5, Elements: 4, {1, X, 2, X}
+Node global: 6, Elements: 4, {X, 2, X, X}
+Node global: 7, Elements: 4, {2, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 0, 1) -> global 2
+Node (1, 0, 1) -> global 3
+Node (0, 0, 2) -> global 4
+Node (1, 0, 2) -> global 5
+Node (0, 0, 3) -> global 6
+Node (1, 0, 3) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 0, 1)
+Node global 3 -> (1, 0, 1)
+Node global 4 -> (0, 0, 2)
+Node global 5 -> (1, 0, 2)
+Node global 6 -> (0, 0, 3)
+Node global 7 -> (1, 0, 3)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, 1, X}
+Element global: 1, Neighbours: 8, {X, 0, X, X, X, X, 2, X}
+Element global: 2, Neighbours: 8, {X, 1, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+Element global: 1, Nodes: 4, {2, 3, 5, 4}
+Element global: 2, Nodes: 4, {4, 5, 7, 6}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+Element (0, 0, 2) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+Element global 2 -> (0, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 1, 4}
+	element3DCounts: {2, 0, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8059d30
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, 6, X, 0}
+Node global: 4, Neighbours: 4, {5, 7, 3, 1}
+Node global: 5, Neighbours: 4, {X, 8, 4, 2}
+Node global: 6, Neighbours: 4, {7, 9, X, 3}
+Node global: 7, Neighbours: 4, {8, 10, 6, 4}
+Node global: 8, Neighbours: 4, {X, 11, 7, 5}
+Node global: 9, Neighbours: 4, {10, X, X, 6}
+Node global: 10, Neighbours: 4, {11, X, 9, 7}
+Node global: 11, Neighbours: 4, {X, X, 10, 8}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, 2}
+Node global: 4, Elements: 4, {0, 1, 2, 3}
+Node global: 5, Elements: 4, {1, X, 3, X}
+Node global: 6, Elements: 4, {X, 2, X, 4}
+Node global: 7, Elements: 4, {2, 3, 4, 5}
+Node global: 8, Elements: 4, {3, X, 5, X}
+Node global: 9, Elements: 4, {X, 4, X, X}
+Node global: 10, Elements: 4, {4, 5, X, X}
+Node global: 11, Elements: 4, {5, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 0, 1) -> global 3
+Node (1, 0, 1) -> global 4
+Node (2, 0, 1) -> global 5
+Node (0, 0, 2) -> global 6
+Node (1, 0, 2) -> global 7
+Node (2, 0, 2) -> global 8
+Node (0, 0, 3) -> global 9
+Node (1, 0, 3) -> global 10
+Node (2, 0, 3) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 0, 1)
+Node global 4 -> (1, 0, 1)
+Node global 5 -> (2, 0, 1)
+Node global 6 -> (0, 0, 2)
+Node global 7 -> (1, 0, 2)
+Node global 8 -> (2, 0, 2)
+Node global 9 -> (0, 0, 3)
+Node global 10 -> (1, 0, 3)
+Node global 11 -> (2, 0, 3)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 2, 3}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, 2, 3, X}
+Element global: 2, Neighbours: 8, {X, 0, 1, X, 3, X, 4, 5}
+Element global: 3, Neighbours: 8, {0, 1, X, 2, X, 4, 5, X}
+Element global: 4, Neighbours: 8, {X, 2, 3, X, 5, X, X, X}
+Element global: 5, Neighbours: 8, {2, 3, X, 4, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+Element global: 2, Nodes: 4, {3, 4, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 8, 7}
+Element global: 4, Nodes: 4, {6, 7, 10, 9}
+Element global: 5, Nodes: 4, {7, 8, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (1, 0, 1) -> global 3
+Element (0, 0, 2) -> global 4
+Element (1, 0, 2) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (1, 0, 1)
+Element global 4 -> (0, 0, 2)
+Element global 5 -> (1, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 1, 4}
+	element3DCounts: {3, 0, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 16
+	elementCount: 9
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x8059ef8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, 8, X, 0}
+Node global: 5, Neighbours: 4, {6, 9, 4, 1}
+Node global: 6, Neighbours: 4, {7, 10, 5, 2}
+Node global: 7, Neighbours: 4, {X, 11, 6, 3}
+Node global: 8, Neighbours: 4, {9, 12, X, 4}
+Node global: 9, Neighbours: 4, {10, 13, 8, 5}
+Node global: 10, Neighbours: 4, {11, 14, 9, 6}
+Node global: 11, Neighbours: 4, {X, 15, 10, 7}
+Node global: 12, Neighbours: 4, {13, X, X, 8}
+Node global: 13, Neighbours: 4, {14, X, 12, 9}
+Node global: 14, Neighbours: 4, {15, X, 13, 10}
+Node global: 15, Neighbours: 4, {X, X, 14, 11}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, 3}
+Node global: 5, Elements: 4, {0, 1, 3, 4}
+Node global: 6, Elements: 4, {1, 2, 4, 5}
+Node global: 7, Elements: 4, {2, X, 5, X}
+Node global: 8, Elements: 4, {X, 3, X, 6}
+Node global: 9, Elements: 4, {3, 4, 6, 7}
+Node global: 10, Elements: 4, {4, 5, 7, 8}
+Node global: 11, Elements: 4, {5, X, 8, X}
+Node global: 12, Elements: 4, {X, 6, X, X}
+Node global: 13, Elements: 4, {6, 7, X, X}
+Node global: 14, Elements: 4, {7, 8, X, X}
+Node global: 15, Elements: 4, {8, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (1, 0, 1) -> global 5
+Node (2, 0, 1) -> global 6
+Node (3, 0, 1) -> global 7
+Node (0, 0, 2) -> global 8
+Node (1, 0, 2) -> global 9
+Node (2, 0, 2) -> global 10
+Node (3, 0, 2) -> global 11
+Node (0, 0, 3) -> global 12
+Node (1, 0, 3) -> global 13
+Node (2, 0, 3) -> global 14
+Node (3, 0, 3) -> global 15
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (1, 0, 1)
+Node global 6 -> (2, 0, 1)
+Node global 7 -> (3, 0, 1)
+Node global 8 -> (0, 0, 2)
+Node global 9 -> (1, 0, 2)
+Node global 10 -> (2, 0, 2)
+Node global 11 -> (3, 0, 2)
+Node global 12 -> (0, 0, 3)
+Node global 13 -> (1, 0, 3)
+Node global 14 -> (2, 0, 3)
+Node global 15 -> (3, 0, 3)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 3, 4}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, 3, 4, 5}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, 4, 5, X}
+Element global: 3, Neighbours: 8, {X, 0, 1, X, 4, X, 6, 7}
+Element global: 4, Neighbours: 8, {0, 1, 2, 3, 5, 6, 7, 8}
+Element global: 5, Neighbours: 8, {1, 2, X, 4, X, 7, 8, X}
+Element global: 6, Neighbours: 8, {X, 3, 4, X, 7, X, X, X}
+Element global: 7, Neighbours: 8, {3, 4, 5, 6, 8, X, X, X}
+Element global: 8, Neighbours: 8, {4, 5, X, 7, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 9, 8}
+Element global: 4, Nodes: 4, {5, 6, 10, 9}
+Element global: 5, Nodes: 4, {6, 7, 11, 10}
+Element global: 6, Nodes: 4, {8, 9, 13, 12}
+Element global: 7, Nodes: 4, {9, 10, 14, 13}
+Element global: 8, Nodes: 4, {10, 11, 15, 14}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (1, 0, 1) -> global 4
+Element (2, 0, 1) -> global 5
+Element (0, 0, 2) -> global 6
+Element (1, 0, 2) -> global 7
+Element (2, 0, 2) -> global 8
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (1, 0, 1)
+Element global 5 -> (2, 0, 1)
+Element global 6 -> (0, 0, 2)
+Element global 7 -> (1, 0, 2)
+Element global 8 -> (2, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 2, 4}
+	element3DCounts: {0, 1, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 8
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805a0c0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 2, X, X}
+Node global: 1, Neighbours: 4, {X, 3, 0, X}
+Node global: 2, Neighbours: 4, {3, 4, X, 0}
+Node global: 3, Neighbours: 4, {X, 5, 2, 1}
+Node global: 4, Neighbours: 4, {5, 6, X, 2}
+Node global: 5, Neighbours: 4, {X, 7, 4, 3}
+Node global: 6, Neighbours: 4, {7, X, X, 4}
+Node global: 7, Neighbours: 4, {X, X, 6, 5}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, X}
+Node global: 2, Elements: 4, {X, 0, X, 1}
+Node global: 3, Elements: 4, {0, X, 1, X}
+Node global: 4, Elements: 4, {X, 1, X, 2}
+Node global: 5, Elements: 4, {1, X, 2, X}
+Node global: 6, Elements: 4, {X, 2, X, X}
+Node global: 7, Elements: 4, {2, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 0, 1) -> global 2
+Node (0, 1, 1) -> global 3
+Node (0, 0, 2) -> global 4
+Node (0, 1, 2) -> global 5
+Node (0, 0, 3) -> global 6
+Node (0, 1, 3) -> global 7
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 0, 1)
+Node global 3 -> (0, 1, 1)
+Node global 4 -> (0, 0, 2)
+Node global 5 -> (0, 1, 2)
+Node global 6 -> (0, 0, 3)
+Node global 7 -> (0, 1, 3)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, X, X, 1, X}
+Element global: 1, Neighbours: 8, {X, 0, X, X, X, X, 2, X}
+Element global: 2, Neighbours: 8, {X, 1, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 3, 2}
+Element global: 1, Nodes: 4, {2, 3, 5, 4}
+Element global: 2, Nodes: 4, {4, 5, 7, 6}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+Element (0, 0, 2) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+Element global 2 -> (0, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x8059410
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x8059410
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 2, 4}
+	element3DCounts: {1, 1, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x8059410
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 16
+	elementCount: 3
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805a810
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x8059410
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 4, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 5, 0, X, X}
+Node global: 2, Neighbours: 6, {3, X, 6, X, 0, X}
+Node global: 3, Neighbours: 6, {X, X, 7, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, 6, 8, X, X, 0}
+Node global: 5, Neighbours: 6, {X, 7, 9, 4, X, 1}
+Node global: 6, Neighbours: 6, {7, X, 10, X, 4, 2}
+Node global: 7, Neighbours: 6, {X, X, 11, 6, 5, 3}
+Node global: 8, Neighbours: 6, {9, 10, 12, X, X, 4}
+Node global: 9, Neighbours: 6, {X, 11, 13, 8, X, 5}
+Node global: 10, Neighbours: 6, {11, X, 14, X, 8, 6}
+Node global: 11, Neighbours: 6, {X, X, 15, 10, 9, 7}
+Node global: 12, Neighbours: 6, {13, 14, X, X, X, 8}
+Node global: 13, Neighbours: 6, {X, 15, X, 12, X, 9}
+Node global: 14, Neighbours: 6, {15, X, X, X, 12, 10}
+Node global: 15, Neighbours: 6, {X, X, X, 14, 13, 11}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, X, X}
+Node global: 4, Elements: 8, {X, X, X, 0, X, X, X, 1}
+Node global: 5, Elements: 8, {X, X, 0, X, X, X, 1, X}
+Node global: 6, Elements: 8, {X, 0, X, X, X, 1, X, X}
+Node global: 7, Elements: 8, {0, X, X, X, 1, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 1, X, X, X, 2}
+Node global: 9, Elements: 8, {X, X, 1, X, X, X, 2, X}
+Node global: 10, Elements: 8, {X, 1, X, X, X, 2, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, 2, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 2, X, X, X, X}
+Node global: 13, Elements: 8, {X, X, 2, X, X, X, X, X}
+Node global: 14, Elements: 8, {X, 2, X, X, X, X, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (1, 0, 1) -> global 5
+Node (0, 1, 1) -> global 6
+Node (1, 1, 1) -> global 7
+Node (0, 0, 2) -> global 8
+Node (1, 0, 2) -> global 9
+Node (0, 1, 2) -> global 10
+Node (1, 1, 2) -> global 11
+Node (0, 0, 3) -> global 12
+Node (1, 0, 3) -> global 13
+Node (0, 1, 3) -> global 14
+Node (1, 1, 3) -> global 15
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (1, 0, 1)
+Node global 6 -> (0, 1, 1)
+Node global 7 -> (1, 1, 1)
+Node global 8 -> (0, 0, 2)
+Node global 9 -> (1, 0, 2)
+Node global 10 -> (0, 1, 2)
+Node global 11 -> (1, 1, 2)
+Node global 12 -> (0, 0, 3)
+Node global 13 -> (1, 0, 3)
+Node global 14 -> (0, 1, 3)
+Node global 15 -> (1, 1, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, 0, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 2, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, 1, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 4, 5, 7, 6}
+Element global: 1, Nodes: 8, {4, 5, 7, 6, 8, 9, 11, 10}
+Element global: 2, Nodes: 8, {8, 9, 11, 10, 12, 13, 15, 14}
+
+Element (0, 0, 0) -> global 0
+Element (0, 0, 1) -> global 1
+Element (0, 0, 2) -> global 2
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 0, 1)
+Element global 2 -> (0, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 2, 4}
+	element3DCounts: {2, 1, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 24
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805a4a8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 6, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 7, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 8, 1, X, X}
+Node global: 3, Neighbours: 6, {4, X, 9, X, 0, X}
+Node global: 4, Neighbours: 6, {5, X, 10, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, X, 11, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, 9, 12, X, X, 0}
+Node global: 7, Neighbours: 6, {8, 10, 13, 6, X, 1}
+Node global: 8, Neighbours: 6, {X, 11, 14, 7, X, 2}
+Node global: 9, Neighbours: 6, {10, X, 15, X, 6, 3}
+Node global: 10, Neighbours: 6, {11, X, 16, 9, 7, 4}
+Node global: 11, Neighbours: 6, {X, X, 17, 10, 8, 5}
+Node global: 12, Neighbours: 6, {13, 15, 18, X, X, 6}
+Node global: 13, Neighbours: 6, {14, 16, 19, 12, X, 7}
+Node global: 14, Neighbours: 6, {X, 17, 20, 13, X, 8}
+Node global: 15, Neighbours: 6, {16, X, 21, X, 12, 9}
+Node global: 16, Neighbours: 6, {17, X, 22, 15, 13, 10}
+Node global: 17, Neighbours: 6, {X, X, 23, 16, 14, 11}
+Node global: 18, Neighbours: 6, {19, 21, X, X, X, 12}
+Node global: 19, Neighbours: 6, {20, 22, X, 18, X, 13}
+Node global: 20, Neighbours: 6, {X, 23, X, 19, X, 14}
+Node global: 21, Neighbours: 6, {22, X, X, X, 18, 15}
+Node global: 22, Neighbours: 6, {23, X, X, 21, 19, 16}
+Node global: 23, Neighbours: 6, {X, X, X, 22, 20, 17}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, X, X}
+Node global: 6, Elements: 8, {X, X, X, 0, X, X, X, 2}
+Node global: 7, Elements: 8, {X, X, 0, 1, X, X, 2, 3}
+Node global: 8, Elements: 8, {X, X, 1, X, X, X, 3, X}
+Node global: 9, Elements: 8, {X, 0, X, X, X, 2, X, X}
+Node global: 10, Elements: 8, {0, 1, X, X, 2, 3, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, 3, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 2, X, X, X, 4}
+Node global: 13, Elements: 8, {X, X, 2, 3, X, X, 4, 5}
+Node global: 14, Elements: 8, {X, X, 3, X, X, X, 5, X}
+Node global: 15, Elements: 8, {X, 2, X, X, X, 4, X, X}
+Node global: 16, Elements: 8, {2, 3, X, X, 4, 5, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, 5, X, X, X}
+Node global: 18, Elements: 8, {X, X, X, 4, X, X, X, X}
+Node global: 19, Elements: 8, {X, X, 4, 5, X, X, X, X}
+Node global: 20, Elements: 8, {X, X, 5, X, X, X, X, X}
+Node global: 21, Elements: 8, {X, 4, X, X, X, X, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 0, 1) -> global 6
+Node (1, 0, 1) -> global 7
+Node (2, 0, 1) -> global 8
+Node (0, 1, 1) -> global 9
+Node (1, 1, 1) -> global 10
+Node (2, 1, 1) -> global 11
+Node (0, 0, 2) -> global 12
+Node (1, 0, 2) -> global 13
+Node (2, 0, 2) -> global 14
+Node (0, 1, 2) -> global 15
+Node (1, 1, 2) -> global 16
+Node (2, 1, 2) -> global 17
+Node (0, 0, 3) -> global 18
+Node (1, 0, 3) -> global 19
+Node (2, 0, 3) -> global 20
+Node (0, 1, 3) -> global 21
+Node (1, 1, 3) -> global 22
+Node (2, 1, 3) -> global 23
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 0, 1)
+Node global 7 -> (1, 0, 1)
+Node global 8 -> (2, 0, 1)
+Node global 9 -> (0, 1, 1)
+Node global 10 -> (1, 1, 1)
+Node global 11 -> (2, 1, 1)
+Node global 12 -> (0, 0, 2)
+Node global 13 -> (1, 0, 2)
+Node global 14 -> (2, 0, 2)
+Node global 15 -> (0, 1, 2)
+Node global 16 -> (1, 1, 2)
+Node global 17 -> (2, 1, 2)
+Node global 18 -> (0, 0, 3)
+Node global 19 -> (1, 0, 3)
+Node global 20 -> (2, 0, 3)
+Node global 21 -> (0, 1, 3)
+Node global 22 -> (1, 1, 3)
+Node global 23 -> (2, 1, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 2, 3, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, X, X, X, 2, 3, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, 0, 1, X, X, X, X, X, X, X, 3, X, X, X, X, X, X, X, 4, 5, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, 0, 1, X, X, X, X, X, X, X, 2, X, X, X, X, X, X, X, 4, 5, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, 2, 3, X, X, X, X, X, X, X, 5, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, 2, 3, X, X, X, X, X, X, X, 4, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 6, 7, 10, 9}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 7, 8, 11, 10}
+Element global: 2, Nodes: 8, {6, 7, 10, 9, 12, 13, 16, 15}
+Element global: 3, Nodes: 8, {7, 8, 11, 10, 13, 14, 17, 16}
+Element global: 4, Nodes: 8, {12, 13, 16, 15, 18, 19, 22, 21}
+Element global: 5, Nodes: 8, {13, 14, 17, 16, 19, 20, 23, 22}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (1, 0, 1) -> global 3
+Element (0, 0, 2) -> global 4
+Element (1, 0, 2) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (1, 0, 1)
+Element global 4 -> (0, 0, 2)
+Element global 5 -> (1, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 2, 4}
+	element3DCounts: {3, 1, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 32
+	elementCount: 9
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805a618
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 8, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 9, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 10, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 11, 2, X, X}
+Node global: 4, Neighbours: 6, {5, X, 12, X, 0, X}
+Node global: 5, Neighbours: 6, {6, X, 13, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, X, 14, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, X, 15, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, 12, 16, X, X, 0}
+Node global: 9, Neighbours: 6, {10, 13, 17, 8, X, 1}
+Node global: 10, Neighbours: 6, {11, 14, 18, 9, X, 2}
+Node global: 11, Neighbours: 6, {X, 15, 19, 10, X, 3}
+Node global: 12, Neighbours: 6, {13, X, 20, X, 8, 4}
+Node global: 13, Neighbours: 6, {14, X, 21, 12, 9, 5}
+Node global: 14, Neighbours: 6, {15, X, 22, 13, 10, 6}
+Node global: 15, Neighbours: 6, {X, X, 23, 14, 11, 7}
+Node global: 16, Neighbours: 6, {17, 20, 24, X, X, 8}
+Node global: 17, Neighbours: 6, {18, 21, 25, 16, X, 9}
+Node global: 18, Neighbours: 6, {19, 22, 26, 17, X, 10}
+Node global: 19, Neighbours: 6, {X, 23, 27, 18, X, 11}
+Node global: 20, Neighbours: 6, {21, X, 28, X, 16, 12}
+Node global: 21, Neighbours: 6, {22, X, 29, 20, 17, 13}
+Node global: 22, Neighbours: 6, {23, X, 30, 21, 18, 14}
+Node global: 23, Neighbours: 6, {X, X, 31, 22, 19, 15}
+Node global: 24, Neighbours: 6, {25, 28, X, X, X, 16}
+Node global: 25, Neighbours: 6, {26, 29, X, 24, X, 17}
+Node global: 26, Neighbours: 6, {27, 30, X, 25, X, 18}
+Node global: 27, Neighbours: 6, {X, 31, X, 26, X, 19}
+Node global: 28, Neighbours: 6, {29, X, X, X, 24, 20}
+Node global: 29, Neighbours: 6, {30, X, X, 28, 25, 21}
+Node global: 30, Neighbours: 6, {31, X, X, 29, 26, 22}
+Node global: 31, Neighbours: 6, {X, X, X, 30, 27, 23}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, X, X}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 0, X, X, X, 3}
+Node global: 9, Elements: 8, {X, X, 0, 1, X, X, 3, 4}
+Node global: 10, Elements: 8, {X, X, 1, 2, X, X, 4, 5}
+Node global: 11, Elements: 8, {X, X, 2, X, X, X, 5, X}
+Node global: 12, Elements: 8, {X, 0, X, X, X, 3, X, X}
+Node global: 13, Elements: 8, {0, 1, X, X, 3, 4, X, X}
+Node global: 14, Elements: 8, {1, 2, X, X, 4, 5, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, 5, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 3, X, X, X, 6}
+Node global: 17, Elements: 8, {X, X, 3, 4, X, X, 6, 7}
+Node global: 18, Elements: 8, {X, X, 4, 5, X, X, 7, 8}
+Node global: 19, Elements: 8, {X, X, 5, X, X, X, 8, X}
+Node global: 20, Elements: 8, {X, 3, X, X, X, 6, X, X}
+Node global: 21, Elements: 8, {3, 4, X, X, 6, 7, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, 7, 8, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, 8, X, X, X}
+Node global: 24, Elements: 8, {X, X, X, 6, X, X, X, X}
+Node global: 25, Elements: 8, {X, X, 6, 7, X, X, X, X}
+Node global: 26, Elements: 8, {X, X, 7, 8, X, X, X, X}
+Node global: 27, Elements: 8, {X, X, 8, X, X, X, X, X}
+Node global: 28, Elements: 8, {X, 6, X, X, X, X, X, X}
+Node global: 29, Elements: 8, {6, 7, X, X, X, X, X, X}
+Node global: 30, Elements: 8, {7, 8, X, X, X, X, X, X}
+Node global: 31, Elements: 8, {8, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 0, 1) -> global 8
+Node (1, 0, 1) -> global 9
+Node (2, 0, 1) -> global 10
+Node (3, 0, 1) -> global 11
+Node (0, 1, 1) -> global 12
+Node (1, 1, 1) -> global 13
+Node (2, 1, 1) -> global 14
+Node (3, 1, 1) -> global 15
+Node (0, 0, 2) -> global 16
+Node (1, 0, 2) -> global 17
+Node (2, 0, 2) -> global 18
+Node (3, 0, 2) -> global 19
+Node (0, 1, 2) -> global 20
+Node (1, 1, 2) -> global 21
+Node (2, 1, 2) -> global 22
+Node (3, 1, 2) -> global 23
+Node (0, 0, 3) -> global 24
+Node (1, 0, 3) -> global 25
+Node (2, 0, 3) -> global 26
+Node (3, 0, 3) -> global 27
+Node (0, 1, 3) -> global 28
+Node (1, 1, 3) -> global 29
+Node (2, 1, 3) -> global 30
+Node (3, 1, 3) -> global 31
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 0, 1)
+Node global 9 -> (1, 0, 1)
+Node global 10 -> (2, 0, 1)
+Node global 11 -> (3, 0, 1)
+Node global 12 -> (0, 1, 1)
+Node global 13 -> (1, 1, 1)
+Node global 14 -> (2, 1, 1)
+Node global 15 -> (3, 1, 1)
+Node global 16 -> (0, 0, 2)
+Node global 17 -> (1, 0, 2)
+Node global 18 -> (2, 0, 2)
+Node global 19 -> (3, 0, 2)
+Node global 20 -> (0, 1, 2)
+Node global 21 -> (1, 1, 2)
+Node global 22 -> (2, 1, 2)
+Node global 23 -> (3, 1, 2)
+Node global 24 -> (0, 0, 3)
+Node global 25 -> (1, 0, 3)
+Node global 26 -> (2, 0, 3)
+Node global 27 -> (3, 0, 3)
+Node global 28 -> (0, 1, 3)
+Node global 29 -> (1, 1, 3)
+Node global 30 -> (2, 1, 3)
+Node global 31 -> (3, 1, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 3, 4, X, X, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, X, X, X, X, X, X, 3, 4, 5, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 4, 5, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, 0, 1, X, X, X, X, X, X, X, 4, X, X, X, X, X, X, X, 6, 7, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, 0, 1, 2, X, X, X, X, X, X, 3, 5, X, X, X, X, X, X, 6, 7, 8, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, 1, 2, X, X, X, X, X, X, X, 4, X, X, X, X, X, X, X, 7, 8, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, 3, 4, X, X, X, X, X, X, X, 7, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 7, Neighbours: 26, {X, X, X, 3, 4, 5, X, X, X, X, X, X, 6, 8, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 8, Neighbours: 26, {X, X, X, 4, 5, X, X, X, X, X, X, X, 7, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 8, 9, 13, 12}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 9, 10, 14, 13}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 10, 11, 15, 14}
+Element global: 3, Nodes: 8, {8, 9, 13, 12, 16, 17, 21, 20}
+Element global: 4, Nodes: 8, {9, 10, 14, 13, 17, 18, 22, 21}
+Element global: 5, Nodes: 8, {10, 11, 15, 14, 18, 19, 23, 22}
+Element global: 6, Nodes: 8, {16, 17, 21, 20, 24, 25, 29, 28}
+Element global: 7, Nodes: 8, {17, 18, 22, 21, 25, 26, 30, 29}
+Element global: 8, Nodes: 8, {18, 19, 23, 22, 26, 27, 31, 30}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (1, 0, 1) -> global 4
+Element (2, 0, 1) -> global 5
+Element (0, 0, 2) -> global 6
+Element (1, 0, 2) -> global 7
+Element (2, 0, 2) -> global 8
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (1, 0, 1)
+Element global 5 -> (2, 0, 1)
+Element global 6 -> (0, 0, 2)
+Element global 7 -> (1, 0, 2)
+Element global 8 -> (2, 0, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 3, 4}
+	element3DCounts: {0, 2, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 12
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805a888
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 3, X, X}
+Node global: 1, Neighbours: 4, {2, 4, 0, X}
+Node global: 2, Neighbours: 4, {X, 5, 1, X}
+Node global: 3, Neighbours: 4, {4, 6, X, 0}
+Node global: 4, Neighbours: 4, {5, 7, 3, 1}
+Node global: 5, Neighbours: 4, {X, 8, 4, 2}
+Node global: 6, Neighbours: 4, {7, 9, X, 3}
+Node global: 7, Neighbours: 4, {8, 10, 6, 4}
+Node global: 8, Neighbours: 4, {X, 11, 7, 5}
+Node global: 9, Neighbours: 4, {10, X, X, 6}
+Node global: 10, Neighbours: 4, {11, X, 9, 7}
+Node global: 11, Neighbours: 4, {X, X, 10, 8}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, X}
+Node global: 3, Elements: 4, {X, 0, X, 2}
+Node global: 4, Elements: 4, {0, 1, 2, 3}
+Node global: 5, Elements: 4, {1, X, 3, X}
+Node global: 6, Elements: 4, {X, 2, X, 4}
+Node global: 7, Elements: 4, {2, 3, 4, 5}
+Node global: 8, Elements: 4, {3, X, 5, X}
+Node global: 9, Elements: 4, {X, 4, X, X}
+Node global: 10, Elements: 4, {4, 5, X, X}
+Node global: 11, Elements: 4, {5, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 0, 1) -> global 3
+Node (0, 1, 1) -> global 4
+Node (0, 2, 1) -> global 5
+Node (0, 0, 2) -> global 6
+Node (0, 1, 2) -> global 7
+Node (0, 2, 2) -> global 8
+Node (0, 0, 3) -> global 9
+Node (0, 1, 3) -> global 10
+Node (0, 2, 3) -> global 11
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 0, 1)
+Node global 4 -> (0, 1, 1)
+Node global 5 -> (0, 2, 1)
+Node global 6 -> (0, 0, 2)
+Node global 7 -> (0, 1, 2)
+Node global 8 -> (0, 2, 2)
+Node global 9 -> (0, 0, 3)
+Node global 10 -> (0, 1, 3)
+Node global 11 -> (0, 2, 3)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 2, 3}
+Element global: 1, Neighbours: 8, {X, X, X, 0, X, 2, 3, X}
+Element global: 2, Neighbours: 8, {X, 0, 1, X, 3, X, 4, 5}
+Element global: 3, Neighbours: 8, {0, 1, X, 2, X, 4, 5, X}
+Element global: 4, Neighbours: 8, {X, 2, 3, X, 5, X, X, X}
+Element global: 5, Neighbours: 8, {2, 3, X, 4, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 4, 3}
+Element global: 1, Nodes: 4, {1, 2, 5, 4}
+Element global: 2, Nodes: 4, {3, 4, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 8, 7}
+Element global: 4, Nodes: 4, {6, 7, 10, 9}
+Element global: 5, Nodes: 4, {7, 8, 11, 10}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (0, 1, 1) -> global 3
+Element (0, 0, 2) -> global 4
+Element (0, 1, 2) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (0, 1, 1)
+Element global 4 -> (0, 0, 2)
+Element global 5 -> (0, 1, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 3, 4}
+	element3DCounts: {1, 2, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 24
+	elementCount: 6
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805a9f8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 6, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 7, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 4, 8, X, 0, X}
+Node global: 3, Neighbours: 6, {X, 5, 9, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, X, 10, X, 2, X}
+Node global: 5, Neighbours: 6, {X, X, 11, 4, 3, X}
+Node global: 6, Neighbours: 6, {7, 8, 12, X, X, 0}
+Node global: 7, Neighbours: 6, {X, 9, 13, 6, X, 1}
+Node global: 8, Neighbours: 6, {9, 10, 14, X, 6, 2}
+Node global: 9, Neighbours: 6, {X, 11, 15, 8, 7, 3}
+Node global: 10, Neighbours: 6, {11, X, 16, X, 8, 4}
+Node global: 11, Neighbours: 6, {X, X, 17, 10, 9, 5}
+Node global: 12, Neighbours: 6, {13, 14, 18, X, X, 6}
+Node global: 13, Neighbours: 6, {X, 15, 19, 12, X, 7}
+Node global: 14, Neighbours: 6, {15, 16, 20, X, 12, 8}
+Node global: 15, Neighbours: 6, {X, 17, 21, 14, 13, 9}
+Node global: 16, Neighbours: 6, {17, X, 22, X, 14, 10}
+Node global: 17, Neighbours: 6, {X, X, 23, 16, 15, 11}
+Node global: 18, Neighbours: 6, {19, 20, X, X, X, 12}
+Node global: 19, Neighbours: 6, {X, 21, X, 18, X, 13}
+Node global: 20, Neighbours: 6, {21, 22, X, X, 18, 14}
+Node global: 21, Neighbours: 6, {X, 23, X, 20, 19, 15}
+Node global: 22, Neighbours: 6, {23, X, X, X, 20, 16}
+Node global: 23, Neighbours: 6, {X, X, X, 22, 21, 17}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, 1}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, 1, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 1, X, X}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, X, X}
+Node global: 6, Elements: 8, {X, X, X, 0, X, X, X, 2}
+Node global: 7, Elements: 8, {X, X, 0, X, X, X, 2, X}
+Node global: 8, Elements: 8, {X, 0, X, 1, X, 2, X, 3}
+Node global: 9, Elements: 8, {0, X, 1, X, 2, X, 3, X}
+Node global: 10, Elements: 8, {X, 1, X, X, X, 3, X, X}
+Node global: 11, Elements: 8, {1, X, X, X, 3, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 2, X, X, X, 4}
+Node global: 13, Elements: 8, {X, X, 2, X, X, X, 4, X}
+Node global: 14, Elements: 8, {X, 2, X, 3, X, 4, X, 5}
+Node global: 15, Elements: 8, {2, X, 3, X, 4, X, 5, X}
+Node global: 16, Elements: 8, {X, 3, X, X, X, 5, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, 5, X, X, X}
+Node global: 18, Elements: 8, {X, X, X, 4, X, X, X, X}
+Node global: 19, Elements: 8, {X, X, 4, X, X, X, X, X}
+Node global: 20, Elements: 8, {X, 4, X, 5, X, X, X, X}
+Node global: 21, Elements: 8, {4, X, 5, X, X, X, X, X}
+Node global: 22, Elements: 8, {X, 5, X, X, X, X, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 0, 1) -> global 6
+Node (1, 0, 1) -> global 7
+Node (0, 1, 1) -> global 8
+Node (1, 1, 1) -> global 9
+Node (0, 2, 1) -> global 10
+Node (1, 2, 1) -> global 11
+Node (0, 0, 2) -> global 12
+Node (1, 0, 2) -> global 13
+Node (0, 1, 2) -> global 14
+Node (1, 1, 2) -> global 15
+Node (0, 2, 2) -> global 16
+Node (1, 2, 2) -> global 17
+Node (0, 0, 3) -> global 18
+Node (1, 0, 3) -> global 19
+Node (0, 1, 3) -> global 20
+Node (1, 1, 3) -> global 21
+Node (0, 2, 3) -> global 22
+Node (1, 2, 3) -> global 23
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 0, 1)
+Node global 7 -> (1, 0, 1)
+Node global 8 -> (0, 1, 1)
+Node global 9 -> (1, 1, 1)
+Node global 10 -> (0, 2, 1)
+Node global 11 -> (1, 2, 1)
+Node global 12 -> (0, 0, 2)
+Node global 13 -> (1, 0, 2)
+Node global 14 -> (0, 1, 2)
+Node global 15 -> (1, 1, 2)
+Node global 16 -> (0, 2, 2)
+Node global 17 -> (1, 2, 2)
+Node global 18 -> (0, 0, 3)
+Node global 19 -> (1, 0, 3)
+Node global 20 -> (0, 1, 3)
+Node global 21 -> (1, 1, 3)
+Node global 22 -> (0, 2, 3)
+Node global 23 -> (1, 2, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, 2, X, X, 3, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, X, X, X, 2, X, X, 3, X, X, X, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, 0, X, X, 1, X, X, X, X, X, X, X, 3, X, X, X, X, X, 4, X, X, 5, X}
+Element global: 3, Neighbours: 26, {X, 0, X, X, 1, X, X, X, X, X, 2, X, X, X, X, X, X, X, 4, X, X, 5, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, 2, X, X, 3, X, X, X, X, X, X, X, 5, X, X, X, X, X, X, X, X, X, X}
+Element global: 5, Neighbours: 26, {X, 2, X, X, 3, X, X, X, X, X, 4, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 6, 7, 9, 8}
+Element global: 1, Nodes: 8, {2, 3, 5, 4, 8, 9, 11, 10}
+Element global: 2, Nodes: 8, {6, 7, 9, 8, 12, 13, 15, 14}
+Element global: 3, Nodes: 8, {8, 9, 11, 10, 14, 15, 17, 16}
+Element global: 4, Nodes: 8, {12, 13, 15, 14, 18, 19, 21, 20}
+Element global: 5, Nodes: 8, {14, 15, 17, 16, 20, 21, 23, 22}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 0, 1) -> global 2
+Element (0, 1, 1) -> global 3
+Element (0, 0, 2) -> global 4
+Element (0, 1, 2) -> global 5
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 0, 1)
+Element global 3 -> (0, 1, 1)
+Element global 4 -> (0, 0, 2)
+Element global 5 -> (0, 1, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 3, 4}
+	element3DCounts: {2, 2, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 36
+	elementCount: 12
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805abc8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 9, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 10, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 11, 1, X, X}
+Node global: 3, Neighbours: 6, {4, 6, 12, X, 0, X}
+Node global: 4, Neighbours: 6, {5, 7, 13, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, 8, 14, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, X, 15, X, 3, X}
+Node global: 7, Neighbours: 6, {8, X, 16, 6, 4, X}
+Node global: 8, Neighbours: 6, {X, X, 17, 7, 5, X}
+Node global: 9, Neighbours: 6, {10, 12, 18, X, X, 0}
+Node global: 10, Neighbours: 6, {11, 13, 19, 9, X, 1}
+Node global: 11, Neighbours: 6, {X, 14, 20, 10, X, 2}
+Node global: 12, Neighbours: 6, {13, 15, 21, X, 9, 3}
+Node global: 13, Neighbours: 6, {14, 16, 22, 12, 10, 4}
+Node global: 14, Neighbours: 6, {X, 17, 23, 13, 11, 5}
+Node global: 15, Neighbours: 6, {16, X, 24, X, 12, 6}
+Node global: 16, Neighbours: 6, {17, X, 25, 15, 13, 7}
+Node global: 17, Neighbours: 6, {X, X, 26, 16, 14, 8}
+Node global: 18, Neighbours: 6, {19, 21, 27, X, X, 9}
+Node global: 19, Neighbours: 6, {20, 22, 28, 18, X, 10}
+Node global: 20, Neighbours: 6, {X, 23, 29, 19, X, 11}
+Node global: 21, Neighbours: 6, {22, 24, 30, X, 18, 12}
+Node global: 22, Neighbours: 6, {23, 25, 31, 21, 19, 13}
+Node global: 23, Neighbours: 6, {X, 26, 32, 22, 20, 14}
+Node global: 24, Neighbours: 6, {25, X, 33, X, 21, 15}
+Node global: 25, Neighbours: 6, {26, X, 34, 24, 22, 16}
+Node global: 26, Neighbours: 6, {X, X, 35, 25, 23, 17}
+Node global: 27, Neighbours: 6, {28, 30, X, X, X, 18}
+Node global: 28, Neighbours: 6, {29, 31, X, 27, X, 19}
+Node global: 29, Neighbours: 6, {X, 32, X, 28, X, 20}
+Node global: 30, Neighbours: 6, {31, 33, X, X, 27, 21}
+Node global: 31, Neighbours: 6, {32, 34, X, 30, 28, 22}
+Node global: 32, Neighbours: 6, {X, 35, X, 31, 29, 23}
+Node global: 33, Neighbours: 6, {34, X, X, X, 30, 24}
+Node global: 34, Neighbours: 6, {35, X, X, 33, 31, 25}
+Node global: 35, Neighbours: 6, {X, X, X, 34, 32, 26}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, 2}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, 2, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 3, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, 3, X, X}
+Node global: 8, Elements: 8, {X, X, X, X, 3, X, X, X}
+Node global: 9, Elements: 8, {X, X, X, 0, X, X, X, 4}
+Node global: 10, Elements: 8, {X, X, 0, 1, X, X, 4, 5}
+Node global: 11, Elements: 8, {X, X, 1, X, X, X, 5, X}
+Node global: 12, Elements: 8, {X, 0, X, 2, X, 4, X, 6}
+Node global: 13, Elements: 8, {0, 1, 2, 3, 4, 5, 6, 7}
+Node global: 14, Elements: 8, {1, X, 3, X, 5, X, 7, X}
+Node global: 15, Elements: 8, {X, 2, X, X, X, 6, X, X}
+Node global: 16, Elements: 8, {2, 3, X, X, 6, 7, X, X}
+Node global: 17, Elements: 8, {3, X, X, X, 7, X, X, X}
+Node global: 18, Elements: 8, {X, X, X, 4, X, X, X, 8}
+Node global: 19, Elements: 8, {X, X, 4, 5, X, X, 8, 9}
+Node global: 20, Elements: 8, {X, X, 5, X, X, X, 9, X}
+Node global: 21, Elements: 8, {X, 4, X, 6, X, 8, X, 10}
+Node global: 22, Elements: 8, {4, 5, 6, 7, 8, 9, 10, 11}
+Node global: 23, Elements: 8, {5, X, 7, X, 9, X, 11, X}
+Node global: 24, Elements: 8, {X, 6, X, X, X, 10, X, X}
+Node global: 25, Elements: 8, {6, 7, X, X, 10, 11, X, X}
+Node global: 26, Elements: 8, {7, X, X, X, 11, X, X, X}
+Node global: 27, Elements: 8, {X, X, X, 8, X, X, X, X}
+Node global: 28, Elements: 8, {X, X, 8, 9, X, X, X, X}
+Node global: 29, Elements: 8, {X, X, 9, X, X, X, X, X}
+Node global: 30, Elements: 8, {X, 8, X, 10, X, X, X, X}
+Node global: 31, Elements: 8, {8, 9, 10, 11, X, X, X, X}
+Node global: 32, Elements: 8, {9, X, 11, X, X, X, X, X}
+Node global: 33, Elements: 8, {X, 10, X, X, X, X, X, X}
+Node global: 34, Elements: 8, {10, 11, X, X, X, X, X, X}
+Node global: 35, Elements: 8, {11, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 0, 1) -> global 9
+Node (1, 0, 1) -> global 10
+Node (2, 0, 1) -> global 11
+Node (0, 1, 1) -> global 12
+Node (1, 1, 1) -> global 13
+Node (2, 1, 1) -> global 14
+Node (0, 2, 1) -> global 15
+Node (1, 2, 1) -> global 16
+Node (2, 2, 1) -> global 17
+Node (0, 0, 2) -> global 18
+Node (1, 0, 2) -> global 19
+Node (2, 0, 2) -> global 20
+Node (0, 1, 2) -> global 21
+Node (1, 1, 2) -> global 22
+Node (2, 1, 2) -> global 23
+Node (0, 2, 2) -> global 24
+Node (1, 2, 2) -> global 25
+Node (2, 2, 2) -> global 26
+Node (0, 0, 3) -> global 27
+Node (1, 0, 3) -> global 28
+Node (2, 0, 3) -> global 29
+Node (0, 1, 3) -> global 30
+Node (1, 1, 3) -> global 31
+Node (2, 1, 3) -> global 32
+Node (0, 2, 3) -> global 33
+Node (1, 2, 3) -> global 34
+Node (2, 2, 3) -> global 35
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 0, 1)
+Node global 10 -> (1, 0, 1)
+Node global 11 -> (2, 0, 1)
+Node global 12 -> (0, 1, 1)
+Node global 13 -> (1, 1, 1)
+Node global 14 -> (2, 1, 1)
+Node global 15 -> (0, 2, 1)
+Node global 16 -> (1, 2, 1)
+Node global 17 -> (2, 2, 1)
+Node global 18 -> (0, 0, 2)
+Node global 19 -> (1, 0, 2)
+Node global 20 -> (2, 0, 2)
+Node global 21 -> (0, 1, 2)
+Node global 22 -> (1, 1, 2)
+Node global 23 -> (2, 1, 2)
+Node global 24 -> (0, 2, 2)
+Node global 25 -> (1, 2, 2)
+Node global 26 -> (2, 2, 2)
+Node global 27 -> (0, 0, 3)
+Node global 28 -> (1, 0, 3)
+Node global 29 -> (2, 0, 3)
+Node global 30 -> (0, 1, 3)
+Node global 31 -> (1, 1, 3)
+Node global 32 -> (2, 1, 3)
+Node global 33 -> (0, 2, 3)
+Node global 34 -> (1, 2, 3)
+Node global 35 -> (2, 2, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 2, 3, X, X, X, X, 4, 5, X, 6, 7}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, 2, 3, X, X, X, X, 4, 5, X, 6, 7, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 3, X, X, X, X, 4, 5, X, 6, 7, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, X, 2, X, X, X, X, 4, 5, X, 6, 7, X, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, 0, 1, X, 2, 3, X, X, X, X, 5, X, 6, 7, X, X, X, X, 8, 9, X, 10, 11}
+Element global: 5, Neighbours: 26, {X, X, X, 0, 1, X, 2, 3, X, X, X, X, 4, X, 6, 7, X, X, X, X, 8, 9, X, 10, 11, X}
+Element global: 6, Neighbours: 26, {X, 0, 1, X, 2, 3, X, X, X, X, 4, 5, X, 7, X, X, X, X, 8, 9, X, 10, 11, X, X, X}
+Element global: 7, Neighbours: 26, {0, 1, X, 2, 3, X, X, X, X, 4, 5, X, 6, X, X, X, X, 8, 9, X, 10, 11, X, X, X, X}
+Element global: 8, Neighbours: 26, {X, X, X, X, 4, 5, X, 6, 7, X, X, X, X, 9, X, 10, 11, X, X, X, X, X, X, X, X, X}
+Element global: 9, Neighbours: 26, {X, X, X, 4, 5, X, 6, 7, X, X, X, X, 8, X, 10, 11, X, X, X, X, X, X, X, X, X, X}
+Element global: 10, Neighbours: 26, {X, 4, 5, X, 6, 7, X, X, X, X, 8, 9, X, 11, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 11, Neighbours: 26, {4, 5, X, 6, 7, X, X, X, X, 8, 9, X, 10, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 9, 10, 13, 12}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 10, 11, 14, 13}
+Element global: 2, Nodes: 8, {3, 4, 7, 6, 12, 13, 16, 15}
+Element global: 3, Nodes: 8, {4, 5, 8, 7, 13, 14, 17, 16}
+Element global: 4, Nodes: 8, {9, 10, 13, 12, 18, 19, 22, 21}
+Element global: 5, Nodes: 8, {10, 11, 14, 13, 19, 20, 23, 22}
+Element global: 6, Nodes: 8, {12, 13, 16, 15, 21, 22, 25, 24}
+Element global: 7, Nodes: 8, {13, 14, 17, 16, 22, 23, 26, 25}
+Element global: 8, Nodes: 8, {18, 19, 22, 21, 27, 28, 31, 30}
+Element global: 9, Nodes: 8, {19, 20, 23, 22, 28, 29, 32, 31}
+Element global: 10, Nodes: 8, {21, 22, 25, 24, 30, 31, 34, 33}
+Element global: 11, Nodes: 8, {22, 23, 26, 25, 31, 32, 35, 34}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+Element (0, 0, 1) -> global 4
+Element (1, 0, 1) -> global 5
+Element (0, 1, 1) -> global 6
+Element (1, 1, 1) -> global 7
+Element (0, 0, 2) -> global 8
+Element (1, 0, 2) -> global 9
+Element (0, 1, 2) -> global 10
+Element (1, 1, 2) -> global 11
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+Element global 4 -> (0, 0, 1)
+Element global 5 -> (1, 0, 1)
+Element global 6 -> (0, 1, 1)
+Element global 7 -> (1, 1, 1)
+Element global 8 -> (0, 0, 2)
+Element global 9 -> (1, 0, 2)
+Element global 10 -> (0, 1, 2)
+Element global 11 -> (1, 1, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 3, 4}
+	element3DCounts: {3, 2, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 48
+	elementCount: 18
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805ad98
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 12, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 13, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 14, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 15, 2, X, X}
+Node global: 4, Neighbours: 6, {5, 8, 16, X, 0, X}
+Node global: 5, Neighbours: 6, {6, 9, 17, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, 10, 18, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, 11, 19, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, X, 20, X, 4, X}
+Node global: 9, Neighbours: 6, {10, X, 21, 8, 5, X}
+Node global: 10, Neighbours: 6, {11, X, 22, 9, 6, X}
+Node global: 11, Neighbours: 6, {X, X, 23, 10, 7, X}
+Node global: 12, Neighbours: 6, {13, 16, 24, X, X, 0}
+Node global: 13, Neighbours: 6, {14, 17, 25, 12, X, 1}
+Node global: 14, Neighbours: 6, {15, 18, 26, 13, X, 2}
+Node global: 15, Neighbours: 6, {X, 19, 27, 14, X, 3}
+Node global: 16, Neighbours: 6, {17, 20, 28, X, 12, 4}
+Node global: 17, Neighbours: 6, {18, 21, 29, 16, 13, 5}
+Node global: 18, Neighbours: 6, {19, 22, 30, 17, 14, 6}
+Node global: 19, Neighbours: 6, {X, 23, 31, 18, 15, 7}
+Node global: 20, Neighbours: 6, {21, X, 32, X, 16, 8}
+Node global: 21, Neighbours: 6, {22, X, 33, 20, 17, 9}
+Node global: 22, Neighbours: 6, {23, X, 34, 21, 18, 10}
+Node global: 23, Neighbours: 6, {X, X, 35, 22, 19, 11}
+Node global: 24, Neighbours: 6, {25, 28, 36, X, X, 12}
+Node global: 25, Neighbours: 6, {26, 29, 37, 24, X, 13}
+Node global: 26, Neighbours: 6, {27, 30, 38, 25, X, 14}
+Node global: 27, Neighbours: 6, {X, 31, 39, 26, X, 15}
+Node global: 28, Neighbours: 6, {29, 32, 40, X, 24, 16}
+Node global: 29, Neighbours: 6, {30, 33, 41, 28, 25, 17}
+Node global: 30, Neighbours: 6, {31, 34, 42, 29, 26, 18}
+Node global: 31, Neighbours: 6, {X, 35, 43, 30, 27, 19}
+Node global: 32, Neighbours: 6, {33, X, 44, X, 28, 20}
+Node global: 33, Neighbours: 6, {34, X, 45, 32, 29, 21}
+Node global: 34, Neighbours: 6, {35, X, 46, 33, 30, 22}
+Node global: 35, Neighbours: 6, {X, X, 47, 34, 31, 23}
+Node global: 36, Neighbours: 6, {37, 40, X, X, X, 24}
+Node global: 37, Neighbours: 6, {38, 41, X, 36, X, 25}
+Node global: 38, Neighbours: 6, {39, 42, X, 37, X, 26}
+Node global: 39, Neighbours: 6, {X, 43, X, 38, X, 27}
+Node global: 40, Neighbours: 6, {41, 44, X, X, 36, 28}
+Node global: 41, Neighbours: 6, {42, 45, X, 40, 37, 29}
+Node global: 42, Neighbours: 6, {43, 46, X, 41, 38, 30}
+Node global: 43, Neighbours: 6, {X, 47, X, 42, 39, 31}
+Node global: 44, Neighbours: 6, {45, X, X, X, 40, 32}
+Node global: 45, Neighbours: 6, {46, X, X, 44, 41, 33}
+Node global: 46, Neighbours: 6, {47, X, X, 45, 42, 34}
+Node global: 47, Neighbours: 6, {X, X, X, 46, 43, 35}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, 3, 4}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, 4, 5}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, 5, X}
+Node global: 8, Elements: 8, {X, X, X, X, X, 3, X, X}
+Node global: 9, Elements: 8, {X, X, X, X, 3, 4, X, X}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, X, X}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 0, X, X, X, 6}
+Node global: 13, Elements: 8, {X, X, 0, 1, X, X, 6, 7}
+Node global: 14, Elements: 8, {X, X, 1, 2, X, X, 7, 8}
+Node global: 15, Elements: 8, {X, X, 2, X, X, X, 8, X}
+Node global: 16, Elements: 8, {X, 0, X, 3, X, 6, X, 9}
+Node global: 17, Elements: 8, {0, 1, 3, 4, 6, 7, 9, 10}
+Node global: 18, Elements: 8, {1, 2, 4, 5, 7, 8, 10, 11}
+Node global: 19, Elements: 8, {2, X, 5, X, 8, X, 11, X}
+Node global: 20, Elements: 8, {X, 3, X, X, X, 9, X, X}
+Node global: 21, Elements: 8, {3, 4, X, X, 9, 10, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, 10, 11, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, 11, X, X, X}
+Node global: 24, Elements: 8, {X, X, X, 6, X, X, X, 12}
+Node global: 25, Elements: 8, {X, X, 6, 7, X, X, 12, 13}
+Node global: 26, Elements: 8, {X, X, 7, 8, X, X, 13, 14}
+Node global: 27, Elements: 8, {X, X, 8, X, X, X, 14, X}
+Node global: 28, Elements: 8, {X, 6, X, 9, X, 12, X, 15}
+Node global: 29, Elements: 8, {6, 7, 9, 10, 12, 13, 15, 16}
+Node global: 30, Elements: 8, {7, 8, 10, 11, 13, 14, 16, 17}
+Node global: 31, Elements: 8, {8, X, 11, X, 14, X, 17, X}
+Node global: 32, Elements: 8, {X, 9, X, X, X, 15, X, X}
+Node global: 33, Elements: 8, {9, 10, X, X, 15, 16, X, X}
+Node global: 34, Elements: 8, {10, 11, X, X, 16, 17, X, X}
+Node global: 35, Elements: 8, {11, X, X, X, 17, X, X, X}
+Node global: 36, Elements: 8, {X, X, X, 12, X, X, X, X}
+Node global: 37, Elements: 8, {X, X, 12, 13, X, X, X, X}
+Node global: 38, Elements: 8, {X, X, 13, 14, X, X, X, X}
+Node global: 39, Elements: 8, {X, X, 14, X, X, X, X, X}
+Node global: 40, Elements: 8, {X, 12, X, 15, X, X, X, X}
+Node global: 41, Elements: 8, {12, 13, 15, 16, X, X, X, X}
+Node global: 42, Elements: 8, {13, 14, 16, 17, X, X, X, X}
+Node global: 43, Elements: 8, {14, X, 17, X, X, X, X, X}
+Node global: 44, Elements: 8, {X, 15, X, X, X, X, X, X}
+Node global: 45, Elements: 8, {15, 16, X, X, X, X, X, X}
+Node global: 46, Elements: 8, {16, 17, X, X, X, X, X, X}
+Node global: 47, Elements: 8, {17, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 0, 1) -> global 12
+Node (1, 0, 1) -> global 13
+Node (2, 0, 1) -> global 14
+Node (3, 0, 1) -> global 15
+Node (0, 1, 1) -> global 16
+Node (1, 1, 1) -> global 17
+Node (2, 1, 1) -> global 18
+Node (3, 1, 1) -> global 19
+Node (0, 2, 1) -> global 20
+Node (1, 2, 1) -> global 21
+Node (2, 2, 1) -> global 22
+Node (3, 2, 1) -> global 23
+Node (0, 0, 2) -> global 24
+Node (1, 0, 2) -> global 25
+Node (2, 0, 2) -> global 26
+Node (3, 0, 2) -> global 27
+Node (0, 1, 2) -> global 28
+Node (1, 1, 2) -> global 29
+Node (2, 1, 2) -> global 30
+Node (3, 1, 2) -> global 31
+Node (0, 2, 2) -> global 32
+Node (1, 2, 2) -> global 33
+Node (2, 2, 2) -> global 34
+Node (3, 2, 2) -> global 35
+Node (0, 0, 3) -> global 36
+Node (1, 0, 3) -> global 37
+Node (2, 0, 3) -> global 38
+Node (3, 0, 3) -> global 39
+Node (0, 1, 3) -> global 40
+Node (1, 1, 3) -> global 41
+Node (2, 1, 3) -> global 42
+Node (3, 1, 3) -> global 43
+Node (0, 2, 3) -> global 44
+Node (1, 2, 3) -> global 45
+Node (2, 2, 3) -> global 46
+Node (3, 2, 3) -> global 47
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 0, 1)
+Node global 13 -> (1, 0, 1)
+Node global 14 -> (2, 0, 1)
+Node global 15 -> (3, 0, 1)
+Node global 16 -> (0, 1, 1)
+Node global 17 -> (1, 1, 1)
+Node global 18 -> (2, 1, 1)
+Node global 19 -> (3, 1, 1)
+Node global 20 -> (0, 2, 1)
+Node global 21 -> (1, 2, 1)
+Node global 22 -> (2, 2, 1)
+Node global 23 -> (3, 2, 1)
+Node global 24 -> (0, 0, 2)
+Node global 25 -> (1, 0, 2)
+Node global 26 -> (2, 0, 2)
+Node global 27 -> (3, 0, 2)
+Node global 28 -> (0, 1, 2)
+Node global 29 -> (1, 1, 2)
+Node global 30 -> (2, 1, 2)
+Node global 31 -> (3, 1, 2)
+Node global 32 -> (0, 2, 2)
+Node global 33 -> (1, 2, 2)
+Node global 34 -> (2, 2, 2)
+Node global 35 -> (3, 2, 2)
+Node global 36 -> (0, 0, 3)
+Node global 37 -> (1, 0, 3)
+Node global 38 -> (2, 0, 3)
+Node global 39 -> (3, 0, 3)
+Node global 40 -> (0, 1, 3)
+Node global 41 -> (1, 1, 3)
+Node global 42 -> (2, 1, 3)
+Node global 43 -> (3, 1, 3)
+Node global 44 -> (0, 2, 3)
+Node global 45 -> (1, 2, 3)
+Node global 46 -> (2, 2, 3)
+Node global 47 -> (3, 2, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 3, 4, X, X, X, X, 6, 7, X, 9, 10}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, 3, 4, 5, X, X, X, 6, 7, 8, 9, 10, 11}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 4, 5, X, X, X, X, 7, 8, X, 10, 11, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 4, X, X, X, X, 6, 7, X, 9, 10, X, X, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, 2, 3, 5, X, X, X, 6, 7, 8, 9, 10, 11, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 1, 2, X, 4, X, X, X, X, 7, 8, X, 10, 11, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, 0, 1, X, 3, 4, X, X, X, X, 7, X, 9, 10, X, X, X, X, 12, 13, X, 15, 16}
+Element global: 7, Neighbours: 26, {X, X, X, 0, 1, 2, 3, 4, 5, X, X, X, 6, 8, 9, 10, 11, X, X, X, 12, 13, 14, 15, 16, 17}
+Element global: 8, Neighbours: 26, {X, X, X, 1, 2, X, 4, 5, X, X, X, X, 7, X, 10, 11, X, X, X, X, 13, 14, X, 16, 17, X}
+Element global: 9, Neighbours: 26, {X, 0, 1, X, 3, 4, X, X, X, X, 6, 7, X, 10, X, X, X, X, 12, 13, X, 15, 16, X, X, X}
+Element global: 10, Neighbours: 26, {0, 1, 2, 3, 4, 5, X, X, X, 6, 7, 8, 9, 11, X, X, X, 12, 13, 14, 15, 16, 17, X, X, X}
+Element global: 11, Neighbours: 26, {1, 2, X, 4, 5, X, X, X, X, 7, 8, X, 10, X, X, X, X, 13, 14, X, 16, 17, X, X, X, X}
+Element global: 12, Neighbours: 26, {X, X, X, X, 6, 7, X, 9, 10, X, X, X, X, 13, X, 15, 16, X, X, X, X, X, X, X, X, X}
+Element global: 13, Neighbours: 26, {X, X, X, 6, 7, 8, 9, 10, 11, X, X, X, 12, 14, 15, 16, 17, X, X, X, X, X, X, X, X, X}
+Element global: 14, Neighbours: 26, {X, X, X, 7, 8, X, 10, 11, X, X, X, X, 13, X, 16, 17, X, X, X, X, X, X, X, X, X, X}
+Element global: 15, Neighbours: 26, {X, 6, 7, X, 9, 10, X, X, X, X, 12, 13, X, 16, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 16, Neighbours: 26, {6, 7, 8, 9, 10, 11, X, X, X, 12, 13, 14, 15, 17, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 17, Neighbours: 26, {7, 8, X, 10, 11, X, X, X, X, 13, 14, X, 16, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 12, 13, 17, 16}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 13, 14, 18, 17}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 14, 15, 19, 18}
+Element global: 3, Nodes: 8, {4, 5, 9, 8, 16, 17, 21, 20}
+Element global: 4, Nodes: 8, {5, 6, 10, 9, 17, 18, 22, 21}
+Element global: 5, Nodes: 8, {6, 7, 11, 10, 18, 19, 23, 22}
+Element global: 6, Nodes: 8, {12, 13, 17, 16, 24, 25, 29, 28}
+Element global: 7, Nodes: 8, {13, 14, 18, 17, 25, 26, 30, 29}
+Element global: 8, Nodes: 8, {14, 15, 19, 18, 26, 27, 31, 30}
+Element global: 9, Nodes: 8, {16, 17, 21, 20, 28, 29, 33, 32}
+Element global: 10, Nodes: 8, {17, 18, 22, 21, 29, 30, 34, 33}
+Element global: 11, Nodes: 8, {18, 19, 23, 22, 30, 31, 35, 34}
+Element global: 12, Nodes: 8, {24, 25, 29, 28, 36, 37, 41, 40}
+Element global: 13, Nodes: 8, {25, 26, 30, 29, 37, 38, 42, 41}
+Element global: 14, Nodes: 8, {26, 27, 31, 30, 38, 39, 43, 42}
+Element global: 15, Nodes: 8, {28, 29, 33, 32, 40, 41, 45, 44}
+Element global: 16, Nodes: 8, {29, 30, 34, 33, 41, 42, 46, 45}
+Element global: 17, Nodes: 8, {30, 31, 35, 34, 42, 43, 47, 46}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+Element (0, 0, 1) -> global 6
+Element (1, 0, 1) -> global 7
+Element (2, 0, 1) -> global 8
+Element (0, 1, 1) -> global 9
+Element (1, 1, 1) -> global 10
+Element (2, 1, 1) -> global 11
+Element (0, 0, 2) -> global 12
+Element (1, 0, 2) -> global 13
+Element (2, 0, 2) -> global 14
+Element (0, 1, 2) -> global 15
+Element (1, 1, 2) -> global 16
+Element (2, 1, 2) -> global 17
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+Element global 6 -> (0, 0, 1)
+Element global 7 -> (1, 0, 1)
+Element global 8 -> (2, 0, 1)
+Element global 9 -> (0, 1, 1)
+Element global 10 -> (1, 1, 1)
+Element global 11 -> (2, 1, 1)
+Element global 12 -> (0, 0, 2)
+Element global 13 -> (1, 0, 2)
+Element global 14 -> (2, 0, 2)
+Element global 15 -> (0, 1, 2)
+Element global 16 -> (1, 1, 2)
+Element global 17 -> (2, 1, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {1, 4, 4}
+	element3DCounts: {0, 3, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 16
+	elementCount: 9
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805af30
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 4, {1, 4, X, X}
+Node global: 1, Neighbours: 4, {2, 5, 0, X}
+Node global: 2, Neighbours: 4, {3, 6, 1, X}
+Node global: 3, Neighbours: 4, {X, 7, 2, X}
+Node global: 4, Neighbours: 4, {5, 8, X, 0}
+Node global: 5, Neighbours: 4, {6, 9, 4, 1}
+Node global: 6, Neighbours: 4, {7, 10, 5, 2}
+Node global: 7, Neighbours: 4, {X, 11, 6, 3}
+Node global: 8, Neighbours: 4, {9, 12, X, 4}
+Node global: 9, Neighbours: 4, {10, 13, 8, 5}
+Node global: 10, Neighbours: 4, {11, 14, 9, 6}
+Node global: 11, Neighbours: 4, {X, 15, 10, 7}
+Node global: 12, Neighbours: 4, {13, X, X, 8}
+Node global: 13, Neighbours: 4, {14, X, 12, 9}
+Node global: 14, Neighbours: 4, {15, X, 13, 10}
+Node global: 15, Neighbours: 4, {X, X, 14, 11}
+
+Node global: 0, Elements: 4, {X, X, X, 0}
+Node global: 1, Elements: 4, {X, X, 0, 1}
+Node global: 2, Elements: 4, {X, X, 1, 2}
+Node global: 3, Elements: 4, {X, X, 2, X}
+Node global: 4, Elements: 4, {X, 0, X, 3}
+Node global: 5, Elements: 4, {0, 1, 3, 4}
+Node global: 6, Elements: 4, {1, 2, 4, 5}
+Node global: 7, Elements: 4, {2, X, 5, X}
+Node global: 8, Elements: 4, {X, 3, X, 6}
+Node global: 9, Elements: 4, {3, 4, 6, 7}
+Node global: 10, Elements: 4, {4, 5, 7, 8}
+Node global: 11, Elements: 4, {5, X, 8, X}
+Node global: 12, Elements: 4, {X, 6, X, X}
+Node global: 13, Elements: 4, {6, 7, X, X}
+Node global: 14, Elements: 4, {7, 8, X, X}
+Node global: 15, Elements: 4, {8, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (0, 1, 0) -> global 1
+Node (0, 2, 0) -> global 2
+Node (0, 3, 0) -> global 3
+Node (0, 0, 1) -> global 4
+Node (0, 1, 1) -> global 5
+Node (0, 2, 1) -> global 6
+Node (0, 3, 1) -> global 7
+Node (0, 0, 2) -> global 8
+Node (0, 1, 2) -> global 9
+Node (0, 2, 2) -> global 10
+Node (0, 3, 2) -> global 11
+Node (0, 0, 3) -> global 12
+Node (0, 1, 3) -> global 13
+Node (0, 2, 3) -> global 14
+Node (0, 3, 3) -> global 15
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (0, 1, 0)
+Node global 2 -> (0, 2, 0)
+Node global 3 -> (0, 3, 0)
+Node global 4 -> (0, 0, 1)
+Node global 5 -> (0, 1, 1)
+Node global 6 -> (0, 2, 1)
+Node global 7 -> (0, 3, 1)
+Node global 8 -> (0, 0, 2)
+Node global 9 -> (0, 1, 2)
+Node global 10 -> (0, 2, 2)
+Node global 11 -> (0, 3, 2)
+Node global 12 -> (0, 0, 3)
+Node global 13 -> (0, 1, 3)
+Node global 14 -> (0, 2, 3)
+Node global 15 -> (0, 3, 3)
+
+Element global: 0, Neighbours: 8, {X, X, X, X, 1, X, 3, 4}
+Element global: 1, Neighbours: 8, {X, X, X, 0, 2, 3, 4, 5}
+Element global: 2, Neighbours: 8, {X, X, X, 1, X, 4, 5, X}
+Element global: 3, Neighbours: 8, {X, 0, 1, X, 4, X, 6, 7}
+Element global: 4, Neighbours: 8, {0, 1, 2, 3, 5, 6, 7, 8}
+Element global: 5, Neighbours: 8, {1, 2, X, 4, X, 7, 8, X}
+Element global: 6, Neighbours: 8, {X, 3, 4, X, 7, X, X, X}
+Element global: 7, Neighbours: 8, {3, 4, 5, 6, 8, X, X, X}
+Element global: 8, Neighbours: 8, {4, 5, X, 7, X, X, X, X}
+
+Element global: 0, Nodes: 4, {0, 1, 5, 4}
+Element global: 1, Nodes: 4, {1, 2, 6, 5}
+Element global: 2, Nodes: 4, {2, 3, 7, 6}
+Element global: 3, Nodes: 4, {4, 5, 9, 8}
+Element global: 4, Nodes: 4, {5, 6, 10, 9}
+Element global: 5, Nodes: 4, {6, 7, 11, 10}
+Element global: 6, Nodes: 4, {8, 9, 13, 12}
+Element global: 7, Nodes: 4, {9, 10, 14, 13}
+Element global: 8, Nodes: 4, {10, 11, 15, 14}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (0, 1, 1) -> global 4
+Element (0, 2, 1) -> global 5
+Element (0, 0, 2) -> global 6
+Element (0, 1, 2) -> global 7
+Element (0, 2, 2) -> global 8
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (0, 1, 1)
+Element global 5 -> (0, 2, 1)
+Element global 6 -> (0, 0, 2)
+Element global 7 -> (0, 1, 2)
+Element global 8 -> (0, 2, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {2, 4, 4}
+	element3DCounts: {1, 3, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 32
+	elementCount: 9
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805b0f8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 2, 8, X, X, X}
+Node global: 1, Neighbours: 6, {X, 3, 9, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 4, 10, X, 0, X}
+Node global: 3, Neighbours: 6, {X, 5, 11, 2, 1, X}
+Node global: 4, Neighbours: 6, {5, 6, 12, X, 2, X}
+Node global: 5, Neighbours: 6, {X, 7, 13, 4, 3, X}
+Node global: 6, Neighbours: 6, {7, X, 14, X, 4, X}
+Node global: 7, Neighbours: 6, {X, X, 15, 6, 5, X}
+Node global: 8, Neighbours: 6, {9, 10, 16, X, X, 0}
+Node global: 9, Neighbours: 6, {X, 11, 17, 8, X, 1}
+Node global: 10, Neighbours: 6, {11, 12, 18, X, 8, 2}
+Node global: 11, Neighbours: 6, {X, 13, 19, 10, 9, 3}
+Node global: 12, Neighbours: 6, {13, 14, 20, X, 10, 4}
+Node global: 13, Neighbours: 6, {X, 15, 21, 12, 11, 5}
+Node global: 14, Neighbours: 6, {15, X, 22, X, 12, 6}
+Node global: 15, Neighbours: 6, {X, X, 23, 14, 13, 7}
+Node global: 16, Neighbours: 6, {17, 18, 24, X, X, 8}
+Node global: 17, Neighbours: 6, {X, 19, 25, 16, X, 9}
+Node global: 18, Neighbours: 6, {19, 20, 26, X, 16, 10}
+Node global: 19, Neighbours: 6, {X, 21, 27, 18, 17, 11}
+Node global: 20, Neighbours: 6, {21, 22, 28, X, 18, 12}
+Node global: 21, Neighbours: 6, {X, 23, 29, 20, 19, 13}
+Node global: 22, Neighbours: 6, {23, X, 30, X, 20, 14}
+Node global: 23, Neighbours: 6, {X, X, 31, 22, 21, 15}
+Node global: 24, Neighbours: 6, {25, 26, X, X, X, 16}
+Node global: 25, Neighbours: 6, {X, 27, X, 24, X, 17}
+Node global: 26, Neighbours: 6, {27, 28, X, X, 24, 18}
+Node global: 27, Neighbours: 6, {X, 29, X, 26, 25, 19}
+Node global: 28, Neighbours: 6, {29, 30, X, X, 26, 20}
+Node global: 29, Neighbours: 6, {X, 31, X, 28, 27, 21}
+Node global: 30, Neighbours: 6, {31, X, X, X, 28, 22}
+Node global: 31, Neighbours: 6, {X, X, X, 30, 29, 23}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, X}
+Node global: 2, Elements: 8, {X, X, X, X, X, 0, X, 1}
+Node global: 3, Elements: 8, {X, X, X, X, 0, X, 1, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 1, X, 2}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 2, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, X}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, X, X}
+Node global: 8, Elements: 8, {X, X, X, 0, X, X, X, 3}
+Node global: 9, Elements: 8, {X, X, 0, X, X, X, 3, X}
+Node global: 10, Elements: 8, {X, 0, X, 1, X, 3, X, 4}
+Node global: 11, Elements: 8, {0, X, 1, X, 3, X, 4, X}
+Node global: 12, Elements: 8, {X, 1, X, 2, X, 4, X, 5}
+Node global: 13, Elements: 8, {1, X, 2, X, 4, X, 5, X}
+Node global: 14, Elements: 8, {X, 2, X, X, X, 5, X, X}
+Node global: 15, Elements: 8, {2, X, X, X, 5, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 3, X, X, X, 6}
+Node global: 17, Elements: 8, {X, X, 3, X, X, X, 6, X}
+Node global: 18, Elements: 8, {X, 3, X, 4, X, 6, X, 7}
+Node global: 19, Elements: 8, {3, X, 4, X, 6, X, 7, X}
+Node global: 20, Elements: 8, {X, 4, X, 5, X, 7, X, 8}
+Node global: 21, Elements: 8, {4, X, 5, X, 7, X, 8, X}
+Node global: 22, Elements: 8, {X, 5, X, X, X, 8, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, 8, X, X, X}
+Node global: 24, Elements: 8, {X, X, X, 6, X, X, X, X}
+Node global: 25, Elements: 8, {X, X, 6, X, X, X, X, X}
+Node global: 26, Elements: 8, {X, 6, X, 7, X, X, X, X}
+Node global: 27, Elements: 8, {6, X, 7, X, X, X, X, X}
+Node global: 28, Elements: 8, {X, 7, X, 8, X, X, X, X}
+Node global: 29, Elements: 8, {7, X, 8, X, X, X, X, X}
+Node global: 30, Elements: 8, {X, 8, X, X, X, X, X, X}
+Node global: 31, Elements: 8, {8, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (0, 1, 0) -> global 2
+Node (1, 1, 0) -> global 3
+Node (0, 2, 0) -> global 4
+Node (1, 2, 0) -> global 5
+Node (0, 3, 0) -> global 6
+Node (1, 3, 0) -> global 7
+Node (0, 0, 1) -> global 8
+Node (1, 0, 1) -> global 9
+Node (0, 1, 1) -> global 10
+Node (1, 1, 1) -> global 11
+Node (0, 2, 1) -> global 12
+Node (1, 2, 1) -> global 13
+Node (0, 3, 1) -> global 14
+Node (1, 3, 1) -> global 15
+Node (0, 0, 2) -> global 16
+Node (1, 0, 2) -> global 17
+Node (0, 1, 2) -> global 18
+Node (1, 1, 2) -> global 19
+Node (0, 2, 2) -> global 20
+Node (1, 2, 2) -> global 21
+Node (0, 3, 2) -> global 22
+Node (1, 3, 2) -> global 23
+Node (0, 0, 3) -> global 24
+Node (1, 0, 3) -> global 25
+Node (0, 1, 3) -> global 26
+Node (1, 1, 3) -> global 27
+Node (0, 2, 3) -> global 28
+Node (1, 2, 3) -> global 29
+Node (0, 3, 3) -> global 30
+Node (1, 3, 3) -> global 31
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (0, 1, 0)
+Node global 3 -> (1, 1, 0)
+Node global 4 -> (0, 2, 0)
+Node global 5 -> (1, 2, 0)
+Node global 6 -> (0, 3, 0)
+Node global 7 -> (1, 3, 0)
+Node global 8 -> (0, 0, 1)
+Node global 9 -> (1, 0, 1)
+Node global 10 -> (0, 1, 1)
+Node global 11 -> (1, 1, 1)
+Node global 12 -> (0, 2, 1)
+Node global 13 -> (1, 2, 1)
+Node global 14 -> (0, 3, 1)
+Node global 15 -> (1, 3, 1)
+Node global 16 -> (0, 0, 2)
+Node global 17 -> (1, 0, 2)
+Node global 18 -> (0, 1, 2)
+Node global 19 -> (1, 1, 2)
+Node global 20 -> (0, 2, 2)
+Node global 21 -> (1, 2, 2)
+Node global 22 -> (0, 3, 2)
+Node global 23 -> (1, 3, 2)
+Node global 24 -> (0, 0, 3)
+Node global 25 -> (1, 0, 3)
+Node global 26 -> (0, 1, 3)
+Node global 27 -> (1, 1, 3)
+Node global 28 -> (0, 2, 3)
+Node global 29 -> (1, 2, 3)
+Node global 30 -> (0, 3, 3)
+Node global 31 -> (1, 3, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, 3, X, X, 4, X}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, X, X, X, X, 2, X, X, 3, X, X, 4, X, X, 5, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 1, X, X, X, X, X, X, X, 4, X, X, 5, X, X, X, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, 0, X, X, 1, X, X, X, X, X, X, X, 4, X, X, X, X, X, 6, X, X, 7, X}
+Element global: 4, Neighbours: 26, {X, 0, X, X, 1, X, X, 2, X, X, 3, X, X, X, X, 5, X, X, 6, X, X, 7, X, X, 8, X}
+Element global: 5, Neighbours: 26, {X, 1, X, X, 2, X, X, X, X, X, 4, X, X, X, X, X, X, X, 7, X, X, 8, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, 3, X, X, 4, X, X, X, X, X, X, X, 7, X, X, X, X, X, X, X, X, X, X}
+Element global: 7, Neighbours: 26, {X, 3, X, X, 4, X, X, 5, X, X, 6, X, X, X, X, 8, X, X, X, X, X, X, X, X, X, X}
+Element global: 8, Neighbours: 26, {X, 4, X, X, 5, X, X, X, X, X, 7, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 3, 2, 8, 9, 11, 10}
+Element global: 1, Nodes: 8, {2, 3, 5, 4, 10, 11, 13, 12}
+Element global: 2, Nodes: 8, {4, 5, 7, 6, 12, 13, 15, 14}
+Element global: 3, Nodes: 8, {8, 9, 11, 10, 16, 17, 19, 18}
+Element global: 4, Nodes: 8, {10, 11, 13, 12, 18, 19, 21, 20}
+Element global: 5, Nodes: 8, {12, 13, 15, 14, 20, 21, 23, 22}
+Element global: 6, Nodes: 8, {16, 17, 19, 18, 24, 25, 27, 26}
+Element global: 7, Nodes: 8, {18, 19, 21, 20, 26, 27, 29, 28}
+Element global: 8, Nodes: 8, {20, 21, 23, 22, 28, 29, 31, 30}
+
+Element (0, 0, 0) -> global 0
+Element (0, 1, 0) -> global 1
+Element (0, 2, 0) -> global 2
+Element (0, 0, 1) -> global 3
+Element (0, 1, 1) -> global 4
+Element (0, 2, 1) -> global 5
+Element (0, 0, 2) -> global 6
+Element (0, 1, 2) -> global 7
+Element (0, 2, 2) -> global 8
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (0, 1, 0)
+Element global 2 -> (0, 2, 0)
+Element global 3 -> (0, 0, 1)
+Element global 4 -> (0, 1, 1)
+Element global 5 -> (0, 2, 1)
+Element global 6 -> (0, 0, 2)
+Element global 7 -> (0, 1, 2)
+Element global 8 -> (0, 2, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {3, 4, 4}
+	element3DCounts: {2, 3, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 48
+	elementCount: 18
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805b2c8
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 3, 12, X, X, X}
+Node global: 1, Neighbours: 6, {2, 4, 13, 0, X, X}
+Node global: 2, Neighbours: 6, {X, 5, 14, 1, X, X}
+Node global: 3, Neighbours: 6, {4, 6, 15, X, 0, X}
+Node global: 4, Neighbours: 6, {5, 7, 16, 3, 1, X}
+Node global: 5, Neighbours: 6, {X, 8, 17, 4, 2, X}
+Node global: 6, Neighbours: 6, {7, 9, 18, X, 3, X}
+Node global: 7, Neighbours: 6, {8, 10, 19, 6, 4, X}
+Node global: 8, Neighbours: 6, {X, 11, 20, 7, 5, X}
+Node global: 9, Neighbours: 6, {10, X, 21, X, 6, X}
+Node global: 10, Neighbours: 6, {11, X, 22, 9, 7, X}
+Node global: 11, Neighbours: 6, {X, X, 23, 10, 8, X}
+Node global: 12, Neighbours: 6, {13, 15, 24, X, X, 0}
+Node global: 13, Neighbours: 6, {14, 16, 25, 12, X, 1}
+Node global: 14, Neighbours: 6, {X, 17, 26, 13, X, 2}
+Node global: 15, Neighbours: 6, {16, 18, 27, X, 12, 3}
+Node global: 16, Neighbours: 6, {17, 19, 28, 15, 13, 4}
+Node global: 17, Neighbours: 6, {X, 20, 29, 16, 14, 5}
+Node global: 18, Neighbours: 6, {19, 21, 30, X, 15, 6}
+Node global: 19, Neighbours: 6, {20, 22, 31, 18, 16, 7}
+Node global: 20, Neighbours: 6, {X, 23, 32, 19, 17, 8}
+Node global: 21, Neighbours: 6, {22, X, 33, X, 18, 9}
+Node global: 22, Neighbours: 6, {23, X, 34, 21, 19, 10}
+Node global: 23, Neighbours: 6, {X, X, 35, 22, 20, 11}
+Node global: 24, Neighbours: 6, {25, 27, 36, X, X, 12}
+Node global: 25, Neighbours: 6, {26, 28, 37, 24, X, 13}
+Node global: 26, Neighbours: 6, {X, 29, 38, 25, X, 14}
+Node global: 27, Neighbours: 6, {28, 30, 39, X, 24, 15}
+Node global: 28, Neighbours: 6, {29, 31, 40, 27, 25, 16}
+Node global: 29, Neighbours: 6, {X, 32, 41, 28, 26, 17}
+Node global: 30, Neighbours: 6, {31, 33, 42, X, 27, 18}
+Node global: 31, Neighbours: 6, {32, 34, 43, 30, 28, 19}
+Node global: 32, Neighbours: 6, {X, 35, 44, 31, 29, 20}
+Node global: 33, Neighbours: 6, {34, X, 45, X, 30, 21}
+Node global: 34, Neighbours: 6, {35, X, 46, 33, 31, 22}
+Node global: 35, Neighbours: 6, {X, X, 47, 34, 32, 23}
+Node global: 36, Neighbours: 6, {37, 39, X, X, X, 24}
+Node global: 37, Neighbours: 6, {38, 40, X, 36, X, 25}
+Node global: 38, Neighbours: 6, {X, 41, X, 37, X, 26}
+Node global: 39, Neighbours: 6, {40, 42, X, X, 36, 27}
+Node global: 40, Neighbours: 6, {41, 43, X, 39, 37, 28}
+Node global: 41, Neighbours: 6, {X, 44, X, 40, 38, 29}
+Node global: 42, Neighbours: 6, {43, 45, X, X, 39, 30}
+Node global: 43, Neighbours: 6, {44, 46, X, 42, 40, 31}
+Node global: 44, Neighbours: 6, {X, 47, X, 43, 41, 32}
+Node global: 45, Neighbours: 6, {46, X, X, X, 42, 33}
+Node global: 46, Neighbours: 6, {47, X, X, 45, 43, 34}
+Node global: 47, Neighbours: 6, {X, X, X, 46, 44, 35}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, X}
+Node global: 3, Elements: 8, {X, X, X, X, X, 0, X, 2}
+Node global: 4, Elements: 8, {X, X, X, X, 0, 1, 2, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 1, X, 3, X}
+Node global: 6, Elements: 8, {X, X, X, X, X, 2, X, 4}
+Node global: 7, Elements: 8, {X, X, X, X, 2, 3, 4, 5}
+Node global: 8, Elements: 8, {X, X, X, X, 3, X, 5, X}
+Node global: 9, Elements: 8, {X, X, X, X, X, 4, X, X}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, X, X}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, X, X}
+Node global: 12, Elements: 8, {X, X, X, 0, X, X, X, 6}
+Node global: 13, Elements: 8, {X, X, 0, 1, X, X, 6, 7}
+Node global: 14, Elements: 8, {X, X, 1, X, X, X, 7, X}
+Node global: 15, Elements: 8, {X, 0, X, 2, X, 6, X, 8}
+Node global: 16, Elements: 8, {0, 1, 2, 3, 6, 7, 8, 9}
+Node global: 17, Elements: 8, {1, X, 3, X, 7, X, 9, X}
+Node global: 18, Elements: 8, {X, 2, X, 4, X, 8, X, 10}
+Node global: 19, Elements: 8, {2, 3, 4, 5, 8, 9, 10, 11}
+Node global: 20, Elements: 8, {3, X, 5, X, 9, X, 11, X}
+Node global: 21, Elements: 8, {X, 4, X, X, X, 10, X, X}
+Node global: 22, Elements: 8, {4, 5, X, X, 10, 11, X, X}
+Node global: 23, Elements: 8, {5, X, X, X, 11, X, X, X}
+Node global: 24, Elements: 8, {X, X, X, 6, X, X, X, 12}
+Node global: 25, Elements: 8, {X, X, 6, 7, X, X, 12, 13}
+Node global: 26, Elements: 8, {X, X, 7, X, X, X, 13, X}
+Node global: 27, Elements: 8, {X, 6, X, 8, X, 12, X, 14}
+Node global: 28, Elements: 8, {6, 7, 8, 9, 12, 13, 14, 15}
+Node global: 29, Elements: 8, {7, X, 9, X, 13, X, 15, X}
+Node global: 30, Elements: 8, {X, 8, X, 10, X, 14, X, 16}
+Node global: 31, Elements: 8, {8, 9, 10, 11, 14, 15, 16, 17}
+Node global: 32, Elements: 8, {9, X, 11, X, 15, X, 17, X}
+Node global: 33, Elements: 8, {X, 10, X, X, X, 16, X, X}
+Node global: 34, Elements: 8, {10, 11, X, X, 16, 17, X, X}
+Node global: 35, Elements: 8, {11, X, X, X, 17, X, X, X}
+Node global: 36, Elements: 8, {X, X, X, 12, X, X, X, X}
+Node global: 37, Elements: 8, {X, X, 12, 13, X, X, X, X}
+Node global: 38, Elements: 8, {X, X, 13, X, X, X, X, X}
+Node global: 39, Elements: 8, {X, 12, X, 14, X, X, X, X}
+Node global: 40, Elements: 8, {12, 13, 14, 15, X, X, X, X}
+Node global: 41, Elements: 8, {13, X, 15, X, X, X, X, X}
+Node global: 42, Elements: 8, {X, 14, X, 16, X, X, X, X}
+Node global: 43, Elements: 8, {14, 15, 16, 17, X, X, X, X}
+Node global: 44, Elements: 8, {15, X, 17, X, X, X, X, X}
+Node global: 45, Elements: 8, {X, 16, X, X, X, X, X, X}
+Node global: 46, Elements: 8, {16, 17, X, X, X, X, X, X}
+Node global: 47, Elements: 8, {17, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (0, 1, 0) -> global 3
+Node (1, 1, 0) -> global 4
+Node (2, 1, 0) -> global 5
+Node (0, 2, 0) -> global 6
+Node (1, 2, 0) -> global 7
+Node (2, 2, 0) -> global 8
+Node (0, 3, 0) -> global 9
+Node (1, 3, 0) -> global 10
+Node (2, 3, 0) -> global 11
+Node (0, 0, 1) -> global 12
+Node (1, 0, 1) -> global 13
+Node (2, 0, 1) -> global 14
+Node (0, 1, 1) -> global 15
+Node (1, 1, 1) -> global 16
+Node (2, 1, 1) -> global 17
+Node (0, 2, 1) -> global 18
+Node (1, 2, 1) -> global 19
+Node (2, 2, 1) -> global 20
+Node (0, 3, 1) -> global 21
+Node (1, 3, 1) -> global 22
+Node (2, 3, 1) -> global 23
+Node (0, 0, 2) -> global 24
+Node (1, 0, 2) -> global 25
+Node (2, 0, 2) -> global 26
+Node (0, 1, 2) -> global 27
+Node (1, 1, 2) -> global 28
+Node (2, 1, 2) -> global 29
+Node (0, 2, 2) -> global 30
+Node (1, 2, 2) -> global 31
+Node (2, 2, 2) -> global 32
+Node (0, 3, 2) -> global 33
+Node (1, 3, 2) -> global 34
+Node (2, 3, 2) -> global 35
+Node (0, 0, 3) -> global 36
+Node (1, 0, 3) -> global 37
+Node (2, 0, 3) -> global 38
+Node (0, 1, 3) -> global 39
+Node (1, 1, 3) -> global 40
+Node (2, 1, 3) -> global 41
+Node (0, 2, 3) -> global 42
+Node (1, 2, 3) -> global 43
+Node (2, 2, 3) -> global 44
+Node (0, 3, 3) -> global 45
+Node (1, 3, 3) -> global 46
+Node (2, 3, 3) -> global 47
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (0, 1, 0)
+Node global 4 -> (1, 1, 0)
+Node global 5 -> (2, 1, 0)
+Node global 6 -> (0, 2, 0)
+Node global 7 -> (1, 2, 0)
+Node global 8 -> (2, 2, 0)
+Node global 9 -> (0, 3, 0)
+Node global 10 -> (1, 3, 0)
+Node global 11 -> (2, 3, 0)
+Node global 12 -> (0, 0, 1)
+Node global 13 -> (1, 0, 1)
+Node global 14 -> (2, 0, 1)
+Node global 15 -> (0, 1, 1)
+Node global 16 -> (1, 1, 1)
+Node global 17 -> (2, 1, 1)
+Node global 18 -> (0, 2, 1)
+Node global 19 -> (1, 2, 1)
+Node global 20 -> (2, 2, 1)
+Node global 21 -> (0, 3, 1)
+Node global 22 -> (1, 3, 1)
+Node global 23 -> (2, 3, 1)
+Node global 24 -> (0, 0, 2)
+Node global 25 -> (1, 0, 2)
+Node global 26 -> (2, 0, 2)
+Node global 27 -> (0, 1, 2)
+Node global 28 -> (1, 1, 2)
+Node global 29 -> (2, 1, 2)
+Node global 30 -> (0, 2, 2)
+Node global 31 -> (1, 2, 2)
+Node global 32 -> (2, 2, 2)
+Node global 33 -> (0, 3, 2)
+Node global 34 -> (1, 3, 2)
+Node global 35 -> (2, 3, 2)
+Node global 36 -> (0, 0, 3)
+Node global 37 -> (1, 0, 3)
+Node global 38 -> (2, 0, 3)
+Node global 39 -> (0, 1, 3)
+Node global 40 -> (1, 1, 3)
+Node global 41 -> (2, 1, 3)
+Node global 42 -> (0, 2, 3)
+Node global 43 -> (1, 2, 3)
+Node global 44 -> (2, 2, 3)
+Node global 45 -> (0, 3, 3)
+Node global 46 -> (1, 3, 3)
+Node global 47 -> (2, 3, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 2, 3, X, X, X, X, 6, 7, X, 8, 9}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, X, 2, 3, X, X, X, X, 6, 7, X, 8, 9, X}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 3, X, 4, 5, X, 6, 7, X, 8, 9, X, 10, 11}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, X, 2, X, 4, 5, X, 6, 7, X, 8, 9, X, 10, 11, X}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 2, 3, X, 5, X, X, X, X, 8, 9, X, 10, 11, X, X, X}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 2, 3, X, 4, X, X, X, X, 8, 9, X, 10, 11, X, X, X, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, 0, 1, X, 2, 3, X, X, X, X, 7, X, 8, 9, X, X, X, X, 12, 13, X, 14, 15}
+Element global: 7, Neighbours: 26, {X, X, X, 0, 1, X, 2, 3, X, X, X, X, 6, X, 8, 9, X, X, X, X, 12, 13, X, 14, 15, X}
+Element global: 8, Neighbours: 26, {X, 0, 1, X, 2, 3, X, 4, 5, X, 6, 7, X, 9, X, 10, 11, X, 12, 13, X, 14, 15, X, 16, 17}
+Element global: 9, Neighbours: 26, {0, 1, X, 2, 3, X, 4, 5, X, 6, 7, X, 8, X, 10, 11, X, 12, 13, X, 14, 15, X, 16, 17, X}
+Element global: 10, Neighbours: 26, {X, 2, 3, X, 4, 5, X, X, X, X, 8, 9, X, 11, X, X, X, X, 14, 15, X, 16, 17, X, X, X}
+Element global: 11, Neighbours: 26, {2, 3, X, 4, 5, X, X, X, X, 8, 9, X, 10, X, X, X, X, 14, 15, X, 16, 17, X, X, X, X}
+Element global: 12, Neighbours: 26, {X, X, X, X, 6, 7, X, 8, 9, X, X, X, X, 13, X, 14, 15, X, X, X, X, X, X, X, X, X}
+Element global: 13, Neighbours: 26, {X, X, X, 6, 7, X, 8, 9, X, X, X, X, 12, X, 14, 15, X, X, X, X, X, X, X, X, X, X}
+Element global: 14, Neighbours: 26, {X, 6, 7, X, 8, 9, X, 10, 11, X, 12, 13, X, 15, X, 16, 17, X, X, X, X, X, X, X, X, X}
+Element global: 15, Neighbours: 26, {6, 7, X, 8, 9, X, 10, 11, X, 12, 13, X, 14, X, 16, 17, X, X, X, X, X, X, X, X, X, X}
+Element global: 16, Neighbours: 26, {X, 8, 9, X, 10, 11, X, X, X, X, 14, 15, X, 17, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 17, Neighbours: 26, {8, 9, X, 10, 11, X, X, X, X, 14, 15, X, 16, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 4, 3, 12, 13, 16, 15}
+Element global: 1, Nodes: 8, {1, 2, 5, 4, 13, 14, 17, 16}
+Element global: 2, Nodes: 8, {3, 4, 7, 6, 15, 16, 19, 18}
+Element global: 3, Nodes: 8, {4, 5, 8, 7, 16, 17, 20, 19}
+Element global: 4, Nodes: 8, {6, 7, 10, 9, 18, 19, 22, 21}
+Element global: 5, Nodes: 8, {7, 8, 11, 10, 19, 20, 23, 22}
+Element global: 6, Nodes: 8, {12, 13, 16, 15, 24, 25, 28, 27}
+Element global: 7, Nodes: 8, {13, 14, 17, 16, 25, 26, 29, 28}
+Element global: 8, Nodes: 8, {15, 16, 19, 18, 27, 28, 31, 30}
+Element global: 9, Nodes: 8, {16, 17, 20, 19, 28, 29, 32, 31}
+Element global: 10, Nodes: 8, {18, 19, 22, 21, 30, 31, 34, 33}
+Element global: 11, Nodes: 8, {19, 20, 23, 22, 31, 32, 35, 34}
+Element global: 12, Nodes: 8, {24, 25, 28, 27, 36, 37, 40, 39}
+Element global: 13, Nodes: 8, {25, 26, 29, 28, 37, 38, 41, 40}
+Element global: 14, Nodes: 8, {27, 28, 31, 30, 39, 40, 43, 42}
+Element global: 15, Nodes: 8, {28, 29, 32, 31, 40, 41, 44, 43}
+Element global: 16, Nodes: 8, {30, 31, 34, 33, 42, 43, 46, 45}
+Element global: 17, Nodes: 8, {31, 32, 35, 34, 43, 44, 47, 46}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (0, 1, 0) -> global 2
+Element (1, 1, 0) -> global 3
+Element (0, 2, 0) -> global 4
+Element (1, 2, 0) -> global 5
+Element (0, 0, 1) -> global 6
+Element (1, 0, 1) -> global 7
+Element (0, 1, 1) -> global 8
+Element (1, 1, 1) -> global 9
+Element (0, 2, 1) -> global 10
+Element (1, 2, 1) -> global 11
+Element (0, 0, 2) -> global 12
+Element (1, 0, 2) -> global 13
+Element (0, 1, 2) -> global 14
+Element (1, 1, 2) -> global 15
+Element (0, 2, 2) -> global 16
+Element (1, 2, 2) -> global 17
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (0, 1, 0)
+Element global 3 -> (1, 1, 0)
+Element global 4 -> (0, 2, 0)
+Element global 5 -> (1, 2, 0)
+Element global 6 -> (0, 0, 1)
+Element global 7 -> (1, 0, 1)
+Element global 8 -> (0, 1, 1)
+Element global 9 -> (1, 1, 1)
+Element global 10 -> (0, 2, 1)
+Element global 11 -> (1, 2, 1)
+Element global 12 -> (0, 0, 2)
+Element global 13 -> (1, 0, 2)
+Element global 14 -> (0, 1, 2)
+Element global 15 -> (1, 1, 2)
+Element global 16 -> (0, 2, 2)
+Element global 17 -> (1, 2, 2)
+
+
+HexaMeshTopology (ptr): 0x805a3f8
+	dictionary (ptr): 0x8054268
+RegularMeshTopology (ptr): 0x805a3f8
+	node3DTo1D (func ptr): 0x804d1f6
+	node1DTo3D (func ptr): 0x804d21b
+	element3DTo1D (func ptr): 0x804d29d
+	element1DTo3D (func ptr): 0x804d357
+	node3DCounts: {4, 4, 4}
+	element3DCounts: {3, 3, 3}
+	nodesPerElement: 8
+	ascendingIJK_ToHughesNodeNumberMap (ptr): 0x8054440
+		ascendingIJK_ToHughesNodeNumberMap[0]: 0
+		ascendingIJK_ToHughesNodeNumberMap[1]: 1
+		ascendingIJK_ToHughesNodeNumberMap[2]: 3
+		ascendingIJK_ToHughesNodeNumberMap[3]: 2
+		ascendingIJK_ToHughesNodeNumberMap[4]: 4
+		ascendingIJK_ToHughesNodeNumberMap[5]: 5
+		ascendingIJK_ToHughesNodeNumberMap[6]: 7
+		ascendingIJK_ToHughesNodeNumberMap[7]: 6
+MeshTopology (ptr): 0x805a3f8
+	nodeNeighbourCount (func ptr): 0x804a76a
+	nodeBuildNeighbours (func ptr): 0x804a7af
+	nodeElementCount (func ptr): 0x804b132
+	nodeBuildElements (func ptr): 0x804b192
+	elementNeighbourCount (func ptr): 0x804babc
+	elementBuildNeighbours (func ptr): 0x804bb56
+	elementNodeCount (func ptr): 0x804cd54
+	elementBuildNodes (func ptr): 0x804cdb4
+	nodeCount: 64
+	elementCount: 27
+	boundaryNodeCount: 6
+	boundaryNodeTbl (ptr): 0x805bad0
+		boundaryNodeTbl[0]: {1, 2, 5}
+		boundaryNodeTbl[1]: {2, 3, 6}
+		boundaryNodeTbl[2]: {6, 7, 5}
+		boundaryNodeTbl[3]: {4, 7, 0}
+		boundaryNodeTbl[4]: {5, 4, 1}
+		boundaryNodeTbl[5]: {0, 3, 1}
+Class (ptr): 0x805a3f8
+	sizeOfSelf: 120
+	_deleteSelf: True
+	type: HexaMeshTopology
+	_delete (func ptr): 0x804a6c2
+	_print (func ptr): 0x804a6ee
+Node global: 0, Neighbours: 6, {1, 4, 16, X, X, X}
+Node global: 1, Neighbours: 6, {2, 5, 17, 0, X, X}
+Node global: 2, Neighbours: 6, {3, 6, 18, 1, X, X}
+Node global: 3, Neighbours: 6, {X, 7, 19, 2, X, X}
+Node global: 4, Neighbours: 6, {5, 8, 20, X, 0, X}
+Node global: 5, Neighbours: 6, {6, 9, 21, 4, 1, X}
+Node global: 6, Neighbours: 6, {7, 10, 22, 5, 2, X}
+Node global: 7, Neighbours: 6, {X, 11, 23, 6, 3, X}
+Node global: 8, Neighbours: 6, {9, 12, 24, X, 4, X}
+Node global: 9, Neighbours: 6, {10, 13, 25, 8, 5, X}
+Node global: 10, Neighbours: 6, {11, 14, 26, 9, 6, X}
+Node global: 11, Neighbours: 6, {X, 15, 27, 10, 7, X}
+Node global: 12, Neighbours: 6, {13, X, 28, X, 8, X}
+Node global: 13, Neighbours: 6, {14, X, 29, 12, 9, X}
+Node global: 14, Neighbours: 6, {15, X, 30, 13, 10, X}
+Node global: 15, Neighbours: 6, {X, X, 31, 14, 11, X}
+Node global: 16, Neighbours: 6, {17, 20, 32, X, X, 0}
+Node global: 17, Neighbours: 6, {18, 21, 33, 16, X, 1}
+Node global: 18, Neighbours: 6, {19, 22, 34, 17, X, 2}
+Node global: 19, Neighbours: 6, {X, 23, 35, 18, X, 3}
+Node global: 20, Neighbours: 6, {21, 24, 36, X, 16, 4}
+Node global: 21, Neighbours: 6, {22, 25, 37, 20, 17, 5}
+Node global: 22, Neighbours: 6, {23, 26, 38, 21, 18, 6}
+Node global: 23, Neighbours: 6, {X, 27, 39, 22, 19, 7}
+Node global: 24, Neighbours: 6, {25, 28, 40, X, 20, 8}
+Node global: 25, Neighbours: 6, {26, 29, 41, 24, 21, 9}
+Node global: 26, Neighbours: 6, {27, 30, 42, 25, 22, 10}
+Node global: 27, Neighbours: 6, {X, 31, 43, 26, 23, 11}
+Node global: 28, Neighbours: 6, {29, X, 44, X, 24, 12}
+Node global: 29, Neighbours: 6, {30, X, 45, 28, 25, 13}
+Node global: 30, Neighbours: 6, {31, X, 46, 29, 26, 14}
+Node global: 31, Neighbours: 6, {X, X, 47, 30, 27, 15}
+Node global: 32, Neighbours: 6, {33, 36, 48, X, X, 16}
+Node global: 33, Neighbours: 6, {34, 37, 49, 32, X, 17}
+Node global: 34, Neighbours: 6, {35, 38, 50, 33, X, 18}
+Node global: 35, Neighbours: 6, {X, 39, 51, 34, X, 19}
+Node global: 36, Neighbours: 6, {37, 40, 52, X, 32, 20}
+Node global: 37, Neighbours: 6, {38, 41, 53, 36, 33, 21}
+Node global: 38, Neighbours: 6, {39, 42, 54, 37, 34, 22}
+Node global: 39, Neighbours: 6, {X, 43, 55, 38, 35, 23}
+Node global: 40, Neighbours: 6, {41, 44, 56, X, 36, 24}
+Node global: 41, Neighbours: 6, {42, 45, 57, 40, 37, 25}
+Node global: 42, Neighbours: 6, {43, 46, 58, 41, 38, 26}
+Node global: 43, Neighbours: 6, {X, 47, 59, 42, 39, 27}
+Node global: 44, Neighbours: 6, {45, X, 60, X, 40, 28}
+Node global: 45, Neighbours: 6, {46, X, 61, 44, 41, 29}
+Node global: 46, Neighbours: 6, {47, X, 62, 45, 42, 30}
+Node global: 47, Neighbours: 6, {X, X, 63, 46, 43, 31}
+Node global: 48, Neighbours: 6, {49, 52, X, X, X, 32}
+Node global: 49, Neighbours: 6, {50, 53, X, 48, X, 33}
+Node global: 50, Neighbours: 6, {51, 54, X, 49, X, 34}
+Node global: 51, Neighbours: 6, {X, 55, X, 50, X, 35}
+Node global: 52, Neighbours: 6, {53, 56, X, X, 48, 36}
+Node global: 53, Neighbours: 6, {54, 57, X, 52, 49, 37}
+Node global: 54, Neighbours: 6, {55, 58, X, 53, 50, 38}
+Node global: 55, Neighbours: 6, {X, 59, X, 54, 51, 39}
+Node global: 56, Neighbours: 6, {57, 60, X, X, 52, 40}
+Node global: 57, Neighbours: 6, {58, 61, X, 56, 53, 41}
+Node global: 58, Neighbours: 6, {59, 62, X, 57, 54, 42}
+Node global: 59, Neighbours: 6, {X, 63, X, 58, 55, 43}
+Node global: 60, Neighbours: 6, {61, X, X, X, 56, 44}
+Node global: 61, Neighbours: 6, {62, X, X, 60, 57, 45}
+Node global: 62, Neighbours: 6, {63, X, X, 61, 58, 46}
+Node global: 63, Neighbours: 6, {X, X, X, 62, 59, 47}
+
+Node global: 0, Elements: 8, {X, X, X, X, X, X, X, 0}
+Node global: 1, Elements: 8, {X, X, X, X, X, X, 0, 1}
+Node global: 2, Elements: 8, {X, X, X, X, X, X, 1, 2}
+Node global: 3, Elements: 8, {X, X, X, X, X, X, 2, X}
+Node global: 4, Elements: 8, {X, X, X, X, X, 0, X, 3}
+Node global: 5, Elements: 8, {X, X, X, X, 0, 1, 3, 4}
+Node global: 6, Elements: 8, {X, X, X, X, 1, 2, 4, 5}
+Node global: 7, Elements: 8, {X, X, X, X, 2, X, 5, X}
+Node global: 8, Elements: 8, {X, X, X, X, X, 3, X, 6}
+Node global: 9, Elements: 8, {X, X, X, X, 3, 4, 6, 7}
+Node global: 10, Elements: 8, {X, X, X, X, 4, 5, 7, 8}
+Node global: 11, Elements: 8, {X, X, X, X, 5, X, 8, X}
+Node global: 12, Elements: 8, {X, X, X, X, X, 6, X, X}
+Node global: 13, Elements: 8, {X, X, X, X, 6, 7, X, X}
+Node global: 14, Elements: 8, {X, X, X, X, 7, 8, X, X}
+Node global: 15, Elements: 8, {X, X, X, X, 8, X, X, X}
+Node global: 16, Elements: 8, {X, X, X, 0, X, X, X, 9}
+Node global: 17, Elements: 8, {X, X, 0, 1, X, X, 9, 10}
+Node global: 18, Elements: 8, {X, X, 1, 2, X, X, 10, 11}
+Node global: 19, Elements: 8, {X, X, 2, X, X, X, 11, X}
+Node global: 20, Elements: 8, {X, 0, X, 3, X, 9, X, 12}
+Node global: 21, Elements: 8, {0, 1, 3, 4, 9, 10, 12, 13}
+Node global: 22, Elements: 8, {1, 2, 4, 5, 10, 11, 13, 14}
+Node global: 23, Elements: 8, {2, X, 5, X, 11, X, 14, X}
+Node global: 24, Elements: 8, {X, 3, X, 6, X, 12, X, 15}
+Node global: 25, Elements: 8, {3, 4, 6, 7, 12, 13, 15, 16}
+Node global: 26, Elements: 8, {4, 5, 7, 8, 13, 14, 16, 17}
+Node global: 27, Elements: 8, {5, X, 8, X, 14, X, 17, X}
+Node global: 28, Elements: 8, {X, 6, X, X, X, 15, X, X}
+Node global: 29, Elements: 8, {6, 7, X, X, 15, 16, X, X}
+Node global: 30, Elements: 8, {7, 8, X, X, 16, 17, X, X}
+Node global: 31, Elements: 8, {8, X, X, X, 17, X, X, X}
+Node global: 32, Elements: 8, {X, X, X, 9, X, X, X, 18}
+Node global: 33, Elements: 8, {X, X, 9, 10, X, X, 18, 19}
+Node global: 34, Elements: 8, {X, X, 10, 11, X, X, 19, 20}
+Node global: 35, Elements: 8, {X, X, 11, X, X, X, 20, X}
+Node global: 36, Elements: 8, {X, 9, X, 12, X, 18, X, 21}
+Node global: 37, Elements: 8, {9, 10, 12, 13, 18, 19, 21, 22}
+Node global: 38, Elements: 8, {10, 11, 13, 14, 19, 20, 22, 23}
+Node global: 39, Elements: 8, {11, X, 14, X, 20, X, 23, X}
+Node global: 40, Elements: 8, {X, 12, X, 15, X, 21, X, 24}
+Node global: 41, Elements: 8, {12, 13, 15, 16, 21, 22, 24, 25}
+Node global: 42, Elements: 8, {13, 14, 16, 17, 22, 23, 25, 26}
+Node global: 43, Elements: 8, {14, X, 17, X, 23, X, 26, X}
+Node global: 44, Elements: 8, {X, 15, X, X, X, 24, X, X}
+Node global: 45, Elements: 8, {15, 16, X, X, 24, 25, X, X}
+Node global: 46, Elements: 8, {16, 17, X, X, 25, 26, X, X}
+Node global: 47, Elements: 8, {17, X, X, X, 26, X, X, X}
+Node global: 48, Elements: 8, {X, X, X, 18, X, X, X, X}
+Node global: 49, Elements: 8, {X, X, 18, 19, X, X, X, X}
+Node global: 50, Elements: 8, {X, X, 19, 20, X, X, X, X}
+Node global: 51, Elements: 8, {X, X, 20, X, X, X, X, X}
+Node global: 52, Elements: 8, {X, 18, X, 21, X, X, X, X}
+Node global: 53, Elements: 8, {18, 19, 21, 22, X, X, X, X}
+Node global: 54, Elements: 8, {19, 20, 22, 23, X, X, X, X}
+Node global: 55, Elements: 8, {20, X, 23, X, X, X, X, X}
+Node global: 56, Elements: 8, {X, 21, X, 24, X, X, X, X}
+Node global: 57, Elements: 8, {21, 22, 24, 25, X, X, X, X}
+Node global: 58, Elements: 8, {22, 23, 25, 26, X, X, X, X}
+Node global: 59, Elements: 8, {23, X, 26, X, X, X, X, X}
+Node global: 60, Elements: 8, {X, 24, X, X, X, X, X, X}
+Node global: 61, Elements: 8, {24, 25, X, X, X, X, X, X}
+Node global: 62, Elements: 8, {25, 26, X, X, X, X, X, X}
+Node global: 63, Elements: 8, {26, X, X, X, X, X, X, X}
+
+Node (0, 0, 0) -> global 0
+Node (1, 0, 0) -> global 1
+Node (2, 0, 0) -> global 2
+Node (3, 0, 0) -> global 3
+Node (0, 1, 0) -> global 4
+Node (1, 1, 0) -> global 5
+Node (2, 1, 0) -> global 6
+Node (3, 1, 0) -> global 7
+Node (0, 2, 0) -> global 8
+Node (1, 2, 0) -> global 9
+Node (2, 2, 0) -> global 10
+Node (3, 2, 0) -> global 11
+Node (0, 3, 0) -> global 12
+Node (1, 3, 0) -> global 13
+Node (2, 3, 0) -> global 14
+Node (3, 3, 0) -> global 15
+Node (0, 0, 1) -> global 16
+Node (1, 0, 1) -> global 17
+Node (2, 0, 1) -> global 18
+Node (3, 0, 1) -> global 19
+Node (0, 1, 1) -> global 20
+Node (1, 1, 1) -> global 21
+Node (2, 1, 1) -> global 22
+Node (3, 1, 1) -> global 23
+Node (0, 2, 1) -> global 24
+Node (1, 2, 1) -> global 25
+Node (2, 2, 1) -> global 26
+Node (3, 2, 1) -> global 27
+Node (0, 3, 1) -> global 28
+Node (1, 3, 1) -> global 29
+Node (2, 3, 1) -> global 30
+Node (3, 3, 1) -> global 31
+Node (0, 0, 2) -> global 32
+Node (1, 0, 2) -> global 33
+Node (2, 0, 2) -> global 34
+Node (3, 0, 2) -> global 35
+Node (0, 1, 2) -> global 36
+Node (1, 1, 2) -> global 37
+Node (2, 1, 2) -> global 38
+Node (3, 1, 2) -> global 39
+Node (0, 2, 2) -> global 40
+Node (1, 2, 2) -> global 41
+Node (2, 2, 2) -> global 42
+Node (3, 2, 2) -> global 43
+Node (0, 3, 2) -> global 44
+Node (1, 3, 2) -> global 45
+Node (2, 3, 2) -> global 46
+Node (3, 3, 2) -> global 47
+Node (0, 0, 3) -> global 48
+Node (1, 0, 3) -> global 49
+Node (2, 0, 3) -> global 50
+Node (3, 0, 3) -> global 51
+Node (0, 1, 3) -> global 52
+Node (1, 1, 3) -> global 53
+Node (2, 1, 3) -> global 54
+Node (3, 1, 3) -> global 55
+Node (0, 2, 3) -> global 56
+Node (1, 2, 3) -> global 57
+Node (2, 2, 3) -> global 58
+Node (3, 2, 3) -> global 59
+Node (0, 3, 3) -> global 60
+Node (1, 3, 3) -> global 61
+Node (2, 3, 3) -> global 62
+Node (3, 3, 3) -> global 63
+
+Node global 0 -> (0, 0, 0)
+Node global 1 -> (1, 0, 0)
+Node global 2 -> (2, 0, 0)
+Node global 3 -> (3, 0, 0)
+Node global 4 -> (0, 1, 0)
+Node global 5 -> (1, 1, 0)
+Node global 6 -> (2, 1, 0)
+Node global 7 -> (3, 1, 0)
+Node global 8 -> (0, 2, 0)
+Node global 9 -> (1, 2, 0)
+Node global 10 -> (2, 2, 0)
+Node global 11 -> (3, 2, 0)
+Node global 12 -> (0, 3, 0)
+Node global 13 -> (1, 3, 0)
+Node global 14 -> (2, 3, 0)
+Node global 15 -> (3, 3, 0)
+Node global 16 -> (0, 0, 1)
+Node global 17 -> (1, 0, 1)
+Node global 18 -> (2, 0, 1)
+Node global 19 -> (3, 0, 1)
+Node global 20 -> (0, 1, 1)
+Node global 21 -> (1, 1, 1)
+Node global 22 -> (2, 1, 1)
+Node global 23 -> (3, 1, 1)
+Node global 24 -> (0, 2, 1)
+Node global 25 -> (1, 2, 1)
+Node global 26 -> (2, 2, 1)
+Node global 27 -> (3, 2, 1)
+Node global 28 -> (0, 3, 1)
+Node global 29 -> (1, 3, 1)
+Node global 30 -> (2, 3, 1)
+Node global 31 -> (3, 3, 1)
+Node global 32 -> (0, 0, 2)
+Node global 33 -> (1, 0, 2)
+Node global 34 -> (2, 0, 2)
+Node global 35 -> (3, 0, 2)
+Node global 36 -> (0, 1, 2)
+Node global 37 -> (1, 1, 2)
+Node global 38 -> (2, 1, 2)
+Node global 39 -> (3, 1, 2)
+Node global 40 -> (0, 2, 2)
+Node global 41 -> (1, 2, 2)
+Node global 42 -> (2, 2, 2)
+Node global 43 -> (3, 2, 2)
+Node global 44 -> (0, 3, 2)
+Node global 45 -> (1, 3, 2)
+Node global 46 -> (2, 3, 2)
+Node global 47 -> (3, 3, 2)
+Node global 48 -> (0, 0, 3)
+Node global 49 -> (1, 0, 3)
+Node global 50 -> (2, 0, 3)
+Node global 51 -> (3, 0, 3)
+Node global 52 -> (0, 1, 3)
+Node global 53 -> (1, 1, 3)
+Node global 54 -> (2, 1, 3)
+Node global 55 -> (3, 1, 3)
+Node global 56 -> (0, 2, 3)
+Node global 57 -> (1, 2, 3)
+Node global 58 -> (2, 2, 3)
+Node global 59 -> (3, 2, 3)
+Node global 60 -> (0, 3, 3)
+Node global 61 -> (1, 3, 3)
+Node global 62 -> (2, 3, 3)
+Node global 63 -> (3, 3, 3)
+
+Element global: 0, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 3, 4, X, X, X, X, 9, 10, X, 12, 13}
+Element global: 1, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 0, 2, 3, 4, 5, X, X, X, 9, 10, 11, 12, 13, 14}
+Element global: 2, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, X, X, 1, X, 4, 5, X, X, X, X, 10, 11, X, 13, 14, X}
+Element global: 3, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 0, 1, X, 4, X, 6, 7, X, 9, 10, X, 12, 13, X, 15, 16}
+Element global: 4, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
+Element global: 5, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 1, 2, X, 4, X, 7, 8, X, 10, 11, X, 13, 14, X, 16, 17, X}
+Element global: 6, Neighbours: 26, {X, X, X, X, X, X, X, X, X, X, 3, 4, X, 7, X, X, X, X, 12, 13, X, 15, 16, X, X, X}
+Element global: 7, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 3, 4, 5, 6, 8, X, X, X, 12, 13, 14, 15, 16, 17, X, X, X}
+Element global: 8, Neighbours: 26, {X, X, X, X, X, X, X, X, X, 4, 5, X, 7, X, X, X, X, 13, 14, X, 16, 17, X, X, X, X}
+Element global: 9, Neighbours: 26, {X, X, X, X, 0, 1, X, 3, 4, X, X, X, X, 10, X, 12, 13, X, X, X, X, 18, 19, X, 21, 22}
+Element global: 10, Neighbours: 26, {X, X, X, 0, 1, 2, 3, 4, 5, X, X, X, 9, 11, 12, 13, 14, X, X, X, 18, 19, 20, 21, 22, 23}
+Element global: 11, Neighbours: 26, {X, X, X, 1, 2, X, 4, 5, X, X, X, X, 10, X, 13, 14, X, X, X, X, 19, 20, X, 22, 23, X}
+Element global: 12, Neighbours: 26, {X, 0, 1, X, 3, 4, X, 6, 7, X, 9, 10, X, 13, X, 15, 16, X, 18, 19, X, 21, 22, X, 24, 25}
+Element global: 13, Neighbours: 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}
+Element global: 14, Neighbours: 26, {1, 2, X, 4, 5, X, 7, 8, X, 10, 11, X, 13, X, 16, 17, X, 19, 20, X, 22, 23, X, 25, 26, X}
+Element global: 15, Neighbours: 26, {X, 3, 4, X, 6, 7, X, X, X, X, 12, 13, X, 16, X, X, X, X, 21, 22, X, 24, 25, X, X, X}
+Element global: 16, Neighbours: 26, {3, 4, 5, 6, 7, 8, X, X, X, 12, 13, 14, 15, 17, X, X, X, 21, 22, 23, 24, 25, 26, X, X, X}
+Element global: 17, Neighbours: 26, {4, 5, X, 7, 8, X, X, X, X, 13, 14, X, 16, X, X, X, X, 22, 23, X, 25, 26, X, X, X, X}
+Element global: 18, Neighbours: 26, {X, X, X, X, 9, 10, X, 12, 13, X, X, X, X, 19, X, 21, 22, X, X, X, X, X, X, X, X, X}
+Element global: 19, Neighbours: 26, {X, X, X, 9, 10, 11, 12, 13, 14, X, X, X, 18, 20, 21, 22, 23, X, X, X, X, X, X, X, X, X}
+Element global: 20, Neighbours: 26, {X, X, X, 10, 11, X, 13, 14, X, X, X, X, 19, X, 22, 23, X, X, X, X, X, X, X, X, X, X}
+Element global: 21, Neighbours: 26, {X, 9, 10, X, 12, 13, X, 15, 16, X, 18, 19, X, 22, X, 24, 25, X, X, X, X, X, X, X, X, X}
+Element global: 22, Neighbours: 26, {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, X, X, X, X, X, X, X, X, X}
+Element global: 23, Neighbours: 26, {10, 11, X, 13, 14, X, 16, 17, X, 19, 20, X, 22, X, 25, 26, X, X, X, X, X, X, X, X, X, X}
+Element global: 24, Neighbours: 26, {X, 12, 13, X, 15, 16, X, X, X, X, 21, 22, X, 25, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 25, Neighbours: 26, {12, 13, 14, 15, 16, 17, X, X, X, 21, 22, 23, 24, 26, X, X, X, X, X, X, X, X, X, X, X, X}
+Element global: 26, Neighbours: 26, {13, 14, X, 16, 17, X, X, X, X, 22, 23, X, 25, X, X, X, X, X, X, X, X, X, X, X, X, X}
+
+Element global: 0, Nodes: 8, {0, 1, 5, 4, 16, 17, 21, 20}
+Element global: 1, Nodes: 8, {1, 2, 6, 5, 17, 18, 22, 21}
+Element global: 2, Nodes: 8, {2, 3, 7, 6, 18, 19, 23, 22}
+Element global: 3, Nodes: 8, {4, 5, 9, 8, 20, 21, 25, 24}
+Element global: 4, Nodes: 8, {5, 6, 10, 9, 21, 22, 26, 25}
+Element global: 5, Nodes: 8, {6, 7, 11, 10, 22, 23, 27, 26}
+Element global: 6, Nodes: 8, {8, 9, 13, 12, 24, 25, 29, 28}
+Element global: 7, Nodes: 8, {9, 10, 14, 13, 25, 26, 30, 29}
+Element global: 8, Nodes: 8, {10, 11, 15, 14, 26, 27, 31, 30}
+Element global: 9, Nodes: 8, {16, 17, 21, 20, 32, 33, 37, 36}
+Element global: 10, Nodes: 8, {17, 18, 22, 21, 33, 34, 38, 37}
+Element global: 11, Nodes: 8, {18, 19, 23, 22, 34, 35, 39, 38}
+Element global: 12, Nodes: 8, {20, 21, 25, 24, 36, 37, 41, 40}
+Element global: 13, Nodes: 8, {21, 22, 26, 25, 37, 38, 42, 41}
+Element global: 14, Nodes: 8, {22, 23, 27, 26, 38, 39, 43, 42}
+Element global: 15, Nodes: 8, {24, 25, 29, 28, 40, 41, 45, 44}
+Element global: 16, Nodes: 8, {25, 26, 30, 29, 41, 42, 46, 45}
+Element global: 17, Nodes: 8, {26, 27, 31, 30, 42, 43, 47, 46}
+Element global: 18, Nodes: 8, {32, 33, 37, 36, 48, 49, 53, 52}
+Element global: 19, Nodes: 8, {33, 34, 38, 37, 49, 50, 54, 53}
+Element global: 20, Nodes: 8, {34, 35, 39, 38, 50, 51, 55, 54}
+Element global: 21, Nodes: 8, {36, 37, 41, 40, 52, 53, 57, 56}
+Element global: 22, Nodes: 8, {37, 38, 42, 41, 53, 54, 58, 57}
+Element global: 23, Nodes: 8, {38, 39, 43, 42, 54, 55, 59, 58}
+Element global: 24, Nodes: 8, {40, 41, 45, 44, 56, 57, 61, 60}
+Element global: 25, Nodes: 8, {41, 42, 46, 45, 57, 58, 62, 61}
+Element global: 26, Nodes: 8, {42, 43, 47, 46, 58, 59, 63, 62}
+
+Element (0, 0, 0) -> global 0
+Element (1, 0, 0) -> global 1
+Element (2, 0, 0) -> global 2
+Element (0, 1, 0) -> global 3
+Element (1, 1, 0) -> global 4
+Element (2, 1, 0) -> global 5
+Element (0, 2, 0) -> global 6
+Element (1, 2, 0) -> global 7
+Element (2, 2, 0) -> global 8
+Element (0, 0, 1) -> global 9
+Element (1, 0, 1) -> global 10
+Element (2, 0, 1) -> global 11
+Element (0, 1, 1) -> global 12
+Element (1, 1, 1) -> global 13
+Element (2, 1, 1) -> global 14
+Element (0, 2, 1) -> global 15
+Element (1, 2, 1) -> global 16
+Element (2, 2, 1) -> global 17
+Element (0, 0, 2) -> global 18
+Element (1, 0, 2) -> global 19
+Element (2, 0, 2) -> global 20
+Element (0, 1, 2) -> global 21
+Element (1, 1, 2) -> global 22
+Element (2, 1, 2) -> global 23
+Element (0, 2, 2) -> global 24
+Element (1, 2, 2) -> global 25
+Element (2, 2, 2) -> global 26
+
+Element global 0 -> (0, 0, 0)
+Element global 1 -> (1, 0, 0)
+Element global 2 -> (2, 0, 0)
+Element global 3 -> (0, 1, 0)
+Element global 4 -> (1, 1, 0)
+Element global 5 -> (2, 1, 0)
+Element global 6 -> (0, 2, 0)
+Element global 7 -> (1, 2, 0)
+Element global 8 -> (2, 2, 0)
+Element global 9 -> (0, 0, 1)
+Element global 10 -> (1, 0, 1)
+Element global 11 -> (2, 0, 1)
+Element global 12 -> (0, 1, 1)
+Element global 13 -> (1, 1, 1)
+Element global 14 -> (2, 1, 1)
+Element global 15 -> (0, 2, 1)
+Element global 16 -> (1, 2, 1)
+Element global 17 -> (2, 2, 1)
+Element global 18 -> (0, 0, 2)
+Element global 19 -> (1, 0, 2)
+Element global 20 -> (2, 0, 2)
+Element global 21 -> (0, 1, 2)
+Element global 22 -> (1, 1, 2)
+Element global 23 -> (2, 1, 2)
+Element global 24 -> (0, 2, 2)
+Element global 25 -> (1, 2, 2)
+Element global 26 -> (2, 2, 2)
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testHexaMeshTopology " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,15 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Element corner indices:
+	Element 0 : { 0, 1, 3 }
+	Element 1 : { 1, 4, 3 }
+	Element 2 : { 1, 2, 4 }
+	Element 3 : { 2, 5, 4 }
+
+Corner element indices:
+	Corner 0 : { 0 }
+	Corner 1 : { 0, 1, 2 }
+	Corner 2 : { 2, 3 }
+	Corner 3 : { 0, 1 }
+	Corner 4 : { 1, 2, 3 }
+	Corner 5 : { 3 }
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testIrregEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testIrregEL.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	Dictionary*		dictionary;
+	Geometry*		geometry;
+	Topology*		topology;
+	ElementLayout*		eLayout;
+	Element_GlobalIndex	e_I;
+	Index			i;
+	XML_IO_Handler*		io_handler;
+	
+	/* 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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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/trisurf.xml", dictionary );
+	
+	geometry = (Geometry*)IrregGeometry_New( "irregGeometry", dictionary, "geometry" );
+	topology = (Topology*)IrregTopology_New( "IrregTopology", dictionary, "topology" );
+	eLayout = (ElementLayout*)IrregEL_New( "IrregEL", dictionary, geometry, topology, "elements" );
+	
+	/*
+	ElementLayout_Build( eLayout, meshDecomp );
+	*/
+	
+	printf( "Element corner indices:\n" );
+	for( e_I = 0; e_I < eLayout->elementCount; e_I++ ) {
+		Index* corners = Memory_Alloc_Array( Index, eLayout->elementCornerCount, "corners" );
+		
+		eLayout->buildCornerIndices( eLayout, e_I, corners );
+		
+		printf( "\tElement %u : { %u", e_I, corners[0] );
+		for( i = 1; i < eLayout->elementCornerCount; i++ )
+			printf( ", %u", corners[i] );
+		printf( " }\n" );
+	}
+	printf( "\n" );
+	
+	printf( "Corner element indices:\n" );
+	for( i = 0; i < eLayout->cornerCount; i++ ) {
+		Element_GlobalIndex	elementCnt = eLayout->cornerElementCount( eLayout, i );
+		Element_GlobalIndex*	elements = Memory_Alloc_Array( Element_GlobalIndex, elementCnt, "elements" );
+		
+		eLayout->buildCornerElements( eLayout, i, elements );
+		
+		printf( "\tCorner %u : { %u", i, elements[0] );
+		for( e_I = 1; e_I < elementCnt; e_I++ )
+			printf( ", %u", elements[e_I] );
+		printf( " }\n" );
+	}
+	printf( "\n" );
+	
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( geometry );
+	Stg_Class_Delete( topology );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf-withLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf-withLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf-withLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,259 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testIrregularMeshDecomp-triSurf-withLayout.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <mpi.h>
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Dictionary*		dictionary;
+	MeshTopology*		mt, *rmt;
+	MeshGeometry*		mg, *rmg;
+	MeshDecomp*		md, *rmd;
+	MeshLayout*		rml;
+	ShadowIndex		sd;
+	XML_IO_Handler*		io_handler = XML_IO_Handler_New();
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	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( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	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 ) );
+	IO_Handler_ReadAllFromFile(io_handler, "data/surface.xml", dictionary);
+	
+	rmt = (MeshTopology*)HexaMeshTopology_New(dictionary);
+	rmg = (MeshGeometry*)HexaMeshGeometry_New(dictionary);
+	
+	mt = (MeshTopology*)TriSurfTopology_New(dictionary, "imElements");
+	mg = (MeshGeometry*)TriSurfGeometry_New(dictionary, "imNodes");
+	
+	for (sd = 0; sd < 2; sd++)
+	{
+		Dictionary_Set( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( sd ) );
+	
+		rmd = (MeshDecomp*)RegularMeshDecomp_New(dictionary, MPI_COMM_WORLD, rmt);
+		rml = MeshLayout_New(rmt, rmg, rmd);
+		md = (MeshDecomp*)IrregularMeshDecomp_New_FromMeshLayout(dictionary, MPI_COMM_WORLD, mt, mg, rml);
+					
+		if (rank == procToWatch)
+		{
+			Node_GlobalIndex	gNode_I;
+			Node_LocalIndex		lNode_I;
+			Node_ShadowIndex	sNode_I;
+			Node_DomainIndex	dNode_I;
+			Element_GlobalIndex	gElt_I;
+			Element_LocalIndex	lElt_I;
+			Element_ShadowIndex	sElt_I;
+			Element_DomainIndex	dElt_I;
+						
+			Print(md);
+			printf("\n");
+			
+			for (gNode_I = 0; gNode_I < md->nodeGlobalCount; gNode_I++)
+			{
+				Node_LocalIndex		localNode;
+				Node_ShadowIndex	shadowNode;
+				Node_DomainIndex	domainNode;
+							
+				localNode = md->nodeMapGlobalToLocal(md, gNode_I);
+				shadowNode = md->nodeMapGlobalToShadow(md, gNode_I);
+				domainNode = md->nodeMapGlobalToDomain(md, gNode_I);
+				printf("Node, global: %u - ", gNode_I);
+				if (localNode < md->nodeLocalCount)
+					printf("local: %u - ", localNode);
+				else
+					printf("local: X - ");
+				if (shadowNode < md->nodeShadowCount)
+					printf("shadow: %u - ", shadowNode);
+				else
+					printf("shadow: X - ");
+				if (domainNode < md->nodeDomainCount)
+					printf("domain: %u\n", domainNode);
+				else
+					printf("domain: X\n");
+			}
+			printf("\n");
+						
+			for (lNode_I = 0; lNode_I < md->nodeLocalCount; lNode_I++)
+			{
+				Node_GlobalIndex	globalNode;
+				
+				globalNode = md->nodeMapLocalToGlobal(md, lNode_I);
+				printf("Node, local: %u - ", lNode_I);
+				if (globalNode < md->nodeGlobalCount)
+					printf("global: %u\n", globalNode);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+					
+			for (sNode_I = 0; sNode_I < md->nodeShadowCount; sNode_I++)
+			{
+				Node_GlobalIndex	globalNode;
+							
+				globalNode = md->nodeMapShadowToGlobal(md, sNode_I);
+				printf("Node, shadow: %u - ", sNode_I);
+				if (globalNode < md->nodeGlobalCount)
+					printf("global: %u\n", globalNode);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (dNode_I = 0; dNode_I < md->nodeLocalCount; dNode_I++)
+			{
+				Node_GlobalIndex	globalNode;
+					
+				globalNode = md->nodeMapDomainToGlobal(md, dNode_I);
+				printf("Node, domain: %u - ", dNode_I);
+				if (globalNode < md->nodeGlobalCount)
+					printf("global: %u\n", globalNode);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (gElt_I = 0; gElt_I < md->elementGlobalCount; gElt_I++)
+			{
+				Element_LocalIndex	localElt;
+				Element_ShadowIndex	shadowElt;
+				Element_DomainIndex	domainElt;
+							
+				localElt = md->elementMapGlobalToLocal(md, gElt_I);
+				shadowElt = md->elementMapGlobalToShadow(md, gElt_I);
+				domainElt = md->elementMapGlobalToDomain(md, gElt_I);
+				printf("Element, global: %u - ", gElt_I);
+				if (localElt < md->elementLocalCount)
+					printf("local: %u - ", localElt);
+				else
+					printf("local: X - ");
+				if (shadowElt < md->elementShadowCount)
+					printf("shadow: %u - ", shadowElt);
+				else
+					printf("shadow: X - ");
+				if (domainElt < md->elementDomainCount)
+					printf("domain: %u\n", domainElt);
+				else
+					printf("domain: X\n");
+			}
+			printf("\n");
+						
+			for (lElt_I = 0; lElt_I < md->elementLocalCount; lElt_I++)
+			{
+				Element_GlobalIndex	globalElement;
+						
+				globalElement = md->elementMapLocalToGlobal(md, lElt_I);
+				printf("Element, local: %u - ", lElt_I);
+				if (globalElement < md->elementGlobalCount)
+					printf("global: %u\n", globalElement);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (sElt_I = 0; sElt_I < md->elementShadowCount; sElt_I++)
+			{
+				Element_GlobalIndex	globalElement;
+							
+				globalElement = md->elementMapShadowToGlobal(md, sElt_I);
+				printf("Element, shadow: %u - ", sElt_I);
+				if (globalElement < md->elementGlobalCount)
+					printf("global: %u\n", globalElement);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (dElt_I = 0; dElt_I < md->elementLocalCount; dElt_I++)
+			{
+				Element_GlobalIndex	globalElement;
+					
+				globalElement = md->elementMapDomainToGlobal(md, dElt_I);
+				printf("Element, domain: %u - ", dElt_I);
+				if (globalElement < md->elementGlobalCount)
+					printf("global: %u\n", globalElement);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+		}
+		
+		Stg_Class_Delete(md);
+		Stg_Class_Delete(rml);
+		Stg_Class_Delete(rmd);
+	}
+	
+	Stg_Class_Delete(mg);
+	Stg_Class_Delete(mt);
+	
+	Stg_Class_Delete(rmg);
+	Stg_Class_Delete(rmt);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testIrregularMeshDecomp-triSurf.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <mpi.h>
+
+
+int main(int argc, char *argv[])
+{
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Dictionary*		dictionary;
+	MeshTopology*		mt;
+	MeshGeometry*		mg;
+	MeshDecomp*		md;
+	ShadowIndex		sd;
+	XML_IO_Handler*		io_handler = XML_IO_Handler_New();
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	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, "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 ) );
+	IO_Handler_ReadAllFromFile(io_handler, "data/surface.xml", dictionary);
+	
+	mt = (MeshTopology*)TriSurfTopology_New(dictionary, "imElements");
+	mg = (MeshGeometry*)TriSurfGeometry_New(dictionary, "imNodes");
+	
+	for (sd = 0; sd < 2; sd++)
+	{
+		Dictionary_Set( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( sd ) );
+	
+		md = (MeshDecomp*)IrregularMeshDecomp_New(dictionary, MPI_COMM_WORLD, mt, mg);
+					
+		if (rank == procToWatch)
+		{
+			Node_GlobalIndex	gNode_I;
+			Node_LocalIndex		lNode_I;
+			Node_ShadowIndex	sNode_I;
+			Node_DomainIndex	dNode_I;
+			Element_GlobalIndex	gElt_I;
+			Element_LocalIndex	lElt_I;
+			Element_ShadowIndex	sElt_I;
+			Element_DomainIndex	dElt_I;
+						
+			Print(md);
+			printf("\n");
+			
+			for (gNode_I = 0; gNode_I < md->nodeGlobalCount; gNode_I++)
+			{
+				Node_LocalIndex		localNode;
+				Node_ShadowIndex	shadowNode;
+				Node_DomainIndex	domainNode;
+							
+				localNode = md->nodeMapGlobalToLocal(md, gNode_I);
+				shadowNode = md->nodeMapGlobalToShadow(md, gNode_I);
+				domainNode = md->nodeMapGlobalToDomain(md, gNode_I);
+				printf("Node, global: %u - ", gNode_I);
+				if (localNode < md->nodeLocalCount)
+					printf("local: %u - ", localNode);
+				else
+					printf("local: X - ");
+				if (shadowNode < md->nodeShadowCount)
+					printf("shadow: %u - ", shadowNode);
+				else
+					printf("shadow: X - ");
+				if (domainNode < md->nodeDomainCount)
+					printf("domain: %u\n", domainNode);
+				else
+					printf("domain: X\n");
+			}
+			printf("\n");
+						
+			for (lNode_I = 0; lNode_I < md->nodeLocalCount; lNode_I++)
+			{
+				Node_GlobalIndex	globalNode;
+				
+				globalNode = md->nodeMapLocalToGlobal(md, lNode_I);
+				printf("Node, local: %u - ", lNode_I);
+				if (globalNode < md->nodeGlobalCount)
+					printf("global: %u\n", globalNode);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+					
+			for (sNode_I = 0; sNode_I < md->nodeShadowCount; sNode_I++)
+			{
+				Node_GlobalIndex	globalNode;
+							
+				globalNode = md->nodeMapShadowToGlobal(md, sNode_I);
+				printf("Node, shadow: %u - ", sNode_I);
+				if (globalNode < md->nodeGlobalCount)
+					printf("global: %u\n", globalNode);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (dNode_I = 0; dNode_I < md->nodeLocalCount; dNode_I++)
+			{
+				Node_GlobalIndex	globalNode;
+					
+				globalNode = md->nodeMapDomainToGlobal(md, dNode_I);
+				printf("Node, domain: %u - ", dNode_I);
+				if (globalNode < md->nodeGlobalCount)
+					printf("global: %u\n", globalNode);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (gElt_I = 0; gElt_I < md->elementGlobalCount; gElt_I++)
+			{
+				Element_LocalIndex	localElt;
+				Element_ShadowIndex	shadowElt;
+				Element_DomainIndex	domainElt;
+							
+				localElt = md->elementMapGlobalToLocal(md, gElt_I);
+				shadowElt = md->elementMapGlobalToShadow(md, gElt_I);
+				domainElt = md->elementMapGlobalToDomain(md, gElt_I);
+				printf("Element, global: %u - ", gElt_I);
+				if (localElt < md->elementLocalCount)
+					printf("local: %u - ", localElt);
+				else
+					printf("local: X - ");
+				if (shadowElt < md->elementShadowCount)
+					printf("shadow: %u - ", shadowElt);
+				else
+					printf("shadow: X - ");
+				if (domainElt < md->elementDomainCount)
+					printf("domain: %u\n", domainElt);
+				else
+					printf("domain: X\n");
+			}
+			printf("\n");
+						
+			for (lElt_I = 0; lElt_I < md->elementLocalCount; lElt_I++)
+			{
+				Element_GlobalIndex	globalElement;
+						
+				globalElement = md->elementMapLocalToGlobal(md, lElt_I);
+				printf("Element, local: %u - ", lElt_I);
+				if (globalElement < md->elementGlobalCount)
+					printf("global: %u\n", globalElement);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (sElt_I = 0; sElt_I < md->elementShadowCount; sElt_I++)
+			{
+				Element_GlobalIndex	globalElement;
+							
+				globalElement = md->elementMapShadowToGlobal(md, sElt_I);
+				printf("Element, shadow: %u - ", sElt_I);
+				if (globalElement < md->elementGlobalCount)
+					printf("global: %u\n", globalElement);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+						
+			for (dElt_I = 0; dElt_I < md->elementLocalCount; dElt_I++)
+			{
+				Element_GlobalIndex	globalElement;
+					
+				globalElement = md->elementMapDomainToGlobal(md, dElt_I);
+				printf("Element, domain: %u - ", dElt_I);
+				if (globalElement < md->elementGlobalCount)
+					printf("global: %u\n", globalElement);
+				else
+					printf("global: X\n");
+			}
+			printf("\n");
+		}
+		
+		Stg_Class_Delete(md);
+	}
+	
+	Stg_Class_Delete(mg);
+	Stg_Class_Delete(mt);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+Watching rank 0
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Building mesh:
+Done.
+partitionedAxis: { False, False, False }
+partitionCounts: { 1, 1, 1 }
+elementGlobalCounts: { 32, 32, 32 }
+	elementLocalCounts[0]: { 32, 32, 32 }
+nodeGlobalCounts: { 33, 33, 33 }
+	nodeLocalCounts[0]: { 33, 33, 33 }

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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-large " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+Watching rank 0
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Building mesh:
+Done.
+partitionedAxis: { True, False, False }
+partitionCounts: { 4, 1, 1 }
+elementGlobalCounts: { 32, 32, 32 }
+	elementLocalCounts[0]: { 8, 32, 32 }
+	elementLocalCounts[1]: { 8, 32, 32 }
+	elementLocalCounts[2]: { 8, 32, 32 }
+	elementLocalCounts[3]: { 8, 32, 32 }
+nodeGlobalCounts: { 33, 33, 33 }
+	nodeLocalCounts[0]: { 9, 33, 33 }
+	nodeLocalCounts[1]: { 9, 33, 33 }
+	nodeLocalCounts[2]: { 9, 33, 33 }
+	nodeLocalCounts[3]: { 9, 33, 33 }

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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-large " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testMesh-large.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.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"
+
+struct _Node
+{
+	double temp;
+};
+
+
+struct _Element
+{
+	double temp;
+};
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			numProcessors;
+	int			procToWatch;
+	Dictionary*		dictionary;
+	ExtensionManager_Register*	extensionMgr_Register;
+	Topology*		nTopology;
+	ElementLayout*		eLayout;
+	NodeLayout*		nLayout;
+	HexaMD*		decomp;
+	MeshLayout*		meshLayout;
+	Mesh*			mesh;
+	
+	/* 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 );
+	
+	procToWatch = (argc >= 2) ? atoi( argv[1] ) : 0;
+	
+	if ( rank == procToWatch ) printf( "Watching rank %d\n", rank );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	dictionary = Dictionary_New();
+	/* Use default settings ... see if not having G2L slows us down too much. */
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 33 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 33 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 33 ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "buildElementNodeTbl", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "buildElementNeighbourTbl", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "buildNodeElementTbl", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "buildNodeNeighbourTbl", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnNode", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool( True ) );
+	
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "PPHexaEL", 3, dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	decomp = HexaMD_New( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout );
+	meshLayout = MeshLayout_New( "MeshLayout", eLayout, nLayout, (MeshDecomp*)decomp );
+	
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", meshLayout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	if ( rank == procToWatch ) printf( "Building mesh:\n" );
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	if ( rank == procToWatch ) printf( "Done.\n" );
+	if ( rank == procToWatch ) {
+		Partition_Index proc_I;
+
+		printf( "partitionedAxis: { %s, %s, %s }\n", decomp->partitionedAxis[0] ? "True" : "False", 
+			decomp->partitionedAxis[1] ? "True" : "False", decomp->partitionedAxis[2] ? "True" : "False" );
+		printf( "partitionCounts: { %u, %u, %u }\n", decomp->partition3DCounts[0], decomp->partition3DCounts[1], 
+			decomp->partition3DCounts[2] );
+		
+		printf( "elementGlobalCounts: { %u, %u, %u }\n", decomp->elementGlobal3DCounts[0], decomp->elementGlobal3DCounts[1], 
+			decomp->elementGlobal3DCounts[2] );
+		for( proc_I = 0; proc_I < decomp->procsInUse; proc_I++ ) {
+			printf( "\telementLocalCounts[%u]: { %u, %u, %u }\n", proc_I, decomp->elementLocal3DCounts[proc_I][0], 
+				decomp->elementLocal3DCounts[proc_I][1], decomp->elementLocal3DCounts[proc_I][2] );
+		}
+		
+		printf( "nodeGlobalCounts: { %u, %u, %u }\n", decomp->nodeGlobal3DCounts[0], decomp->nodeGlobal3DCounts[1], 
+			decomp->nodeGlobal3DCounts[2] );
+		for( proc_I = 0; proc_I < decomp->procsInUse; proc_I++ ) {
+			printf( "\tnodeLocalCounts[%u]: { %u, %u, %u }\n", proc_I, decomp->nodeLocal3DCounts[proc_I][0], 
+				decomp->nodeLocal3DCounts[proc_I][1], decomp->nodeLocal3DCounts[proc_I][2] );
+		}
+	}
+	
+	Stg_Class_Delete( mesh );
+	Stg_Class_Delete( extensionMgr_Register );
+	Stg_Class_Delete( meshLayout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,428 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f0f0)
+Stg_Component (ptr): 0x805f0f0
+Stg_Object (ptr): 0x805f0f0
+	Stg_Class (ptr): 0x805f0f0
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f881dd
+		_print (func ptr): 0xb7f88a6a
+		_copy (func ptr): 0xb7f89c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8751c
+	_construct (func ptr): 0xb7f8800e
+	_build (func ptr): 0xb7f8a322
+	_initialise (func ptr): 0xb7f8b214
+	_execute (func ptr): 0xb7f8b219
+	_destroy (func ptr): 0xb7f881d8
+	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): 0x805ee18
+Extension (ptr):0x805f4c0
+Stg_Object (ptr): 0x805f4c0
+	Stg_Class (ptr): 0x805f4c0
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f00018
+		_print (func ptr): 0xb7f00066
+		_copy (func ptr): 0xb7f00200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f520
+Stg_ObjectList (ptr):0x805f520
+	Stg_Class (ptr): 0x805f520
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f31f3e
+		_print (func ptr): 0xb7f31f75
+		_copy (func ptr): 0xb7f32217
+	_append(func ptr): 0xb7f32e7b
+	_prepend(func ptr): 0xb7f32f41
+	_replaceAll(func ptr): 0xb7f33005
+	_replace(func ptr): 0xb7f330be
+	_insertBefore(func ptr): 0xb7f3325b
+	_insertAfter(func ptr): 0xb7f33416
+	_remove(func ptr): 0xb7f335d3
+	_getIndex(func ptr): 0xb7f33679
+	_get(func ptr): 0xb7f33727
+	_allocMoreMemory(func ptr): 0xb7f338fa
+	_insertAtIndex(func ptr): 0xb7f33980
+	_removeByIndex(func ptr): 0xb7f339fe
+	_deleteAllObjects(func ptr): 0xb7f3387b
+	_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):0x805f5c0
+Stg_Object (ptr): 0x805f5c0
+	Stg_Class (ptr): 0x805f5c0
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f00018
+		_print (func ptr): 0xb7f00066
+		_copy (func ptr): 0xb7f00200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f638
+Stg_ObjectList (ptr):0x805f638
+	Stg_Class (ptr): 0x805f638
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f31f3e
+		_print (func ptr): 0xb7f31f75
+		_copy (func ptr): 0xb7f32217
+	_append(func ptr): 0xb7f32e7b
+	_prepend(func ptr): 0xb7f32f41
+	_replaceAll(func ptr): 0xb7f33005
+	_replace(func ptr): 0xb7f330be
+	_insertBefore(func ptr): 0xb7f3325b
+	_insertAfter(func ptr): 0xb7f33416
+	_remove(func ptr): 0xb7f335d3
+	_getIndex(func ptr): 0xb7f33679
+	_get(func ptr): 0xb7f33727
+	_allocMoreMemory(func ptr): 0xb7f338fa
+	_insertAtIndex(func ptr): 0xb7f33980
+	_removeByIndex(func ptr): 0xb7f339fe
+	_deleteAllObjects(func ptr): 0xb7f3387b
+	_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): 0x805fe68
+	nodeLocalCount: 64
+	nodeDomainCount: 64
+	nodeShadowCount: 0
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060078
+	nodeCoord[0-64]:   (0.00,0.00,0.00), (0.33,0.00,0.00), (0.67,0.00,0.00), (1.00,0.00,0.00), (0.00,0.33,0.00), (0.33,0.33,0.00), (0.67,0.33,0.00), (1.00,0.33,0.00), (0.00,0.67,0.00), (0.33,0.67,0.00), (0.67,0.67,0.00), (1.00,0.67,0.00), (0.00,1.00,0.00), (0.33,1.00,0.00), (0.67,1.00,0.00), (1.00,1.00,0.00), (0.00,0.00,0.33), (0.33,0.00,0.33), (0.67,0.00,0.33), (1.00,0.00,0.33), (0.00,0.33,0.33), (0.33,0.33,0.33), (0.67,0.33,0.33), (1.00,0.33,0.33), (0.00,0.67,0.33), (0.33,0.67,0.33), (0.67,0.67,0.33), (1.00,0.67,0.33), (0.00,1.00,0.33), (0.33,1.00,0.33), (0.67,1.00,0.33), (1.00,1.00,0.33), (0.00,0.00,0.67), (0.33,0.00,0.67), (0.67,0.00,0.67), (1.00,0.00,0.67), (0.00,0.33,0.67), (0.33,0.33,0.67), (0.67,0.33,0.67), (1.00,0.33,0.67), (0.00,0.67,0.67), (0.33,0.67,0.67), (0.67,0.67,0.67), (1.00,0.67,0.67), (0.00,1.00,0.67), (0.33,1.00,0.67), (0.67,1.00,0.67), (1.00,1.00,0.67), (0.00,0.00,1.00), (0.33,0.00,1.00), (0.67,0.00,1.00), (1.00,0.00,1.00), (0.00,0.33,1.00), (0.33,0.33,1.00), (0.67,0.33,1.00), (1.00,0.33,1.00), (0.00,0.67,1.00), (0.33,0.67,1.00), (0.67,0.67,1.00), (1.00,0.67,1.00), (0.00,1.00,1.00), (0.33,1.00,1.00), (0.67,1.00,1.00), (1.00,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060688
+	nodeL2G[0-64]:   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 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060688
+	nodeD2G[0-64]:   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 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060798
+	nodeG2L[0-64]:   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 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060798
+	nodeG2D[0-64]:   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 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x80608a8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x80609b8
+	nodeNeighbourTbl[0-64]:
+		nodeNeighbourTbl[0][0-6]: 001 004 016 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 002 005 017 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 006 018 001 064 064 
+		nodeNeighbourTbl[3][0-6]: 064 007 019 002 064 064 
+		nodeNeighbourTbl[4][0-6]: 005 008 020 064 000 064 
+		nodeNeighbourTbl[5][0-6]: 006 009 021 004 001 064 
+		nodeNeighbourTbl[6][0-6]: 007 010 022 005 002 064 
+		nodeNeighbourTbl[7][0-6]: 064 011 023 006 003 064 
+		nodeNeighbourTbl[8][0-6]: 009 012 024 064 004 064 
+		nodeNeighbourTbl[9][0-6]: 010 013 025 008 005 064 
+		nodeNeighbourTbl[10][0-6]: 011 014 026 009 006 064 
+		nodeNeighbourTbl[11][0-6]: 064 015 027 010 007 064 
+		nodeNeighbourTbl[12][0-6]: 013 064 028 064 008 064 
+		nodeNeighbourTbl[13][0-6]: 014 064 029 012 009 064 
+		nodeNeighbourTbl[14][0-6]: 015 064 030 013 010 064 
+		nodeNeighbourTbl[15][0-6]: 064 064 031 014 011 064 
+		nodeNeighbourTbl[16][0-6]: 017 020 032 064 064 000 
+		nodeNeighbourTbl[17][0-6]: 018 021 033 016 064 001 
+		nodeNeighbourTbl[18][0-6]: 019 022 034 017 064 002 
+		nodeNeighbourTbl[19][0-6]: 064 023 035 018 064 003 
+		nodeNeighbourTbl[20][0-6]: 021 024 036 064 016 004 
+		nodeNeighbourTbl[21][0-6]: 022 025 037 020 017 005 
+		nodeNeighbourTbl[22][0-6]: 023 026 038 021 018 006 
+		nodeNeighbourTbl[23][0-6]: 064 027 039 022 019 007 
+		nodeNeighbourTbl[24][0-6]: 025 028 040 064 020 008 
+		nodeNeighbourTbl[25][0-6]: 026 029 041 024 021 009 
+		nodeNeighbourTbl[26][0-6]: 027 030 042 025 022 010 
+		nodeNeighbourTbl[27][0-6]: 064 031 043 026 023 011 
+		nodeNeighbourTbl[28][0-6]: 029 064 044 064 024 012 
+		nodeNeighbourTbl[29][0-6]: 030 064 045 028 025 013 
+		nodeNeighbourTbl[30][0-6]: 031 064 046 029 026 014 
+		nodeNeighbourTbl[31][0-6]: 064 064 047 030 027 015 
+		nodeNeighbourTbl[32][0-6]: 033 036 048 064 064 016 
+		nodeNeighbourTbl[33][0-6]: 034 037 049 032 064 017 
+		nodeNeighbourTbl[34][0-6]: 035 038 050 033 064 018 
+		nodeNeighbourTbl[35][0-6]: 064 039 051 034 064 019 
+		nodeNeighbourTbl[36][0-6]: 037 040 052 064 032 020 
+		nodeNeighbourTbl[37][0-6]: 038 041 053 036 033 021 
+		nodeNeighbourTbl[38][0-6]: 039 042 054 037 034 022 
+		nodeNeighbourTbl[39][0-6]: 064 043 055 038 035 023 
+		nodeNeighbourTbl[40][0-6]: 041 044 056 064 036 024 
+		nodeNeighbourTbl[41][0-6]: 042 045 057 040 037 025 
+		nodeNeighbourTbl[42][0-6]: 043 046 058 041 038 026 
+		nodeNeighbourTbl[43][0-6]: 064 047 059 042 039 027 
+		nodeNeighbourTbl[44][0-6]: 045 064 060 064 040 028 
+		nodeNeighbourTbl[45][0-6]: 046 064 061 044 041 029 
+		nodeNeighbourTbl[46][0-6]: 047 064 062 045 042 030 
+		nodeNeighbourTbl[47][0-6]: 064 064 063 046 043 031 
+		nodeNeighbourTbl[48][0-6]: 049 052 064 064 064 032 
+		nodeNeighbourTbl[49][0-6]: 050 053 064 048 064 033 
+		nodeNeighbourTbl[50][0-6]: 051 054 064 049 064 034 
+		nodeNeighbourTbl[51][0-6]: 064 055 064 050 064 035 
+		nodeNeighbourTbl[52][0-6]: 053 056 064 064 048 036 
+		nodeNeighbourTbl[53][0-6]: 054 057 064 052 049 037 
+		nodeNeighbourTbl[54][0-6]: 055 058 064 053 050 038 
+		nodeNeighbourTbl[55][0-6]: 064 059 064 054 051 039 
+		nodeNeighbourTbl[56][0-6]: 057 060 064 064 052 040 
+		nodeNeighbourTbl[57][0-6]: 058 061 064 056 053 041 
+		nodeNeighbourTbl[58][0-6]: 059 062 064 057 054 042 
+		nodeNeighbourTbl[59][0-6]: 064 063 064 058 055 043 
+		nodeNeighbourTbl[60][0-6]: 061 064 064 064 056 044 
+		nodeNeighbourTbl[61][0-6]: 062 064 064 060 057 045 
+		nodeNeighbourTbl[62][0-6]: 063 064 064 061 058 046 
+		nodeNeighbourTbl[63][0-6]: 064 064 064 062 059 047 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x80610c8
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x80611d8
+	nodeElementTbl[0-64]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 001 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 027 001 002 
+		nodeElementTbl[3][0-8]: 027 027 027 027 027 027 002 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 000 027 003 
+		nodeElementTbl[5][0-8]: 027 027 027 027 000 001 003 004 
+		nodeElementTbl[6][0-8]: 027 027 027 027 001 002 004 005 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 005 027 
+		nodeElementTbl[8][0-8]: 027 027 027 027 027 003 027 006 
+		nodeElementTbl[9][0-8]: 027 027 027 027 003 004 006 007 
+		nodeElementTbl[10][0-8]: 027 027 027 027 004 005 007 008 
+		nodeElementTbl[11][0-8]: 027 027 027 027 005 027 008 027 
+		nodeElementTbl[12][0-8]: 027 027 027 027 027 006 027 027 
+		nodeElementTbl[13][0-8]: 027 027 027 027 006 007 027 027 
+		nodeElementTbl[14][0-8]: 027 027 027 027 007 008 027 027 
+		nodeElementTbl[15][0-8]: 027 027 027 027 008 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 000 027 027 027 009 
+		nodeElementTbl[17][0-8]: 027 027 000 001 027 027 009 010 
+		nodeElementTbl[18][0-8]: 027 027 001 002 027 027 010 011 
+		nodeElementTbl[19][0-8]: 027 027 002 027 027 027 011 027 
+		nodeElementTbl[20][0-8]: 027 000 027 003 027 009 027 012 
+		nodeElementTbl[21][0-8]: 000 001 003 004 009 010 012 013 
+		nodeElementTbl[22][0-8]: 001 002 004 005 010 011 013 014 
+		nodeElementTbl[23][0-8]: 002 027 005 027 011 027 014 027 
+		nodeElementTbl[24][0-8]: 027 003 027 006 027 012 027 015 
+		nodeElementTbl[25][0-8]: 003 004 006 007 012 013 015 016 
+		nodeElementTbl[26][0-8]: 004 005 007 008 013 014 016 017 
+		nodeElementTbl[27][0-8]: 005 027 008 027 014 027 017 027 
+		nodeElementTbl[28][0-8]: 027 006 027 027 027 015 027 027 
+		nodeElementTbl[29][0-8]: 006 007 027 027 015 016 027 027 
+		nodeElementTbl[30][0-8]: 007 008 027 027 016 017 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 017 027 027 027 
+		nodeElementTbl[32][0-8]: 027 027 027 009 027 027 027 018 
+		nodeElementTbl[33][0-8]: 027 027 009 010 027 027 018 019 
+		nodeElementTbl[34][0-8]: 027 027 010 011 027 027 019 020 
+		nodeElementTbl[35][0-8]: 027 027 011 027 027 027 020 027 
+		nodeElementTbl[36][0-8]: 027 009 027 012 027 018 027 021 
+		nodeElementTbl[37][0-8]: 009 010 012 013 018 019 021 022 
+		nodeElementTbl[38][0-8]: 010 011 013 014 019 020 022 023 
+		nodeElementTbl[39][0-8]: 011 027 014 027 020 027 023 027 
+		nodeElementTbl[40][0-8]: 027 012 027 015 027 021 027 024 
+		nodeElementTbl[41][0-8]: 012 013 015 016 021 022 024 025 
+		nodeElementTbl[42][0-8]: 013 014 016 017 022 023 025 026 
+		nodeElementTbl[43][0-8]: 014 027 017 027 023 027 026 027 
+		nodeElementTbl[44][0-8]: 027 015 027 027 027 024 027 027 
+		nodeElementTbl[45][0-8]: 015 016 027 027 024 025 027 027 
+		nodeElementTbl[46][0-8]: 016 017 027 027 025 026 027 027 
+		nodeElementTbl[47][0-8]: 017 027 027 027 026 027 027 027 
+		nodeElementTbl[48][0-8]: 027 027 027 018 027 027 027 027 
+		nodeElementTbl[49][0-8]: 027 027 018 019 027 027 027 027 
+		nodeElementTbl[50][0-8]: 027 027 019 020 027 027 027 027 
+		nodeElementTbl[51][0-8]: 027 027 020 027 027 027 027 027 
+		nodeElementTbl[52][0-8]: 027 018 027 021 027 027 027 027 
+		nodeElementTbl[53][0-8]: 018 019 021 022 027 027 027 027 
+		nodeElementTbl[54][0-8]: 019 020 022 023 027 027 027 027 
+		nodeElementTbl[55][0-8]: 020 027 023 027 027 027 027 027 
+		nodeElementTbl[56][0-8]: 027 021 027 024 027 027 027 027 
+		nodeElementTbl[57][0-8]: 021 022 024 025 027 027 027 027 
+		nodeElementTbl[58][0-8]: 022 023 025 026 027 027 027 027 
+		nodeElementTbl[59][0-8]: 023 027 026 027 027 027 027 027 
+		nodeElementTbl[60][0-8]: 027 024 027 027 027 027 027 027 
+		nodeElementTbl[61][0-8]: 024 025 027 027 027 027 027 027 
+		nodeElementTbl[62][0-8]: 025 026 027 027 027 027 027 027 
+		nodeElementTbl[63][0-8]: 026 027 027 027 027 027 027 027 
+	element (ptr): 0x8061ae8
+	elementLocalCount: 27
+	elementDomainCount: 27
+	elementShadowCount: 0
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805fc48
+	elementL2G[0-27]:   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 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805fc48
+	elementD2G[0-27]:   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 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8061bd0
+	elementG2L[0-27]:   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 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8061bd0
+	elementG2D[0-27]:   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 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061c48
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061cc0
+	elementNeighbourTbl[0-27]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 001 027 003 004 027 027 027 027 009 010 027 012 013 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 000 002 003 004 005 027 027 027 009 010 011 012 013 014 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 001 027 004 005 027 027 027 027 010 011 027 013 014 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 027 027 027 027 027 027 000 001 027 004 027 006 007 027 009 010 027 012 013 027 015 016 
+		elementNeighbourTbl[4][0-26]: 027 027 027 027 027 027 027 027 027 000 001 002 003 005 006 007 008 009 010 011 012 013 014 015 016 017 
+		elementNeighbourTbl[5][0-26]: 027 027 027 027 027 027 027 027 027 001 002 027 004 027 007 008 027 010 011 027 013 014 027 016 017 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 027 027 027 027 027 027 003 004 027 007 027 027 027 027 012 013 027 015 016 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 027 027 027 027 027 027 027 027 003 004 005 006 008 027 027 027 012 013 014 015 016 017 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 027 027 027 027 027 027 027 027 004 005 027 007 027 027 027 027 013 014 027 016 017 027 027 027 027 
+		elementNeighbourTbl[9][0-26]: 027 027 027 027 000 001 027 003 004 027 027 027 027 010 027 012 013 027 027 027 027 018 019 027 021 022 
+		elementNeighbourTbl[10][0-26]: 027 027 027 000 001 002 003 004 005 027 027 027 009 011 012 013 014 027 027 027 018 019 020 021 022 023 
+		elementNeighbourTbl[11][0-26]: 027 027 027 001 002 027 004 005 027 027 027 027 010 027 013 014 027 027 027 027 019 020 027 022 023 027 
+		elementNeighbourTbl[12][0-26]: 027 000 001 027 003 004 027 006 007 027 009 010 027 013 027 015 016 027 018 019 027 021 022 027 024 025 
+		elementNeighbourTbl[13][0-26]: 000 001 002 003 004 005 006 007 008 009 010 011 012 014 015 016 017 018 019 020 021 022 023 024 025 026 
+		elementNeighbourTbl[14][0-26]: 001 002 027 004 005 027 007 008 027 010 011 027 013 027 016 017 027 019 020 027 022 023 027 025 026 027 
+		elementNeighbourTbl[15][0-26]: 027 003 004 027 006 007 027 027 027 027 012 013 027 016 027 027 027 027 021 022 027 024 025 027 027 027 
+		elementNeighbourTbl[16][0-26]: 003 004 005 006 007 008 027 027 027 012 013 014 015 017 027 027 027 021 022 023 024 025 026 027 027 027 
+		elementNeighbourTbl[17][0-26]: 004 005 027 007 008 027 027 027 027 013 014 027 016 027 027 027 027 022 023 027 025 026 027 027 027 027 
+		elementNeighbourTbl[18][0-26]: 027 027 027 027 009 010 027 012 013 027 027 027 027 019 027 021 022 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[19][0-26]: 027 027 027 009 010 011 012 013 014 027 027 027 018 020 021 022 023 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[20][0-26]: 027 027 027 010 011 027 013 014 027 027 027 027 019 027 022 023 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[21][0-26]: 027 009 010 027 012 013 027 015 016 027 018 019 027 022 027 024 025 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[22][0-26]: 009 010 011 012 013 014 015 016 017 018 019 020 021 023 024 025 026 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[23][0-26]: 010 011 027 013 014 027 016 017 027 019 020 027 022 027 025 026 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[24][0-26]: 027 012 013 027 015 016 027 027 027 027 021 022 027 025 027 027 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[25][0-26]: 012 013 014 015 016 017 027 027 027 021 022 023 024 026 027 027 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[26][0-26]: 013 014 027 016 017 027 027 027 027 022 023 027 025 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x8062830
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80628a8
+	elementNodeTbl[0-27]:
+		elementNodeTbl[0][0-8]: 000 001 005 004 016 017 021 020 
+		elementNodeTbl[1][0-8]: 001 002 006 005 017 018 022 021 
+		elementNodeTbl[2][0-8]: 002 003 007 006 018 019 023 022 
+		elementNodeTbl[3][0-8]: 004 005 009 008 020 021 025 024 
+		elementNodeTbl[4][0-8]: 005 006 010 009 021 022 026 025 
+		elementNodeTbl[5][0-8]: 006 007 011 010 022 023 027 026 
+		elementNodeTbl[6][0-8]: 008 009 013 012 024 025 029 028 
+		elementNodeTbl[7][0-8]: 009 010 014 013 025 026 030 029 
+		elementNodeTbl[8][0-8]: 010 011 015 014 026 027 031 030 
+		elementNodeTbl[9][0-8]: 016 017 021 020 032 033 037 036 
+		elementNodeTbl[10][0-8]: 017 018 022 021 033 034 038 037 
+		elementNodeTbl[11][0-8]: 018 019 023 022 034 035 039 038 
+		elementNodeTbl[12][0-8]: 020 021 025 024 036 037 041 040 
+		elementNodeTbl[13][0-8]: 021 022 026 025 037 038 042 041 
+		elementNodeTbl[14][0-8]: 022 023 027 026 038 039 043 042 
+		elementNodeTbl[15][0-8]: 024 025 029 028 040 041 045 044 
+		elementNodeTbl[16][0-8]: 025 026 030 029 041 042 046 045 
+		elementNodeTbl[17][0-8]: 026 027 031 030 042 043 047 046 
+		elementNodeTbl[18][0-8]: 032 033 037 036 048 049 053 052 
+		elementNodeTbl[19][0-8]: 033 034 038 037 049 050 054 053 
+		elementNodeTbl[20][0-8]: 034 035 039 038 050 051 055 054 
+		elementNodeTbl[21][0-8]: 036 037 041 040 052 053 057 056 
+		elementNodeTbl[22][0-8]: 037 038 042 041 053 054 058 057 
+		elementNodeTbl[23][0-8]: 038 039 043 042 054 055 059 058 
+		elementNodeTbl[24][0-8]: 040 041 045 044 056 057 061 060 
+		elementNodeTbl[25][0-8]: 041 042 046 045 057 058 062 061 
+		elementNodeTbl[26][0-8]: 042 043 047 046 058 059 063 062 
+	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)
+Test that the getNodeCoordPtrsOfElement() function works
+Element 0:
+	(0.00,0.00,0.00), (0.33,0.00,0.00), (0.33,0.33,0.00), (0.00,0.33,0.00), (0.00,0.00,0.33), (0.33,0.00,0.33), (0.33,0.33,0.33), (0.00,0.33,0.33), 
+Element 1:
+	(0.33,0.00,0.00), (0.67,0.00,0.00), (0.67,0.33,0.00), (0.33,0.33,0.00), (0.33,0.00,0.33), (0.67,0.00,0.33), (0.67,0.33,0.33), (0.33,0.33,0.33), 
+Element 2:
+	(0.67,0.00,0.00), (1.00,0.00,0.00), (1.00,0.33,0.00), (0.67,0.33,0.00), (0.67,0.00,0.33), (1.00,0.00,0.33), (1.00,0.33,0.33), (0.67,0.33,0.33), 
+Element 3:
+	(0.00,0.33,0.00), (0.33,0.33,0.00), (0.33,0.67,0.00), (0.00,0.67,0.00), (0.00,0.33,0.33), (0.33,0.33,0.33), (0.33,0.67,0.33), (0.00,0.67,0.33), 
+Element 4:
+	(0.33,0.33,0.00), (0.67,0.33,0.00), (0.67,0.67,0.00), (0.33,0.67,0.00), (0.33,0.33,0.33), (0.67,0.33,0.33), (0.67,0.67,0.33), (0.33,0.67,0.33), 
+Element 5:
+	(0.67,0.33,0.00), (1.00,0.33,0.00), (1.00,0.67,0.00), (0.67,0.67,0.00), (0.67,0.33,0.33), (1.00,0.33,0.33), (1.00,0.67,0.33), (0.67,0.67,0.33), 
+Element 6:
+	(0.00,0.67,0.00), (0.33,0.67,0.00), (0.33,1.00,0.00), (0.00,1.00,0.00), (0.00,0.67,0.33), (0.33,0.67,0.33), (0.33,1.00,0.33), (0.00,1.00,0.33), 
+Element 7:
+	(0.33,0.67,0.00), (0.67,0.67,0.00), (0.67,1.00,0.00), (0.33,1.00,0.00), (0.33,0.67,0.33), (0.67,0.67,0.33), (0.67,1.00,0.33), (0.33,1.00,0.33), 
+Element 8:
+	(0.67,0.67,0.00), (1.00,0.67,0.00), (1.00,1.00,0.00), (0.67,1.00,0.00), (0.67,0.67,0.33), (1.00,0.67,0.33), (1.00,1.00,0.33), (0.67,1.00,0.33), 
+Element 9:
+	(0.00,0.00,0.33), (0.33,0.00,0.33), (0.33,0.33,0.33), (0.00,0.33,0.33), (0.00,0.00,0.67), (0.33,0.00,0.67), (0.33,0.33,0.67), (0.00,0.33,0.67), 
+Element 10:
+	(0.33,0.00,0.33), (0.67,0.00,0.33), (0.67,0.33,0.33), (0.33,0.33,0.33), (0.33,0.00,0.67), (0.67,0.00,0.67), (0.67,0.33,0.67), (0.33,0.33,0.67), 
+Element 11:
+	(0.67,0.00,0.33), (1.00,0.00,0.33), (1.00,0.33,0.33), (0.67,0.33,0.33), (0.67,0.00,0.67), (1.00,0.00,0.67), (1.00,0.33,0.67), (0.67,0.33,0.67), 
+Element 12:
+	(0.00,0.33,0.33), (0.33,0.33,0.33), (0.33,0.67,0.33), (0.00,0.67,0.33), (0.00,0.33,0.67), (0.33,0.33,0.67), (0.33,0.67,0.67), (0.00,0.67,0.67), 
+Element 13:
+	(0.33,0.33,0.33), (0.67,0.33,0.33), (0.67,0.67,0.33), (0.33,0.67,0.33), (0.33,0.33,0.67), (0.67,0.33,0.67), (0.67,0.67,0.67), (0.33,0.67,0.67), 
+Element 14:
+	(0.67,0.33,0.33), (1.00,0.33,0.33), (1.00,0.67,0.33), (0.67,0.67,0.33), (0.67,0.33,0.67), (1.00,0.33,0.67), (1.00,0.67,0.67), (0.67,0.67,0.67), 
+Element 15:
+	(0.00,0.67,0.33), (0.33,0.67,0.33), (0.33,1.00,0.33), (0.00,1.00,0.33), (0.00,0.67,0.67), (0.33,0.67,0.67), (0.33,1.00,0.67), (0.00,1.00,0.67), 
+Element 16:
+	(0.33,0.67,0.33), (0.67,0.67,0.33), (0.67,1.00,0.33), (0.33,1.00,0.33), (0.33,0.67,0.67), (0.67,0.67,0.67), (0.67,1.00,0.67), (0.33,1.00,0.67), 
+Element 17:
+	(0.67,0.67,0.33), (1.00,0.67,0.33), (1.00,1.00,0.33), (0.67,1.00,0.33), (0.67,0.67,0.67), (1.00,0.67,0.67), (1.00,1.00,0.67), (0.67,1.00,0.67), 
+Element 18:
+	(0.00,0.00,0.67), (0.33,0.00,0.67), (0.33,0.33,0.67), (0.00,0.33,0.67), (0.00,0.00,1.00), (0.33,0.00,1.00), (0.33,0.33,1.00), (0.00,0.33,1.00), 
+Element 19:
+	(0.33,0.00,0.67), (0.67,0.00,0.67), (0.67,0.33,0.67), (0.33,0.33,0.67), (0.33,0.00,1.00), (0.67,0.00,1.00), (0.67,0.33,1.00), (0.33,0.33,1.00), 
+Element 20:
+	(0.67,0.00,0.67), (1.00,0.00,0.67), (1.00,0.33,0.67), (0.67,0.33,0.67), (0.67,0.00,1.00), (1.00,0.00,1.00), (1.00,0.33,1.00), (0.67,0.33,1.00), 
+Element 21:
+	(0.00,0.33,0.67), (0.33,0.33,0.67), (0.33,0.67,0.67), (0.00,0.67,0.67), (0.00,0.33,1.00), (0.33,0.33,1.00), (0.33,0.67,1.00), (0.00,0.67,1.00), 
+Element 22:
+	(0.33,0.33,0.67), (0.67,0.33,0.67), (0.67,0.67,0.67), (0.33,0.67,0.67), (0.33,0.33,1.00), (0.67,0.33,1.00), (0.67,0.67,1.00), (0.33,0.67,1.00), 
+Element 23:
+	(0.67,0.33,0.67), (1.00,0.33,0.67), (1.00,0.67,0.67), (0.67,0.67,0.67), (0.67,0.33,1.00), (1.00,0.33,1.00), (1.00,0.67,1.00), (0.67,0.67,1.00), 
+Element 24:
+	(0.00,0.67,0.67), (0.33,0.67,0.67), (0.33,1.00,0.67), (0.00,1.00,0.67), (0.00,0.67,1.00), (0.33,0.67,1.00), (0.33,1.00,1.00), (0.00,1.00,1.00), 
+Element 25:
+	(0.33,0.67,0.67), (0.67,0.67,0.67), (0.67,1.00,0.67), (0.33,1.00,0.67), (0.33,0.67,1.00), (0.67,0.67,1.00), (0.67,1.00,1.00), (0.33,1.00,1.00), 
+Element 26:
+	(0.67,0.67,0.67), (1.00,0.67,0.67), (1.00,1.00,0.67), (0.67,1.00,0.67), (0.67,0.67,1.00), (1.00,0.67,1.00), (1.00,1.00,1.00), (0.67,1.00,1.00), 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,292 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f370)
+Stg_Component (ptr): 0x805f370
+Stg_Object (ptr): 0x805f370
+	Stg_Class (ptr): 0x805f370
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7ee61dd
+		_print (func ptr): 0xb7ee6a6a
+		_copy (func ptr): 0xb7ee7c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ee551c
+	_construct (func ptr): 0xb7ee600e
+	_build (func ptr): 0xb7ee8322
+	_initialise (func ptr): 0xb7ee9214
+	_execute (func ptr): 0xb7ee9219
+	_destroy (func ptr): 0xb7ee61d8
+	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): 0x805f028
+Extension (ptr):0x805f740
+Stg_Object (ptr): 0x805f740
+	Stg_Class (ptr): 0x805f740
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e5e018
+		_print (func ptr): 0xb7e5e066
+		_copy (func ptr): 0xb7e5e200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f7a0
+Stg_ObjectList (ptr):0x805f7a0
+	Stg_Class (ptr): 0x805f7a0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e8ff3e
+		_print (func ptr): 0xb7e8ff75
+		_copy (func ptr): 0xb7e90217
+	_append(func ptr): 0xb7e90e7b
+	_prepend(func ptr): 0xb7e90f41
+	_replaceAll(func ptr): 0xb7e91005
+	_replace(func ptr): 0xb7e910be
+	_insertBefore(func ptr): 0xb7e9125b
+	_insertAfter(func ptr): 0xb7e91416
+	_remove(func ptr): 0xb7e915d3
+	_getIndex(func ptr): 0xb7e91679
+	_get(func ptr): 0xb7e91727
+	_allocMoreMemory(func ptr): 0xb7e918fa
+	_insertAtIndex(func ptr): 0xb7e91980
+	_removeByIndex(func ptr): 0xb7e919fe
+	_deleteAllObjects(func ptr): 0xb7e9187b
+	_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):0x805f810
+Stg_Object (ptr): 0x805f810
+	Stg_Class (ptr): 0x805f810
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e5e018
+		_print (func ptr): 0xb7e5e066
+		_copy (func ptr): 0xb7e5e200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f870
+Stg_ObjectList (ptr):0x805f870
+	Stg_Class (ptr): 0x805f870
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e8ff3e
+		_print (func ptr): 0xb7e8ff75
+		_copy (func ptr): 0xb7e90217
+	_append(func ptr): 0xb7e90e7b
+	_prepend(func ptr): 0xb7e90f41
+	_replaceAll(func ptr): 0xb7e91005
+	_replace(func ptr): 0xb7e910be
+	_insertBefore(func ptr): 0xb7e9125b
+	_insertAfter(func ptr): 0xb7e91416
+	_remove(func ptr): 0xb7e915d3
+	_getIndex(func ptr): 0xb7e91679
+	_get(func ptr): 0xb7e91727
+	_allocMoreMemory(func ptr): 0xb7e918fa
+	_insertAtIndex(func ptr): 0xb7e91980
+	_removeByIndex(func ptr): 0xb7e919fe
+	_deleteAllObjects(func ptr): 0xb7e9187b
+	_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): 0x8060070
+	nodeLocalCount: 32
+	nodeDomainCount: 32
+	nodeShadowCount: 0
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060180
+	nodeCoord[0-32]:   (0.00,0.00,0.00), (0.33,0.00,0.00), (0.00,0.33,0.00), (0.33,0.33,0.00), (0.00,0.67,0.00), (0.33,0.67,0.00), (0.00,1.00,0.00), (0.33,1.00,0.00), (0.00,0.00,0.33), (0.33,0.00,0.33), (0.00,0.33,0.33), (0.33,0.33,0.33), (0.00,0.67,0.33), (0.33,0.67,0.33), (0.00,1.00,0.33), (0.33,1.00,0.33), (0.00,0.00,0.67), (0.33,0.00,0.67), (0.00,0.33,0.67), (0.33,0.33,0.67), (0.00,0.67,0.67), (0.33,0.67,0.67), (0.00,1.00,0.67), (0.33,1.00,0.67), (0.00,0.00,1.00), (0.33,0.00,1.00), (0.00,0.33,1.00), (0.33,0.33,1.00), (0.00,0.67,1.00), (0.33,0.67,1.00), (0.00,1.00,1.00), (0.33,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x805fe50
+	nodeL2G[0-32]:   000 001 004 005 008 009 012 013 016 017 020 021 024 025 028 029 032 033 036 037 040 041 044 045 048 049 052 053 056 057 060 061 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x805fe50
+	nodeD2G[0-32]:   000 001 004 005 008 009 012 013 016 017 020 021 024 025 028 029 032 033 036 037 040 041 044 045 048 049 052 053 056 057 060 061 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060490
+	nodeG2L[0-64]:   000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 064 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060490
+	nodeG2D[0-64]:   000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 064 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x80605a0
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060630
+	nodeNeighbourTbl[0-32]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 064 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 064 000 064 
+		nodeNeighbourTbl[3][0-6]: 064 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 064 002 064 
+		nodeNeighbourTbl[5][0-6]: 064 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 064 004 064 
+		nodeNeighbourTbl[7][0-6]: 064 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 064 064 000 
+		nodeNeighbourTbl[9][0-6]: 064 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 064 008 002 
+		nodeNeighbourTbl[11][0-6]: 064 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 064 010 004 
+		nodeNeighbourTbl[13][0-6]: 064 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 064 012 006 
+		nodeNeighbourTbl[15][0-6]: 064 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 064 064 008 
+		nodeNeighbourTbl[17][0-6]: 064 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 064 016 010 
+		nodeNeighbourTbl[19][0-6]: 064 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 064 018 012 
+		nodeNeighbourTbl[21][0-6]: 064 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 064 020 014 
+		nodeNeighbourTbl[23][0-6]: 064 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 064 064 016 
+		nodeNeighbourTbl[25][0-6]: 064 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 064 024 018 
+		nodeNeighbourTbl[27][0-6]: 064 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 064 026 020 
+		nodeNeighbourTbl[29][0-6]: 064 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 064 028 022 
+		nodeNeighbourTbl[31][0-6]: 064 064 064 030 029 023 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060a38
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060ac8
+	nodeElementTbl[0-32]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 027 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 000 027 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 027 001 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 001 027 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 027 002 027 
+		nodeElementTbl[6][0-8]: 027 027 027 027 027 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 027 027 
+		nodeElementTbl[8][0-8]: 027 027 027 000 027 027 027 003 
+		nodeElementTbl[9][0-8]: 027 027 000 027 027 027 003 027 
+		nodeElementTbl[10][0-8]: 027 000 027 001 027 003 027 004 
+		nodeElementTbl[11][0-8]: 000 027 001 027 003 027 004 027 
+		nodeElementTbl[12][0-8]: 027 001 027 002 027 004 027 005 
+		nodeElementTbl[13][0-8]: 001 027 002 027 004 027 005 027 
+		nodeElementTbl[14][0-8]: 027 002 027 027 027 005 027 027 
+		nodeElementTbl[15][0-8]: 002 027 027 027 005 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 003 027 027 027 006 
+		nodeElementTbl[17][0-8]: 027 027 003 027 027 027 006 027 
+		nodeElementTbl[18][0-8]: 027 003 027 004 027 006 027 007 
+		nodeElementTbl[19][0-8]: 003 027 004 027 006 027 007 027 
+		nodeElementTbl[20][0-8]: 027 004 027 005 027 007 027 008 
+		nodeElementTbl[21][0-8]: 004 027 005 027 007 027 008 027 
+		nodeElementTbl[22][0-8]: 027 005 027 027 027 008 027 027 
+		nodeElementTbl[23][0-8]: 005 027 027 027 008 027 027 027 
+		nodeElementTbl[24][0-8]: 027 027 027 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 027 027 027 027 027 
+		nodeElementTbl[26][0-8]: 027 006 027 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 027 007 027 027 027 027 027 
+		nodeElementTbl[28][0-8]: 027 007 027 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 027 008 027 027 027 027 027 
+		nodeElementTbl[30][0-8]: 027 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 027 027 027 027 
+	element (ptr): 0x80609c0
+	elementLocalCount: 9
+	elementDomainCount: 9
+	elementShadowCount: 0
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805aa18
+	elementL2G[0-9]:   000 003 006 009 012 015 018 021 024 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805aa18
+	elementD2G[0-9]:   000 003 006 009 012 015 018 021 024 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8060f58
+	elementG2L[0-27]:   000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 027 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8060f58
+	elementG2D[0-27]:   000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 027 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x805e730
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8060fd0
+	elementNeighbourTbl[0-9]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 003 027 027 004 027 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 000 027 027 027 027 002 027 027 003 027 027 004 027 027 005 027 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 027 027 004 027 027 005 027 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 000 027 027 001 027 027 027 027 027 027 027 004 027 027 027 027 027 006 027 027 007 027 
+		elementNeighbourTbl[4][0-26]: 027 000 027 027 001 027 027 002 027 027 003 027 027 027 027 005 027 027 006 027 027 007 027 027 008 027 
+		elementNeighbourTbl[5][0-26]: 027 001 027 027 002 027 027 027 027 027 004 027 027 027 027 027 027 027 007 027 027 008 027 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 003 027 027 004 027 027 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 003 027 027 004 027 027 005 027 027 006 027 027 027 027 008 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 004 027 027 005 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805efd0
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80613a8
+	elementNodeTbl[0-9]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+	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)
+Test that the getNodeCoordPtrsOfElement() function works
+Element 0:
+	(0.00,0.00,0.00), (0.33,0.00,0.00), (0.33,0.33,0.00), (0.00,0.33,0.00), (0.00,0.00,0.33), (0.33,0.00,0.33), (0.33,0.33,0.33), (0.00,0.33,0.33), 
+Element 1:
+	(0.00,0.33,0.00), (0.33,0.33,0.00), (0.33,0.67,0.00), (0.00,0.67,0.00), (0.00,0.33,0.33), (0.33,0.33,0.33), (0.33,0.67,0.33), (0.00,0.67,0.33), 
+Element 2:
+	(0.00,0.67,0.00), (0.33,0.67,0.00), (0.33,1.00,0.00), (0.00,1.00,0.00), (0.00,0.67,0.33), (0.33,0.67,0.33), (0.33,1.00,0.33), (0.00,1.00,0.33), 
+Element 3:
+	(0.00,0.00,0.33), (0.33,0.00,0.33), (0.33,0.33,0.33), (0.00,0.33,0.33), (0.00,0.00,0.67), (0.33,0.00,0.67), (0.33,0.33,0.67), (0.00,0.33,0.67), 
+Element 4:
+	(0.00,0.33,0.33), (0.33,0.33,0.33), (0.33,0.67,0.33), (0.00,0.67,0.33), (0.00,0.33,0.67), (0.33,0.33,0.67), (0.33,0.67,0.67), (0.00,0.67,0.67), 
+Element 5:
+	(0.00,0.67,0.33), (0.33,0.67,0.33), (0.33,1.00,0.33), (0.00,1.00,0.33), (0.00,0.67,0.67), (0.33,0.67,0.67), (0.33,1.00,0.67), (0.00,1.00,0.67), 
+Element 6:
+	(0.00,0.00,0.67), (0.33,0.00,0.67), (0.33,0.33,0.67), (0.00,0.33,0.67), (0.00,0.00,1.00), (0.33,0.00,1.00), (0.33,0.33,1.00), (0.00,0.33,1.00), 
+Element 7:
+	(0.00,0.33,0.67), (0.33,0.33,0.67), (0.33,0.67,0.67), (0.00,0.67,0.67), (0.00,0.33,1.00), (0.33,0.33,1.00), (0.33,0.67,1.00), (0.00,0.67,1.00), 
+Element 8:
+	(0.00,0.67,0.67), (0.33,0.67,0.67), (0.33,1.00,0.67), (0.00,1.00,0.67), (0.00,0.67,1.00), (0.33,0.67,1.00), (0.33,1.00,1.00), (0.00,1.00,1.00), 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,292 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f388)
+Stg_Component (ptr): 0x805f388
+Stg_Object (ptr): 0x805f388
+	Stg_Class (ptr): 0x805f388
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f881dd
+		_print (func ptr): 0xb7f88a6a
+		_copy (func ptr): 0xb7f89c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8751c
+	_construct (func ptr): 0xb7f8800e
+	_build (func ptr): 0xb7f8a322
+	_initialise (func ptr): 0xb7f8b214
+	_execute (func ptr): 0xb7f8b219
+	_destroy (func ptr): 0xb7f881d8
+	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): 0x805c568
+	layout (ptr): 0x805f040
+Extension (ptr):0x805f758
+Stg_Object (ptr): 0x805f758
+	Stg_Class (ptr): 0x805f758
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f00018
+		_print (func ptr): 0xb7f00066
+		_copy (func ptr): 0xb7f00200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f7b8
+Stg_ObjectList (ptr):0x805f7b8
+	Stg_Class (ptr): 0x805f7b8
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f31f3e
+		_print (func ptr): 0xb7f31f75
+		_copy (func ptr): 0xb7f32217
+	_append(func ptr): 0xb7f32e7b
+	_prepend(func ptr): 0xb7f32f41
+	_replaceAll(func ptr): 0xb7f33005
+	_replace(func ptr): 0xb7f330be
+	_insertBefore(func ptr): 0xb7f3325b
+	_insertAfter(func ptr): 0xb7f33416
+	_remove(func ptr): 0xb7f335d3
+	_getIndex(func ptr): 0xb7f33679
+	_get(func ptr): 0xb7f33727
+	_allocMoreMemory(func ptr): 0xb7f338fa
+	_insertAtIndex(func ptr): 0xb7f33980
+	_removeByIndex(func ptr): 0xb7f339fe
+	_deleteAllObjects(func ptr): 0xb7f3387b
+	_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):0x805f828
+Stg_Object (ptr): 0x805f828
+	Stg_Class (ptr): 0x805f828
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f00018
+		_print (func ptr): 0xb7f00066
+		_copy (func ptr): 0xb7f00200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f888
+Stg_ObjectList (ptr):0x805f888
+	Stg_Class (ptr): 0x805f888
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f31f3e
+		_print (func ptr): 0xb7f31f75
+		_copy (func ptr): 0xb7f32217
+	_append(func ptr): 0xb7f32e7b
+	_prepend(func ptr): 0xb7f32f41
+	_replaceAll(func ptr): 0xb7f33005
+	_replace(func ptr): 0xb7f330be
+	_insertBefore(func ptr): 0xb7f3325b
+	_insertAfter(func ptr): 0xb7f33416
+	_remove(func ptr): 0xb7f335d3
+	_getIndex(func ptr): 0xb7f33679
+	_get(func ptr): 0xb7f33727
+	_allocMoreMemory(func ptr): 0xb7f338fa
+	_insertAtIndex(func ptr): 0xb7f33980
+	_removeByIndex(func ptr): 0xb7f339fe
+	_deleteAllObjects(func ptr): 0xb7f3387b
+	_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): 0x8060058
+	nodeLocalCount: 32
+	nodeDomainCount: 32
+	nodeShadowCount: 0
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060168
+	nodeCoord[0-32]:   (0.00,0.00,0.00), (0.33,0.00,0.00), (0.00,0.33,0.00), (0.33,0.33,0.00), (0.00,0.67,0.00), (0.33,0.67,0.00), (0.00,1.00,0.00), (0.33,1.00,0.00), (0.00,0.00,0.33), (0.33,0.00,0.33), (0.00,0.33,0.33), (0.33,0.33,0.33), (0.00,0.67,0.33), (0.33,0.67,0.33), (0.00,1.00,0.33), (0.33,1.00,0.33), (0.00,0.00,0.67), (0.33,0.00,0.67), (0.00,0.33,0.67), (0.33,0.33,0.67), (0.00,0.67,0.67), (0.33,0.67,0.67), (0.00,1.00,0.67), (0.33,1.00,0.67), (0.00,0.00,1.00), (0.33,0.00,1.00), (0.00,0.33,1.00), (0.33,0.33,1.00), (0.00,0.67,1.00), (0.33,0.67,1.00), (0.00,1.00,1.00), (0.33,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x805fe38
+	nodeL2G[0-32]:   000 001 004 005 008 009 012 013 016 017 020 021 024 025 028 029 032 033 036 037 040 041 044 045 048 049 052 053 056 057 060 061 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x805fe38
+	nodeD2G[0-32]:   000 001 004 005 008 009 012 013 016 017 020 021 024 025 028 029 032 033 036 037 040 041 044 045 048 049 052 053 056 057 060 061 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060478
+	nodeG2L[0-64]:   000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 064 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060478
+	nodeG2D[0-64]:   000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 064 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060588
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060618
+	nodeNeighbourTbl[0-32]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 064 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 064 000 064 
+		nodeNeighbourTbl[3][0-6]: 064 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 064 002 064 
+		nodeNeighbourTbl[5][0-6]: 064 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 064 004 064 
+		nodeNeighbourTbl[7][0-6]: 064 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 064 064 000 
+		nodeNeighbourTbl[9][0-6]: 064 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 064 008 002 
+		nodeNeighbourTbl[11][0-6]: 064 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 064 010 004 
+		nodeNeighbourTbl[13][0-6]: 064 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 064 012 006 
+		nodeNeighbourTbl[15][0-6]: 064 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 064 064 008 
+		nodeNeighbourTbl[17][0-6]: 064 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 064 016 010 
+		nodeNeighbourTbl[19][0-6]: 064 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 064 018 012 
+		nodeNeighbourTbl[21][0-6]: 064 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 064 020 014 
+		nodeNeighbourTbl[23][0-6]: 064 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 064 064 016 
+		nodeNeighbourTbl[25][0-6]: 064 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 064 024 018 
+		nodeNeighbourTbl[27][0-6]: 064 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 064 026 020 
+		nodeNeighbourTbl[29][0-6]: 064 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 064 028 022 
+		nodeNeighbourTbl[31][0-6]: 064 064 064 030 029 023 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060a20
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060ab0
+	nodeElementTbl[0-32]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 027 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 000 027 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 027 001 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 001 027 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 027 002 027 
+		nodeElementTbl[6][0-8]: 027 027 027 027 027 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 027 027 
+		nodeElementTbl[8][0-8]: 027 027 027 000 027 027 027 003 
+		nodeElementTbl[9][0-8]: 027 027 000 027 027 027 003 027 
+		nodeElementTbl[10][0-8]: 027 000 027 001 027 003 027 004 
+		nodeElementTbl[11][0-8]: 000 027 001 027 003 027 004 027 
+		nodeElementTbl[12][0-8]: 027 001 027 002 027 004 027 005 
+		nodeElementTbl[13][0-8]: 001 027 002 027 004 027 005 027 
+		nodeElementTbl[14][0-8]: 027 002 027 027 027 005 027 027 
+		nodeElementTbl[15][0-8]: 002 027 027 027 005 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 003 027 027 027 006 
+		nodeElementTbl[17][0-8]: 027 027 003 027 027 027 006 027 
+		nodeElementTbl[18][0-8]: 027 003 027 004 027 006 027 007 
+		nodeElementTbl[19][0-8]: 003 027 004 027 006 027 007 027 
+		nodeElementTbl[20][0-8]: 027 004 027 005 027 007 027 008 
+		nodeElementTbl[21][0-8]: 004 027 005 027 007 027 008 027 
+		nodeElementTbl[22][0-8]: 027 005 027 027 027 008 027 027 
+		nodeElementTbl[23][0-8]: 005 027 027 027 008 027 027 027 
+		nodeElementTbl[24][0-8]: 027 027 027 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 027 027 027 027 027 
+		nodeElementTbl[26][0-8]: 027 006 027 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 027 007 027 027 027 027 027 
+		nodeElementTbl[28][0-8]: 027 007 027 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 027 008 027 027 027 027 027 
+		nodeElementTbl[30][0-8]: 027 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 027 027 027 027 
+	element (ptr): 0x80609a8
+	elementLocalCount: 9
+	elementDomainCount: 9
+	elementShadowCount: 0
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805aa20
+	elementL2G[0-9]:   000 003 006 009 012 015 018 021 024 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805aa20
+	elementD2G[0-9]:   000 003 006 009 012 015 018 021 024 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8060f40
+	elementG2L[0-27]:   000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 027 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8060f40
+	elementG2D[0-27]:   000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 027 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x805efe8
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8060fb8
+	elementNeighbourTbl[0-9]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 003 027 027 004 027 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 000 027 027 027 027 002 027 027 003 027 027 004 027 027 005 027 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 027 027 004 027 027 005 027 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 000 027 027 001 027 027 027 027 027 027 027 004 027 027 027 027 027 006 027 027 007 027 
+		elementNeighbourTbl[4][0-26]: 027 000 027 027 001 027 027 002 027 027 003 027 027 027 027 005 027 027 006 027 027 007 027 027 008 027 
+		elementNeighbourTbl[5][0-26]: 027 001 027 027 002 027 027 027 027 027 004 027 027 027 027 027 027 027 007 027 027 008 027 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 003 027 027 004 027 027 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 003 027 027 004 027 027 005 027 027 006 027 027 027 027 008 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 004 027 027 005 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805d008
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8061390
+	elementNodeTbl[0-9]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+	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)
+Test that the getNodeCoordPtrsOfElement() function works
+Element 0:
+	(0.00,0.00,0.00), (0.33,0.00,0.00), (0.33,0.33,0.00), (0.00,0.33,0.00), (0.00,0.00,0.33), (0.33,0.00,0.33), (0.33,0.33,0.33), (0.00,0.33,0.33), 
+Element 1:
+	(0.00,0.33,0.00), (0.33,0.33,0.00), (0.33,0.67,0.00), (0.00,0.67,0.00), (0.00,0.33,0.33), (0.33,0.33,0.33), (0.33,0.67,0.33), (0.00,0.67,0.33), 
+Element 2:
+	(0.00,0.67,0.00), (0.33,0.67,0.00), (0.33,1.00,0.00), (0.00,1.00,0.00), (0.00,0.67,0.33), (0.33,0.67,0.33), (0.33,1.00,0.33), (0.00,1.00,0.33), 
+Element 3:
+	(0.00,0.00,0.33), (0.33,0.00,0.33), (0.33,0.33,0.33), (0.00,0.33,0.33), (0.00,0.00,0.67), (0.33,0.00,0.67), (0.33,0.33,0.67), (0.00,0.33,0.67), 
+Element 4:
+	(0.00,0.33,0.33), (0.33,0.33,0.33), (0.33,0.67,0.33), (0.00,0.67,0.33), (0.00,0.33,0.67), (0.33,0.33,0.67), (0.33,0.67,0.67), (0.00,0.67,0.67), 
+Element 5:
+	(0.00,0.67,0.33), (0.33,0.67,0.33), (0.33,1.00,0.33), (0.00,1.00,0.33), (0.00,0.67,0.67), (0.33,0.67,0.67), (0.33,1.00,0.67), (0.00,1.00,0.67), 
+Element 6:
+	(0.00,0.00,0.67), (0.33,0.00,0.67), (0.33,0.33,0.67), (0.00,0.33,0.67), (0.00,0.00,1.00), (0.33,0.00,1.00), (0.33,0.33,1.00), (0.00,0.33,1.00), 
+Element 7:
+	(0.00,0.33,0.67), (0.33,0.33,0.67), (0.33,0.67,0.67), (0.00,0.67,0.67), (0.00,0.33,1.00), (0.33,0.33,1.00), (0.33,0.67,1.00), (0.00,0.67,1.00), 
+Element 8:
+	(0.00,0.67,0.67), (0.33,0.67,0.67), (0.33,1.00,0.67), (0.00,1.00,0.67), (0.00,0.67,1.00), (0.33,0.67,1.00), (0.33,1.00,1.00), (0.00,1.00,1.00), 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,292 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f350)
+Stg_Component (ptr): 0x805f350
+Stg_Object (ptr): 0x805f350
+	Stg_Class (ptr): 0x805f350
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7eee1dd
+		_print (func ptr): 0xb7eeea6a
+		_copy (func ptr): 0xb7eefc4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eed51c
+	_construct (func ptr): 0xb7eee00e
+	_build (func ptr): 0xb7ef0322
+	_initialise (func ptr): 0xb7ef1214
+	_execute (func ptr): 0xb7ef1219
+	_destroy (func ptr): 0xb7eee1d8
+	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): 0x805f008
+Extension (ptr):0x805f720
+Stg_Object (ptr): 0x805f720
+	Stg_Class (ptr): 0x805f720
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e66018
+		_print (func ptr): 0xb7e66066
+		_copy (func ptr): 0xb7e66200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f780
+Stg_ObjectList (ptr):0x805f780
+	Stg_Class (ptr): 0x805f780
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e97f3e
+		_print (func ptr): 0xb7e97f75
+		_copy (func ptr): 0xb7e98217
+	_append(func ptr): 0xb7e98e7b
+	_prepend(func ptr): 0xb7e98f41
+	_replaceAll(func ptr): 0xb7e99005
+	_replace(func ptr): 0xb7e990be
+	_insertBefore(func ptr): 0xb7e9925b
+	_insertAfter(func ptr): 0xb7e99416
+	_remove(func ptr): 0xb7e995d3
+	_getIndex(func ptr): 0xb7e99679
+	_get(func ptr): 0xb7e99727
+	_allocMoreMemory(func ptr): 0xb7e998fa
+	_insertAtIndex(func ptr): 0xb7e99980
+	_removeByIndex(func ptr): 0xb7e999fe
+	_deleteAllObjects(func ptr): 0xb7e9987b
+	_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):0x805f7f0
+Stg_Object (ptr): 0x805f7f0
+	Stg_Class (ptr): 0x805f7f0
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e66018
+		_print (func ptr): 0xb7e66066
+		_copy (func ptr): 0xb7e66200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f850
+Stg_ObjectList (ptr):0x805f850
+	Stg_Class (ptr): 0x805f850
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7e97f3e
+		_print (func ptr): 0xb7e97f75
+		_copy (func ptr): 0xb7e98217
+	_append(func ptr): 0xb7e98e7b
+	_prepend(func ptr): 0xb7e98f41
+	_replaceAll(func ptr): 0xb7e99005
+	_replace(func ptr): 0xb7e990be
+	_insertBefore(func ptr): 0xb7e9925b
+	_insertAfter(func ptr): 0xb7e99416
+	_remove(func ptr): 0xb7e995d3
+	_getIndex(func ptr): 0xb7e99679
+	_get(func ptr): 0xb7e99727
+	_allocMoreMemory(func ptr): 0xb7e998fa
+	_insertAtIndex(func ptr): 0xb7e99980
+	_removeByIndex(func ptr): 0xb7e999fe
+	_deleteAllObjects(func ptr): 0xb7e9987b
+	_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): 0x8060050
+	nodeLocalCount: 32
+	nodeDomainCount: 32
+	nodeShadowCount: 0
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060160
+	nodeCoord[0-32]:   (0.67,0.00,0.00), (1.00,0.00,0.00), (0.67,0.33,0.00), (1.00,0.33,0.00), (0.67,0.67,0.00), (1.00,0.67,0.00), (0.67,1.00,0.00), (1.00,1.00,0.00), (0.67,0.00,0.33), (1.00,0.00,0.33), (0.67,0.33,0.33), (1.00,0.33,0.33), (0.67,0.67,0.33), (1.00,0.67,0.33), (0.67,1.00,0.33), (1.00,1.00,0.33), (0.67,0.00,0.67), (1.00,0.00,0.67), (0.67,0.33,0.67), (1.00,0.33,0.67), (0.67,0.67,0.67), (1.00,0.67,0.67), (0.67,1.00,0.67), (1.00,1.00,0.67), (0.67,0.00,1.00), (1.00,0.00,1.00), (0.67,0.33,1.00), (1.00,0.33,1.00), (0.67,0.67,1.00), (1.00,0.67,1.00), (0.67,1.00,1.00), (1.00,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x805fe30
+	nodeL2G[0-32]:   002 003 006 007 010 011 014 015 018 019 022 023 026 027 030 031 034 035 038 039 042 043 046 047 050 051 054 055 058 059 062 063 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x805fe30
+	nodeD2G[0-32]:   002 003 006 007 010 011 014 015 018 019 022 023 026 027 030 031 034 035 038 039 042 043 046 047 050 051 054 055 058 059 062 063 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060470
+	nodeG2L[0-64]:   064 064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060470
+	nodeG2D[0-64]:   064 064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060580
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060610
+	nodeNeighbourTbl[0-32]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 064 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 064 000 064 
+		nodeNeighbourTbl[3][0-6]: 064 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 064 002 064 
+		nodeNeighbourTbl[5][0-6]: 064 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 064 004 064 
+		nodeNeighbourTbl[7][0-6]: 064 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 064 064 000 
+		nodeNeighbourTbl[9][0-6]: 064 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 064 008 002 
+		nodeNeighbourTbl[11][0-6]: 064 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 064 010 004 
+		nodeNeighbourTbl[13][0-6]: 064 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 064 012 006 
+		nodeNeighbourTbl[15][0-6]: 064 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 064 064 008 
+		nodeNeighbourTbl[17][0-6]: 064 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 064 016 010 
+		nodeNeighbourTbl[19][0-6]: 064 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 064 018 012 
+		nodeNeighbourTbl[21][0-6]: 064 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 064 020 014 
+		nodeNeighbourTbl[23][0-6]: 064 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 064 064 016 
+		nodeNeighbourTbl[25][0-6]: 064 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 064 024 018 
+		nodeNeighbourTbl[27][0-6]: 064 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 064 026 020 
+		nodeNeighbourTbl[29][0-6]: 064 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 064 028 022 
+		nodeNeighbourTbl[31][0-6]: 064 064 064 030 029 023 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060a18
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060aa8
+	nodeElementTbl[0-32]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 027 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 000 027 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 027 001 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 001 027 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 027 002 027 
+		nodeElementTbl[6][0-8]: 027 027 027 027 027 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 027 027 
+		nodeElementTbl[8][0-8]: 027 027 027 000 027 027 027 003 
+		nodeElementTbl[9][0-8]: 027 027 000 027 027 027 003 027 
+		nodeElementTbl[10][0-8]: 027 000 027 001 027 003 027 004 
+		nodeElementTbl[11][0-8]: 000 027 001 027 003 027 004 027 
+		nodeElementTbl[12][0-8]: 027 001 027 002 027 004 027 005 
+		nodeElementTbl[13][0-8]: 001 027 002 027 004 027 005 027 
+		nodeElementTbl[14][0-8]: 027 002 027 027 027 005 027 027 
+		nodeElementTbl[15][0-8]: 002 027 027 027 005 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 003 027 027 027 006 
+		nodeElementTbl[17][0-8]: 027 027 003 027 027 027 006 027 
+		nodeElementTbl[18][0-8]: 027 003 027 004 027 006 027 007 
+		nodeElementTbl[19][0-8]: 003 027 004 027 006 027 007 027 
+		nodeElementTbl[20][0-8]: 027 004 027 005 027 007 027 008 
+		nodeElementTbl[21][0-8]: 004 027 005 027 007 027 008 027 
+		nodeElementTbl[22][0-8]: 027 005 027 027 027 008 027 027 
+		nodeElementTbl[23][0-8]: 005 027 027 027 008 027 027 027 
+		nodeElementTbl[24][0-8]: 027 027 027 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 027 027 027 027 027 
+		nodeElementTbl[26][0-8]: 027 006 027 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 027 007 027 027 027 027 027 
+		nodeElementTbl[28][0-8]: 027 007 027 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 027 008 027 027 027 027 027 
+		nodeElementTbl[30][0-8]: 027 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 027 027 027 027 
+	element (ptr): 0x80609a0
+	elementLocalCount: 9
+	elementDomainCount: 9
+	elementShadowCount: 0
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805a9f8
+	elementL2G[0-9]:   002 005 008 011 014 017 020 023 026 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805a9f8
+	elementD2G[0-9]:   002 005 008 011 014 017 020 023 026 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8060f38
+	elementG2L[0-27]:   027 027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8060f38
+	elementG2D[0-27]:   027 027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x805e710
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8060fb0
+	elementNeighbourTbl[0-9]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 003 027 027 004 027 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 000 027 027 027 027 002 027 027 003 027 027 004 027 027 005 027 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 027 027 004 027 027 005 027 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 000 027 027 001 027 027 027 027 027 027 027 004 027 027 027 027 027 006 027 027 007 027 
+		elementNeighbourTbl[4][0-26]: 027 000 027 027 001 027 027 002 027 027 003 027 027 027 027 005 027 027 006 027 027 007 027 027 008 027 
+		elementNeighbourTbl[5][0-26]: 027 001 027 027 002 027 027 027 027 027 004 027 027 027 027 027 027 027 007 027 027 008 027 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 003 027 027 004 027 027 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 003 027 027 004 027 027 005 027 027 006 027 027 027 027 008 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 004 027 027 005 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805efb0
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8061388
+	elementNodeTbl[0-9]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+	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)
+Test that the getNodeCoordPtrsOfElement() function works
+Element 0:
+	(0.67,0.00,0.00), (1.00,0.00,0.00), (1.00,0.33,0.00), (0.67,0.33,0.00), (0.67,0.00,0.33), (1.00,0.00,0.33), (1.00,0.33,0.33), (0.67,0.33,0.33), 
+Element 1:
+	(0.67,0.33,0.00), (1.00,0.33,0.00), (1.00,0.67,0.00), (0.67,0.67,0.00), (0.67,0.33,0.33), (1.00,0.33,0.33), (1.00,0.67,0.33), (0.67,0.67,0.33), 
+Element 2:
+	(0.67,0.67,0.00), (1.00,0.67,0.00), (1.00,1.00,0.00), (0.67,1.00,0.00), (0.67,0.67,0.33), (1.00,0.67,0.33), (1.00,1.00,0.33), (0.67,1.00,0.33), 
+Element 3:
+	(0.67,0.00,0.33), (1.00,0.00,0.33), (1.00,0.33,0.33), (0.67,0.33,0.33), (0.67,0.00,0.67), (1.00,0.00,0.67), (1.00,0.33,0.67), (0.67,0.33,0.67), 
+Element 4:
+	(0.67,0.33,0.33), (1.00,0.33,0.33), (1.00,0.67,0.33), (0.67,0.67,0.33), (0.67,0.33,0.67), (1.00,0.33,0.67), (1.00,0.67,0.67), (0.67,0.67,0.67), 
+Element 5:
+	(0.67,0.67,0.33), (1.00,0.67,0.33), (1.00,1.00,0.33), (0.67,1.00,0.33), (0.67,0.67,0.67), (1.00,0.67,0.67), (1.00,1.00,0.67), (0.67,1.00,0.67), 
+Element 6:
+	(0.67,0.00,0.67), (1.00,0.00,0.67), (1.00,0.33,0.67), (0.67,0.33,0.67), (0.67,0.00,1.00), (1.00,0.00,1.00), (1.00,0.33,1.00), (0.67,0.33,1.00), 
+Element 7:
+	(0.67,0.33,0.67), (1.00,0.33,0.67), (1.00,0.67,0.67), (0.67,0.67,0.67), (0.67,0.33,1.00), (1.00,0.33,1.00), (1.00,0.67,1.00), (0.67,0.67,1.00), 
+Element 8:
+	(0.67,0.67,0.67), (1.00,0.67,0.67), (1.00,1.00,0.67), (0.67,1.00,0.67), (0.67,0.67,1.00), (1.00,0.67,1.00), (1.00,1.00,1.00), (0.67,1.00,1.00), 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,292 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f3f8)
+Stg_Component (ptr): 0x805f3f8
+Stg_Object (ptr): 0x805f3f8
+	Stg_Class (ptr): 0x805f3f8
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7fdb1dd
+		_print (func ptr): 0xb7fdba6a
+		_copy (func ptr): 0xb7fdcc4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fda51c
+	_construct (func ptr): 0xb7fdb00e
+	_build (func ptr): 0xb7fdd322
+	_initialise (func ptr): 0xb7fde214
+	_execute (func ptr): 0xb7fde219
+	_destroy (func ptr): 0xb7fdb1d8
+	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): 0x805f0b0
+Extension (ptr):0x805f7c8
+Stg_Object (ptr): 0x805f7c8
+	Stg_Class (ptr): 0x805f7c8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f53018
+		_print (func ptr): 0xb7f53066
+		_copy (func ptr): 0xb7f53200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f828
+Stg_ObjectList (ptr):0x805f828
+	Stg_Class (ptr): 0x805f828
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f84f3e
+		_print (func ptr): 0xb7f84f75
+		_copy (func ptr): 0xb7f85217
+	_append(func ptr): 0xb7f85e7b
+	_prepend(func ptr): 0xb7f85f41
+	_replaceAll(func ptr): 0xb7f86005
+	_replace(func ptr): 0xb7f860be
+	_insertBefore(func ptr): 0xb7f8625b
+	_insertAfter(func ptr): 0xb7f86416
+	_remove(func ptr): 0xb7f865d3
+	_getIndex(func ptr): 0xb7f86679
+	_get(func ptr): 0xb7f86727
+	_allocMoreMemory(func ptr): 0xb7f868fa
+	_insertAtIndex(func ptr): 0xb7f86980
+	_removeByIndex(func ptr): 0xb7f869fe
+	_deleteAllObjects(func ptr): 0xb7f8687b
+	_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):0x805f898
+Stg_Object (ptr): 0x805f898
+	Stg_Class (ptr): 0x805f898
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f53018
+		_print (func ptr): 0xb7f53066
+		_copy (func ptr): 0xb7f53200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f8f8
+Stg_ObjectList (ptr):0x805f8f8
+	Stg_Class (ptr): 0x805f8f8
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f84f3e
+		_print (func ptr): 0xb7f84f75
+		_copy (func ptr): 0xb7f85217
+	_append(func ptr): 0xb7f85e7b
+	_prepend(func ptr): 0xb7f85f41
+	_replaceAll(func ptr): 0xb7f86005
+	_replace(func ptr): 0xb7f860be
+	_insertBefore(func ptr): 0xb7f8625b
+	_insertAfter(func ptr): 0xb7f86416
+	_remove(func ptr): 0xb7f865d3
+	_getIndex(func ptr): 0xb7f86679
+	_get(func ptr): 0xb7f86727
+	_allocMoreMemory(func ptr): 0xb7f868fa
+	_insertAtIndex(func ptr): 0xb7f86980
+	_removeByIndex(func ptr): 0xb7f869fe
+	_deleteAllObjects(func ptr): 0xb7f8687b
+	_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): 0x80600c8
+	nodeLocalCount: 32
+	nodeDomainCount: 32
+	nodeShadowCount: 0
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x80601d8
+	nodeCoord[0-32]:   (0.33,0.00,0.00), (0.67,0.00,0.00), (0.33,0.33,0.00), (0.67,0.33,0.00), (0.33,0.67,0.00), (0.67,0.67,0.00), (0.33,1.00,0.00), (0.67,1.00,0.00), (0.33,0.00,0.33), (0.67,0.00,0.33), (0.33,0.33,0.33), (0.67,0.33,0.33), (0.33,0.67,0.33), (0.67,0.67,0.33), (0.33,1.00,0.33), (0.67,1.00,0.33), (0.33,0.00,0.67), (0.67,0.00,0.67), (0.33,0.33,0.67), (0.67,0.33,0.67), (0.33,0.67,0.67), (0.67,0.67,0.67), (0.33,1.00,0.67), (0.67,1.00,0.67), (0.33,0.00,1.00), (0.67,0.00,1.00), (0.33,0.33,1.00), (0.67,0.33,1.00), (0.33,0.67,1.00), (0.67,0.67,1.00), (0.33,1.00,1.00), (0.67,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x805fea8
+	nodeL2G[0-32]:   001 002 005 006 009 010 013 014 017 018 021 022 025 026 029 030 033 034 037 038 041 042 045 046 049 050 053 054 057 058 061 062 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x805fea8
+	nodeD2G[0-32]:   001 002 005 006 009 010 013 014 017 018 021 022 025 026 029 030 033 034 037 038 041 042 045 046 049 050 053 054 057 058 061 062 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x80604e8
+	nodeG2L[0-64]:   064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x80604e8
+	nodeG2D[0-64]:   064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x80605f8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060688
+	nodeNeighbourTbl[0-32]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 064 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 064 000 064 
+		nodeNeighbourTbl[3][0-6]: 064 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 064 002 064 
+		nodeNeighbourTbl[5][0-6]: 064 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 064 004 064 
+		nodeNeighbourTbl[7][0-6]: 064 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 064 064 000 
+		nodeNeighbourTbl[9][0-6]: 064 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 064 008 002 
+		nodeNeighbourTbl[11][0-6]: 064 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 064 010 004 
+		nodeNeighbourTbl[13][0-6]: 064 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 064 012 006 
+		nodeNeighbourTbl[15][0-6]: 064 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 064 064 008 
+		nodeNeighbourTbl[17][0-6]: 064 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 064 016 010 
+		nodeNeighbourTbl[19][0-6]: 064 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 064 018 012 
+		nodeNeighbourTbl[21][0-6]: 064 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 064 020 014 
+		nodeNeighbourTbl[23][0-6]: 064 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 064 064 016 
+		nodeNeighbourTbl[25][0-6]: 064 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 064 024 018 
+		nodeNeighbourTbl[27][0-6]: 064 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 064 026 020 
+		nodeNeighbourTbl[29][0-6]: 064 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 064 028 022 
+		nodeNeighbourTbl[31][0-6]: 064 064 064 030 029 023 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060a90
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060b20
+	nodeElementTbl[0-32]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 027 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 000 027 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 027 001 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 001 027 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 027 002 027 
+		nodeElementTbl[6][0-8]: 027 027 027 027 027 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 027 027 
+		nodeElementTbl[8][0-8]: 027 027 027 000 027 027 027 003 
+		nodeElementTbl[9][0-8]: 027 027 000 027 027 027 003 027 
+		nodeElementTbl[10][0-8]: 027 000 027 001 027 003 027 004 
+		nodeElementTbl[11][0-8]: 000 027 001 027 003 027 004 027 
+		nodeElementTbl[12][0-8]: 027 001 027 002 027 004 027 005 
+		nodeElementTbl[13][0-8]: 001 027 002 027 004 027 005 027 
+		nodeElementTbl[14][0-8]: 027 002 027 027 027 005 027 027 
+		nodeElementTbl[15][0-8]: 002 027 027 027 005 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 003 027 027 027 006 
+		nodeElementTbl[17][0-8]: 027 027 003 027 027 027 006 027 
+		nodeElementTbl[18][0-8]: 027 003 027 004 027 006 027 007 
+		nodeElementTbl[19][0-8]: 003 027 004 027 006 027 007 027 
+		nodeElementTbl[20][0-8]: 027 004 027 005 027 007 027 008 
+		nodeElementTbl[21][0-8]: 004 027 005 027 007 027 008 027 
+		nodeElementTbl[22][0-8]: 027 005 027 027 027 008 027 027 
+		nodeElementTbl[23][0-8]: 005 027 027 027 008 027 027 027 
+		nodeElementTbl[24][0-8]: 027 027 027 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 027 027 027 027 027 
+		nodeElementTbl[26][0-8]: 027 006 027 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 027 007 027 027 027 027 027 
+		nodeElementTbl[28][0-8]: 027 007 027 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 027 008 027 027 027 027 027 
+		nodeElementTbl[30][0-8]: 027 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 027 027 027 027 
+	element (ptr): 0x8060a18
+	elementLocalCount: 9
+	elementDomainCount: 9
+	elementShadowCount: 0
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805a9f8
+	elementL2G[0-9]:   001 004 007 010 013 016 019 022 025 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805a9f8
+	elementD2G[0-9]:   001 004 007 010 013 016 019 022 025 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8060fb0
+	elementG2L[0-27]:   027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8060fb0
+	elementG2D[0-27]:   027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x805f058
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061028
+	elementNeighbourTbl[0-9]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 003 027 027 004 027 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 000 027 027 027 027 002 027 027 003 027 027 004 027 027 005 027 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 027 027 004 027 027 005 027 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 000 027 027 001 027 027 027 027 027 027 027 004 027 027 027 027 027 006 027 027 007 027 
+		elementNeighbourTbl[4][0-26]: 027 000 027 027 001 027 027 002 027 027 003 027 027 027 027 005 027 027 006 027 027 007 027 027 008 027 
+		elementNeighbourTbl[5][0-26]: 027 001 027 027 002 027 027 027 027 027 004 027 027 027 027 027 027 027 007 027 027 008 027 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 003 027 027 004 027 027 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 003 027 027 004 027 027 005 027 027 006 027 027 027 027 008 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 004 027 027 005 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805cfe0
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8061400
+	elementNodeTbl[0-9]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+	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)
+Test that the getNodeCoordPtrsOfElement() function works
+Element 0:
+	(0.33,0.00,0.00), (0.67,0.00,0.00), (0.67,0.33,0.00), (0.33,0.33,0.00), (0.33,0.00,0.33), (0.67,0.00,0.33), (0.67,0.33,0.33), (0.33,0.33,0.33), 
+Element 1:
+	(0.33,0.33,0.00), (0.67,0.33,0.00), (0.67,0.67,0.00), (0.33,0.67,0.00), (0.33,0.33,0.33), (0.67,0.33,0.33), (0.67,0.67,0.33), (0.33,0.67,0.33), 
+Element 2:
+	(0.33,0.67,0.00), (0.67,0.67,0.00), (0.67,1.00,0.00), (0.33,1.00,0.00), (0.33,0.67,0.33), (0.67,0.67,0.33), (0.67,1.00,0.33), (0.33,1.00,0.33), 
+Element 3:
+	(0.33,0.00,0.33), (0.67,0.00,0.33), (0.67,0.33,0.33), (0.33,0.33,0.33), (0.33,0.00,0.67), (0.67,0.00,0.67), (0.67,0.33,0.67), (0.33,0.33,0.67), 
+Element 4:
+	(0.33,0.33,0.33), (0.67,0.33,0.33), (0.67,0.67,0.33), (0.33,0.67,0.33), (0.33,0.33,0.67), (0.67,0.33,0.67), (0.67,0.67,0.67), (0.33,0.67,0.67), 
+Element 5:
+	(0.33,0.67,0.33), (0.67,0.67,0.33), (0.67,1.00,0.33), (0.33,1.00,0.33), (0.33,0.67,0.67), (0.67,0.67,0.67), (0.67,1.00,0.67), (0.33,1.00,0.67), 
+Element 6:
+	(0.33,0.00,0.67), (0.67,0.00,0.67), (0.67,0.33,0.67), (0.33,0.33,0.67), (0.33,0.00,1.00), (0.67,0.00,1.00), (0.67,0.33,1.00), (0.33,0.33,1.00), 
+Element 7:
+	(0.33,0.33,0.67), (0.67,0.33,0.67), (0.67,0.67,0.67), (0.33,0.67,0.67), (0.33,0.33,1.00), (0.67,0.33,1.00), (0.67,0.67,1.00), (0.33,0.67,1.00), 
+Element 8:
+	(0.33,0.67,0.67), (0.67,0.67,0.67), (0.67,1.00,0.67), (0.33,1.00,0.67), (0.33,0.67,1.00), (0.67,0.67,1.00), (0.67,1.00,1.00), (0.33,1.00,1.00), 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,292 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f360)
+Stg_Component (ptr): 0x805f360
+Stg_Object (ptr): 0x805f360
+	Stg_Class (ptr): 0x805f360
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f381dd
+		_print (func ptr): 0xb7f38a6a
+		_copy (func ptr): 0xb7f39c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3751c
+	_construct (func ptr): 0xb7f3800e
+	_build (func ptr): 0xb7f3a322
+	_initialise (func ptr): 0xb7f3b214
+	_execute (func ptr): 0xb7f3b219
+	_destroy (func ptr): 0xb7f381d8
+	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): 0x805f018
+Extension (ptr):0x805f730
+Stg_Object (ptr): 0x805f730
+	Stg_Class (ptr): 0x805f730
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7eb0018
+		_print (func ptr): 0xb7eb0066
+		_copy (func ptr): 0xb7eb0200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f790
+Stg_ObjectList (ptr):0x805f790
+	Stg_Class (ptr): 0x805f790
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ee1f3e
+		_print (func ptr): 0xb7ee1f75
+		_copy (func ptr): 0xb7ee2217
+	_append(func ptr): 0xb7ee2e7b
+	_prepend(func ptr): 0xb7ee2f41
+	_replaceAll(func ptr): 0xb7ee3005
+	_replace(func ptr): 0xb7ee30be
+	_insertBefore(func ptr): 0xb7ee325b
+	_insertAfter(func ptr): 0xb7ee3416
+	_remove(func ptr): 0xb7ee35d3
+	_getIndex(func ptr): 0xb7ee3679
+	_get(func ptr): 0xb7ee3727
+	_allocMoreMemory(func ptr): 0xb7ee38fa
+	_insertAtIndex(func ptr): 0xb7ee3980
+	_removeByIndex(func ptr): 0xb7ee39fe
+	_deleteAllObjects(func ptr): 0xb7ee387b
+	_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):0x805f800
+Stg_Object (ptr): 0x805f800
+	Stg_Class (ptr): 0x805f800
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7eb0018
+		_print (func ptr): 0xb7eb0066
+		_copy (func ptr): 0xb7eb0200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f860
+Stg_ObjectList (ptr):0x805f860
+	Stg_Class (ptr): 0x805f860
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ee1f3e
+		_print (func ptr): 0xb7ee1f75
+		_copy (func ptr): 0xb7ee2217
+	_append(func ptr): 0xb7ee2e7b
+	_prepend(func ptr): 0xb7ee2f41
+	_replaceAll(func ptr): 0xb7ee3005
+	_replace(func ptr): 0xb7ee30be
+	_insertBefore(func ptr): 0xb7ee325b
+	_insertAfter(func ptr): 0xb7ee3416
+	_remove(func ptr): 0xb7ee35d3
+	_getIndex(func ptr): 0xb7ee3679
+	_get(func ptr): 0xb7ee3727
+	_allocMoreMemory(func ptr): 0xb7ee38fa
+	_insertAtIndex(func ptr): 0xb7ee3980
+	_removeByIndex(func ptr): 0xb7ee39fe
+	_deleteAllObjects(func ptr): 0xb7ee387b
+	_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): 0x8060030
+	nodeLocalCount: 32
+	nodeDomainCount: 32
+	nodeShadowCount: 0
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060140
+	nodeCoord[0-32]:   (0.67,0.00,0.00), (1.00,0.00,0.00), (0.67,0.33,0.00), (1.00,0.33,0.00), (0.67,0.67,0.00), (1.00,0.67,0.00), (0.67,1.00,0.00), (1.00,1.00,0.00), (0.67,0.00,0.33), (1.00,0.00,0.33), (0.67,0.33,0.33), (1.00,0.33,0.33), (0.67,0.67,0.33), (1.00,0.67,0.33), (0.67,1.00,0.33), (1.00,1.00,0.33), (0.67,0.00,0.67), (1.00,0.00,0.67), (0.67,0.33,0.67), (1.00,0.33,0.67), (0.67,0.67,0.67), (1.00,0.67,0.67), (0.67,1.00,0.67), (1.00,1.00,0.67), (0.67,0.00,1.00), (1.00,0.00,1.00), (0.67,0.33,1.00), (1.00,0.33,1.00), (0.67,0.67,1.00), (1.00,0.67,1.00), (0.67,1.00,1.00), (1.00,1.00,1.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x805fe10
+	nodeL2G[0-32]:   002 003 006 007 010 011 014 015 018 019 022 023 026 027 030 031 034 035 038 039 042 043 046 047 050 051 054 055 058 059 062 063 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x805fe10
+	nodeD2G[0-32]:   002 003 006 007 010 011 014 015 018 019 022 023 026 027 030 031 034 035 038 039 042 043 046 047 050 051 054 055 058 059 062 063 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060450
+	nodeG2L[0-64]:   064 064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060450
+	nodeG2D[0-64]:   064 064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060560
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x80605f0
+	nodeNeighbourTbl[0-32]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 064 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 064 000 064 
+		nodeNeighbourTbl[3][0-6]: 064 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 064 002 064 
+		nodeNeighbourTbl[5][0-6]: 064 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 064 004 064 
+		nodeNeighbourTbl[7][0-6]: 064 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 064 064 000 
+		nodeNeighbourTbl[9][0-6]: 064 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 064 008 002 
+		nodeNeighbourTbl[11][0-6]: 064 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 064 010 004 
+		nodeNeighbourTbl[13][0-6]: 064 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 064 012 006 
+		nodeNeighbourTbl[15][0-6]: 064 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 064 064 008 
+		nodeNeighbourTbl[17][0-6]: 064 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 064 016 010 
+		nodeNeighbourTbl[19][0-6]: 064 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 064 018 012 
+		nodeNeighbourTbl[21][0-6]: 064 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 064 020 014 
+		nodeNeighbourTbl[23][0-6]: 064 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 064 064 016 
+		nodeNeighbourTbl[25][0-6]: 064 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 064 024 018 
+		nodeNeighbourTbl[27][0-6]: 064 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 064 026 020 
+		nodeNeighbourTbl[29][0-6]: 064 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 064 028 022 
+		nodeNeighbourTbl[31][0-6]: 064 064 064 030 029 023 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x80609f8
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060a88
+	nodeElementTbl[0-32]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 027 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 000 027 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 027 001 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 001 027 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 027 002 027 
+		nodeElementTbl[6][0-8]: 027 027 027 027 027 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 027 027 
+		nodeElementTbl[8][0-8]: 027 027 027 000 027 027 027 003 
+		nodeElementTbl[9][0-8]: 027 027 000 027 027 027 003 027 
+		nodeElementTbl[10][0-8]: 027 000 027 001 027 003 027 004 
+		nodeElementTbl[11][0-8]: 000 027 001 027 003 027 004 027 
+		nodeElementTbl[12][0-8]: 027 001 027 002 027 004 027 005 
+		nodeElementTbl[13][0-8]: 001 027 002 027 004 027 005 027 
+		nodeElementTbl[14][0-8]: 027 002 027 027 027 005 027 027 
+		nodeElementTbl[15][0-8]: 002 027 027 027 005 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 003 027 027 027 006 
+		nodeElementTbl[17][0-8]: 027 027 003 027 027 027 006 027 
+		nodeElementTbl[18][0-8]: 027 003 027 004 027 006 027 007 
+		nodeElementTbl[19][0-8]: 003 027 004 027 006 027 007 027 
+		nodeElementTbl[20][0-8]: 027 004 027 005 027 007 027 008 
+		nodeElementTbl[21][0-8]: 004 027 005 027 007 027 008 027 
+		nodeElementTbl[22][0-8]: 027 005 027 027 027 008 027 027 
+		nodeElementTbl[23][0-8]: 005 027 027 027 008 027 027 027 
+		nodeElementTbl[24][0-8]: 027 027 027 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 027 027 027 027 027 
+		nodeElementTbl[26][0-8]: 027 006 027 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 027 007 027 027 027 027 027 
+		nodeElementTbl[28][0-8]: 027 007 027 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 027 008 027 027 027 027 027 
+		nodeElementTbl[30][0-8]: 027 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 027 027 027 027 
+	element (ptr): 0x8060980
+	elementLocalCount: 9
+	elementDomainCount: 9
+	elementShadowCount: 0
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805a9f8
+	elementL2G[0-9]:   002 005 008 011 014 017 020 023 026 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805a9f8
+	elementD2G[0-9]:   002 005 008 011 014 017 020 023 026 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8060f18
+	elementG2L[0-27]:   027 027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8060f18
+	elementG2D[0-27]:   027 027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x805efc0
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8060f90
+	elementNeighbourTbl[0-9]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 003 027 027 004 027 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 000 027 027 027 027 002 027 027 003 027 027 004 027 027 005 027 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 001 027 027 027 027 027 027 027 004 027 027 005 027 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 000 027 027 001 027 027 027 027 027 027 027 004 027 027 027 027 027 006 027 027 007 027 
+		elementNeighbourTbl[4][0-26]: 027 000 027 027 001 027 027 002 027 027 003 027 027 027 027 005 027 027 006 027 027 007 027 027 008 027 
+		elementNeighbourTbl[5][0-26]: 027 001 027 027 002 027 027 027 027 027 004 027 027 027 027 027 027 027 007 027 027 008 027 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 003 027 027 004 027 027 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 003 027 027 004 027 027 005 027 027 006 027 027 027 027 008 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 004 027 027 005 027 027 027 027 027 007 027 027 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805cfe0
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8061368
+	elementNodeTbl[0-9]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+	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)
+Test that the getNodeCoordPtrsOfElement() function works
+Element 0:
+	(0.67,0.00,0.00), (1.00,0.00,0.00), (1.00,0.33,0.00), (0.67,0.33,0.00), (0.67,0.00,0.33), (1.00,0.00,0.33), (1.00,0.33,0.33), (0.67,0.33,0.33), 
+Element 1:
+	(0.67,0.33,0.00), (1.00,0.33,0.00), (1.00,0.67,0.00), (0.67,0.67,0.00), (0.67,0.33,0.33), (1.00,0.33,0.33), (1.00,0.67,0.33), (0.67,0.67,0.33), 
+Element 2:
+	(0.67,0.67,0.00), (1.00,0.67,0.00), (1.00,1.00,0.00), (0.67,1.00,0.00), (0.67,0.67,0.33), (1.00,0.67,0.33), (1.00,1.00,0.33), (0.67,1.00,0.33), 
+Element 3:
+	(0.67,0.00,0.33), (1.00,0.00,0.33), (1.00,0.33,0.33), (0.67,0.33,0.33), (0.67,0.00,0.67), (1.00,0.00,0.67), (1.00,0.33,0.67), (0.67,0.33,0.67), 
+Element 4:
+	(0.67,0.33,0.33), (1.00,0.33,0.33), (1.00,0.67,0.33), (0.67,0.67,0.33), (0.67,0.33,0.67), (1.00,0.33,0.67), (1.00,0.67,0.67), (0.67,0.67,0.67), 
+Element 5:
+	(0.67,0.67,0.33), (1.00,0.67,0.33), (1.00,1.00,0.33), (0.67,1.00,0.33), (0.67,0.67,0.67), (1.00,0.67,0.67), (1.00,1.00,0.67), (0.67,1.00,0.67), 
+Element 6:
+	(0.67,0.00,0.67), (1.00,0.00,0.67), (1.00,0.33,0.67), (0.67,0.33,0.67), (0.67,0.00,1.00), (1.00,0.00,1.00), (1.00,0.33,1.00), (0.67,0.33,1.00), 
+Element 7:
+	(0.67,0.33,0.67), (1.00,0.33,0.67), (1.00,0.67,0.67), (0.67,0.67,0.67), (0.67,0.33,1.00), (1.00,0.33,1.00), (1.00,0.67,1.00), (0.67,0.67,1.00), 
+Element 8:
+	(0.67,0.67,0.67), (1.00,0.67,0.67), (1.00,1.00,0.67), (0.67,1.00,0.67), (0.67,0.67,1.00), (1.00,0.67,1.00), (1.00,1.00,1.00), (0.67,1.00,1.00), 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testMesh.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.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;
+	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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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;
+	
+	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( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	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, "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;
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	
+	if (rank == procToWatch)
+	{
+		Element_DomainIndex	element_dI = 0;
+
+		Print(mesh, stream);
+		
+		Journal_Printf( stream, "Test that the getNodeCoordPtrsOfElement() function works\n" );
+		for ( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ ) {
+			Journal_Printf( stream, "Element %u:\n\t", element_dI );
+			Mesh_PrintNodeCoordsOfElement( mesh, element_dI, 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);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,18 @@
+MeshLayout (ptr): 0x80c4c58
+	topology (ptr): 0x80c46f0
+	geometry (ptr): 0x80c4830
+	decomp (ptr): 0x80c4ac8
+Class (ptr): 0x80c4c58
+	sizeOfSelf: 32
+	_deleteSelf: True
+	type: MeshLayout
+	_delete (func ptr): 0x80556bd
+	_print (func ptr): 0x80556e9
+Point: {0.25, 0.25, 0.25} - element: 0
+Point: {0.75, 0.25, 0.25} - element: 1
+Point: {0.25, 0.75, 0.25} - element: 2
+Point: {0.75, 0.75, 0.25} - element: 3
+Point: {0.25, 0.25, 0.75} - element: 4
+Point: {0.75, 0.25, 0.75} - element: 5
+Point: {0.25, 0.75, 0.75} - element: 6
+Point: {0.75, 0.75, 0.75} - element: 7

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshLayout " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testMeshLayout.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+
+int main(int argc, char *argv[])
+{
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Dictionary*	dictionary;
+	MeshTopology*	mt;
+	MeshGeometry*	mg;
+	MeshDecomp*	md;
+	MeshLayout*	ml;
+	Coord		point[8] = {{0.25, 0.25, 0.25}, {0.75, 0.25, 0.25}, {0.25, 0.75, 0.25}, {0.75, 0.75, 0.25}, 
+				{0.25, 0.25, 0.75}, {0.75, 0.25, 0.75}, {0.25, 0.75, 0.75}, {0.75, 0.75, 0.75}};
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	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( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	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 ) );
+	
+	mt = (MeshTopology*)HexaMeshTopology_New(dictionary);
+	mg = (MeshGeometry*)HexaMeshGeometry_New(dictionary);
+	md = (MeshDecomp*)RegularMeshDecomp_New(dictionary, MPI_COMM_WORLD, mt);
+	ml = MeshLayout_New(mt, mg, md);
+	
+	if (rank == procToWatch)
+	{
+		Element_GlobalIndex	elt;
+		Index			i;
+		
+		Print(ml);
+		
+		for (i = 0; i < 8; i++)
+		{
+			elt = MeshLayout_ElementWithPoint(ml, point[i]);
+			printf("Point: {%g, %g, %g} - element: ", point[i][0], point[i][1], point[i][2]);
+			if (elt < ml->decomp->nodeGlobalCount)
+				printf("%u\n", elt);
+			else
+				printf("X\n");
+		}
+	}
+	
+	Stg_Class_Delete(ml);
+	Stg_Class_Delete(md);
+	Stg_Class_Delete(mg);
+	Stg_Class_Delete(mt);
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,414 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f770)
+Stg_Component (ptr): 0x805f770
+Stg_Object (ptr): 0x805f770
+	Stg_Class (ptr): 0x805f770
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7efe1dd
+		_print (func ptr): 0xb7efea6a
+		_copy (func ptr): 0xb7effc4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7efd51c
+	_construct (func ptr): 0xb7efe00e
+	_build (func ptr): 0xb7f00322
+	_initialise (func ptr): 0xb7f01214
+	_execute (func ptr): 0xb7f01219
+	_destroy (func ptr): 0xb7efe1d8
+	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): 0x805c5a8
+	layout (ptr): 0x805f4c0
+Extension (ptr):0x805fb40
+Stg_Object (ptr): 0x805fb40
+	Stg_Class (ptr): 0x805fb40
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e76018
+		_print (func ptr): 0xb7e76066
+		_copy (func ptr): 0xb7e76200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fba0
+Stg_ObjectList (ptr):0x805fba0
+	Stg_Class (ptr): 0x805fba0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ea7f3e
+		_print (func ptr): 0xb7ea7f75
+		_copy (func ptr): 0xb7ea8217
+	_append(func ptr): 0xb7ea8e7b
+	_prepend(func ptr): 0xb7ea8f41
+	_replaceAll(func ptr): 0xb7ea9005
+	_replace(func ptr): 0xb7ea90be
+	_insertBefore(func ptr): 0xb7ea925b
+	_insertAfter(func ptr): 0xb7ea9416
+	_remove(func ptr): 0xb7ea95d3
+	_getIndex(func ptr): 0xb7ea9679
+	_get(func ptr): 0xb7ea9727
+	_allocMoreMemory(func ptr): 0xb7ea98fa
+	_insertAtIndex(func ptr): 0xb7ea9980
+	_removeByIndex(func ptr): 0xb7ea99fe
+	_deleteAllObjects(func ptr): 0xb7ea987b
+	_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):0x805fc10
+Stg_Object (ptr): 0x805fc10
+	Stg_Class (ptr): 0x805fc10
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7e76018
+		_print (func ptr): 0xb7e76066
+		_copy (func ptr): 0xb7e76200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fc70
+Stg_ObjectList (ptr):0x805fc70
+	Stg_Class (ptr): 0x805fc70
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ea7f3e
+		_print (func ptr): 0xb7ea7f75
+		_copy (func ptr): 0xb7ea8217
+	_append(func ptr): 0xb7ea8e7b
+	_prepend(func ptr): 0xb7ea8f41
+	_replaceAll(func ptr): 0xb7ea9005
+	_replace(func ptr): 0xb7ea90be
+	_insertBefore(func ptr): 0xb7ea925b
+	_insertAfter(func ptr): 0xb7ea9416
+	_remove(func ptr): 0xb7ea95d3
+	_getIndex(func ptr): 0xb7ea9679
+	_get(func ptr): 0xb7ea9727
+	_allocMoreMemory(func ptr): 0xb7ea98fa
+	_insertAtIndex(func ptr): 0xb7ea9980
+	_removeByIndex(func ptr): 0xb7ea99fe
+	_deleteAllObjects(func ptr): 0xb7ea987b
+	_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): 0x80604a0
+	nodeLocalCount: 12
+	nodeDomainCount: 27
+	nodeShadowCount: 15
+	nodeGlobalCount: 27
+	nodeCoord (ptr): 0x8060588
+	nodeCoord[0-27]:   (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060280
+	nodeL2G[0-12]:   000 001 003 004 009 010 012 013 018 019 021 022 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060280
+	nodeD2G[0-27]:   000 001 003 004 009 010 012 013 018 019 021 022 002 005 006 007 008 011 014 015 016 017 020 023 024 025 026 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060898
+	nodeG2L[0-27]:   000 001 027 002 003 027 027 027 027 004 005 027 006 007 027 027 027 027 008 009 027 010 011 027 027 027 027 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060820
+	nodeG2D[0-27]:   000 001 012 002 003 013 014 015 016 004 005 017 006 007 018 019 020 021 008 009 022 010 011 023 024 025 026 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060910
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060988
+	nodeNeighbourTbl[0-27]:
+		nodeNeighbourTbl[0][0-6]: 001 002 004 027 027 027 
+		nodeNeighbourTbl[1][0-6]: 012 003 005 000 027 027 
+		nodeNeighbourTbl[2][0-6]: 003 014 006 027 000 027 
+		nodeNeighbourTbl[3][0-6]: 013 015 007 002 001 027 
+		nodeNeighbourTbl[4][0-6]: 005 006 008 027 027 000 
+		nodeNeighbourTbl[5][0-6]: 017 007 009 004 027 001 
+		nodeNeighbourTbl[6][0-6]: 007 019 010 027 004 002 
+		nodeNeighbourTbl[7][0-6]: 018 020 011 006 005 003 
+		nodeNeighbourTbl[8][0-6]: 009 010 027 027 027 004 
+		nodeNeighbourTbl[9][0-6]: 022 011 027 008 027 005 
+		nodeNeighbourTbl[10][0-6]: 011 024 027 027 008 006 
+		nodeNeighbourTbl[11][0-6]: 023 025 027 010 009 007 
+		nodeNeighbourTbl[12][0-6]: 027 013 017 001 027 027 
+		nodeNeighbourTbl[13][0-6]: 027 016 018 003 012 027 
+		nodeNeighbourTbl[14][0-6]: 015 027 019 027 002 027 
+		nodeNeighbourTbl[15][0-6]: 016 027 020 014 003 027 
+		nodeNeighbourTbl[16][0-6]: 027 027 021 015 013 027 
+		nodeNeighbourTbl[17][0-6]: 027 018 022 005 027 012 
+		nodeNeighbourTbl[18][0-6]: 027 021 023 007 017 013 
+		nodeNeighbourTbl[19][0-6]: 020 027 024 027 006 014 
+		nodeNeighbourTbl[20][0-6]: 021 027 025 019 007 015 
+		nodeNeighbourTbl[21][0-6]: 027 027 026 020 018 016 
+		nodeNeighbourTbl[22][0-6]: 027 023 027 009 027 017 
+		nodeNeighbourTbl[23][0-6]: 027 026 027 011 022 018 
+		nodeNeighbourTbl[24][0-6]: 025 027 027 027 010 019 
+		nodeNeighbourTbl[25][0-6]: 026 027 027 024 011 020 
+		nodeNeighbourTbl[26][0-6]: 027 027 027 025 023 021 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060c88
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060d00
+	nodeElementTbl[0-27]:
+		nodeElementTbl[0][0-8]: 008 008 008 008 008 008 008 000 
+		nodeElementTbl[1][0-8]: 008 008 008 008 008 008 000 002 
+		nodeElementTbl[2][0-8]: 008 008 008 008 008 000 008 003 
+		nodeElementTbl[3][0-8]: 008 008 008 008 000 002 003 004 
+		nodeElementTbl[4][0-8]: 008 008 008 000 008 008 008 001 
+		nodeElementTbl[5][0-8]: 008 008 000 002 008 008 001 005 
+		nodeElementTbl[6][0-8]: 008 000 008 003 008 001 008 006 
+		nodeElementTbl[7][0-8]: 000 002 003 004 001 005 006 007 
+		nodeElementTbl[8][0-8]: 008 008 008 001 008 008 008 008 
+		nodeElementTbl[9][0-8]: 008 008 001 005 008 008 008 008 
+		nodeElementTbl[10][0-8]: 008 001 008 006 008 008 008 008 
+		nodeElementTbl[11][0-8]: 001 005 006 007 008 008 008 008 
+		nodeElementTbl[12][0-8]: 008 008 008 008 008 008 002 008 
+		nodeElementTbl[13][0-8]: 008 008 008 008 002 008 004 008 
+		nodeElementTbl[14][0-8]: 008 008 008 008 008 003 008 008 
+		nodeElementTbl[15][0-8]: 008 008 008 008 003 004 008 008 
+		nodeElementTbl[16][0-8]: 008 008 008 008 004 008 008 008 
+		nodeElementTbl[17][0-8]: 008 008 002 008 008 008 005 008 
+		nodeElementTbl[18][0-8]: 002 008 004 008 005 008 007 008 
+		nodeElementTbl[19][0-8]: 008 003 008 008 008 006 008 008 
+		nodeElementTbl[20][0-8]: 003 004 008 008 006 007 008 008 
+		nodeElementTbl[21][0-8]: 004 008 008 008 007 008 008 008 
+		nodeElementTbl[22][0-8]: 008 008 005 008 008 008 008 008 
+		nodeElementTbl[23][0-8]: 005 008 007 008 008 008 008 008 
+		nodeElementTbl[24][0-8]: 008 006 008 008 008 008 008 008 
+		nodeElementTbl[25][0-8]: 006 007 008 008 008 008 008 008 
+		nodeElementTbl[26][0-8]: 007 008 008 008 008 008 008 008 
+	element (ptr): 0x80610d8
+	elementLocalCount: 2
+	elementDomainCount: 8
+	elementShadowCount: 6
+	elementGlobalCount: 8
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805d048
+	elementL2G[0-2]:   000 004 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805d048
+	elementD2G[0-8]:   000 004 001 002 003 005 006 007 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8061158
+	elementG2L[0-8]:   000 008 008 008 001 008 008 008 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8061128
+	elementG2D[0-8]:   000 002 003 004 001 005 006 007 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061188
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x80611b8
+	elementNeighbourTbl[0-8]:
+		elementNeighbourTbl[0][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 008 002 008 003 004 008 008 008 008 001 005 008 006 007 
+		elementNeighbourTbl[1][0-26]: 008 008 008 008 000 002 008 003 004 008 008 008 008 005 008 006 007 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[2][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 000 008 003 004 008 008 008 008 001 005 008 006 007 008 
+		elementNeighbourTbl[3][0-26]: 008 008 008 008 008 008 008 008 008 008 000 002 008 004 008 008 008 008 001 005 008 006 007 008 008 008 
+		elementNeighbourTbl[4][0-26]: 008 008 008 008 008 008 008 008 008 000 002 008 003 008 008 008 008 001 005 008 006 007 008 008 008 008 
+		elementNeighbourTbl[5][0-26]: 008 008 008 000 002 008 003 004 008 008 008 008 001 008 006 007 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[6][0-26]: 008 000 002 008 003 004 008 008 008 008 001 005 008 007 008 008 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[7][0-26]: 000 002 008 003 004 008 008 008 008 001 005 008 006 008 008 008 008 008 008 008 008 008 008 008 008 008 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805aa50
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8061528
+	elementNodeTbl[0-8]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 004 005 007 006 
+		elementNodeTbl[1][0-8]: 004 005 007 006 008 009 011 010 
+		elementNodeTbl[2][0-8]: 001 012 013 003 005 017 018 007 
+		elementNodeTbl[3][0-8]: 002 003 015 014 006 007 020 019 
+		elementNodeTbl[4][0-8]: 003 013 016 015 007 018 021 020 
+		elementNodeTbl[5][0-8]: 005 017 018 007 009 022 023 011 
+		elementNodeTbl[6][0-8]: 006 007 020 019 010 011 025 024 
+		elementNodeTbl[7][0-8]: 007 018 021 020 011 023 026 025 
+	procNbrCnt: 3
+	procNbrTbl (ptr): 0x80602f8
+		procNbrTbl[0]: 1
+		procNbrTbl[1]: 2
+		procNbrTbl[2]: 3
+	elementShadowInfo->procShadowedCnt (ptr): 0x8060468
+		elementShadowInfo->procShadowedCnt[0]: 2
+		elementShadowInfo->procShadowedCnt[1]: 2
+		elementShadowInfo->procShadowedCnt[2]: 2
+	elementShadowInfo->procShadowedTbl (ptr): 0x805d078
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x8060388
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+		elementShadowInfo->procShadowedTbl[1] (ptr): 0x8061750
+			elementShadowInfo->procShadowedTbl[1][0]: 0
+			elementShadowInfo->procShadowedTbl[1][1]: 1
+		elementShadowInfo->procShadowedTbl[2] (ptr): 0x80617a8
+			elementShadowInfo->procShadowedTbl[2][0]: 0
+			elementShadowInfo->procShadowedTbl[2][1]: 1
+	elementShadowInfo->procShadowCnt (ptr): 0x80617c0
+		elementShadowInfo->procShadowCnt[0]: 2
+		elementShadowInfo->procShadowCnt[1]: 2
+		elementShadowInfo->procShadowCnt[2]: 2
+	elementShadowInfo->procShadowTbl (ptr): 0x80617d8
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x80617f0
+			elementShadowInfo->procShadowTbl[0][0]: 2
+			elementShadowInfo->procShadowTbl[0][1]: 5
+		elementShadowInfo->procShadowTbl[1] (ptr): 0x8061808
+			elementShadowInfo->procShadowTbl[1][0]: 3
+			elementShadowInfo->procShadowTbl[1][1]: 6
+		elementShadowInfo->procShadowTbl[2] (ptr): 0x8061820
+			elementShadowInfo->procShadowTbl[2][0]: 4
+			elementShadowInfo->procShadowTbl[2][1]: 7
+	nodeShadowInfo->procShadowedCnt (ptr): 0x8061878
+		nodeShadowInfo->procShadowedCnt[0]: 6
+		nodeShadowInfo->procShadowedCnt[1]: 6
+		nodeShadowInfo->procShadowedCnt[2]: 9
+	nodeShadowInfo->procShadowedTbl (ptr): 0x8061890
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x80616a8
+			nodeShadowInfo->procShadowedTbl[0][0]: 0
+			nodeShadowInfo->procShadowedTbl[0][1]: 2
+			nodeShadowInfo->procShadowedTbl[0][2]: 4
+			nodeShadowInfo->procShadowedTbl[0][3]: 6
+			nodeShadowInfo->procShadowedTbl[0][4]: 8
+			nodeShadowInfo->procShadowedTbl[0][5]: 10
+		nodeShadowInfo->procShadowedTbl[1] (ptr): 0x8061680
+			nodeShadowInfo->procShadowedTbl[1][0]: 0
+			nodeShadowInfo->procShadowedTbl[1][1]: 1
+			nodeShadowInfo->procShadowedTbl[1][2]: 4
+			nodeShadowInfo->procShadowedTbl[1][3]: 5
+			nodeShadowInfo->procShadowedTbl[1][4]: 8
+			nodeShadowInfo->procShadowedTbl[1][5]: 9
+		nodeShadowInfo->procShadowedTbl[2] (ptr): 0x8061a70
+			nodeShadowInfo->procShadowedTbl[2][0]: 0
+			nodeShadowInfo->procShadowedTbl[2][1]: 1
+			nodeShadowInfo->procShadowedTbl[2][2]: 2
+			nodeShadowInfo->procShadowedTbl[2][3]: 4
+			nodeShadowInfo->procShadowedTbl[2][4]: 5
+			nodeShadowInfo->procShadowedTbl[2][5]: 6
+			nodeShadowInfo->procShadowedTbl[2][6]: 8
+			nodeShadowInfo->procShadowedTbl[2][7]: 9
+			nodeShadowInfo->procShadowedTbl[2][8]: 10
+	nodeShadowInfo->procShadowCnt (ptr): 0x8061aa0
+		nodeShadowInfo->procShadowCnt[0]: 6
+		nodeShadowInfo->procShadowCnt[1]: 6
+		nodeShadowInfo->procShadowCnt[2]: 9
+	nodeShadowInfo->procShadowTbl (ptr): 0x8061ab8
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8061658
+			nodeShadowInfo->procShadowTbl[0][0]: 12
+			nodeShadowInfo->procShadowTbl[0][1]: 13
+			nodeShadowInfo->procShadowTbl[0][2]: 17
+			nodeShadowInfo->procShadowTbl[0][3]: 18
+			nodeShadowInfo->procShadowTbl[0][4]: 22
+			nodeShadowInfo->procShadowTbl[0][5]: 23
+		nodeShadowInfo->procShadowTbl[1] (ptr): 0x8061ad0
+			nodeShadowInfo->procShadowTbl[1][0]: 14
+			nodeShadowInfo->procShadowTbl[1][1]: 15
+			nodeShadowInfo->procShadowTbl[1][2]: 19
+			nodeShadowInfo->procShadowTbl[1][3]: 20
+			nodeShadowInfo->procShadowTbl[1][4]: 24
+			nodeShadowInfo->procShadowTbl[1][5]: 25
+		nodeShadowInfo->procShadowTbl[2] (ptr): 0x8061af8
+			nodeShadowInfo->procShadowTbl[2][0]: 13
+			nodeShadowInfo->procShadowTbl[2][1]: 15
+			nodeShadowInfo->procShadowTbl[2][2]: 16
+			nodeShadowInfo->procShadowTbl[2][3]: 18
+			nodeShadowInfo->procShadowTbl[2][4]: 20
+			nodeShadowInfo->procShadowTbl[2][5]: 21
+			nodeShadowInfo->procShadowTbl[2][6]: 23
+			nodeShadowInfo->procShadowTbl[2][7]: 25
+			nodeShadowInfo->procShadowTbl[2][8]: 26
+Pre-sync:
+	nodeCoord[0]: { 0, 0, 0 } - temp: 10
+	nodeCoord[1]: { 0, 0, 0 } - temp: 10
+	nodeCoord[2]: { 0, 0, 0 } - temp: 10
+	nodeCoord[3]: { 0, 0, 0 } - temp: 10
+	nodeCoord[4]: { 0, 0, 0 } - temp: 10
+	nodeCoord[5]: { 0, 0, 0 } - temp: 10
+	nodeCoord[6]: { 0, 0, 0 } - temp: 10
+	nodeCoord[7]: { 0, 0, 0 } - temp: 10
+	nodeCoord[8]: { 0, 0, 0 } - temp: 10
+	nodeCoord[9]: { 0, 0, 0 } - temp: 10
+	nodeCoord[10]: { 0, 0, 0 } - temp: 10
+	nodeCoord[11]: { 0, 0, 0 } - temp: 10
+	nodeCoord[12]: { 0, 0, 0 } - temp: 10
+	nodeCoord[13]: { 0, 0, 0 } - temp: 10
+	nodeCoord[14]: { 0, 0, 0 } - temp: 10
+	nodeCoord[15]: { 0, 0, 0 } - temp: 10
+	nodeCoord[16]: { 0, 0, 0 } - temp: 10
+	nodeCoord[17]: { 0, 0, 0 } - temp: 10
+	nodeCoord[18]: { 0, 0, 0 } - temp: 10
+	nodeCoord[19]: { 0, 0, 0 } - temp: 10
+	nodeCoord[20]: { 0, 0, 0 } - temp: 10
+	nodeCoord[21]: { 0, 0, 0 } - temp: 10
+	nodeCoord[22]: { 0, 0, 0 } - temp: 10
+	nodeCoord[23]: { 0, 0, 0 } - temp: 10
+	nodeCoord[24]: { 0, 0, 0 } - temp: 10
+	nodeCoord[25]: { 0, 0, 0 } - temp: 10
+	nodeCoord[26]: { 0, 0, 0 } - temp: 10
+	element[0]: temp: 20
+	element[1]: temp: 20
+	element[2]: temp: 20
+	element[3]: temp: 20
+	element[4]: temp: 20
+	element[5]: temp: 20
+	element[6]: temp: 20
+	element[7]: temp: 20
+Post-sync:
+	nodeCoord[0]: { 0, 0, 0 } - temp: 10
+	nodeCoord[1]: { 0, 0, 0 } - temp: 10
+	nodeCoord[2]: { 0, 0, 0 } - temp: 10
+	nodeCoord[3]: { 0, 0, 0 } - temp: 10
+	nodeCoord[4]: { 0, 0, 0 } - temp: 10
+	nodeCoord[5]: { 0, 0, 0 } - temp: 10
+	nodeCoord[6]: { 0, 0, 0 } - temp: 10
+	nodeCoord[7]: { 0, 0, 0 } - temp: 10
+	nodeCoord[8]: { 0, 0, 0 } - temp: 10
+	nodeCoord[9]: { 0, 0, 0 } - temp: 10
+	nodeCoord[10]: { 0, 0, 0 } - temp: 10
+	nodeCoord[11]: { 0, 0, 0 } - temp: 10
+	nodeCoord[12]: { 1, 1, 1 } - temp: 11
+	nodeCoord[13]: { 3, 3, 3 } - temp: 13
+	nodeCoord[14]: { 2, 2, 2 } - temp: 12
+	nodeCoord[15]: { 3, 3, 3 } - temp: 13
+	nodeCoord[16]: { 3, 3, 3 } - temp: 13
+	nodeCoord[17]: { 1, 1, 1 } - temp: 11
+	nodeCoord[18]: { 3, 3, 3 } - temp: 13
+	nodeCoord[19]: { 2, 2, 2 } - temp: 12
+	nodeCoord[20]: { 3, 3, 3 } - temp: 13
+	nodeCoord[21]: { 3, 3, 3 } - temp: 13
+	nodeCoord[22]: { 1, 1, 1 } - temp: 11
+	nodeCoord[23]: { 3, 3, 3 } - temp: 13
+	nodeCoord[24]: { 2, 2, 2 } - temp: 12
+	nodeCoord[25]: { 3, 3, 3 } - temp: 13
+	nodeCoord[26]: { 3, 3, 3 } - temp: 13
+	element[0]: temp: 20
+	element[1]: temp: 20
+	element[2]: temp: 21
+	element[3]: temp: 22
+	element[4]: temp: 23
+	element[5]: temp: 21
+	element[6]: temp: 22
+	element[7]: temp: 23

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync-2D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,414 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f728)
+Stg_Component (ptr): 0x805f728
+Stg_Object (ptr): 0x805f728
+	Stg_Class (ptr): 0x805f728
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7fd91dd
+		_print (func ptr): 0xb7fd9a6a
+		_copy (func ptr): 0xb7fdac4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fd851c
+	_construct (func ptr): 0xb7fd900e
+	_build (func ptr): 0xb7fdb322
+	_initialise (func ptr): 0xb7fdc214
+	_execute (func ptr): 0xb7fdc219
+	_destroy (func ptr): 0xb7fd91d8
+	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): 0x805f478
+Extension (ptr):0x805faf8
+Stg_Object (ptr): 0x805faf8
+	Stg_Class (ptr): 0x805faf8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f51018
+		_print (func ptr): 0xb7f51066
+		_copy (func ptr): 0xb7f51200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fb58
+Stg_ObjectList (ptr):0x805fb58
+	Stg_Class (ptr): 0x805fb58
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f82f3e
+		_print (func ptr): 0xb7f82f75
+		_copy (func ptr): 0xb7f83217
+	_append(func ptr): 0xb7f83e7b
+	_prepend(func ptr): 0xb7f83f41
+	_replaceAll(func ptr): 0xb7f84005
+	_replace(func ptr): 0xb7f840be
+	_insertBefore(func ptr): 0xb7f8425b
+	_insertAfter(func ptr): 0xb7f84416
+	_remove(func ptr): 0xb7f845d3
+	_getIndex(func ptr): 0xb7f84679
+	_get(func ptr): 0xb7f84727
+	_allocMoreMemory(func ptr): 0xb7f848fa
+	_insertAtIndex(func ptr): 0xb7f84980
+	_removeByIndex(func ptr): 0xb7f849fe
+	_deleteAllObjects(func ptr): 0xb7f8487b
+	_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):0x805fbc8
+Stg_Object (ptr): 0x805fbc8
+	Stg_Class (ptr): 0x805fbc8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f51018
+		_print (func ptr): 0xb7f51066
+		_copy (func ptr): 0xb7f51200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fc28
+Stg_ObjectList (ptr):0x805fc28
+	Stg_Class (ptr): 0x805fc28
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f82f3e
+		_print (func ptr): 0xb7f82f75
+		_copy (func ptr): 0xb7f83217
+	_append(func ptr): 0xb7f83e7b
+	_prepend(func ptr): 0xb7f83f41
+	_replaceAll(func ptr): 0xb7f84005
+	_replace(func ptr): 0xb7f840be
+	_insertBefore(func ptr): 0xb7f8425b
+	_insertAfter(func ptr): 0xb7f84416
+	_remove(func ptr): 0xb7f845d3
+	_getIndex(func ptr): 0xb7f84679
+	_get(func ptr): 0xb7f84727
+	_allocMoreMemory(func ptr): 0xb7f848fa
+	_insertAtIndex(func ptr): 0xb7f84980
+	_removeByIndex(func ptr): 0xb7f849fe
+	_deleteAllObjects(func ptr): 0xb7f8487b
+	_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): 0x8060458
+	nodeLocalCount: 12
+	nodeDomainCount: 27
+	nodeShadowCount: 15
+	nodeGlobalCount: 27
+	nodeCoord (ptr): 0x8060540
+	nodeCoord[0-27]:   (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,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), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060238
+	nodeL2G[0-12]:   001 002 004 005 010 011 013 014 019 020 022 023 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060238
+	nodeD2G[0-27]:   001 002 004 005 010 011 013 014 019 020 022 023 000 003 006 007 008 009 012 015 016 017 018 021 024 025 026 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060850
+	nodeG2L[0-27]:   027 000 001 027 002 003 027 027 027 027 004 005 027 006 007 027 027 027 027 008 009 027 010 011 027 027 027 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x80607d8
+	nodeG2D[0-27]:   012 000 001 013 002 003 014 015 016 017 004 005 018 006 007 019 020 021 022 008 009 023 010 011 024 025 026 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x80608c8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060940
+	nodeNeighbourTbl[0-27]:
+		nodeNeighbourTbl[0][0-6]: 001 002 004 012 027 027 
+		nodeNeighbourTbl[1][0-6]: 027 003 005 000 027 027 
+		nodeNeighbourTbl[2][0-6]: 003 015 006 013 000 027 
+		nodeNeighbourTbl[3][0-6]: 027 016 007 002 001 027 
+		nodeNeighbourTbl[4][0-6]: 005 006 008 017 027 000 
+		nodeNeighbourTbl[5][0-6]: 027 007 009 004 027 001 
+		nodeNeighbourTbl[6][0-6]: 007 020 010 018 004 002 
+		nodeNeighbourTbl[7][0-6]: 027 021 011 006 005 003 
+		nodeNeighbourTbl[8][0-6]: 009 010 027 022 027 004 
+		nodeNeighbourTbl[9][0-6]: 027 011 027 008 027 005 
+		nodeNeighbourTbl[10][0-6]: 011 025 027 023 008 006 
+		nodeNeighbourTbl[11][0-6]: 027 026 027 010 009 007 
+		nodeNeighbourTbl[12][0-6]: 000 013 017 027 027 027 
+		nodeNeighbourTbl[13][0-6]: 002 014 018 027 012 027 
+		nodeNeighbourTbl[14][0-6]: 015 027 019 027 013 027 
+		nodeNeighbourTbl[15][0-6]: 016 027 020 014 002 027 
+		nodeNeighbourTbl[16][0-6]: 027 027 021 015 003 027 
+		nodeNeighbourTbl[17][0-6]: 004 018 022 027 027 012 
+		nodeNeighbourTbl[18][0-6]: 006 019 023 027 017 013 
+		nodeNeighbourTbl[19][0-6]: 020 027 024 027 018 014 
+		nodeNeighbourTbl[20][0-6]: 021 027 025 019 006 015 
+		nodeNeighbourTbl[21][0-6]: 027 027 026 020 007 016 
+		nodeNeighbourTbl[22][0-6]: 008 023 027 027 027 017 
+		nodeNeighbourTbl[23][0-6]: 010 024 027 027 022 018 
+		nodeNeighbourTbl[24][0-6]: 025 027 027 027 023 019 
+		nodeNeighbourTbl[25][0-6]: 026 027 027 024 010 020 
+		nodeNeighbourTbl[26][0-6]: 027 027 027 025 011 021 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060c40
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060cb8
+	nodeElementTbl[0-27]:
+		nodeElementTbl[0][0-8]: 008 008 008 008 008 008 002 000 
+		nodeElementTbl[1][0-8]: 008 008 008 008 008 008 000 008 
+		nodeElementTbl[2][0-8]: 008 008 008 008 002 000 003 004 
+		nodeElementTbl[3][0-8]: 008 008 008 008 000 008 004 008 
+		nodeElementTbl[4][0-8]: 008 008 002 000 008 008 005 001 
+		nodeElementTbl[5][0-8]: 008 008 000 008 008 008 001 008 
+		nodeElementTbl[6][0-8]: 002 000 003 004 005 001 006 007 
+		nodeElementTbl[7][0-8]: 000 008 004 008 001 008 007 008 
+		nodeElementTbl[8][0-8]: 008 008 005 001 008 008 008 008 
+		nodeElementTbl[9][0-8]: 008 008 001 008 008 008 008 008 
+		nodeElementTbl[10][0-8]: 005 001 006 007 008 008 008 008 
+		nodeElementTbl[11][0-8]: 001 008 007 008 008 008 008 008 
+		nodeElementTbl[12][0-8]: 008 008 008 008 008 008 008 002 
+		nodeElementTbl[13][0-8]: 008 008 008 008 008 002 008 003 
+		nodeElementTbl[14][0-8]: 008 008 008 008 008 003 008 008 
+		nodeElementTbl[15][0-8]: 008 008 008 008 003 004 008 008 
+		nodeElementTbl[16][0-8]: 008 008 008 008 004 008 008 008 
+		nodeElementTbl[17][0-8]: 008 008 008 002 008 008 008 005 
+		nodeElementTbl[18][0-8]: 008 002 008 003 008 005 008 006 
+		nodeElementTbl[19][0-8]: 008 003 008 008 008 006 008 008 
+		nodeElementTbl[20][0-8]: 003 004 008 008 006 007 008 008 
+		nodeElementTbl[21][0-8]: 004 008 008 008 007 008 008 008 
+		nodeElementTbl[22][0-8]: 008 008 008 005 008 008 008 008 
+		nodeElementTbl[23][0-8]: 008 005 008 006 008 008 008 008 
+		nodeElementTbl[24][0-8]: 008 006 008 008 008 008 008 008 
+		nodeElementTbl[25][0-8]: 006 007 008 008 008 008 008 008 
+		nodeElementTbl[26][0-8]: 007 008 008 008 008 008 008 008 
+	element (ptr): 0x8061090
+	elementLocalCount: 2
+	elementDomainCount: 8
+	elementShadowCount: 6
+	elementGlobalCount: 8
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805d000
+	elementL2G[0-2]:   001 005 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805d000
+	elementD2G[0-8]:   001 005 000 002 003 004 006 007 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8061110
+	elementG2L[0-8]:   008 000 008 008 008 001 008 008 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x80610e0
+	elementG2D[0-8]:   002 000 003 004 005 001 006 007 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061140
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061170
+	elementNeighbourTbl[0-8]:
+		elementNeighbourTbl[0][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 002 008 003 004 008 008 008 008 005 001 008 006 007 008 
+		elementNeighbourTbl[1][0-26]: 008 008 008 002 000 008 003 004 008 008 008 008 005 008 006 007 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[2][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 008 000 008 003 004 008 008 008 008 005 001 008 006 007 
+		elementNeighbourTbl[3][0-26]: 008 008 008 008 008 008 008 008 008 008 002 000 008 004 008 008 008 008 005 001 008 006 007 008 008 008 
+		elementNeighbourTbl[4][0-26]: 008 008 008 008 008 008 008 008 008 002 000 008 003 008 008 008 008 005 001 008 006 007 008 008 008 008 
+		elementNeighbourTbl[5][0-26]: 008 008 008 008 002 000 008 003 004 008 008 008 008 001 008 006 007 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[6][0-26]: 008 002 000 008 003 004 008 008 008 008 005 001 008 007 008 008 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[7][0-26]: 002 000 008 003 004 008 008 008 008 005 001 008 006 008 008 008 008 008 008 008 008 008 008 008 008 008 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805aa18
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80614e0
+	elementNodeTbl[0-8]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 004 005 007 006 
+		elementNodeTbl[1][0-8]: 004 005 007 006 008 009 011 010 
+		elementNodeTbl[2][0-8]: 012 000 002 013 017 004 006 018 
+		elementNodeTbl[3][0-8]: 013 002 015 014 018 006 020 019 
+		elementNodeTbl[4][0-8]: 002 003 016 015 006 007 021 020 
+		elementNodeTbl[5][0-8]: 017 004 006 018 022 008 010 023 
+		elementNodeTbl[6][0-8]: 018 006 020 019 023 010 025 024 
+		elementNodeTbl[7][0-8]: 006 007 021 020 010 011 026 025 
+	procNbrCnt: 3
+	procNbrTbl (ptr): 0x80602b0
+		procNbrTbl[0]: 0
+		procNbrTbl[1]: 2
+		procNbrTbl[2]: 3
+	elementShadowInfo->procShadowedCnt (ptr): 0x8060420
+		elementShadowInfo->procShadowedCnt[0]: 2
+		elementShadowInfo->procShadowedCnt[1]: 2
+		elementShadowInfo->procShadowedCnt[2]: 2
+	elementShadowInfo->procShadowedTbl (ptr): 0x805d030
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x8060340
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+		elementShadowInfo->procShadowedTbl[1] (ptr): 0x8061708
+			elementShadowInfo->procShadowedTbl[1][0]: 0
+			elementShadowInfo->procShadowedTbl[1][1]: 1
+		elementShadowInfo->procShadowedTbl[2] (ptr): 0x8061770
+			elementShadowInfo->procShadowedTbl[2][0]: 0
+			elementShadowInfo->procShadowedTbl[2][1]: 1
+	elementShadowInfo->procShadowCnt (ptr): 0x8061788
+		elementShadowInfo->procShadowCnt[0]: 2
+		elementShadowInfo->procShadowCnt[1]: 2
+		elementShadowInfo->procShadowCnt[2]: 2
+	elementShadowInfo->procShadowTbl (ptr): 0x80617a0
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x80617b8
+			elementShadowInfo->procShadowTbl[0][0]: 2
+			elementShadowInfo->procShadowTbl[0][1]: 5
+		elementShadowInfo->procShadowTbl[1] (ptr): 0x80617d0
+			elementShadowInfo->procShadowTbl[1][0]: 3
+			elementShadowInfo->procShadowTbl[1][1]: 6
+		elementShadowInfo->procShadowTbl[2] (ptr): 0x80617e8
+			elementShadowInfo->procShadowTbl[2][0]: 4
+			elementShadowInfo->procShadowTbl[2][1]: 7
+	nodeShadowInfo->procShadowedCnt (ptr): 0x8061840
+		nodeShadowInfo->procShadowedCnt[0]: 6
+		nodeShadowInfo->procShadowedCnt[1]: 9
+		nodeShadowInfo->procShadowedCnt[2]: 6
+	nodeShadowInfo->procShadowedTbl (ptr): 0x8061858
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x8061660
+			nodeShadowInfo->procShadowedTbl[0][0]: 1
+			nodeShadowInfo->procShadowedTbl[0][1]: 3
+			nodeShadowInfo->procShadowedTbl[0][2]: 5
+			nodeShadowInfo->procShadowedTbl[0][3]: 7
+			nodeShadowInfo->procShadowedTbl[0][4]: 9
+			nodeShadowInfo->procShadowedTbl[0][5]: 11
+		nodeShadowInfo->procShadowedTbl[1] (ptr): 0x80619e8
+			nodeShadowInfo->procShadowedTbl[1][0]: 0
+			nodeShadowInfo->procShadowedTbl[1][1]: 1
+			nodeShadowInfo->procShadowedTbl[1][2]: 3
+			nodeShadowInfo->procShadowedTbl[1][3]: 4
+			nodeShadowInfo->procShadowedTbl[1][4]: 5
+			nodeShadowInfo->procShadowedTbl[1][5]: 7
+			nodeShadowInfo->procShadowedTbl[1][6]: 8
+			nodeShadowInfo->procShadowedTbl[1][7]: 9
+			nodeShadowInfo->procShadowedTbl[1][8]: 11
+		nodeShadowInfo->procShadowedTbl[2] (ptr): 0x8061638
+			nodeShadowInfo->procShadowedTbl[2][0]: 0
+			nodeShadowInfo->procShadowedTbl[2][1]: 1
+			nodeShadowInfo->procShadowedTbl[2][2]: 4
+			nodeShadowInfo->procShadowedTbl[2][3]: 5
+			nodeShadowInfo->procShadowedTbl[2][4]: 8
+			nodeShadowInfo->procShadowedTbl[2][5]: 9
+	nodeShadowInfo->procShadowCnt (ptr): 0x8061a68
+		nodeShadowInfo->procShadowCnt[0]: 6
+		nodeShadowInfo->procShadowCnt[1]: 9
+		nodeShadowInfo->procShadowCnt[2]: 6
+	nodeShadowInfo->procShadowTbl (ptr): 0x8061a80
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8061610
+			nodeShadowInfo->procShadowTbl[0][0]: 12
+			nodeShadowInfo->procShadowTbl[0][1]: 13
+			nodeShadowInfo->procShadowTbl[0][2]: 17
+			nodeShadowInfo->procShadowTbl[0][3]: 18
+			nodeShadowInfo->procShadowTbl[0][4]: 22
+			nodeShadowInfo->procShadowTbl[0][5]: 23
+		nodeShadowInfo->procShadowTbl[1] (ptr): 0x8061a98
+			nodeShadowInfo->procShadowTbl[1][0]: 13
+			nodeShadowInfo->procShadowTbl[1][1]: 14
+			nodeShadowInfo->procShadowTbl[1][2]: 15
+			nodeShadowInfo->procShadowTbl[1][3]: 18
+			nodeShadowInfo->procShadowTbl[1][4]: 19
+			nodeShadowInfo->procShadowTbl[1][5]: 20
+			nodeShadowInfo->procShadowTbl[1][6]: 23
+			nodeShadowInfo->procShadowTbl[1][7]: 24
+			nodeShadowInfo->procShadowTbl[1][8]: 25
+		nodeShadowInfo->procShadowTbl[2] (ptr): 0x8061ac8
+			nodeShadowInfo->procShadowTbl[2][0]: 15
+			nodeShadowInfo->procShadowTbl[2][1]: 16
+			nodeShadowInfo->procShadowTbl[2][2]: 20
+			nodeShadowInfo->procShadowTbl[2][3]: 21
+			nodeShadowInfo->procShadowTbl[2][4]: 25
+			nodeShadowInfo->procShadowTbl[2][5]: 26
+Pre-sync:
+	nodeCoord[0]: { 1, 1, 1 } - temp: 11
+	nodeCoord[1]: { 1, 1, 1 } - temp: 11
+	nodeCoord[2]: { 1, 1, 1 } - temp: 11
+	nodeCoord[3]: { 1, 1, 1 } - temp: 11
+	nodeCoord[4]: { 1, 1, 1 } - temp: 11
+	nodeCoord[5]: { 1, 1, 1 } - temp: 11
+	nodeCoord[6]: { 1, 1, 1 } - temp: 11
+	nodeCoord[7]: { 1, 1, 1 } - temp: 11
+	nodeCoord[8]: { 1, 1, 1 } - temp: 11
+	nodeCoord[9]: { 1, 1, 1 } - temp: 11
+	nodeCoord[10]: { 1, 1, 1 } - temp: 11
+	nodeCoord[11]: { 1, 1, 1 } - temp: 11
+	nodeCoord[12]: { 1, 1, 1 } - temp: 11
+	nodeCoord[13]: { 1, 1, 1 } - temp: 11
+	nodeCoord[14]: { 1, 1, 1 } - temp: 11
+	nodeCoord[15]: { 1, 1, 1 } - temp: 11
+	nodeCoord[16]: { 1, 1, 1 } - temp: 11
+	nodeCoord[17]: { 1, 1, 1 } - temp: 11
+	nodeCoord[18]: { 1, 1, 1 } - temp: 11
+	nodeCoord[19]: { 1, 1, 1 } - temp: 11
+	nodeCoord[20]: { 1, 1, 1 } - temp: 11
+	nodeCoord[21]: { 1, 1, 1 } - temp: 11
+	nodeCoord[22]: { 1, 1, 1 } - temp: 11
+	nodeCoord[23]: { 1, 1, 1 } - temp: 11
+	nodeCoord[24]: { 1, 1, 1 } - temp: 11
+	nodeCoord[25]: { 1, 1, 1 } - temp: 11
+	nodeCoord[26]: { 1, 1, 1 } - temp: 11
+	element[0]: temp: 21
+	element[1]: temp: 21
+	element[2]: temp: 21
+	element[3]: temp: 21
+	element[4]: temp: 21
+	element[5]: temp: 21
+	element[6]: temp: 21
+	element[7]: temp: 21
+Post-sync:
+	nodeCoord[0]: { 1, 1, 1 } - temp: 11
+	nodeCoord[1]: { 1, 1, 1 } - temp: 11
+	nodeCoord[2]: { 1, 1, 1 } - temp: 11
+	nodeCoord[3]: { 1, 1, 1 } - temp: 11
+	nodeCoord[4]: { 1, 1, 1 } - temp: 11
+	nodeCoord[5]: { 1, 1, 1 } - temp: 11
+	nodeCoord[6]: { 1, 1, 1 } - temp: 11
+	nodeCoord[7]: { 1, 1, 1 } - temp: 11
+	nodeCoord[8]: { 1, 1, 1 } - temp: 11
+	nodeCoord[9]: { 1, 1, 1 } - temp: 11
+	nodeCoord[10]: { 1, 1, 1 } - temp: 11
+	nodeCoord[11]: { 1, 1, 1 } - temp: 11
+	nodeCoord[12]: { 0, 0, 0 } - temp: 10
+	nodeCoord[13]: { 2, 2, 2 } - temp: 12
+	nodeCoord[14]: { 2, 2, 2 } - temp: 12
+	nodeCoord[15]: { 3, 3, 3 } - temp: 13
+	nodeCoord[16]: { 3, 3, 3 } - temp: 13
+	nodeCoord[17]: { 0, 0, 0 } - temp: 10
+	nodeCoord[18]: { 2, 2, 2 } - temp: 12
+	nodeCoord[19]: { 2, 2, 2 } - temp: 12
+	nodeCoord[20]: { 3, 3, 3 } - temp: 13
+	nodeCoord[21]: { 3, 3, 3 } - temp: 13
+	nodeCoord[22]: { 0, 0, 0 } - temp: 10
+	nodeCoord[23]: { 2, 2, 2 } - temp: 12
+	nodeCoord[24]: { 2, 2, 2 } - temp: 12
+	nodeCoord[25]: { 3, 3, 3 } - temp: 13
+	nodeCoord[26]: { 3, 3, 3 } - temp: 13
+	element[0]: temp: 21
+	element[1]: temp: 21
+	element[2]: temp: 20
+	element[3]: temp: 22
+	element[4]: temp: 23
+	element[5]: temp: 20
+	element[6]: temp: 22
+	element[7]: temp: 23

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync-2D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,414 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f728)
+Stg_Component (ptr): 0x805f728
+Stg_Object (ptr): 0x805f728
+	Stg_Class (ptr): 0x805f728
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7fcd1dd
+		_print (func ptr): 0xb7fcda6a
+		_copy (func ptr): 0xb7fcec4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fcc51c
+	_construct (func ptr): 0xb7fcd00e
+	_build (func ptr): 0xb7fcf322
+	_initialise (func ptr): 0xb7fd0214
+	_execute (func ptr): 0xb7fd0219
+	_destroy (func ptr): 0xb7fcd1d8
+	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): 0x805f478
+Extension (ptr):0x805faf8
+Stg_Object (ptr): 0x805faf8
+	Stg_Class (ptr): 0x805faf8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f45018
+		_print (func ptr): 0xb7f45066
+		_copy (func ptr): 0xb7f45200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fb58
+Stg_ObjectList (ptr):0x805fb58
+	Stg_Class (ptr): 0x805fb58
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f76f3e
+		_print (func ptr): 0xb7f76f75
+		_copy (func ptr): 0xb7f77217
+	_append(func ptr): 0xb7f77e7b
+	_prepend(func ptr): 0xb7f77f41
+	_replaceAll(func ptr): 0xb7f78005
+	_replace(func ptr): 0xb7f780be
+	_insertBefore(func ptr): 0xb7f7825b
+	_insertAfter(func ptr): 0xb7f78416
+	_remove(func ptr): 0xb7f785d3
+	_getIndex(func ptr): 0xb7f78679
+	_get(func ptr): 0xb7f78727
+	_allocMoreMemory(func ptr): 0xb7f788fa
+	_insertAtIndex(func ptr): 0xb7f78980
+	_removeByIndex(func ptr): 0xb7f789fe
+	_deleteAllObjects(func ptr): 0xb7f7887b
+	_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):0x805fbc8
+Stg_Object (ptr): 0x805fbc8
+	Stg_Class (ptr): 0x805fbc8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f45018
+		_print (func ptr): 0xb7f45066
+		_copy (func ptr): 0xb7f45200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fc28
+Stg_ObjectList (ptr):0x805fc28
+	Stg_Class (ptr): 0x805fc28
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f76f3e
+		_print (func ptr): 0xb7f76f75
+		_copy (func ptr): 0xb7f77217
+	_append(func ptr): 0xb7f77e7b
+	_prepend(func ptr): 0xb7f77f41
+	_replaceAll(func ptr): 0xb7f78005
+	_replace(func ptr): 0xb7f780be
+	_insertBefore(func ptr): 0xb7f7825b
+	_insertAfter(func ptr): 0xb7f78416
+	_remove(func ptr): 0xb7f785d3
+	_getIndex(func ptr): 0xb7f78679
+	_get(func ptr): 0xb7f78727
+	_allocMoreMemory(func ptr): 0xb7f788fa
+	_insertAtIndex(func ptr): 0xb7f78980
+	_removeByIndex(func ptr): 0xb7f789fe
+	_deleteAllObjects(func ptr): 0xb7f7887b
+	_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): 0x8060458
+	nodeLocalCount: 12
+	nodeDomainCount: 27
+	nodeShadowCount: 15
+	nodeGlobalCount: 27
+	nodeCoord (ptr): 0x8060540
+	nodeCoord[0-27]:   (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,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), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060238
+	nodeL2G[0-12]:   003 004 006 007 012 013 015 016 021 022 024 025 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060238
+	nodeD2G[0-27]:   003 004 006 007 012 013 015 016 021 022 024 025 000 001 002 005 008 009 010 011 014 017 018 019 020 023 026 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060850
+	nodeG2L[0-27]:   027 027 027 000 001 027 002 003 027 027 027 027 004 005 027 006 007 027 027 027 027 008 009 027 010 011 027 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x80607d8
+	nodeG2D[0-27]:   012 013 014 000 001 015 002 003 016 017 018 019 004 005 020 006 007 021 022 023 024 008 009 025 010 011 026 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x80608c8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060940
+	nodeNeighbourTbl[0-27]:
+		nodeNeighbourTbl[0][0-6]: 001 002 004 027 012 027 
+		nodeNeighbourTbl[1][0-6]: 015 003 005 000 013 027 
+		nodeNeighbourTbl[2][0-6]: 003 027 006 027 000 027 
+		nodeNeighbourTbl[3][0-6]: 016 027 007 002 001 027 
+		nodeNeighbourTbl[4][0-6]: 005 006 008 027 017 000 
+		nodeNeighbourTbl[5][0-6]: 020 007 009 004 018 001 
+		nodeNeighbourTbl[6][0-6]: 007 027 010 027 004 002 
+		nodeNeighbourTbl[7][0-6]: 021 027 011 006 005 003 
+		nodeNeighbourTbl[8][0-6]: 009 010 027 027 022 004 
+		nodeNeighbourTbl[9][0-6]: 025 011 027 008 023 005 
+		nodeNeighbourTbl[10][0-6]: 011 027 027 027 008 006 
+		nodeNeighbourTbl[11][0-6]: 026 027 027 010 009 007 
+		nodeNeighbourTbl[12][0-6]: 013 000 017 027 027 027 
+		nodeNeighbourTbl[13][0-6]: 014 001 018 012 027 027 
+		nodeNeighbourTbl[14][0-6]: 027 015 019 013 027 027 
+		nodeNeighbourTbl[15][0-6]: 027 016 020 001 014 027 
+		nodeNeighbourTbl[16][0-6]: 027 027 021 003 015 027 
+		nodeNeighbourTbl[17][0-6]: 018 004 022 027 027 012 
+		nodeNeighbourTbl[18][0-6]: 019 005 023 017 027 013 
+		nodeNeighbourTbl[19][0-6]: 027 020 024 018 027 014 
+		nodeNeighbourTbl[20][0-6]: 027 021 025 005 019 015 
+		nodeNeighbourTbl[21][0-6]: 027 027 026 007 020 016 
+		nodeNeighbourTbl[22][0-6]: 023 008 027 027 027 017 
+		nodeNeighbourTbl[23][0-6]: 024 009 027 022 027 018 
+		nodeNeighbourTbl[24][0-6]: 027 025 027 023 027 019 
+		nodeNeighbourTbl[25][0-6]: 027 026 027 009 024 020 
+		nodeNeighbourTbl[26][0-6]: 027 027 027 011 025 021 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060c40
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060cb8
+	nodeElementTbl[0-27]:
+		nodeElementTbl[0][0-8]: 008 008 008 008 008 002 008 000 
+		nodeElementTbl[1][0-8]: 008 008 008 008 002 003 000 004 
+		nodeElementTbl[2][0-8]: 008 008 008 008 008 000 008 008 
+		nodeElementTbl[3][0-8]: 008 008 008 008 000 004 008 008 
+		nodeElementTbl[4][0-8]: 008 002 008 000 008 005 008 001 
+		nodeElementTbl[5][0-8]: 002 003 000 004 005 006 001 007 
+		nodeElementTbl[6][0-8]: 008 000 008 008 008 001 008 008 
+		nodeElementTbl[7][0-8]: 000 004 008 008 001 007 008 008 
+		nodeElementTbl[8][0-8]: 008 005 008 001 008 008 008 008 
+		nodeElementTbl[9][0-8]: 005 006 001 007 008 008 008 008 
+		nodeElementTbl[10][0-8]: 008 001 008 008 008 008 008 008 
+		nodeElementTbl[11][0-8]: 001 007 008 008 008 008 008 008 
+		nodeElementTbl[12][0-8]: 008 008 008 008 008 008 008 002 
+		nodeElementTbl[13][0-8]: 008 008 008 008 008 008 002 003 
+		nodeElementTbl[14][0-8]: 008 008 008 008 008 008 003 008 
+		nodeElementTbl[15][0-8]: 008 008 008 008 003 008 004 008 
+		nodeElementTbl[16][0-8]: 008 008 008 008 004 008 008 008 
+		nodeElementTbl[17][0-8]: 008 008 008 002 008 008 008 005 
+		nodeElementTbl[18][0-8]: 008 008 002 003 008 008 005 006 
+		nodeElementTbl[19][0-8]: 008 008 003 008 008 008 006 008 
+		nodeElementTbl[20][0-8]: 003 008 004 008 006 008 007 008 
+		nodeElementTbl[21][0-8]: 004 008 008 008 007 008 008 008 
+		nodeElementTbl[22][0-8]: 008 008 008 005 008 008 008 008 
+		nodeElementTbl[23][0-8]: 008 008 005 006 008 008 008 008 
+		nodeElementTbl[24][0-8]: 008 008 006 008 008 008 008 008 
+		nodeElementTbl[25][0-8]: 006 008 007 008 008 008 008 008 
+		nodeElementTbl[26][0-8]: 007 008 008 008 008 008 008 008 
+	element (ptr): 0x8061090
+	elementLocalCount: 2
+	elementDomainCount: 8
+	elementShadowCount: 6
+	elementGlobalCount: 8
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805d000
+	elementL2G[0-2]:   002 006 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805d000
+	elementD2G[0-8]:   002 006 000 001 003 004 005 007 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8061110
+	elementG2L[0-8]:   008 008 000 008 008 008 001 008 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x80610e0
+	elementG2D[0-8]:   002 003 000 004 005 006 001 007 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061140
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061170
+	elementNeighbourTbl[0-8]:
+		elementNeighbourTbl[0][0-26]: 008 008 008 008 008 008 008 008 008 008 002 003 008 004 008 008 008 008 005 006 008 001 007 008 008 008 
+		elementNeighbourTbl[1][0-26]: 008 002 003 008 000 004 008 008 008 008 005 006 008 007 008 008 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[2][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 008 003 008 000 004 008 008 008 008 005 006 008 001 007 
+		elementNeighbourTbl[3][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 002 008 000 004 008 008 008 008 005 006 008 001 007 008 
+		elementNeighbourTbl[4][0-26]: 008 008 008 008 008 008 008 008 008 002 003 008 000 008 008 008 008 005 006 008 001 007 008 008 008 008 
+		elementNeighbourTbl[5][0-26]: 008 008 008 008 002 003 008 000 004 008 008 008 008 006 008 001 007 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[6][0-26]: 008 008 008 002 003 008 000 004 008 008 008 008 005 008 001 007 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[7][0-26]: 002 003 008 000 004 008 008 008 008 005 006 008 001 008 008 008 008 008 008 008 008 008 008 008 008 008 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805aa18
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80614e0
+	elementNodeTbl[0-8]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 004 005 007 006 
+		elementNodeTbl[1][0-8]: 004 005 007 006 008 009 011 010 
+		elementNodeTbl[2][0-8]: 012 013 001 000 017 018 005 004 
+		elementNodeTbl[3][0-8]: 013 014 015 001 018 019 020 005 
+		elementNodeTbl[4][0-8]: 001 015 016 003 005 020 021 007 
+		elementNodeTbl[5][0-8]: 017 018 005 004 022 023 009 008 
+		elementNodeTbl[6][0-8]: 018 019 020 005 023 024 025 009 
+		elementNodeTbl[7][0-8]: 005 020 021 007 009 025 026 011 
+	procNbrCnt: 3
+	procNbrTbl (ptr): 0x80602b0
+		procNbrTbl[0]: 0
+		procNbrTbl[1]: 1
+		procNbrTbl[2]: 3
+	elementShadowInfo->procShadowedCnt (ptr): 0x8060420
+		elementShadowInfo->procShadowedCnt[0]: 2
+		elementShadowInfo->procShadowedCnt[1]: 2
+		elementShadowInfo->procShadowedCnt[2]: 2
+	elementShadowInfo->procShadowedTbl (ptr): 0x805d030
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x8060340
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+		elementShadowInfo->procShadowedTbl[1] (ptr): 0x8061708
+			elementShadowInfo->procShadowedTbl[1][0]: 0
+			elementShadowInfo->procShadowedTbl[1][1]: 1
+		elementShadowInfo->procShadowedTbl[2] (ptr): 0x8061770
+			elementShadowInfo->procShadowedTbl[2][0]: 0
+			elementShadowInfo->procShadowedTbl[2][1]: 1
+	elementShadowInfo->procShadowCnt (ptr): 0x8061788
+		elementShadowInfo->procShadowCnt[0]: 2
+		elementShadowInfo->procShadowCnt[1]: 2
+		elementShadowInfo->procShadowCnt[2]: 2
+	elementShadowInfo->procShadowTbl (ptr): 0x80617a0
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x80617b8
+			elementShadowInfo->procShadowTbl[0][0]: 2
+			elementShadowInfo->procShadowTbl[0][1]: 5
+		elementShadowInfo->procShadowTbl[1] (ptr): 0x80617d0
+			elementShadowInfo->procShadowTbl[1][0]: 3
+			elementShadowInfo->procShadowTbl[1][1]: 6
+		elementShadowInfo->procShadowTbl[2] (ptr): 0x80617e8
+			elementShadowInfo->procShadowTbl[2][0]: 4
+			elementShadowInfo->procShadowTbl[2][1]: 7
+	nodeShadowInfo->procShadowedCnt (ptr): 0x8061840
+		nodeShadowInfo->procShadowedCnt[0]: 6
+		nodeShadowInfo->procShadowedCnt[1]: 9
+		nodeShadowInfo->procShadowedCnt[2]: 6
+	nodeShadowInfo->procShadowedTbl (ptr): 0x8061858
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x8061660
+			nodeShadowInfo->procShadowedTbl[0][0]: 2
+			nodeShadowInfo->procShadowedTbl[0][1]: 3
+			nodeShadowInfo->procShadowedTbl[0][2]: 6
+			nodeShadowInfo->procShadowedTbl[0][3]: 7
+			nodeShadowInfo->procShadowedTbl[0][4]: 10
+			nodeShadowInfo->procShadowedTbl[0][5]: 11
+		nodeShadowInfo->procShadowedTbl[1] (ptr): 0x80619e8
+			nodeShadowInfo->procShadowedTbl[1][0]: 0
+			nodeShadowInfo->procShadowedTbl[1][1]: 2
+			nodeShadowInfo->procShadowedTbl[1][2]: 3
+			nodeShadowInfo->procShadowedTbl[1][3]: 4
+			nodeShadowInfo->procShadowedTbl[1][4]: 6
+			nodeShadowInfo->procShadowedTbl[1][5]: 7
+			nodeShadowInfo->procShadowedTbl[1][6]: 8
+			nodeShadowInfo->procShadowedTbl[1][7]: 10
+			nodeShadowInfo->procShadowedTbl[1][8]: 11
+		nodeShadowInfo->procShadowedTbl[2] (ptr): 0x8061638
+			nodeShadowInfo->procShadowedTbl[2][0]: 0
+			nodeShadowInfo->procShadowedTbl[2][1]: 2
+			nodeShadowInfo->procShadowedTbl[2][2]: 4
+			nodeShadowInfo->procShadowedTbl[2][3]: 6
+			nodeShadowInfo->procShadowedTbl[2][4]: 8
+			nodeShadowInfo->procShadowedTbl[2][5]: 10
+	nodeShadowInfo->procShadowCnt (ptr): 0x8061a68
+		nodeShadowInfo->procShadowCnt[0]: 6
+		nodeShadowInfo->procShadowCnt[1]: 9
+		nodeShadowInfo->procShadowCnt[2]: 6
+	nodeShadowInfo->procShadowTbl (ptr): 0x8061a80
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8061610
+			nodeShadowInfo->procShadowTbl[0][0]: 12
+			nodeShadowInfo->procShadowTbl[0][1]: 13
+			nodeShadowInfo->procShadowTbl[0][2]: 17
+			nodeShadowInfo->procShadowTbl[0][3]: 18
+			nodeShadowInfo->procShadowTbl[0][4]: 22
+			nodeShadowInfo->procShadowTbl[0][5]: 23
+		nodeShadowInfo->procShadowTbl[1] (ptr): 0x8061a98
+			nodeShadowInfo->procShadowTbl[1][0]: 13
+			nodeShadowInfo->procShadowTbl[1][1]: 14
+			nodeShadowInfo->procShadowTbl[1][2]: 15
+			nodeShadowInfo->procShadowTbl[1][3]: 18
+			nodeShadowInfo->procShadowTbl[1][4]: 19
+			nodeShadowInfo->procShadowTbl[1][5]: 20
+			nodeShadowInfo->procShadowTbl[1][6]: 23
+			nodeShadowInfo->procShadowTbl[1][7]: 24
+			nodeShadowInfo->procShadowTbl[1][8]: 25
+		nodeShadowInfo->procShadowTbl[2] (ptr): 0x8061ac8
+			nodeShadowInfo->procShadowTbl[2][0]: 15
+			nodeShadowInfo->procShadowTbl[2][1]: 16
+			nodeShadowInfo->procShadowTbl[2][2]: 20
+			nodeShadowInfo->procShadowTbl[2][3]: 21
+			nodeShadowInfo->procShadowTbl[2][4]: 25
+			nodeShadowInfo->procShadowTbl[2][5]: 26
+Pre-sync:
+	nodeCoord[0]: { 2, 2, 2 } - temp: 12
+	nodeCoord[1]: { 2, 2, 2 } - temp: 12
+	nodeCoord[2]: { 2, 2, 2 } - temp: 12
+	nodeCoord[3]: { 2, 2, 2 } - temp: 12
+	nodeCoord[4]: { 2, 2, 2 } - temp: 12
+	nodeCoord[5]: { 2, 2, 2 } - temp: 12
+	nodeCoord[6]: { 2, 2, 2 } - temp: 12
+	nodeCoord[7]: { 2, 2, 2 } - temp: 12
+	nodeCoord[8]: { 2, 2, 2 } - temp: 12
+	nodeCoord[9]: { 2, 2, 2 } - temp: 12
+	nodeCoord[10]: { 2, 2, 2 } - temp: 12
+	nodeCoord[11]: { 2, 2, 2 } - temp: 12
+	nodeCoord[12]: { 2, 2, 2 } - temp: 12
+	nodeCoord[13]: { 2, 2, 2 } - temp: 12
+	nodeCoord[14]: { 2, 2, 2 } - temp: 12
+	nodeCoord[15]: { 2, 2, 2 } - temp: 12
+	nodeCoord[16]: { 2, 2, 2 } - temp: 12
+	nodeCoord[17]: { 2, 2, 2 } - temp: 12
+	nodeCoord[18]: { 2, 2, 2 } - temp: 12
+	nodeCoord[19]: { 2, 2, 2 } - temp: 12
+	nodeCoord[20]: { 2, 2, 2 } - temp: 12
+	nodeCoord[21]: { 2, 2, 2 } - temp: 12
+	nodeCoord[22]: { 2, 2, 2 } - temp: 12
+	nodeCoord[23]: { 2, 2, 2 } - temp: 12
+	nodeCoord[24]: { 2, 2, 2 } - temp: 12
+	nodeCoord[25]: { 2, 2, 2 } - temp: 12
+	nodeCoord[26]: { 2, 2, 2 } - temp: 12
+	element[0]: temp: 22
+	element[1]: temp: 22
+	element[2]: temp: 22
+	element[3]: temp: 22
+	element[4]: temp: 22
+	element[5]: temp: 22
+	element[6]: temp: 22
+	element[7]: temp: 22
+Post-sync:
+	nodeCoord[0]: { 2, 2, 2 } - temp: 12
+	nodeCoord[1]: { 2, 2, 2 } - temp: 12
+	nodeCoord[2]: { 2, 2, 2 } - temp: 12
+	nodeCoord[3]: { 2, 2, 2 } - temp: 12
+	nodeCoord[4]: { 2, 2, 2 } - temp: 12
+	nodeCoord[5]: { 2, 2, 2 } - temp: 12
+	nodeCoord[6]: { 2, 2, 2 } - temp: 12
+	nodeCoord[7]: { 2, 2, 2 } - temp: 12
+	nodeCoord[8]: { 2, 2, 2 } - temp: 12
+	nodeCoord[9]: { 2, 2, 2 } - temp: 12
+	nodeCoord[10]: { 2, 2, 2 } - temp: 12
+	nodeCoord[11]: { 2, 2, 2 } - temp: 12
+	nodeCoord[12]: { 0, 0, 0 } - temp: 10
+	nodeCoord[13]: { 1, 1, 1 } - temp: 11
+	nodeCoord[14]: { 1, 1, 1 } - temp: 11
+	nodeCoord[15]: { 3, 3, 3 } - temp: 13
+	nodeCoord[16]: { 3, 3, 3 } - temp: 13
+	nodeCoord[17]: { 0, 0, 0 } - temp: 10
+	nodeCoord[18]: { 1, 1, 1 } - temp: 11
+	nodeCoord[19]: { 1, 1, 1 } - temp: 11
+	nodeCoord[20]: { 3, 3, 3 } - temp: 13
+	nodeCoord[21]: { 3, 3, 3 } - temp: 13
+	nodeCoord[22]: { 0, 0, 0 } - temp: 10
+	nodeCoord[23]: { 1, 1, 1 } - temp: 11
+	nodeCoord[24]: { 1, 1, 1 } - temp: 11
+	nodeCoord[25]: { 3, 3, 3 } - temp: 13
+	nodeCoord[26]: { 3, 3, 3 } - temp: 13
+	element[0]: temp: 22
+	element[1]: temp: 22
+	element[2]: temp: 20
+	element[3]: temp: 21
+	element[4]: temp: 23
+	element[5]: temp: 20
+	element[6]: temp: 21
+	element[7]: temp: 23

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync-2D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,414 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f728)
+Stg_Component (ptr): 0x805f728
+Stg_Object (ptr): 0x805f728
+	Stg_Class (ptr): 0x805f728
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f811dd
+		_print (func ptr): 0xb7f81a6a
+		_copy (func ptr): 0xb7f82c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8051c
+	_construct (func ptr): 0xb7f8100e
+	_build (func ptr): 0xb7f83322
+	_initialise (func ptr): 0xb7f84214
+	_execute (func ptr): 0xb7f84219
+	_destroy (func ptr): 0xb7f811d8
+	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): 0x805f478
+Extension (ptr):0x805faf8
+Stg_Object (ptr): 0x805faf8
+	Stg_Class (ptr): 0x805faf8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7ef9018
+		_print (func ptr): 0xb7ef9066
+		_copy (func ptr): 0xb7ef9200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fb58
+Stg_ObjectList (ptr):0x805fb58
+	Stg_Class (ptr): 0x805fb58
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f2af3e
+		_print (func ptr): 0xb7f2af75
+		_copy (func ptr): 0xb7f2b217
+	_append(func ptr): 0xb7f2be7b
+	_prepend(func ptr): 0xb7f2bf41
+	_replaceAll(func ptr): 0xb7f2c005
+	_replace(func ptr): 0xb7f2c0be
+	_insertBefore(func ptr): 0xb7f2c25b
+	_insertAfter(func ptr): 0xb7f2c416
+	_remove(func ptr): 0xb7f2c5d3
+	_getIndex(func ptr): 0xb7f2c679
+	_get(func ptr): 0xb7f2c727
+	_allocMoreMemory(func ptr): 0xb7f2c8fa
+	_insertAtIndex(func ptr): 0xb7f2c980
+	_removeByIndex(func ptr): 0xb7f2c9fe
+	_deleteAllObjects(func ptr): 0xb7f2c87b
+	_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):0x805fbc8
+Stg_Object (ptr): 0x805fbc8
+	Stg_Class (ptr): 0x805fbc8
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7ef9018
+		_print (func ptr): 0xb7ef9066
+		_copy (func ptr): 0xb7ef9200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fc28
+Stg_ObjectList (ptr):0x805fc28
+	Stg_Class (ptr): 0x805fc28
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f2af3e
+		_print (func ptr): 0xb7f2af75
+		_copy (func ptr): 0xb7f2b217
+	_append(func ptr): 0xb7f2be7b
+	_prepend(func ptr): 0xb7f2bf41
+	_replaceAll(func ptr): 0xb7f2c005
+	_replace(func ptr): 0xb7f2c0be
+	_insertBefore(func ptr): 0xb7f2c25b
+	_insertAfter(func ptr): 0xb7f2c416
+	_remove(func ptr): 0xb7f2c5d3
+	_getIndex(func ptr): 0xb7f2c679
+	_get(func ptr): 0xb7f2c727
+	_allocMoreMemory(func ptr): 0xb7f2c8fa
+	_insertAtIndex(func ptr): 0xb7f2c980
+	_removeByIndex(func ptr): 0xb7f2c9fe
+	_deleteAllObjects(func ptr): 0xb7f2c87b
+	_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): 0x8060458
+	nodeLocalCount: 12
+	nodeDomainCount: 27
+	nodeShadowCount: 15
+	nodeGlobalCount: 27
+	nodeCoord (ptr): 0x8060540
+	nodeCoord[0-27]:   (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,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,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), (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,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,3.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060238
+	nodeL2G[0-12]:   004 005 007 008 013 014 016 017 022 023 025 026 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060238
+	nodeD2G[0-27]:   004 005 007 008 013 014 016 017 022 023 025 026 000 001 002 003 006 009 010 011 012 015 018 019 020 021 024 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060850
+	nodeG2L[0-27]:   027 027 027 027 000 001 027 002 003 027 027 027 027 004 005 027 006 007 027 027 027 027 008 009 027 010 011 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x80607d8
+	nodeG2D[0-27]:   012 013 014 015 000 001 016 002 003 017 018 019 020 004 005 021 006 007 022 023 024 025 008 009 026 010 011 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x80608c8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060940
+	nodeNeighbourTbl[0-27]:
+		nodeNeighbourTbl[0][0-6]: 001 002 004 015 013 027 
+		nodeNeighbourTbl[1][0-6]: 027 003 005 000 014 027 
+		nodeNeighbourTbl[2][0-6]: 003 027 006 016 000 027 
+		nodeNeighbourTbl[3][0-6]: 027 027 007 002 001 027 
+		nodeNeighbourTbl[4][0-6]: 005 006 008 020 018 000 
+		nodeNeighbourTbl[5][0-6]: 027 007 009 004 019 001 
+		nodeNeighbourTbl[6][0-6]: 007 027 010 021 004 002 
+		nodeNeighbourTbl[7][0-6]: 027 027 011 006 005 003 
+		nodeNeighbourTbl[8][0-6]: 009 010 027 025 023 004 
+		nodeNeighbourTbl[9][0-6]: 027 011 027 008 024 005 
+		nodeNeighbourTbl[10][0-6]: 011 027 027 026 008 006 
+		nodeNeighbourTbl[11][0-6]: 027 027 027 010 009 007 
+		nodeNeighbourTbl[12][0-6]: 013 015 017 027 027 027 
+		nodeNeighbourTbl[13][0-6]: 014 000 018 012 027 027 
+		nodeNeighbourTbl[14][0-6]: 027 001 019 013 027 027 
+		nodeNeighbourTbl[15][0-6]: 000 016 020 027 012 027 
+		nodeNeighbourTbl[16][0-6]: 002 027 021 027 015 027 
+		nodeNeighbourTbl[17][0-6]: 018 020 022 027 027 012 
+		nodeNeighbourTbl[18][0-6]: 019 004 023 017 027 013 
+		nodeNeighbourTbl[19][0-6]: 027 005 024 018 027 014 
+		nodeNeighbourTbl[20][0-6]: 004 021 025 027 017 015 
+		nodeNeighbourTbl[21][0-6]: 006 027 026 027 020 016 
+		nodeNeighbourTbl[22][0-6]: 023 025 027 027 027 017 
+		nodeNeighbourTbl[23][0-6]: 024 008 027 022 027 018 
+		nodeNeighbourTbl[24][0-6]: 027 009 027 023 027 019 
+		nodeNeighbourTbl[25][0-6]: 008 026 027 027 022 020 
+		nodeNeighbourTbl[26][0-6]: 010 027 027 027 025 021 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8060c40
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x8060cb8
+	nodeElementTbl[0-27]:
+		nodeElementTbl[0][0-8]: 008 008 008 008 002 003 004 000 
+		nodeElementTbl[1][0-8]: 008 008 008 008 003 008 000 008 
+		nodeElementTbl[2][0-8]: 008 008 008 008 004 000 008 008 
+		nodeElementTbl[3][0-8]: 008 008 008 008 000 008 008 008 
+		nodeElementTbl[4][0-8]: 002 003 004 000 005 006 007 001 
+		nodeElementTbl[5][0-8]: 003 008 000 008 006 008 001 008 
+		nodeElementTbl[6][0-8]: 004 000 008 008 007 001 008 008 
+		nodeElementTbl[7][0-8]: 000 008 008 008 001 008 008 008 
+		nodeElementTbl[8][0-8]: 005 006 007 001 008 008 008 008 
+		nodeElementTbl[9][0-8]: 006 008 001 008 008 008 008 008 
+		nodeElementTbl[10][0-8]: 007 001 008 008 008 008 008 008 
+		nodeElementTbl[11][0-8]: 001 008 008 008 008 008 008 008 
+		nodeElementTbl[12][0-8]: 008 008 008 008 008 008 008 002 
+		nodeElementTbl[13][0-8]: 008 008 008 008 008 008 002 003 
+		nodeElementTbl[14][0-8]: 008 008 008 008 008 008 003 008 
+		nodeElementTbl[15][0-8]: 008 008 008 008 008 002 008 004 
+		nodeElementTbl[16][0-8]: 008 008 008 008 008 004 008 008 
+		nodeElementTbl[17][0-8]: 008 008 008 002 008 008 008 005 
+		nodeElementTbl[18][0-8]: 008 008 002 003 008 008 005 006 
+		nodeElementTbl[19][0-8]: 008 008 003 008 008 008 006 008 
+		nodeElementTbl[20][0-8]: 008 002 008 004 008 005 008 007 
+		nodeElementTbl[21][0-8]: 008 004 008 008 008 007 008 008 
+		nodeElementTbl[22][0-8]: 008 008 008 005 008 008 008 008 
+		nodeElementTbl[23][0-8]: 008 008 005 006 008 008 008 008 
+		nodeElementTbl[24][0-8]: 008 008 006 008 008 008 008 008 
+		nodeElementTbl[25][0-8]: 008 005 008 007 008 008 008 008 
+		nodeElementTbl[26][0-8]: 008 007 008 008 008 008 008 008 
+	element (ptr): 0x8061090
+	elementLocalCount: 2
+	elementDomainCount: 8
+	elementShadowCount: 6
+	elementGlobalCount: 8
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805d000
+	elementL2G[0-2]:   003 007 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805d000
+	elementD2G[0-8]:   003 007 000 001 002 004 005 006 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x8061110
+	elementG2L[0-8]:   008 008 008 000 008 008 008 001 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x80610e0
+	elementG2D[0-8]:   002 003 004 000 005 006 007 001 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061140
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061170
+	elementNeighbourTbl[0-8]:
+		elementNeighbourTbl[0][0-26]: 008 008 008 008 008 008 008 008 008 002 003 008 004 008 008 008 008 005 006 008 007 001 008 008 008 008 
+		elementNeighbourTbl[1][0-26]: 002 003 008 004 000 008 008 008 008 005 006 008 007 008 008 008 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[2][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 008 003 008 004 000 008 008 008 008 005 006 008 007 001 
+		elementNeighbourTbl[3][0-26]: 008 008 008 008 008 008 008 008 008 008 008 008 002 008 004 000 008 008 008 008 005 006 008 007 001 008 
+		elementNeighbourTbl[4][0-26]: 008 008 008 008 008 008 008 008 008 008 002 003 008 000 008 008 008 008 005 006 008 007 001 008 008 008 
+		elementNeighbourTbl[5][0-26]: 008 008 008 008 002 003 008 004 000 008 008 008 008 006 008 007 001 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[6][0-26]: 008 008 008 002 003 008 004 000 008 008 008 008 005 008 007 001 008 008 008 008 008 008 008 008 008 008 
+		elementNeighbourTbl[7][0-26]: 008 002 003 008 004 000 008 008 008 008 005 006 008 001 008 008 008 008 008 008 008 008 008 008 008 008 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x805aa18
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80614e0
+	elementNodeTbl[0-8]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 004 005 007 006 
+		elementNodeTbl[1][0-8]: 004 005 007 006 008 009 011 010 
+		elementNodeTbl[2][0-8]: 012 013 000 015 017 018 004 020 
+		elementNodeTbl[3][0-8]: 013 014 001 000 018 019 005 004 
+		elementNodeTbl[4][0-8]: 015 000 002 016 020 004 006 021 
+		elementNodeTbl[5][0-8]: 017 018 004 020 022 023 008 025 
+		elementNodeTbl[6][0-8]: 018 019 005 004 023 024 009 008 
+		elementNodeTbl[7][0-8]: 020 004 006 021 025 008 010 026 
+	procNbrCnt: 3
+	procNbrTbl (ptr): 0x80602b0
+		procNbrTbl[0]: 0
+		procNbrTbl[1]: 1
+		procNbrTbl[2]: 2
+	elementShadowInfo->procShadowedCnt (ptr): 0x8060420
+		elementShadowInfo->procShadowedCnt[0]: 2
+		elementShadowInfo->procShadowedCnt[1]: 2
+		elementShadowInfo->procShadowedCnt[2]: 2
+	elementShadowInfo->procShadowedTbl (ptr): 0x805d030
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x8060340
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+		elementShadowInfo->procShadowedTbl[1] (ptr): 0x8061708
+			elementShadowInfo->procShadowedTbl[1][0]: 0
+			elementShadowInfo->procShadowedTbl[1][1]: 1
+		elementShadowInfo->procShadowedTbl[2] (ptr): 0x8061770
+			elementShadowInfo->procShadowedTbl[2][0]: 0
+			elementShadowInfo->procShadowedTbl[2][1]: 1
+	elementShadowInfo->procShadowCnt (ptr): 0x8061788
+		elementShadowInfo->procShadowCnt[0]: 2
+		elementShadowInfo->procShadowCnt[1]: 2
+		elementShadowInfo->procShadowCnt[2]: 2
+	elementShadowInfo->procShadowTbl (ptr): 0x80617a0
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x80617b8
+			elementShadowInfo->procShadowTbl[0][0]: 2
+			elementShadowInfo->procShadowTbl[0][1]: 5
+		elementShadowInfo->procShadowTbl[1] (ptr): 0x80617d0
+			elementShadowInfo->procShadowTbl[1][0]: 3
+			elementShadowInfo->procShadowTbl[1][1]: 6
+		elementShadowInfo->procShadowTbl[2] (ptr): 0x80617e8
+			elementShadowInfo->procShadowTbl[2][0]: 4
+			elementShadowInfo->procShadowTbl[2][1]: 7
+	nodeShadowInfo->procShadowedCnt (ptr): 0x8061840
+		nodeShadowInfo->procShadowedCnt[0]: 9
+		nodeShadowInfo->procShadowedCnt[1]: 6
+		nodeShadowInfo->procShadowedCnt[2]: 6
+	nodeShadowInfo->procShadowedTbl (ptr): 0x8061858
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x8061998
+			nodeShadowInfo->procShadowedTbl[0][0]: 1
+			nodeShadowInfo->procShadowedTbl[0][1]: 2
+			nodeShadowInfo->procShadowedTbl[0][2]: 3
+			nodeShadowInfo->procShadowedTbl[0][3]: 5
+			nodeShadowInfo->procShadowedTbl[0][4]: 6
+			nodeShadowInfo->procShadowedTbl[0][5]: 7
+			nodeShadowInfo->procShadowedTbl[0][6]: 9
+			nodeShadowInfo->procShadowedTbl[0][7]: 10
+			nodeShadowInfo->procShadowedTbl[0][8]: 11
+		nodeShadowInfo->procShadowedTbl[1] (ptr): 0x8061660
+			nodeShadowInfo->procShadowedTbl[1][0]: 2
+			nodeShadowInfo->procShadowedTbl[1][1]: 3
+			nodeShadowInfo->procShadowedTbl[1][2]: 6
+			nodeShadowInfo->procShadowedTbl[1][3]: 7
+			nodeShadowInfo->procShadowedTbl[1][4]: 10
+			nodeShadowInfo->procShadowedTbl[1][5]: 11
+		nodeShadowInfo->procShadowedTbl[2] (ptr): 0x8061638
+			nodeShadowInfo->procShadowedTbl[2][0]: 1
+			nodeShadowInfo->procShadowedTbl[2][1]: 3
+			nodeShadowInfo->procShadowedTbl[2][2]: 5
+			nodeShadowInfo->procShadowedTbl[2][3]: 7
+			nodeShadowInfo->procShadowedTbl[2][4]: 9
+			nodeShadowInfo->procShadowedTbl[2][5]: 11
+	nodeShadowInfo->procShadowCnt (ptr): 0x8061a68
+		nodeShadowInfo->procShadowCnt[0]: 9
+		nodeShadowInfo->procShadowCnt[1]: 6
+		nodeShadowInfo->procShadowCnt[2]: 6
+	nodeShadowInfo->procShadowTbl (ptr): 0x8061a80
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8061a98
+			nodeShadowInfo->procShadowTbl[0][0]: 12
+			nodeShadowInfo->procShadowTbl[0][1]: 13
+			nodeShadowInfo->procShadowTbl[0][2]: 15
+			nodeShadowInfo->procShadowTbl[0][3]: 17
+			nodeShadowInfo->procShadowTbl[0][4]: 18
+			nodeShadowInfo->procShadowTbl[0][5]: 20
+			nodeShadowInfo->procShadowTbl[0][6]: 22
+			nodeShadowInfo->procShadowTbl[0][7]: 23
+			nodeShadowInfo->procShadowTbl[0][8]: 25
+		nodeShadowInfo->procShadowTbl[1] (ptr): 0x8061610
+			nodeShadowInfo->procShadowTbl[1][0]: 13
+			nodeShadowInfo->procShadowTbl[1][1]: 14
+			nodeShadowInfo->procShadowTbl[1][2]: 18
+			nodeShadowInfo->procShadowTbl[1][3]: 19
+			nodeShadowInfo->procShadowTbl[1][4]: 23
+			nodeShadowInfo->procShadowTbl[1][5]: 24
+		nodeShadowInfo->procShadowTbl[2] (ptr): 0x8061ac8
+			nodeShadowInfo->procShadowTbl[2][0]: 15
+			nodeShadowInfo->procShadowTbl[2][1]: 16
+			nodeShadowInfo->procShadowTbl[2][2]: 20
+			nodeShadowInfo->procShadowTbl[2][3]: 21
+			nodeShadowInfo->procShadowTbl[2][4]: 25
+			nodeShadowInfo->procShadowTbl[2][5]: 26
+Pre-sync:
+	nodeCoord[0]: { 3, 3, 3 } - temp: 13
+	nodeCoord[1]: { 3, 3, 3 } - temp: 13
+	nodeCoord[2]: { 3, 3, 3 } - temp: 13
+	nodeCoord[3]: { 3, 3, 3 } - temp: 13
+	nodeCoord[4]: { 3, 3, 3 } - temp: 13
+	nodeCoord[5]: { 3, 3, 3 } - temp: 13
+	nodeCoord[6]: { 3, 3, 3 } - temp: 13
+	nodeCoord[7]: { 3, 3, 3 } - temp: 13
+	nodeCoord[8]: { 3, 3, 3 } - temp: 13
+	nodeCoord[9]: { 3, 3, 3 } - temp: 13
+	nodeCoord[10]: { 3, 3, 3 } - temp: 13
+	nodeCoord[11]: { 3, 3, 3 } - temp: 13
+	nodeCoord[12]: { 3, 3, 3 } - temp: 13
+	nodeCoord[13]: { 3, 3, 3 } - temp: 13
+	nodeCoord[14]: { 3, 3, 3 } - temp: 13
+	nodeCoord[15]: { 3, 3, 3 } - temp: 13
+	nodeCoord[16]: { 3, 3, 3 } - temp: 13
+	nodeCoord[17]: { 3, 3, 3 } - temp: 13
+	nodeCoord[18]: { 3, 3, 3 } - temp: 13
+	nodeCoord[19]: { 3, 3, 3 } - temp: 13
+	nodeCoord[20]: { 3, 3, 3 } - temp: 13
+	nodeCoord[21]: { 3, 3, 3 } - temp: 13
+	nodeCoord[22]: { 3, 3, 3 } - temp: 13
+	nodeCoord[23]: { 3, 3, 3 } - temp: 13
+	nodeCoord[24]: { 3, 3, 3 } - temp: 13
+	nodeCoord[25]: { 3, 3, 3 } - temp: 13
+	nodeCoord[26]: { 3, 3, 3 } - temp: 13
+	element[0]: temp: 23
+	element[1]: temp: 23
+	element[2]: temp: 23
+	element[3]: temp: 23
+	element[4]: temp: 23
+	element[5]: temp: 23
+	element[6]: temp: 23
+	element[7]: temp: 23
+Post-sync:
+	nodeCoord[0]: { 3, 3, 3 } - temp: 13
+	nodeCoord[1]: { 3, 3, 3 } - temp: 13
+	nodeCoord[2]: { 3, 3, 3 } - temp: 13
+	nodeCoord[3]: { 3, 3, 3 } - temp: 13
+	nodeCoord[4]: { 3, 3, 3 } - temp: 13
+	nodeCoord[5]: { 3, 3, 3 } - temp: 13
+	nodeCoord[6]: { 3, 3, 3 } - temp: 13
+	nodeCoord[7]: { 3, 3, 3 } - temp: 13
+	nodeCoord[8]: { 3, 3, 3 } - temp: 13
+	nodeCoord[9]: { 3, 3, 3 } - temp: 13
+	nodeCoord[10]: { 3, 3, 3 } - temp: 13
+	nodeCoord[11]: { 3, 3, 3 } - temp: 13
+	nodeCoord[12]: { 0, 0, 0 } - temp: 10
+	nodeCoord[13]: { 1, 1, 1 } - temp: 11
+	nodeCoord[14]: { 1, 1, 1 } - temp: 11
+	nodeCoord[15]: { 2, 2, 2 } - temp: 12
+	nodeCoord[16]: { 2, 2, 2 } - temp: 12
+	nodeCoord[17]: { 0, 0, 0 } - temp: 10
+	nodeCoord[18]: { 1, 1, 1 } - temp: 11
+	nodeCoord[19]: { 1, 1, 1 } - temp: 11
+	nodeCoord[20]: { 2, 2, 2 } - temp: 12
+	nodeCoord[21]: { 2, 2, 2 } - temp: 12
+	nodeCoord[22]: { 0, 0, 0 } - temp: 10
+	nodeCoord[23]: { 1, 1, 1 } - temp: 11
+	nodeCoord[24]: { 1, 1, 1 } - temp: 11
+	nodeCoord[25]: { 2, 2, 2 } - temp: 12
+	nodeCoord[26]: { 2, 2, 2 } - temp: 12
+	element[0]: temp: 23
+	element[1]: temp: 23
+	element[2]: temp: 20
+	element[3]: temp: 21
+	element[4]: temp: 22
+	element[5]: temp: 20
+	element[6]: temp: 21
+	element[7]: temp: 22

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync-2D " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testMeshSync.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.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;
+	Stream*			stream;
+	Node_DomainIndex	node_dI;
+	Element_DomainIndex	element_dI;
+	
+	/* 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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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;
+	
+	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( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( False ) );
+	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( 1 ) );
+	
+	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_All( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout, 2 );
+	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;
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	
+	for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+		mesh->nodeCoord[node_dI][0] = (double)rank;
+		mesh->nodeCoord[node_dI][1] = (double)rank;
+		mesh->nodeCoord[node_dI][2] = (double)rank;
+		mesh->node[node_dI].temp = 10.0 + (double)rank;
+	}
+	for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ ) {
+		mesh->element[element_dI].temp = 20.0 + (double)rank;
+	}
+	
+	if( rank == procToWatch ) {
+		Print(mesh, stream);
+		
+		printf( "Pre-sync:\n" );
+		for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+			printf( "\tnodeCoord[%d]: { %g, %g, %g } - temp: %g\n",  node_dI, mesh->nodeCoord[node_dI][0],
+				mesh->nodeCoord[node_dI][1], mesh->nodeCoord[node_dI][2], mesh->node[node_dI].temp );
+		}
+		for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ )
+			printf( "\telement[%d]: temp: %g\n", element_dI, mesh->element[element_dI].temp );
+	}
+	
+	Mesh_Sync( mesh );
+	
+	if( rank == procToWatch ) {
+		printf( "Post-sync:\n" );
+		for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+			printf( "\tnodeCoord[%d]: { %g, %g, %g } - temp: %g\n",  node_dI, mesh->nodeCoord[node_dI][0],
+				mesh->nodeCoord[node_dI][1], mesh->nodeCoord[node_dI][2], mesh->node[node_dI].temp );
+		}
+		for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ )
+			printf( "\telement[%d]: temp: %g\n", element_dI, mesh->element[element_dI].temp );
+	}
+	
+	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 );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-large.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-large.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-large.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,179 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testMeshSync.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+struct _Node
+{
+	double temp;
+};
+
+struct _Element
+{
+	double temp;
+	double buf[100];
+};
+
+
+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;
+	Stream*			stream;
+	Node_DomainIndex	node_dI;
+	Element_DomainIndex	element_dI;
+	
+	/* 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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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;
+	
+	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( 17 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 13 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 13 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( False ) );
+	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( 1 ) );
+	
+	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_All( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout, 1 );
+	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;
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	
+	for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+		mesh->nodeCoord[node_dI][0] = (double)rank;
+		mesh->nodeCoord[node_dI][1] = (double)rank;
+		mesh->nodeCoord[node_dI][2] = (double)rank;
+		mesh->node[node_dI].temp = 10.0 + (double)rank;
+	}
+	for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ ) {
+		mesh->element[element_dI].temp = 20.0 + (double)rank;
+	}
+#if 0	
+	if( rank == procToWatch ) {
+		Print(mesh, stream);
+		
+		printf( "Pre-sync:\n" );
+		for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+			printf( "\tnodeCoord[%d]: { %g, %g, %g } - temp: %g\n",  node_dI, mesh->nodeCoord[node_dI][0],
+				mesh->nodeCoord[node_dI][1], mesh->nodeCoord[node_dI][2], mesh->node[node_dI].temp );
+		}
+		for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ )
+			printf( "\telement[%d]: temp: %g\n", element_dI, mesh->element[element_dI].temp );
+	}
+#endif
+	
+	Mesh_Sync( mesh );
+#if 0	
+	if( rank == procToWatch ) {
+		printf( "Post-sync:\n" );
+		for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+			printf( "\tnodeCoord[%d]: { %g, %g, %g } - temp: %g\n",  node_dI, mesh->nodeCoord[node_dI][0],
+				mesh->nodeCoord[node_dI][1], mesh->nodeCoord[node_dI][2], mesh->node[node_dI].temp );
+		}
+		for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ )
+			printf( "\telement[%d]: temp: %g\n", element_dI, mesh->element[element_dI].temp );
+	}
+#endif
+	
+	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 );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,516 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f498)
+Stg_Component (ptr): 0x805f498
+Stg_Object (ptr): 0x805f498
+	Stg_Class (ptr): 0x805f498
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7fda1dd
+		_print (func ptr): 0xb7fdaa6a
+		_copy (func ptr): 0xb7fdbc4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fd951c
+	_construct (func ptr): 0xb7fda00e
+	_build (func ptr): 0xb7fdc322
+	_initialise (func ptr): 0xb7fdd214
+	_execute (func ptr): 0xb7fdd219
+	_destroy (func ptr): 0xb7fda1d8
+	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): 0x805c568
+	layout (ptr): 0x805f150
+Extension (ptr):0x805f868
+Stg_Object (ptr): 0x805f868
+	Stg_Class (ptr): 0x805f868
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f52018
+		_print (func ptr): 0xb7f52066
+		_copy (func ptr): 0xb7f52200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f8e0
+Stg_ObjectList (ptr):0x805f8e0
+	Stg_Class (ptr): 0x805f8e0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f83f3e
+		_print (func ptr): 0xb7f83f75
+		_copy (func ptr): 0xb7f84217
+	_append(func ptr): 0xb7f84e7b
+	_prepend(func ptr): 0xb7f84f41
+	_replaceAll(func ptr): 0xb7f85005
+	_replace(func ptr): 0xb7f850be
+	_insertBefore(func ptr): 0xb7f8525b
+	_insertAfter(func ptr): 0xb7f85416
+	_remove(func ptr): 0xb7f855d3
+	_getIndex(func ptr): 0xb7f85679
+	_get(func ptr): 0xb7f85727
+	_allocMoreMemory(func ptr): 0xb7f858fa
+	_insertAtIndex(func ptr): 0xb7f85980
+	_removeByIndex(func ptr): 0xb7f859fe
+	_deleteAllObjects(func ptr): 0xb7f8587b
+	_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):0x805f950
+Stg_Object (ptr): 0x805f950
+	Stg_Class (ptr): 0x805f950
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7f52018
+		_print (func ptr): 0xb7f52066
+		_copy (func ptr): 0xb7f52200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f9c8
+Stg_ObjectList (ptr):0x805f9c8
+	Stg_Class (ptr): 0x805f9c8
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7f83f3e
+		_print (func ptr): 0xb7f83f75
+		_copy (func ptr): 0xb7f84217
+	_append(func ptr): 0xb7f84e7b
+	_prepend(func ptr): 0xb7f84f41
+	_replaceAll(func ptr): 0xb7f85005
+	_replace(func ptr): 0xb7f850be
+	_insertBefore(func ptr): 0xb7f8525b
+	_insertAfter(func ptr): 0xb7f85416
+	_remove(func ptr): 0xb7f855d3
+	_getIndex(func ptr): 0xb7f85679
+	_get(func ptr): 0xb7f85727
+	_allocMoreMemory(func ptr): 0xb7f858fa
+	_insertAtIndex(func ptr): 0xb7f85980
+	_removeByIndex(func ptr): 0xb7f859fe
+	_deleteAllObjects(func ptr): 0xb7f8587b
+	_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): 0x8060198
+	nodeLocalCount: 32
+	nodeDomainCount: 48
+	nodeShadowCount: 16
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060328
+	nodeCoord[0-48]:   (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), (0.00,0.00,0.00), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060808
+	nodeL2G[0-32]:   000 001 004 005 008 009 012 013 016 017 020 021 024 025 028 029 032 033 036 037 040 041 044 045 048 049 052 053 056 057 060 061 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060808
+	nodeD2G[0-48]:   000 001 004 005 008 009 012 013 016 017 020 021 024 025 028 029 032 033 036 037 040 041 044 045 048 049 052 053 056 057 060 061 002 006 010 014 018 022 026 030 034 038 042 046 050 054 058 062 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x80609e8
+	nodeG2L[0-64]:   000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 064 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x80608d8
+	nodeG2D[0-64]:   000 001 032 064 002 003 033 064 004 005 034 064 006 007 035 064 008 009 036 064 010 011 037 064 012 013 038 064 014 015 039 064 016 017 040 064 018 019 041 064 020 021 042 064 022 023 043 064 024 025 044 064 026 027 045 064 028 029 046 064 030 031 047 064 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060af8
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060bc8
+	nodeNeighbourTbl[0-48]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 064 064 064 
+		nodeNeighbourTbl[1][0-6]: 032 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 064 000 064 
+		nodeNeighbourTbl[3][0-6]: 033 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 064 002 064 
+		nodeNeighbourTbl[5][0-6]: 034 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 064 004 064 
+		nodeNeighbourTbl[7][0-6]: 035 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 064 064 000 
+		nodeNeighbourTbl[9][0-6]: 036 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 064 008 002 
+		nodeNeighbourTbl[11][0-6]: 037 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 064 010 004 
+		nodeNeighbourTbl[13][0-6]: 038 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 064 012 006 
+		nodeNeighbourTbl[15][0-6]: 039 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 064 064 008 
+		nodeNeighbourTbl[17][0-6]: 040 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 064 016 010 
+		nodeNeighbourTbl[19][0-6]: 041 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 064 018 012 
+		nodeNeighbourTbl[21][0-6]: 042 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 064 020 014 
+		nodeNeighbourTbl[23][0-6]: 043 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 064 064 016 
+		nodeNeighbourTbl[25][0-6]: 044 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 064 024 018 
+		nodeNeighbourTbl[27][0-6]: 045 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 064 026 020 
+		nodeNeighbourTbl[29][0-6]: 046 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 064 028 022 
+		nodeNeighbourTbl[31][0-6]: 047 064 064 030 029 023 
+		nodeNeighbourTbl[32][0-6]: 064 033 036 001 064 064 
+		nodeNeighbourTbl[33][0-6]: 064 034 037 003 032 064 
+		nodeNeighbourTbl[34][0-6]: 064 035 038 005 033 064 
+		nodeNeighbourTbl[35][0-6]: 064 064 039 007 034 064 
+		nodeNeighbourTbl[36][0-6]: 064 037 040 009 064 032 
+		nodeNeighbourTbl[37][0-6]: 064 038 041 011 036 033 
+		nodeNeighbourTbl[38][0-6]: 064 039 042 013 037 034 
+		nodeNeighbourTbl[39][0-6]: 064 064 043 015 038 035 
+		nodeNeighbourTbl[40][0-6]: 064 041 044 017 064 036 
+		nodeNeighbourTbl[41][0-6]: 064 042 045 019 040 037 
+		nodeNeighbourTbl[42][0-6]: 064 043 046 021 041 038 
+		nodeNeighbourTbl[43][0-6]: 064 064 047 023 042 039 
+		nodeNeighbourTbl[44][0-6]: 064 045 064 025 064 040 
+		nodeNeighbourTbl[45][0-6]: 064 046 064 027 044 041 
+		nodeNeighbourTbl[46][0-6]: 064 047 064 029 045 042 
+		nodeNeighbourTbl[47][0-6]: 064 064 064 031 046 043 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x8061118
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x80611e8
+	nodeElementTbl[0-48]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 027 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 009 
+		nodeElementTbl[2][0-8]: 027 027 027 027 027 000 027 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 009 001 010 
+		nodeElementTbl[4][0-8]: 027 027 027 027 027 001 027 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 010 002 011 
+		nodeElementTbl[6][0-8]: 027 027 027 027 027 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 011 027 027 
+		nodeElementTbl[8][0-8]: 027 027 027 000 027 027 027 003 
+		nodeElementTbl[9][0-8]: 027 027 000 009 027 027 003 012 
+		nodeElementTbl[10][0-8]: 027 000 027 001 027 003 027 004 
+		nodeElementTbl[11][0-8]: 000 009 001 010 003 012 004 013 
+		nodeElementTbl[12][0-8]: 027 001 027 002 027 004 027 005 
+		nodeElementTbl[13][0-8]: 001 010 002 011 004 013 005 014 
+		nodeElementTbl[14][0-8]: 027 002 027 027 027 005 027 027 
+		nodeElementTbl[15][0-8]: 002 011 027 027 005 014 027 027 
+		nodeElementTbl[16][0-8]: 027 027 027 003 027 027 027 006 
+		nodeElementTbl[17][0-8]: 027 027 003 012 027 027 006 015 
+		nodeElementTbl[18][0-8]: 027 003 027 004 027 006 027 007 
+		nodeElementTbl[19][0-8]: 003 012 004 013 006 015 007 016 
+		nodeElementTbl[20][0-8]: 027 004 027 005 027 007 027 008 
+		nodeElementTbl[21][0-8]: 004 013 005 014 007 016 008 017 
+		nodeElementTbl[22][0-8]: 027 005 027 027 027 008 027 027 
+		nodeElementTbl[23][0-8]: 005 014 027 027 008 017 027 027 
+		nodeElementTbl[24][0-8]: 027 027 027 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 015 027 027 027 027 
+		nodeElementTbl[26][0-8]: 027 006 027 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 015 007 016 027 027 027 027 
+		nodeElementTbl[28][0-8]: 027 007 027 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 016 008 017 027 027 027 027 
+		nodeElementTbl[30][0-8]: 027 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 017 027 027 027 027 027 027 
+		nodeElementTbl[32][0-8]: 027 027 027 027 027 027 009 027 
+		nodeElementTbl[33][0-8]: 027 027 027 027 009 027 010 027 
+		nodeElementTbl[34][0-8]: 027 027 027 027 010 027 011 027 
+		nodeElementTbl[35][0-8]: 027 027 027 027 011 027 027 027 
+		nodeElementTbl[36][0-8]: 027 027 009 027 027 027 012 027 
+		nodeElementTbl[37][0-8]: 009 027 010 027 012 027 013 027 
+		nodeElementTbl[38][0-8]: 010 027 011 027 013 027 014 027 
+		nodeElementTbl[39][0-8]: 011 027 027 027 014 027 027 027 
+		nodeElementTbl[40][0-8]: 027 027 012 027 027 027 015 027 
+		nodeElementTbl[41][0-8]: 012 027 013 027 015 027 016 027 
+		nodeElementTbl[42][0-8]: 013 027 014 027 016 027 017 027 
+		nodeElementTbl[43][0-8]: 014 027 027 027 017 027 027 027 
+		nodeElementTbl[44][0-8]: 027 027 015 027 027 027 027 027 
+		nodeElementTbl[45][0-8]: 015 027 016 027 027 027 027 027 
+		nodeElementTbl[46][0-8]: 016 027 017 027 027 027 027 027 
+		nodeElementTbl[47][0-8]: 017 027 027 027 027 027 027 027 
+	element (ptr): 0x80618b8
+	elementLocalCount: 9
+	elementDomainCount: 18
+	elementShadowCount: 9
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805ff78
+	elementL2G[0-9]:   000 003 006 009 012 015 018 021 024 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805ff78
+	elementD2G[0-18]:   000 003 006 009 012 015 018 021 024 001 004 007 010 013 016 019 022 025 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x80619d0
+	elementG2L[0-27]:   000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 027 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8061958
+	elementG2D[0-27]:   000 009 027 001 010 027 002 011 027 003 012 027 004 013 027 005 014 027 006 015 027 007 016 027 008 017 027 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061a48
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061aa0
+	elementNeighbourTbl[0-18]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 009 027 001 010 027 027 027 027 003 012 027 004 013 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 027 000 009 027 010 027 002 011 027 003 012 027 004 013 027 005 014 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 027 001 010 027 011 027 027 027 027 004 013 027 005 014 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 027 000 009 027 001 010 027 027 027 027 012 027 004 013 027 027 027 027 006 015 027 007 016 
+		elementNeighbourTbl[4][0-26]: 027 000 009 027 001 010 027 002 011 027 003 012 027 013 027 005 014 027 006 015 027 007 016 027 008 017 
+		elementNeighbourTbl[5][0-26]: 027 001 010 027 002 011 027 027 027 027 004 013 027 014 027 027 027 027 007 016 027 008 017 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 027 003 012 027 004 013 027 027 027 027 015 027 007 016 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 027 003 012 027 004 013 027 005 014 027 006 015 027 016 027 008 017 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 027 004 013 027 005 014 027 027 027 027 007 016 027 017 027 027 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[9][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 000 027 001 010 027 027 027 027 003 012 027 004 013 027 
+		elementNeighbourTbl[10][0-26]: 027 027 027 027 027 027 027 027 027 000 009 027 001 027 002 011 027 003 012 027 004 013 027 005 014 027 
+		elementNeighbourTbl[11][0-26]: 027 027 027 027 027 027 027 027 027 001 010 027 002 027 027 027 027 004 013 027 005 014 027 027 027 027 
+		elementNeighbourTbl[12][0-26]: 027 027 027 000 009 027 001 010 027 027 027 027 003 027 004 013 027 027 027 027 006 015 027 007 016 027 
+		elementNeighbourTbl[13][0-26]: 000 009 027 001 010 027 002 011 027 003 012 027 004 027 005 014 027 006 015 027 007 016 027 008 017 027 
+		elementNeighbourTbl[14][0-26]: 001 010 027 002 011 027 027 027 027 004 013 027 005 027 027 027 027 007 016 027 008 017 027 027 027 027 
+		elementNeighbourTbl[15][0-26]: 027 027 027 003 012 027 004 013 027 027 027 027 006 027 007 016 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[16][0-26]: 003 012 027 004 013 027 005 014 027 006 015 027 007 027 008 017 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[17][0-26]: 004 013 027 005 014 027 027 027 027 007 016 027 008 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x8062248
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x80622a0
+	elementNodeTbl[0-18]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+		elementNodeTbl[9][0-8]: 001 032 033 003 009 036 037 011 
+		elementNodeTbl[10][0-8]: 003 033 034 005 011 037 038 013 
+		elementNodeTbl[11][0-8]: 005 034 035 007 013 038 039 015 
+		elementNodeTbl[12][0-8]: 009 036 037 011 017 040 041 019 
+		elementNodeTbl[13][0-8]: 011 037 038 013 019 041 042 021 
+		elementNodeTbl[14][0-8]: 013 038 039 015 021 042 043 023 
+		elementNodeTbl[15][0-8]: 017 040 041 019 025 044 045 027 
+		elementNodeTbl[16][0-8]: 019 041 042 021 027 045 046 029 
+		elementNodeTbl[17][0-8]: 021 042 043 023 029 046 047 031 
+	procNbrCnt: 1
+	procNbrTbl (ptr): 0x8060080
+		procNbrTbl[0]: 1
+	elementShadowInfo->procShadowedCnt (ptr): 0x805fff8
+		elementShadowInfo->procShadowedCnt[0]: 9
+	elementShadowInfo->procShadowedTbl (ptr): 0x8060160
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x805d008
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+			elementShadowInfo->procShadowedTbl[0][2]: 2
+			elementShadowInfo->procShadowedTbl[0][3]: 3
+			elementShadowInfo->procShadowedTbl[0][4]: 4
+			elementShadowInfo->procShadowedTbl[0][5]: 5
+			elementShadowInfo->procShadowedTbl[0][6]: 6
+			elementShadowInfo->procShadowedTbl[0][7]: 7
+			elementShadowInfo->procShadowedTbl[0][8]: 8
+	elementShadowInfo->procShadowCnt (ptr): 0x805aa30
+		elementShadowInfo->procShadowCnt[0]: 9
+	elementShadowInfo->procShadowTbl (ptr): 0x805aa40
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x80607b8
+			elementShadowInfo->procShadowTbl[0][0]: 9
+			elementShadowInfo->procShadowTbl[0][1]: 10
+			elementShadowInfo->procShadowTbl[0][2]: 11
+			elementShadowInfo->procShadowTbl[0][3]: 12
+			elementShadowInfo->procShadowTbl[0][4]: 13
+			elementShadowInfo->procShadowTbl[0][5]: 14
+			elementShadowInfo->procShadowTbl[0][6]: 15
+			elementShadowInfo->procShadowTbl[0][7]: 16
+			elementShadowInfo->procShadowTbl[0][8]: 17
+	nodeShadowInfo->procShadowedCnt (ptr): 0x805d038
+		nodeShadowInfo->procShadowedCnt[0]: 16
+	nodeShadowInfo->procShadowedTbl (ptr): 0x80607e8
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x80625a8
+			nodeShadowInfo->procShadowedTbl[0][0]: 0
+			nodeShadowInfo->procShadowedTbl[0][1]: 2
+			nodeShadowInfo->procShadowedTbl[0][2]: 4
+			nodeShadowInfo->procShadowedTbl[0][3]: 6
+			nodeShadowInfo->procShadowedTbl[0][4]: 8
+			nodeShadowInfo->procShadowedTbl[0][5]: 10
+			nodeShadowInfo->procShadowedTbl[0][6]: 12
+			nodeShadowInfo->procShadowedTbl[0][7]: 14
+			nodeShadowInfo->procShadowedTbl[0][8]: 16
+			nodeShadowInfo->procShadowedTbl[0][9]: 18
+			nodeShadowInfo->procShadowedTbl[0][10]: 20
+			nodeShadowInfo->procShadowedTbl[0][11]: 22
+			nodeShadowInfo->procShadowedTbl[0][12]: 24
+			nodeShadowInfo->procShadowedTbl[0][13]: 26
+			nodeShadowInfo->procShadowedTbl[0][14]: 28
+			nodeShadowInfo->procShadowedTbl[0][15]: 30
+	nodeShadowInfo->procShadowCnt (ptr): 0x8062678
+		nodeShadowInfo->procShadowCnt[0]: 16
+	nodeShadowInfo->procShadowTbl (ptr): 0x80625f8
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8062688
+			nodeShadowInfo->procShadowTbl[0][0]: 32
+			nodeShadowInfo->procShadowTbl[0][1]: 33
+			nodeShadowInfo->procShadowTbl[0][2]: 34
+			nodeShadowInfo->procShadowTbl[0][3]: 35
+			nodeShadowInfo->procShadowTbl[0][4]: 36
+			nodeShadowInfo->procShadowTbl[0][5]: 37
+			nodeShadowInfo->procShadowTbl[0][6]: 38
+			nodeShadowInfo->procShadowTbl[0][7]: 39
+			nodeShadowInfo->procShadowTbl[0][8]: 40
+			nodeShadowInfo->procShadowTbl[0][9]: 41
+			nodeShadowInfo->procShadowTbl[0][10]: 42
+			nodeShadowInfo->procShadowTbl[0][11]: 43
+			nodeShadowInfo->procShadowTbl[0][12]: 44
+			nodeShadowInfo->procShadowTbl[0][13]: 45
+			nodeShadowInfo->procShadowTbl[0][14]: 46
+			nodeShadowInfo->procShadowTbl[0][15]: 47
+Pre-sync:
+	nodeCoord[0]: { 0, 0, 0 } - temp: 10
+	nodeCoord[1]: { 0, 0, 0 } - temp: 10
+	nodeCoord[2]: { 0, 0, 0 } - temp: 10
+	nodeCoord[3]: { 0, 0, 0 } - temp: 10
+	nodeCoord[4]: { 0, 0, 0 } - temp: 10
+	nodeCoord[5]: { 0, 0, 0 } - temp: 10
+	nodeCoord[6]: { 0, 0, 0 } - temp: 10
+	nodeCoord[7]: { 0, 0, 0 } - temp: 10
+	nodeCoord[8]: { 0, 0, 0 } - temp: 10
+	nodeCoord[9]: { 0, 0, 0 } - temp: 10
+	nodeCoord[10]: { 0, 0, 0 } - temp: 10
+	nodeCoord[11]: { 0, 0, 0 } - temp: 10
+	nodeCoord[12]: { 0, 0, 0 } - temp: 10
+	nodeCoord[13]: { 0, 0, 0 } - temp: 10
+	nodeCoord[14]: { 0, 0, 0 } - temp: 10
+	nodeCoord[15]: { 0, 0, 0 } - temp: 10
+	nodeCoord[16]: { 0, 0, 0 } - temp: 10
+	nodeCoord[17]: { 0, 0, 0 } - temp: 10
+	nodeCoord[18]: { 0, 0, 0 } - temp: 10
+	nodeCoord[19]: { 0, 0, 0 } - temp: 10
+	nodeCoord[20]: { 0, 0, 0 } - temp: 10
+	nodeCoord[21]: { 0, 0, 0 } - temp: 10
+	nodeCoord[22]: { 0, 0, 0 } - temp: 10
+	nodeCoord[23]: { 0, 0, 0 } - temp: 10
+	nodeCoord[24]: { 0, 0, 0 } - temp: 10
+	nodeCoord[25]: { 0, 0, 0 } - temp: 10
+	nodeCoord[26]: { 0, 0, 0 } - temp: 10
+	nodeCoord[27]: { 0, 0, 0 } - temp: 10
+	nodeCoord[28]: { 0, 0, 0 } - temp: 10
+	nodeCoord[29]: { 0, 0, 0 } - temp: 10
+	nodeCoord[30]: { 0, 0, 0 } - temp: 10
+	nodeCoord[31]: { 0, 0, 0 } - temp: 10
+	nodeCoord[32]: { 0, 0, 0 } - temp: 10
+	nodeCoord[33]: { 0, 0, 0 } - temp: 10
+	nodeCoord[34]: { 0, 0, 0 } - temp: 10
+	nodeCoord[35]: { 0, 0, 0 } - temp: 10
+	nodeCoord[36]: { 0, 0, 0 } - temp: 10
+	nodeCoord[37]: { 0, 0, 0 } - temp: 10
+	nodeCoord[38]: { 0, 0, 0 } - temp: 10
+	nodeCoord[39]: { 0, 0, 0 } - temp: 10
+	nodeCoord[40]: { 0, 0, 0 } - temp: 10
+	nodeCoord[41]: { 0, 0, 0 } - temp: 10
+	nodeCoord[42]: { 0, 0, 0 } - temp: 10
+	nodeCoord[43]: { 0, 0, 0 } - temp: 10
+	nodeCoord[44]: { 0, 0, 0 } - temp: 10
+	nodeCoord[45]: { 0, 0, 0 } - temp: 10
+	nodeCoord[46]: { 0, 0, 0 } - temp: 10
+	nodeCoord[47]: { 0, 0, 0 } - temp: 10
+	element[0]: temp: 20
+	element[1]: temp: 20
+	element[2]: temp: 20
+	element[3]: temp: 20
+	element[4]: temp: 20
+	element[5]: temp: 20
+	element[6]: temp: 20
+	element[7]: temp: 20
+	element[8]: temp: 20
+	element[9]: temp: 20
+	element[10]: temp: 20
+	element[11]: temp: 20
+	element[12]: temp: 20
+	element[13]: temp: 20
+	element[14]: temp: 20
+	element[15]: temp: 20
+	element[16]: temp: 20
+	element[17]: temp: 20
+Post-sync:
+	nodeCoord[0]: { 0, 0, 0 } - temp: 10
+	nodeCoord[1]: { 0, 0, 0 } - temp: 10
+	nodeCoord[2]: { 0, 0, 0 } - temp: 10
+	nodeCoord[3]: { 0, 0, 0 } - temp: 10
+	nodeCoord[4]: { 0, 0, 0 } - temp: 10
+	nodeCoord[5]: { 0, 0, 0 } - temp: 10
+	nodeCoord[6]: { 0, 0, 0 } - temp: 10
+	nodeCoord[7]: { 0, 0, 0 } - temp: 10
+	nodeCoord[8]: { 0, 0, 0 } - temp: 10
+	nodeCoord[9]: { 0, 0, 0 } - temp: 10
+	nodeCoord[10]: { 0, 0, 0 } - temp: 10
+	nodeCoord[11]: { 0, 0, 0 } - temp: 10
+	nodeCoord[12]: { 0, 0, 0 } - temp: 10
+	nodeCoord[13]: { 0, 0, 0 } - temp: 10
+	nodeCoord[14]: { 0, 0, 0 } - temp: 10
+	nodeCoord[15]: { 0, 0, 0 } - temp: 10
+	nodeCoord[16]: { 0, 0, 0 } - temp: 10
+	nodeCoord[17]: { 0, 0, 0 } - temp: 10
+	nodeCoord[18]: { 0, 0, 0 } - temp: 10
+	nodeCoord[19]: { 0, 0, 0 } - temp: 10
+	nodeCoord[20]: { 0, 0, 0 } - temp: 10
+	nodeCoord[21]: { 0, 0, 0 } - temp: 10
+	nodeCoord[22]: { 0, 0, 0 } - temp: 10
+	nodeCoord[23]: { 0, 0, 0 } - temp: 10
+	nodeCoord[24]: { 0, 0, 0 } - temp: 10
+	nodeCoord[25]: { 0, 0, 0 } - temp: 10
+	nodeCoord[26]: { 0, 0, 0 } - temp: 10
+	nodeCoord[27]: { 0, 0, 0 } - temp: 10
+	nodeCoord[28]: { 0, 0, 0 } - temp: 10
+	nodeCoord[29]: { 0, 0, 0 } - temp: 10
+	nodeCoord[30]: { 0, 0, 0 } - temp: 10
+	nodeCoord[31]: { 0, 0, 0 } - temp: 10
+	nodeCoord[32]: { 1, 1, 1 } - temp: 11
+	nodeCoord[33]: { 1, 1, 1 } - temp: 11
+	nodeCoord[34]: { 1, 1, 1 } - temp: 11
+	nodeCoord[35]: { 1, 1, 1 } - temp: 11
+	nodeCoord[36]: { 1, 1, 1 } - temp: 11
+	nodeCoord[37]: { 1, 1, 1 } - temp: 11
+	nodeCoord[38]: { 1, 1, 1 } - temp: 11
+	nodeCoord[39]: { 1, 1, 1 } - temp: 11
+	nodeCoord[40]: { 1, 1, 1 } - temp: 11
+	nodeCoord[41]: { 1, 1, 1 } - temp: 11
+	nodeCoord[42]: { 1, 1, 1 } - temp: 11
+	nodeCoord[43]: { 1, 1, 1 } - temp: 11
+	nodeCoord[44]: { 1, 1, 1 } - temp: 11
+	nodeCoord[45]: { 1, 1, 1 } - temp: 11
+	nodeCoord[46]: { 1, 1, 1 } - temp: 11
+	nodeCoord[47]: { 1, 1, 1 } - temp: 11
+	element[0]: temp: 20
+	element[1]: temp: 20
+	element[2]: temp: 20
+	element[3]: temp: 20
+	element[4]: temp: 20
+	element[5]: temp: 20
+	element[6]: temp: 20
+	element[7]: temp: 20
+	element[8]: temp: 20
+	element[9]: temp: 21
+	element[10]: temp: 21
+	element[11]: temp: 21
+	element[12]: temp: 21
+	element[13]: temp: 21
+	element[14]: temp: 21
+	element[15]: temp: 21
+	element[16]: temp: 21
+	element[17]: temp: 21

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,675 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f5c0)
+Stg_Component (ptr): 0x805f5c0
+Stg_Object (ptr): 0x805f5c0
+	Stg_Class (ptr): 0x805f5c0
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f331dd
+		_print (func ptr): 0xb7f33a6a
+		_copy (func ptr): 0xb7f34c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f3251c
+	_construct (func ptr): 0xb7f3300e
+	_build (func ptr): 0xb7f35322
+	_initialise (func ptr): 0xb7f36214
+	_execute (func ptr): 0xb7f36219
+	_destroy (func ptr): 0xb7f331d8
+	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): 0x805f278
+Extension (ptr):0x805f990
+Stg_Object (ptr): 0x805f990
+	Stg_Class (ptr): 0x805f990
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7eab018
+		_print (func ptr): 0xb7eab066
+		_copy (func ptr): 0xb7eab200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805fa08
+Stg_ObjectList (ptr):0x805fa08
+	Stg_Class (ptr): 0x805fa08
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7edcf3e
+		_print (func ptr): 0xb7edcf75
+		_copy (func ptr): 0xb7edd217
+	_append(func ptr): 0xb7edde7b
+	_prepend(func ptr): 0xb7eddf41
+	_replaceAll(func ptr): 0xb7ede005
+	_replace(func ptr): 0xb7ede0be
+	_insertBefore(func ptr): 0xb7ede25b
+	_insertAfter(func ptr): 0xb7ede416
+	_remove(func ptr): 0xb7ede5d3
+	_getIndex(func ptr): 0xb7ede679
+	_get(func ptr): 0xb7ede727
+	_allocMoreMemory(func ptr): 0xb7ede8fa
+	_insertAtIndex(func ptr): 0xb7ede980
+	_removeByIndex(func ptr): 0xb7ede9fe
+	_deleteAllObjects(func ptr): 0xb7ede87b
+	_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):0x805fa78
+Stg_Object (ptr): 0x805fa78
+	Stg_Class (ptr): 0x805fa78
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7eab018
+		_print (func ptr): 0xb7eab066
+		_copy (func ptr): 0xb7eab200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805faf0
+Stg_ObjectList (ptr):0x805faf0
+	Stg_Class (ptr): 0x805faf0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7edcf3e
+		_print (func ptr): 0xb7edcf75
+		_copy (func ptr): 0xb7edd217
+	_append(func ptr): 0xb7edde7b
+	_prepend(func ptr): 0xb7eddf41
+	_replaceAll(func ptr): 0xb7ede005
+	_replace(func ptr): 0xb7ede0be
+	_insertBefore(func ptr): 0xb7ede25b
+	_insertAfter(func ptr): 0xb7ede416
+	_remove(func ptr): 0xb7ede5d3
+	_getIndex(func ptr): 0xb7ede679
+	_get(func ptr): 0xb7ede727
+	_allocMoreMemory(func ptr): 0xb7ede8fa
+	_insertAtIndex(func ptr): 0xb7ede980
+	_removeByIndex(func ptr): 0xb7ede9fe
+	_deleteAllObjects(func ptr): 0xb7ede87b
+	_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): 0x80602c0
+	nodeLocalCount: 32
+	nodeDomainCount: 64
+	nodeShadowCount: 32
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x80604d0
+	nodeCoord[0-64]:   (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,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,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), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x8060b70
+	nodeL2G[0-32]:   001 002 005 006 009 010 013 014 017 018 021 022 025 026 029 030 033 034 037 038 041 042 045 046 049 050 053 054 057 058 061 062 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x8060b70
+	nodeD2G[0-64]:   001 002 005 006 009 010 013 014 017 018 021 022 025 026 029 030 033 034 037 038 041 042 045 046 049 050 053 054 057 058 061 062 000 003 004 007 008 011 012 015 016 019 020 023 024 027 028 031 032 035 036 039 040 043 044 047 048 051 052 055 056 059 060 063 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x8060d90
+	nodeG2L[0-64]:   064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 064 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x8060c80
+	nodeG2D[0-64]:   032 000 001 033 034 002 003 035 036 004 005 037 038 006 007 039 040 008 009 041 042 010 011 043 044 012 013 045 046 014 015 047 048 016 017 049 050 018 019 051 052 020 021 053 054 022 023 055 056 024 025 057 058 026 027 059 060 028 029 061 062 030 031 063 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060ea0
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060fb0
+	nodeNeighbourTbl[0-64]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 032 064 064 
+		nodeNeighbourTbl[1][0-6]: 033 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 034 000 064 
+		nodeNeighbourTbl[3][0-6]: 035 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 036 002 064 
+		nodeNeighbourTbl[5][0-6]: 037 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 038 004 064 
+		nodeNeighbourTbl[7][0-6]: 039 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 040 064 000 
+		nodeNeighbourTbl[9][0-6]: 041 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 042 008 002 
+		nodeNeighbourTbl[11][0-6]: 043 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 044 010 004 
+		nodeNeighbourTbl[13][0-6]: 045 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 046 012 006 
+		nodeNeighbourTbl[15][0-6]: 047 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 048 064 008 
+		nodeNeighbourTbl[17][0-6]: 049 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 050 016 010 
+		nodeNeighbourTbl[19][0-6]: 051 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 052 018 012 
+		nodeNeighbourTbl[21][0-6]: 053 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 054 020 014 
+		nodeNeighbourTbl[23][0-6]: 055 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 056 064 016 
+		nodeNeighbourTbl[25][0-6]: 057 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 058 024 018 
+		nodeNeighbourTbl[27][0-6]: 059 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 060 026 020 
+		nodeNeighbourTbl[29][0-6]: 061 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 062 028 022 
+		nodeNeighbourTbl[31][0-6]: 063 064 064 030 029 023 
+		nodeNeighbourTbl[32][0-6]: 000 034 040 064 064 064 
+		nodeNeighbourTbl[33][0-6]: 064 035 041 001 064 064 
+		nodeNeighbourTbl[34][0-6]: 002 036 042 064 032 064 
+		nodeNeighbourTbl[35][0-6]: 064 037 043 003 033 064 
+		nodeNeighbourTbl[36][0-6]: 004 038 044 064 034 064 
+		nodeNeighbourTbl[37][0-6]: 064 039 045 005 035 064 
+		nodeNeighbourTbl[38][0-6]: 006 064 046 064 036 064 
+		nodeNeighbourTbl[39][0-6]: 064 064 047 007 037 064 
+		nodeNeighbourTbl[40][0-6]: 008 042 048 064 064 032 
+		nodeNeighbourTbl[41][0-6]: 064 043 049 009 064 033 
+		nodeNeighbourTbl[42][0-6]: 010 044 050 064 040 034 
+		nodeNeighbourTbl[43][0-6]: 064 045 051 011 041 035 
+		nodeNeighbourTbl[44][0-6]: 012 046 052 064 042 036 
+		nodeNeighbourTbl[45][0-6]: 064 047 053 013 043 037 
+		nodeNeighbourTbl[46][0-6]: 014 064 054 064 044 038 
+		nodeNeighbourTbl[47][0-6]: 064 064 055 015 045 039 
+		nodeNeighbourTbl[48][0-6]: 016 050 056 064 064 040 
+		nodeNeighbourTbl[49][0-6]: 064 051 057 017 064 041 
+		nodeNeighbourTbl[50][0-6]: 018 052 058 064 048 042 
+		nodeNeighbourTbl[51][0-6]: 064 053 059 019 049 043 
+		nodeNeighbourTbl[52][0-6]: 020 054 060 064 050 044 
+		nodeNeighbourTbl[53][0-6]: 064 055 061 021 051 045 
+		nodeNeighbourTbl[54][0-6]: 022 064 062 064 052 046 
+		nodeNeighbourTbl[55][0-6]: 064 064 063 023 053 047 
+		nodeNeighbourTbl[56][0-6]: 024 058 064 064 064 048 
+		nodeNeighbourTbl[57][0-6]: 064 059 064 025 064 049 
+		nodeNeighbourTbl[58][0-6]: 026 060 064 064 056 050 
+		nodeNeighbourTbl[59][0-6]: 064 061 064 027 057 051 
+		nodeNeighbourTbl[60][0-6]: 028 062 064 064 058 052 
+		nodeNeighbourTbl[61][0-6]: 064 063 064 029 059 053 
+		nodeNeighbourTbl[62][0-6]: 030 064 064 064 060 054 
+		nodeNeighbourTbl[63][0-6]: 064 064 064 031 061 055 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x80616c0
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x80617d0
+	nodeElementTbl[0-64]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 009 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 010 
+		nodeElementTbl[2][0-8]: 027 027 027 027 009 000 011 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 010 001 012 
+		nodeElementTbl[4][0-8]: 027 027 027 027 011 001 013 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 012 002 014 
+		nodeElementTbl[6][0-8]: 027 027 027 027 013 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 014 027 027 
+		nodeElementTbl[8][0-8]: 027 027 009 000 027 027 015 003 
+		nodeElementTbl[9][0-8]: 027 027 000 010 027 027 003 016 
+		nodeElementTbl[10][0-8]: 009 000 011 001 015 003 017 004 
+		nodeElementTbl[11][0-8]: 000 010 001 012 003 016 004 018 
+		nodeElementTbl[12][0-8]: 011 001 013 002 017 004 019 005 
+		nodeElementTbl[13][0-8]: 001 012 002 014 004 018 005 020 
+		nodeElementTbl[14][0-8]: 013 002 027 027 019 005 027 027 
+		nodeElementTbl[15][0-8]: 002 014 027 027 005 020 027 027 
+		nodeElementTbl[16][0-8]: 027 027 015 003 027 027 021 006 
+		nodeElementTbl[17][0-8]: 027 027 003 016 027 027 006 022 
+		nodeElementTbl[18][0-8]: 015 003 017 004 021 006 023 007 
+		nodeElementTbl[19][0-8]: 003 016 004 018 006 022 007 024 
+		nodeElementTbl[20][0-8]: 017 004 019 005 023 007 025 008 
+		nodeElementTbl[21][0-8]: 004 018 005 020 007 024 008 026 
+		nodeElementTbl[22][0-8]: 019 005 027 027 025 008 027 027 
+		nodeElementTbl[23][0-8]: 005 020 027 027 008 026 027 027 
+		nodeElementTbl[24][0-8]: 027 027 021 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 022 027 027 027 027 
+		nodeElementTbl[26][0-8]: 021 006 023 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 022 007 024 027 027 027 027 
+		nodeElementTbl[28][0-8]: 023 007 025 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 024 008 026 027 027 027 027 
+		nodeElementTbl[30][0-8]: 025 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 026 027 027 027 027 027 027 
+		nodeElementTbl[32][0-8]: 027 027 027 027 027 027 027 009 
+		nodeElementTbl[33][0-8]: 027 027 027 027 027 027 010 027 
+		nodeElementTbl[34][0-8]: 027 027 027 027 027 009 027 011 
+		nodeElementTbl[35][0-8]: 027 027 027 027 010 027 012 027 
+		nodeElementTbl[36][0-8]: 027 027 027 027 027 011 027 013 
+		nodeElementTbl[37][0-8]: 027 027 027 027 012 027 014 027 
+		nodeElementTbl[38][0-8]: 027 027 027 027 027 013 027 027 
+		nodeElementTbl[39][0-8]: 027 027 027 027 014 027 027 027 
+		nodeElementTbl[40][0-8]: 027 027 027 009 027 027 027 015 
+		nodeElementTbl[41][0-8]: 027 027 010 027 027 027 016 027 
+		nodeElementTbl[42][0-8]: 027 009 027 011 027 015 027 017 
+		nodeElementTbl[43][0-8]: 010 027 012 027 016 027 018 027 
+		nodeElementTbl[44][0-8]: 027 011 027 013 027 017 027 019 
+		nodeElementTbl[45][0-8]: 012 027 014 027 018 027 020 027 
+		nodeElementTbl[46][0-8]: 027 013 027 027 027 019 027 027 
+		nodeElementTbl[47][0-8]: 014 027 027 027 020 027 027 027 
+		nodeElementTbl[48][0-8]: 027 027 027 015 027 027 027 021 
+		nodeElementTbl[49][0-8]: 027 027 016 027 027 027 022 027 
+		nodeElementTbl[50][0-8]: 027 015 027 017 027 021 027 023 
+		nodeElementTbl[51][0-8]: 016 027 018 027 022 027 024 027 
+		nodeElementTbl[52][0-8]: 027 017 027 019 027 023 027 025 
+		nodeElementTbl[53][0-8]: 018 027 020 027 024 027 026 027 
+		nodeElementTbl[54][0-8]: 027 019 027 027 027 025 027 027 
+		nodeElementTbl[55][0-8]: 020 027 027 027 026 027 027 027 
+		nodeElementTbl[56][0-8]: 027 027 027 021 027 027 027 027 
+		nodeElementTbl[57][0-8]: 027 027 022 027 027 027 027 027 
+		nodeElementTbl[58][0-8]: 027 021 027 023 027 027 027 027 
+		nodeElementTbl[59][0-8]: 022 027 024 027 027 027 027 027 
+		nodeElementTbl[60][0-8]: 027 023 027 025 027 027 027 027 
+		nodeElementTbl[61][0-8]: 024 027 026 027 027 027 027 027 
+		nodeElementTbl[62][0-8]: 027 025 027 027 027 027 027 027 
+		nodeElementTbl[63][0-8]: 026 027 027 027 027 027 027 027 
+	element (ptr): 0x80620e0
+	elementLocalCount: 9
+	elementDomainCount: 27
+	elementShadowCount: 18
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x80600a0
+	elementL2G[0-9]:   001 004 007 010 013 016 019 022 025 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x80600a0
+	elementD2G[0-27]:   001 004 007 010 013 016 019 022 025 000 002 003 005 006 008 009 011 012 014 015 017 018 020 021 023 024 026 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x80621c8
+	elementG2L[0-27]:   027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 027 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8060ae0
+	elementG2D[0-27]:   009 000 010 011 001 012 013 002 014 015 003 016 017 004 018 019 005 020 021 006 022 023 007 024 025 008 026 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8062240
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x80622b8
+	elementNeighbourTbl[0-27]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 009 010 011 001 012 027 027 027 015 003 016 017 004 018 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 009 000 010 011 012 013 002 014 015 003 016 017 004 018 019 005 020 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 011 001 012 013 014 027 027 027 017 004 018 019 005 020 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 009 000 010 011 001 012 027 027 027 015 016 017 004 018 027 027 027 021 006 022 023 007 024 
+		elementNeighbourTbl[4][0-26]: 009 000 010 011 001 012 013 002 014 015 003 016 017 018 019 005 020 021 006 022 023 007 024 025 008 026 
+		elementNeighbourTbl[5][0-26]: 011 001 012 013 002 014 027 027 027 017 004 018 019 020 027 027 027 023 007 024 025 008 026 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 015 003 016 017 004 018 027 027 027 021 022 023 007 024 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 015 003 016 017 004 018 019 005 020 021 006 022 023 024 025 008 026 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 017 004 018 019 005 020 027 027 027 023 007 024 025 026 027 027 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[9][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 000 027 011 001 027 027 027 027 015 003 027 017 004 
+		elementNeighbourTbl[10][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 000 027 001 012 027 027 027 027 003 016 027 004 018 027 
+		elementNeighbourTbl[11][0-26]: 027 027 027 027 027 027 027 027 027 027 009 000 027 001 027 013 002 027 015 003 027 017 004 027 019 005 
+		elementNeighbourTbl[12][0-26]: 027 027 027 027 027 027 027 027 027 000 010 027 001 027 002 014 027 003 016 027 004 018 027 005 020 027 
+		elementNeighbourTbl[13][0-26]: 027 027 027 027 027 027 027 027 027 027 011 001 027 002 027 027 027 027 017 004 027 019 005 027 027 027 
+		elementNeighbourTbl[14][0-26]: 027 027 027 027 027 027 027 027 027 001 012 027 002 027 027 027 027 004 018 027 005 020 027 027 027 027 
+		elementNeighbourTbl[15][0-26]: 027 027 027 027 009 000 027 011 001 027 027 027 027 003 027 017 004 027 027 027 027 021 006 027 023 007 
+		elementNeighbourTbl[16][0-26]: 027 027 027 000 010 027 001 012 027 027 027 027 003 027 004 018 027 027 027 027 006 022 027 007 024 027 
+		elementNeighbourTbl[17][0-26]: 027 009 000 027 011 001 027 013 002 027 015 003 027 004 027 019 005 027 021 006 027 023 007 027 025 008 
+		elementNeighbourTbl[18][0-26]: 000 010 027 001 012 027 002 014 027 003 016 027 004 027 005 020 027 006 022 027 007 024 027 008 026 027 
+		elementNeighbourTbl[19][0-26]: 027 011 001 027 013 002 027 027 027 027 017 004 027 005 027 027 027 027 023 007 027 025 008 027 027 027 
+		elementNeighbourTbl[20][0-26]: 001 012 027 002 014 027 027 027 027 004 018 027 005 027 027 027 027 007 024 027 008 026 027 027 027 027 
+		elementNeighbourTbl[21][0-26]: 027 027 027 027 015 003 027 017 004 027 027 027 027 006 027 023 007 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[22][0-26]: 027 027 027 003 016 027 004 018 027 027 027 027 006 027 007 024 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[23][0-26]: 027 015 003 027 017 004 027 019 005 027 021 006 027 007 027 025 008 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[24][0-26]: 003 016 027 004 018 027 005 020 027 006 022 027 007 027 008 026 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[25][0-26]: 027 017 004 027 019 005 027 027 027 027 023 007 027 008 027 027 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[26][0-26]: 004 018 027 005 020 027 027 027 027 007 024 027 008 027 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x8062e28
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8062ea0
+	elementNodeTbl[0-27]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+		elementNodeTbl[9][0-8]: 032 000 002 034 040 008 010 042 
+		elementNodeTbl[10][0-8]: 001 033 035 003 009 041 043 011 
+		elementNodeTbl[11][0-8]: 034 002 004 036 042 010 012 044 
+		elementNodeTbl[12][0-8]: 003 035 037 005 011 043 045 013 
+		elementNodeTbl[13][0-8]: 036 004 006 038 044 012 014 046 
+		elementNodeTbl[14][0-8]: 005 037 039 007 013 045 047 015 
+		elementNodeTbl[15][0-8]: 040 008 010 042 048 016 018 050 
+		elementNodeTbl[16][0-8]: 009 041 043 011 017 049 051 019 
+		elementNodeTbl[17][0-8]: 042 010 012 044 050 018 020 052 
+		elementNodeTbl[18][0-8]: 011 043 045 013 019 051 053 021 
+		elementNodeTbl[19][0-8]: 044 012 014 046 052 020 022 054 
+		elementNodeTbl[20][0-8]: 013 045 047 015 021 053 055 023 
+		elementNodeTbl[21][0-8]: 048 016 018 050 056 024 026 058 
+		elementNodeTbl[22][0-8]: 017 049 051 019 025 057 059 027 
+		elementNodeTbl[23][0-8]: 050 018 020 052 058 026 028 060 
+		elementNodeTbl[24][0-8]: 019 051 053 021 027 059 061 029 
+		elementNodeTbl[25][0-8]: 052 020 022 054 060 028 030 062 
+		elementNodeTbl[26][0-8]: 021 053 055 023 029 061 063 031 
+	procNbrCnt: 2
+	procNbrTbl (ptr): 0x8060288
+		procNbrTbl[0]: 0
+		procNbrTbl[1]: 2
+	elementShadowInfo->procShadowedCnt (ptr): 0x80601a8
+		elementShadowInfo->procShadowedCnt[0]: 9
+		elementShadowInfo->procShadowedCnt[1]: 9
+	elementShadowInfo->procShadowedTbl (ptr): 0x8060b58
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x80632c8
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+			elementShadowInfo->procShadowedTbl[0][2]: 2
+			elementShadowInfo->procShadowedTbl[0][3]: 3
+			elementShadowInfo->procShadowedTbl[0][4]: 4
+			elementShadowInfo->procShadowedTbl[0][5]: 5
+			elementShadowInfo->procShadowedTbl[0][6]: 6
+			elementShadowInfo->procShadowedTbl[0][7]: 7
+			elementShadowInfo->procShadowedTbl[0][8]: 8
+		elementShadowInfo->procShadowedTbl[1] (ptr): 0x805cfe0
+			elementShadowInfo->procShadowedTbl[1][0]: 0
+			elementShadowInfo->procShadowedTbl[1][1]: 1
+			elementShadowInfo->procShadowedTbl[1][2]: 2
+			elementShadowInfo->procShadowedTbl[1][3]: 3
+			elementShadowInfo->procShadowedTbl[1][4]: 4
+			elementShadowInfo->procShadowedTbl[1][5]: 5
+			elementShadowInfo->procShadowedTbl[1][6]: 6
+			elementShadowInfo->procShadowedTbl[1][7]: 7
+			elementShadowInfo->procShadowedTbl[1][8]: 8
+	elementShadowInfo->procShadowCnt (ptr): 0x8063348
+		elementShadowInfo->procShadowCnt[0]: 9
+		elementShadowInfo->procShadowCnt[1]: 9
+	elementShadowInfo->procShadowTbl (ptr): 0x8063360
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x80633a0
+			elementShadowInfo->procShadowTbl[0][0]: 9
+			elementShadowInfo->procShadowTbl[0][1]: 11
+			elementShadowInfo->procShadowTbl[0][2]: 13
+			elementShadowInfo->procShadowTbl[0][3]: 15
+			elementShadowInfo->procShadowTbl[0][4]: 17
+			elementShadowInfo->procShadowTbl[0][5]: 19
+			elementShadowInfo->procShadowTbl[0][6]: 21
+			elementShadowInfo->procShadowTbl[0][7]: 23
+			elementShadowInfo->procShadowTbl[0][8]: 25
+		elementShadowInfo->procShadowTbl[1] (ptr): 0x80633d0
+			elementShadowInfo->procShadowTbl[1][0]: 10
+			elementShadowInfo->procShadowTbl[1][1]: 12
+			elementShadowInfo->procShadowTbl[1][2]: 14
+			elementShadowInfo->procShadowTbl[1][3]: 16
+			elementShadowInfo->procShadowTbl[1][4]: 18
+			elementShadowInfo->procShadowTbl[1][5]: 20
+			elementShadowInfo->procShadowTbl[1][6]: 22
+			elementShadowInfo->procShadowTbl[1][7]: 24
+			elementShadowInfo->procShadowTbl[1][8]: 26
+	nodeShadowInfo->procShadowedCnt (ptr): 0x8063488
+		nodeShadowInfo->procShadowedCnt[0]: 16
+		nodeShadowInfo->procShadowedCnt[1]: 16
+	nodeShadowInfo->procShadowedTbl (ptr): 0x80634a0
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x8063500
+			nodeShadowInfo->procShadowedTbl[0][0]: 1
+			nodeShadowInfo->procShadowedTbl[0][1]: 3
+			nodeShadowInfo->procShadowedTbl[0][2]: 5
+			nodeShadowInfo->procShadowedTbl[0][3]: 7
+			nodeShadowInfo->procShadowedTbl[0][4]: 9
+			nodeShadowInfo->procShadowedTbl[0][5]: 11
+			nodeShadowInfo->procShadowedTbl[0][6]: 13
+			nodeShadowInfo->procShadowedTbl[0][7]: 15
+			nodeShadowInfo->procShadowedTbl[0][8]: 17
+			nodeShadowInfo->procShadowedTbl[0][9]: 19
+			nodeShadowInfo->procShadowedTbl[0][10]: 21
+			nodeShadowInfo->procShadowedTbl[0][11]: 23
+			nodeShadowInfo->procShadowedTbl[0][12]: 25
+			nodeShadowInfo->procShadowedTbl[0][13]: 27
+			nodeShadowInfo->procShadowedTbl[0][14]: 29
+			nodeShadowInfo->procShadowedTbl[0][15]: 31
+		nodeShadowInfo->procShadowedTbl[1] (ptr): 0x8063550
+			nodeShadowInfo->procShadowedTbl[1][0]: 0
+			nodeShadowInfo->procShadowedTbl[1][1]: 2
+			nodeShadowInfo->procShadowedTbl[1][2]: 4
+			nodeShadowInfo->procShadowedTbl[1][3]: 6
+			nodeShadowInfo->procShadowedTbl[1][4]: 8
+			nodeShadowInfo->procShadowedTbl[1][5]: 10
+			nodeShadowInfo->procShadowedTbl[1][6]: 12
+			nodeShadowInfo->procShadowedTbl[1][7]: 14
+			nodeShadowInfo->procShadowedTbl[1][8]: 16
+			nodeShadowInfo->procShadowedTbl[1][9]: 18
+			nodeShadowInfo->procShadowedTbl[1][10]: 20
+			nodeShadowInfo->procShadowedTbl[1][11]: 22
+			nodeShadowInfo->procShadowedTbl[1][12]: 24
+			nodeShadowInfo->procShadowedTbl[1][13]: 26
+			nodeShadowInfo->procShadowedTbl[1][14]: 28
+			nodeShadowInfo->procShadowedTbl[1][15]: 30
+	nodeShadowInfo->procShadowCnt (ptr): 0x8063640
+		nodeShadowInfo->procShadowCnt[0]: 16
+		nodeShadowInfo->procShadowCnt[1]: 16
+	nodeShadowInfo->procShadowTbl (ptr): 0x8063658
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8063670
+			nodeShadowInfo->procShadowTbl[0][0]: 32
+			nodeShadowInfo->procShadowTbl[0][1]: 34
+			nodeShadowInfo->procShadowTbl[0][2]: 36
+			nodeShadowInfo->procShadowTbl[0][3]: 38
+			nodeShadowInfo->procShadowTbl[0][4]: 40
+			nodeShadowInfo->procShadowTbl[0][5]: 42
+			nodeShadowInfo->procShadowTbl[0][6]: 44
+			nodeShadowInfo->procShadowTbl[0][7]: 46
+			nodeShadowInfo->procShadowTbl[0][8]: 48
+			nodeShadowInfo->procShadowTbl[0][9]: 50
+			nodeShadowInfo->procShadowTbl[0][10]: 52
+			nodeShadowInfo->procShadowTbl[0][11]: 54
+			nodeShadowInfo->procShadowTbl[0][12]: 56
+			nodeShadowInfo->procShadowTbl[0][13]: 58
+			nodeShadowInfo->procShadowTbl[0][14]: 60
+			nodeShadowInfo->procShadowTbl[0][15]: 62
+		nodeShadowInfo->procShadowTbl[1] (ptr): 0x80636c0
+			nodeShadowInfo->procShadowTbl[1][0]: 33
+			nodeShadowInfo->procShadowTbl[1][1]: 35
+			nodeShadowInfo->procShadowTbl[1][2]: 37
+			nodeShadowInfo->procShadowTbl[1][3]: 39
+			nodeShadowInfo->procShadowTbl[1][4]: 41
+			nodeShadowInfo->procShadowTbl[1][5]: 43
+			nodeShadowInfo->procShadowTbl[1][6]: 45
+			nodeShadowInfo->procShadowTbl[1][7]: 47
+			nodeShadowInfo->procShadowTbl[1][8]: 49
+			nodeShadowInfo->procShadowTbl[1][9]: 51
+			nodeShadowInfo->procShadowTbl[1][10]: 53
+			nodeShadowInfo->procShadowTbl[1][11]: 55
+			nodeShadowInfo->procShadowTbl[1][12]: 57
+			nodeShadowInfo->procShadowTbl[1][13]: 59
+			nodeShadowInfo->procShadowTbl[1][14]: 61
+			nodeShadowInfo->procShadowTbl[1][15]: 63
+Pre-sync:
+	nodeCoord[0]: { 1, 1, 1 } - temp: 11
+	nodeCoord[1]: { 1, 1, 1 } - temp: 11
+	nodeCoord[2]: { 1, 1, 1 } - temp: 11
+	nodeCoord[3]: { 1, 1, 1 } - temp: 11
+	nodeCoord[4]: { 1, 1, 1 } - temp: 11
+	nodeCoord[5]: { 1, 1, 1 } - temp: 11
+	nodeCoord[6]: { 1, 1, 1 } - temp: 11
+	nodeCoord[7]: { 1, 1, 1 } - temp: 11
+	nodeCoord[8]: { 1, 1, 1 } - temp: 11
+	nodeCoord[9]: { 1, 1, 1 } - temp: 11
+	nodeCoord[10]: { 1, 1, 1 } - temp: 11
+	nodeCoord[11]: { 1, 1, 1 } - temp: 11
+	nodeCoord[12]: { 1, 1, 1 } - temp: 11
+	nodeCoord[13]: { 1, 1, 1 } - temp: 11
+	nodeCoord[14]: { 1, 1, 1 } - temp: 11
+	nodeCoord[15]: { 1, 1, 1 } - temp: 11
+	nodeCoord[16]: { 1, 1, 1 } - temp: 11
+	nodeCoord[17]: { 1, 1, 1 } - temp: 11
+	nodeCoord[18]: { 1, 1, 1 } - temp: 11
+	nodeCoord[19]: { 1, 1, 1 } - temp: 11
+	nodeCoord[20]: { 1, 1, 1 } - temp: 11
+	nodeCoord[21]: { 1, 1, 1 } - temp: 11
+	nodeCoord[22]: { 1, 1, 1 } - temp: 11
+	nodeCoord[23]: { 1, 1, 1 } - temp: 11
+	nodeCoord[24]: { 1, 1, 1 } - temp: 11
+	nodeCoord[25]: { 1, 1, 1 } - temp: 11
+	nodeCoord[26]: { 1, 1, 1 } - temp: 11
+	nodeCoord[27]: { 1, 1, 1 } - temp: 11
+	nodeCoord[28]: { 1, 1, 1 } - temp: 11
+	nodeCoord[29]: { 1, 1, 1 } - temp: 11
+	nodeCoord[30]: { 1, 1, 1 } - temp: 11
+	nodeCoord[31]: { 1, 1, 1 } - temp: 11
+	nodeCoord[32]: { 1, 1, 1 } - temp: 11
+	nodeCoord[33]: { 1, 1, 1 } - temp: 11
+	nodeCoord[34]: { 1, 1, 1 } - temp: 11
+	nodeCoord[35]: { 1, 1, 1 } - temp: 11
+	nodeCoord[36]: { 1, 1, 1 } - temp: 11
+	nodeCoord[37]: { 1, 1, 1 } - temp: 11
+	nodeCoord[38]: { 1, 1, 1 } - temp: 11
+	nodeCoord[39]: { 1, 1, 1 } - temp: 11
+	nodeCoord[40]: { 1, 1, 1 } - temp: 11
+	nodeCoord[41]: { 1, 1, 1 } - temp: 11
+	nodeCoord[42]: { 1, 1, 1 } - temp: 11
+	nodeCoord[43]: { 1, 1, 1 } - temp: 11
+	nodeCoord[44]: { 1, 1, 1 } - temp: 11
+	nodeCoord[45]: { 1, 1, 1 } - temp: 11
+	nodeCoord[46]: { 1, 1, 1 } - temp: 11
+	nodeCoord[47]: { 1, 1, 1 } - temp: 11
+	nodeCoord[48]: { 1, 1, 1 } - temp: 11
+	nodeCoord[49]: { 1, 1, 1 } - temp: 11
+	nodeCoord[50]: { 1, 1, 1 } - temp: 11
+	nodeCoord[51]: { 1, 1, 1 } - temp: 11
+	nodeCoord[52]: { 1, 1, 1 } - temp: 11
+	nodeCoord[53]: { 1, 1, 1 } - temp: 11
+	nodeCoord[54]: { 1, 1, 1 } - temp: 11
+	nodeCoord[55]: { 1, 1, 1 } - temp: 11
+	nodeCoord[56]: { 1, 1, 1 } - temp: 11
+	nodeCoord[57]: { 1, 1, 1 } - temp: 11
+	nodeCoord[58]: { 1, 1, 1 } - temp: 11
+	nodeCoord[59]: { 1, 1, 1 } - temp: 11
+	nodeCoord[60]: { 1, 1, 1 } - temp: 11
+	nodeCoord[61]: { 1, 1, 1 } - temp: 11
+	nodeCoord[62]: { 1, 1, 1 } - temp: 11
+	nodeCoord[63]: { 1, 1, 1 } - temp: 11
+	element[0]: temp: 21
+	element[1]: temp: 21
+	element[2]: temp: 21
+	element[3]: temp: 21
+	element[4]: temp: 21
+	element[5]: temp: 21
+	element[6]: temp: 21
+	element[7]: temp: 21
+	element[8]: temp: 21
+	element[9]: temp: 21
+	element[10]: temp: 21
+	element[11]: temp: 21
+	element[12]: temp: 21
+	element[13]: temp: 21
+	element[14]: temp: 21
+	element[15]: temp: 21
+	element[16]: temp: 21
+	element[17]: temp: 21
+	element[18]: temp: 21
+	element[19]: temp: 21
+	element[20]: temp: 21
+	element[21]: temp: 21
+	element[22]: temp: 21
+	element[23]: temp: 21
+	element[24]: temp: 21
+	element[25]: temp: 21
+	element[26]: temp: 21
+Post-sync:
+	nodeCoord[0]: { 1, 1, 1 } - temp: 11
+	nodeCoord[1]: { 1, 1, 1 } - temp: 11
+	nodeCoord[2]: { 1, 1, 1 } - temp: 11
+	nodeCoord[3]: { 1, 1, 1 } - temp: 11
+	nodeCoord[4]: { 1, 1, 1 } - temp: 11
+	nodeCoord[5]: { 1, 1, 1 } - temp: 11
+	nodeCoord[6]: { 1, 1, 1 } - temp: 11
+	nodeCoord[7]: { 1, 1, 1 } - temp: 11
+	nodeCoord[8]: { 1, 1, 1 } - temp: 11
+	nodeCoord[9]: { 1, 1, 1 } - temp: 11
+	nodeCoord[10]: { 1, 1, 1 } - temp: 11
+	nodeCoord[11]: { 1, 1, 1 } - temp: 11
+	nodeCoord[12]: { 1, 1, 1 } - temp: 11
+	nodeCoord[13]: { 1, 1, 1 } - temp: 11
+	nodeCoord[14]: { 1, 1, 1 } - temp: 11
+	nodeCoord[15]: { 1, 1, 1 } - temp: 11
+	nodeCoord[16]: { 1, 1, 1 } - temp: 11
+	nodeCoord[17]: { 1, 1, 1 } - temp: 11
+	nodeCoord[18]: { 1, 1, 1 } - temp: 11
+	nodeCoord[19]: { 1, 1, 1 } - temp: 11
+	nodeCoord[20]: { 1, 1, 1 } - temp: 11
+	nodeCoord[21]: { 1, 1, 1 } - temp: 11
+	nodeCoord[22]: { 1, 1, 1 } - temp: 11
+	nodeCoord[23]: { 1, 1, 1 } - temp: 11
+	nodeCoord[24]: { 1, 1, 1 } - temp: 11
+	nodeCoord[25]: { 1, 1, 1 } - temp: 11
+	nodeCoord[26]: { 1, 1, 1 } - temp: 11
+	nodeCoord[27]: { 1, 1, 1 } - temp: 11
+	nodeCoord[28]: { 1, 1, 1 } - temp: 11
+	nodeCoord[29]: { 1, 1, 1 } - temp: 11
+	nodeCoord[30]: { 1, 1, 1 } - temp: 11
+	nodeCoord[31]: { 1, 1, 1 } - temp: 11
+	nodeCoord[32]: { 0, 0, 0 } - temp: 10
+	nodeCoord[33]: { 2, 2, 2 } - temp: 12
+	nodeCoord[34]: { 0, 0, 0 } - temp: 10
+	nodeCoord[35]: { 2, 2, 2 } - temp: 12
+	nodeCoord[36]: { 0, 0, 0 } - temp: 10
+	nodeCoord[37]: { 2, 2, 2 } - temp: 12
+	nodeCoord[38]: { 0, 0, 0 } - temp: 10
+	nodeCoord[39]: { 2, 2, 2 } - temp: 12
+	nodeCoord[40]: { 0, 0, 0 } - temp: 10
+	nodeCoord[41]: { 2, 2, 2 } - temp: 12
+	nodeCoord[42]: { 0, 0, 0 } - temp: 10
+	nodeCoord[43]: { 2, 2, 2 } - temp: 12
+	nodeCoord[44]: { 0, 0, 0 } - temp: 10
+	nodeCoord[45]: { 2, 2, 2 } - temp: 12
+	nodeCoord[46]: { 0, 0, 0 } - temp: 10
+	nodeCoord[47]: { 2, 2, 2 } - temp: 12
+	nodeCoord[48]: { 0, 0, 0 } - temp: 10
+	nodeCoord[49]: { 2, 2, 2 } - temp: 12
+	nodeCoord[50]: { 0, 0, 0 } - temp: 10
+	nodeCoord[51]: { 2, 2, 2 } - temp: 12
+	nodeCoord[52]: { 0, 0, 0 } - temp: 10
+	nodeCoord[53]: { 2, 2, 2 } - temp: 12
+	nodeCoord[54]: { 0, 0, 0 } - temp: 10
+	nodeCoord[55]: { 2, 2, 2 } - temp: 12
+	nodeCoord[56]: { 0, 0, 0 } - temp: 10
+	nodeCoord[57]: { 2, 2, 2 } - temp: 12
+	nodeCoord[58]: { 0, 0, 0 } - temp: 10
+	nodeCoord[59]: { 2, 2, 2 } - temp: 12
+	nodeCoord[60]: { 0, 0, 0 } - temp: 10
+	nodeCoord[61]: { 2, 2, 2 } - temp: 12
+	nodeCoord[62]: { 0, 0, 0 } - temp: 10
+	nodeCoord[63]: { 2, 2, 2 } - temp: 12
+	element[0]: temp: 21
+	element[1]: temp: 21
+	element[2]: temp: 21
+	element[3]: temp: 21
+	element[4]: temp: 21
+	element[5]: temp: 21
+	element[6]: temp: 21
+	element[7]: temp: 21
+	element[8]: temp: 21
+	element[9]: temp: 20
+	element[10]: temp: 22
+	element[11]: temp: 20
+	element[12]: temp: 22
+	element[13]: temp: 20
+	element[14]: temp: 22
+	element[15]: temp: 20
+	element[16]: temp: 22
+	element[17]: temp: 20
+	element[18]: temp: 22
+	element[19]: temp: 20
+	element[20]: temp: 22
+	element[21]: temp: 20
+	element[22]: temp: 22
+	element[23]: temp: 20
+	element[24]: temp: 22
+	element[25]: temp: 20
+	element[26]: temp: 22

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,516 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Mesh (ptr): (0x805f470)
+Stg_Component (ptr): 0x805f470
+Stg_Object (ptr): 0x805f470
+	Stg_Class (ptr): 0x805f470
+		sizeOfSelf: 400
+		_deleteSelf: Yes
+		type: Mesh
+		_delete (func ptr): 0xb7f4f1dd
+		_print (func ptr): 0xb7f4fa6a
+		_copy (func ptr): 0xb7f50c4e
+	name: Mesh
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f4e51c
+	_construct (func ptr): 0xb7f4f00e
+	_build (func ptr): 0xb7f51322
+	_initialise (func ptr): 0xb7f52214
+	_execute (func ptr): 0xb7f52219
+	_destroy (func ptr): 0xb7f4f1d8
+	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): 0x805f128
+Extension (ptr):0x805f840
+Stg_Object (ptr): 0x805f840
+	Stg_Class (ptr): 0x805f840
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7ec7018
+		_print (func ptr): 0xb7ec7066
+		_copy (func ptr): 0xb7ec7200
+	name: node
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f8b8
+Stg_ObjectList (ptr):0x805f8b8
+	Stg_Class (ptr): 0x805f8b8
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ef8f3e
+		_print (func ptr): 0xb7ef8f75
+		_copy (func ptr): 0xb7ef9217
+	_append(func ptr): 0xb7ef9e7b
+	_prepend(func ptr): 0xb7ef9f41
+	_replaceAll(func ptr): 0xb7efa005
+	_replace(func ptr): 0xb7efa0be
+	_insertBefore(func ptr): 0xb7efa25b
+	_insertAfter(func ptr): 0xb7efa416
+	_remove(func ptr): 0xb7efa5d3
+	_getIndex(func ptr): 0xb7efa679
+	_get(func ptr): 0xb7efa727
+	_allocMoreMemory(func ptr): 0xb7efa8fa
+	_insertAtIndex(func ptr): 0xb7efa980
+	_removeByIndex(func ptr): 0xb7efa9fe
+	_deleteAllObjects(func ptr): 0xb7efa87b
+	_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):0x805f928
+Stg_Object (ptr): 0x805f928
+	Stg_Class (ptr): 0x805f928
+		sizeOfSelf: 80
+		_deleteSelf: Yes
+		type: Extension
+		_delete (func ptr): 0xb7ec7018
+		_print (func ptr): 0xb7ec7066
+		_copy (func ptr): 0xb7ec7200
+	name: element
+	nameAllocationType: NON_GLOBAL
+	initialSize 8
+	finalSize 8
+	count: 0
+	extInfos (ptr): 0x805f9a0
+Stg_ObjectList (ptr):0x805f9a0
+	Stg_Class (ptr): 0x805f9a0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ef8f3e
+		_print (func ptr): 0xb7ef8f75
+		_copy (func ptr): 0xb7ef9217
+	_append(func ptr): 0xb7ef9e7b
+	_prepend(func ptr): 0xb7ef9f41
+	_replaceAll(func ptr): 0xb7efa005
+	_replace(func ptr): 0xb7efa0be
+	_insertBefore(func ptr): 0xb7efa25b
+	_insertAfter(func ptr): 0xb7efa416
+	_remove(func ptr): 0xb7efa5d3
+	_getIndex(func ptr): 0xb7efa679
+	_get(func ptr): 0xb7efa727
+	_allocMoreMemory(func ptr): 0xb7efa8fa
+	_insertAtIndex(func ptr): 0xb7efa980
+	_removeByIndex(func ptr): 0xb7efa9fe
+	_deleteAllObjects(func ptr): 0xb7efa87b
+	_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): 0x8060170
+	nodeLocalCount: 32
+	nodeDomainCount: 48
+	nodeShadowCount: 16
+	nodeGlobalCount: 64
+	nodeCoord (ptr): 0x8060300
+	nodeCoord[0-48]:   (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,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,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), 
+	ownsNodeLocalToGlobalMap: 1
+	nodeL2G (ptr): 0x80607e0
+	nodeL2G[0-32]:   002 003 006 007 010 011 014 015 018 019 022 023 026 027 030 031 034 035 038 039 042 043 046 047 050 051 054 055 058 059 062 063 
+	ownsNodeDomainToGlobalMap: 1
+	nodeD2G (ptr): 0x80607e0
+	nodeD2G[0-48]:   002 003 006 007 010 011 014 015 018 019 022 023 026 027 030 031 034 035 038 039 042 043 046 047 050 051 054 055 058 059 062 063 001 005 009 013 017 021 025 029 033 037 041 045 049 053 057 061 
+	ownsNodeGlobalToLocalMap: 1
+	nodeG2L (ptr): 0x80609c0
+	nodeG2L[0-64]:   064 064 000 001 064 064 002 003 064 064 004 005 064 064 006 007 064 064 008 009 064 064 010 011 064 064 012 013 064 064 014 015 064 064 016 017 064 064 018 019 064 064 020 021 064 064 022 023 064 064 024 025 064 064 026 027 064 064 028 029 064 064 030 031 
+	ownsNodeGlobalToDomainMap: 1
+	nodeG2D (ptr): 0x80608b0
+	nodeG2D[0-64]:   064 032 000 001 064 033 002 003 064 034 004 005 064 035 006 007 064 036 008 009 064 037 010 011 064 038 012 013 064 039 014 015 064 040 016 017 064 041 018 019 064 042 020 021 064 043 022 023 064 044 024 025 064 045 026 027 064 046 028 029 064 047 030 031 
+	ownsNodeNeighbourCountTbl: 1
+	nodeNeighbourCountTbl (ptr): 0x8060ad0
+	ownsNodeNeighbourTbl: 1
+	nodeNeighbourTbl (ptr): 0x8060ba0
+	nodeNeighbourTbl[0-48]:
+		nodeNeighbourTbl[0][0-6]: 001 002 008 032 064 064 
+		nodeNeighbourTbl[1][0-6]: 064 003 009 000 064 064 
+		nodeNeighbourTbl[2][0-6]: 003 004 010 033 000 064 
+		nodeNeighbourTbl[3][0-6]: 064 005 011 002 001 064 
+		nodeNeighbourTbl[4][0-6]: 005 006 012 034 002 064 
+		nodeNeighbourTbl[5][0-6]: 064 007 013 004 003 064 
+		nodeNeighbourTbl[6][0-6]: 007 064 014 035 004 064 
+		nodeNeighbourTbl[7][0-6]: 064 064 015 006 005 064 
+		nodeNeighbourTbl[8][0-6]: 009 010 016 036 064 000 
+		nodeNeighbourTbl[9][0-6]: 064 011 017 008 064 001 
+		nodeNeighbourTbl[10][0-6]: 011 012 018 037 008 002 
+		nodeNeighbourTbl[11][0-6]: 064 013 019 010 009 003 
+		nodeNeighbourTbl[12][0-6]: 013 014 020 038 010 004 
+		nodeNeighbourTbl[13][0-6]: 064 015 021 012 011 005 
+		nodeNeighbourTbl[14][0-6]: 015 064 022 039 012 006 
+		nodeNeighbourTbl[15][0-6]: 064 064 023 014 013 007 
+		nodeNeighbourTbl[16][0-6]: 017 018 024 040 064 008 
+		nodeNeighbourTbl[17][0-6]: 064 019 025 016 064 009 
+		nodeNeighbourTbl[18][0-6]: 019 020 026 041 016 010 
+		nodeNeighbourTbl[19][0-6]: 064 021 027 018 017 011 
+		nodeNeighbourTbl[20][0-6]: 021 022 028 042 018 012 
+		nodeNeighbourTbl[21][0-6]: 064 023 029 020 019 013 
+		nodeNeighbourTbl[22][0-6]: 023 064 030 043 020 014 
+		nodeNeighbourTbl[23][0-6]: 064 064 031 022 021 015 
+		nodeNeighbourTbl[24][0-6]: 025 026 064 044 064 016 
+		nodeNeighbourTbl[25][0-6]: 064 027 064 024 064 017 
+		nodeNeighbourTbl[26][0-6]: 027 028 064 045 024 018 
+		nodeNeighbourTbl[27][0-6]: 064 029 064 026 025 019 
+		nodeNeighbourTbl[28][0-6]: 029 030 064 046 026 020 
+		nodeNeighbourTbl[29][0-6]: 064 031 064 028 027 021 
+		nodeNeighbourTbl[30][0-6]: 031 064 064 047 028 022 
+		nodeNeighbourTbl[31][0-6]: 064 064 064 030 029 023 
+		nodeNeighbourTbl[32][0-6]: 000 033 036 064 064 064 
+		nodeNeighbourTbl[33][0-6]: 002 034 037 064 032 064 
+		nodeNeighbourTbl[34][0-6]: 004 035 038 064 033 064 
+		nodeNeighbourTbl[35][0-6]: 006 064 039 064 034 064 
+		nodeNeighbourTbl[36][0-6]: 008 037 040 064 064 032 
+		nodeNeighbourTbl[37][0-6]: 010 038 041 064 036 033 
+		nodeNeighbourTbl[38][0-6]: 012 039 042 064 037 034 
+		nodeNeighbourTbl[39][0-6]: 014 064 043 064 038 035 
+		nodeNeighbourTbl[40][0-6]: 016 041 044 064 064 036 
+		nodeNeighbourTbl[41][0-6]: 018 042 045 064 040 037 
+		nodeNeighbourTbl[42][0-6]: 020 043 046 064 041 038 
+		nodeNeighbourTbl[43][0-6]: 022 064 047 064 042 039 
+		nodeNeighbourTbl[44][0-6]: 024 045 064 064 064 040 
+		nodeNeighbourTbl[45][0-6]: 026 046 064 064 044 041 
+		nodeNeighbourTbl[46][0-6]: 028 047 064 064 045 042 
+		nodeNeighbourTbl[47][0-6]: 030 064 064 064 046 043 
+	ownsNodeElementCountTbl: 1
+	nodeElementCountTbl (ptr): 0x80610f0
+	ownsNodeElementTbl: 1
+	nodeElementTbl (ptr): 0x80611c0
+	nodeElementTbl[0-48]:
+		nodeElementTbl[0][0-8]: 027 027 027 027 027 027 009 000 
+		nodeElementTbl[1][0-8]: 027 027 027 027 027 027 000 027 
+		nodeElementTbl[2][0-8]: 027 027 027 027 009 000 010 001 
+		nodeElementTbl[3][0-8]: 027 027 027 027 000 027 001 027 
+		nodeElementTbl[4][0-8]: 027 027 027 027 010 001 011 002 
+		nodeElementTbl[5][0-8]: 027 027 027 027 001 027 002 027 
+		nodeElementTbl[6][0-8]: 027 027 027 027 011 002 027 027 
+		nodeElementTbl[7][0-8]: 027 027 027 027 002 027 027 027 
+		nodeElementTbl[8][0-8]: 027 027 009 000 027 027 012 003 
+		nodeElementTbl[9][0-8]: 027 027 000 027 027 027 003 027 
+		nodeElementTbl[10][0-8]: 009 000 010 001 012 003 013 004 
+		nodeElementTbl[11][0-8]: 000 027 001 027 003 027 004 027 
+		nodeElementTbl[12][0-8]: 010 001 011 002 013 004 014 005 
+		nodeElementTbl[13][0-8]: 001 027 002 027 004 027 005 027 
+		nodeElementTbl[14][0-8]: 011 002 027 027 014 005 027 027 
+		nodeElementTbl[15][0-8]: 002 027 027 027 005 027 027 027 
+		nodeElementTbl[16][0-8]: 027 027 012 003 027 027 015 006 
+		nodeElementTbl[17][0-8]: 027 027 003 027 027 027 006 027 
+		nodeElementTbl[18][0-8]: 012 003 013 004 015 006 016 007 
+		nodeElementTbl[19][0-8]: 003 027 004 027 006 027 007 027 
+		nodeElementTbl[20][0-8]: 013 004 014 005 016 007 017 008 
+		nodeElementTbl[21][0-8]: 004 027 005 027 007 027 008 027 
+		nodeElementTbl[22][0-8]: 014 005 027 027 017 008 027 027 
+		nodeElementTbl[23][0-8]: 005 027 027 027 008 027 027 027 
+		nodeElementTbl[24][0-8]: 027 027 015 006 027 027 027 027 
+		nodeElementTbl[25][0-8]: 027 027 006 027 027 027 027 027 
+		nodeElementTbl[26][0-8]: 015 006 016 007 027 027 027 027 
+		nodeElementTbl[27][0-8]: 006 027 007 027 027 027 027 027 
+		nodeElementTbl[28][0-8]: 016 007 017 008 027 027 027 027 
+		nodeElementTbl[29][0-8]: 007 027 008 027 027 027 027 027 
+		nodeElementTbl[30][0-8]: 017 008 027 027 027 027 027 027 
+		nodeElementTbl[31][0-8]: 008 027 027 027 027 027 027 027 
+		nodeElementTbl[32][0-8]: 027 027 027 027 027 027 027 009 
+		nodeElementTbl[33][0-8]: 027 027 027 027 027 009 027 010 
+		nodeElementTbl[34][0-8]: 027 027 027 027 027 010 027 011 
+		nodeElementTbl[35][0-8]: 027 027 027 027 027 011 027 027 
+		nodeElementTbl[36][0-8]: 027 027 027 009 027 027 027 012 
+		nodeElementTbl[37][0-8]: 027 009 027 010 027 012 027 013 
+		nodeElementTbl[38][0-8]: 027 010 027 011 027 013 027 014 
+		nodeElementTbl[39][0-8]: 027 011 027 027 027 014 027 027 
+		nodeElementTbl[40][0-8]: 027 027 027 012 027 027 027 015 
+		nodeElementTbl[41][0-8]: 027 012 027 013 027 015 027 016 
+		nodeElementTbl[42][0-8]: 027 013 027 014 027 016 027 017 
+		nodeElementTbl[43][0-8]: 027 014 027 027 027 017 027 027 
+		nodeElementTbl[44][0-8]: 027 027 027 015 027 027 027 027 
+		nodeElementTbl[45][0-8]: 027 015 027 016 027 027 027 027 
+		nodeElementTbl[46][0-8]: 027 016 027 017 027 027 027 027 
+		nodeElementTbl[47][0-8]: 027 017 027 027 027 027 027 027 
+	element (ptr): 0x8061890
+	elementLocalCount: 9
+	elementDomainCount: 18
+	elementShadowCount: 9
+	elementGlobalCount: 27
+	ownsElementLocalToGlobalMap: 1
+	elementL2G (ptr): 0x805ff50
+	elementL2G[0-9]:   002 005 008 011 014 017 020 023 026 
+	ownsElementDomainToGlobalMap: 1
+	elementD2G (ptr): 0x805ff50
+	elementD2G[0-18]:   002 005 008 011 014 017 020 023 026 001 004 007 010 013 016 019 022 025 
+	ownsElementGlobalToLocalMap: 1
+	elementG2L (ptr): 0x80619a8
+	elementG2L[0-27]:   027 027 000 027 027 001 027 027 002 027 027 003 027 027 004 027 027 005 027 027 006 027 027 007 027 027 008 
+	ownsElementGlobalToDomainMap: 1
+	elementG2D (ptr): 0x8061930
+	elementG2D[0-27]:   027 009 000 027 010 001 027 011 002 027 012 003 027 013 004 027 014 005 027 015 006 027 016 007 027 017 008 
+	ownsElementNeighbourCountTbl: 1
+	elementNeighbourCountTbl (ptr): 0x8061a20
+	ownsElementNeighbourTbl: 1
+	elementNeighbourTbl (ptr): 0x8061a78
+	elementNeighbourTbl[0-18]:
+		elementNeighbourTbl[0][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 009 027 010 001 027 027 027 027 012 003 027 013 004 027 
+		elementNeighbourTbl[1][0-26]: 027 027 027 027 027 027 027 027 027 009 000 027 010 027 011 002 027 012 003 027 013 004 027 014 005 027 
+		elementNeighbourTbl[2][0-26]: 027 027 027 027 027 027 027 027 027 010 001 027 011 027 027 027 027 013 004 027 014 005 027 027 027 027 
+		elementNeighbourTbl[3][0-26]: 027 027 027 009 000 027 010 001 027 027 027 027 012 027 013 004 027 027 027 027 015 006 027 016 007 027 
+		elementNeighbourTbl[4][0-26]: 009 000 027 010 001 027 011 002 027 012 003 027 013 027 014 005 027 015 006 027 016 007 027 017 008 027 
+		elementNeighbourTbl[5][0-26]: 010 001 027 011 002 027 027 027 027 013 004 027 014 027 027 027 027 016 007 027 017 008 027 027 027 027 
+		elementNeighbourTbl[6][0-26]: 027 027 027 012 003 027 013 004 027 027 027 027 015 027 016 007 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[7][0-26]: 012 003 027 013 004 027 014 005 027 015 006 027 016 027 017 008 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[8][0-26]: 013 004 027 014 005 027 027 027 027 016 007 027 017 027 027 027 027 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[9][0-26]: 027 027 027 027 027 027 027 027 027 027 027 027 027 000 027 010 001 027 027 027 027 012 003 027 013 004 
+		elementNeighbourTbl[10][0-26]: 027 027 027 027 027 027 027 027 027 027 009 000 027 001 027 011 002 027 012 003 027 013 004 027 014 005 
+		elementNeighbourTbl[11][0-26]: 027 027 027 027 027 027 027 027 027 027 010 001 027 002 027 027 027 027 013 004 027 014 005 027 027 027 
+		elementNeighbourTbl[12][0-26]: 027 027 027 027 009 000 027 010 001 027 027 027 027 003 027 013 004 027 027 027 027 015 006 027 016 007 
+		elementNeighbourTbl[13][0-26]: 027 009 000 027 010 001 027 011 002 027 012 003 027 004 027 014 005 027 015 006 027 016 007 027 017 008 
+		elementNeighbourTbl[14][0-26]: 027 010 001 027 011 002 027 027 027 027 013 004 027 005 027 027 027 027 016 007 027 017 008 027 027 027 
+		elementNeighbourTbl[15][0-26]: 027 027 027 027 012 003 027 013 004 027 027 027 027 006 027 016 007 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[16][0-26]: 027 012 003 027 013 004 027 014 005 027 015 006 027 007 027 017 008 027 027 027 027 027 027 027 027 027 
+		elementNeighbourTbl[17][0-26]: 027 013 004 027 014 005 027 027 027 027 016 007 027 008 027 027 027 027 027 027 027 027 027 027 027 027 
+	ownsElementNodeCountTbl: 1
+	elementNodeCountTbl (ptr): 0x8062220
+	ownsElementNodeTbl: 1
+	elementNodeTbl (ptr): 0x8062278
+	elementNodeTbl[0-18]:
+		elementNodeTbl[0][0-8]: 000 001 003 002 008 009 011 010 
+		elementNodeTbl[1][0-8]: 002 003 005 004 010 011 013 012 
+		elementNodeTbl[2][0-8]: 004 005 007 006 012 013 015 014 
+		elementNodeTbl[3][0-8]: 008 009 011 010 016 017 019 018 
+		elementNodeTbl[4][0-8]: 010 011 013 012 018 019 021 020 
+		elementNodeTbl[5][0-8]: 012 013 015 014 020 021 023 022 
+		elementNodeTbl[6][0-8]: 016 017 019 018 024 025 027 026 
+		elementNodeTbl[7][0-8]: 018 019 021 020 026 027 029 028 
+		elementNodeTbl[8][0-8]: 020 021 023 022 028 029 031 030 
+		elementNodeTbl[9][0-8]: 032 000 002 033 036 008 010 037 
+		elementNodeTbl[10][0-8]: 033 002 004 034 037 010 012 038 
+		elementNodeTbl[11][0-8]: 034 004 006 035 038 012 014 039 
+		elementNodeTbl[12][0-8]: 036 008 010 037 040 016 018 041 
+		elementNodeTbl[13][0-8]: 037 010 012 038 041 018 020 042 
+		elementNodeTbl[14][0-8]: 038 012 014 039 042 020 022 043 
+		elementNodeTbl[15][0-8]: 040 016 018 041 044 024 026 045 
+		elementNodeTbl[16][0-8]: 041 018 020 042 045 026 028 046 
+		elementNodeTbl[17][0-8]: 042 020 022 043 046 028 030 047 
+	procNbrCnt: 1
+	procNbrTbl (ptr): 0x8060058
+		procNbrTbl[0]: 1
+	elementShadowInfo->procShadowedCnt (ptr): 0x805ffd0
+		elementShadowInfo->procShadowedCnt[0]: 9
+	elementShadowInfo->procShadowedTbl (ptr): 0x8060138
+		elementShadowInfo->procShadowedTbl[0] (ptr): 0x805cfe0
+			elementShadowInfo->procShadowedTbl[0][0]: 0
+			elementShadowInfo->procShadowedTbl[0][1]: 1
+			elementShadowInfo->procShadowedTbl[0][2]: 2
+			elementShadowInfo->procShadowedTbl[0][3]: 3
+			elementShadowInfo->procShadowedTbl[0][4]: 4
+			elementShadowInfo->procShadowedTbl[0][5]: 5
+			elementShadowInfo->procShadowedTbl[0][6]: 6
+			elementShadowInfo->procShadowedTbl[0][7]: 7
+			elementShadowInfo->procShadowedTbl[0][8]: 8
+	elementShadowInfo->procShadowCnt (ptr): 0x805aa08
+		elementShadowInfo->procShadowCnt[0]: 9
+	elementShadowInfo->procShadowTbl (ptr): 0x805aa18
+		elementShadowInfo->procShadowTbl[0] (ptr): 0x8060790
+			elementShadowInfo->procShadowTbl[0][0]: 9
+			elementShadowInfo->procShadowTbl[0][1]: 10
+			elementShadowInfo->procShadowTbl[0][2]: 11
+			elementShadowInfo->procShadowTbl[0][3]: 12
+			elementShadowInfo->procShadowTbl[0][4]: 13
+			elementShadowInfo->procShadowTbl[0][5]: 14
+			elementShadowInfo->procShadowTbl[0][6]: 15
+			elementShadowInfo->procShadowTbl[0][7]: 16
+			elementShadowInfo->procShadowTbl[0][8]: 17
+	nodeShadowInfo->procShadowedCnt (ptr): 0x805d010
+		nodeShadowInfo->procShadowedCnt[0]: 16
+	nodeShadowInfo->procShadowedTbl (ptr): 0x80607c0
+		nodeShadowInfo->procShadowedTbl[0] (ptr): 0x8062580
+			nodeShadowInfo->procShadowedTbl[0][0]: 1
+			nodeShadowInfo->procShadowedTbl[0][1]: 3
+			nodeShadowInfo->procShadowedTbl[0][2]: 5
+			nodeShadowInfo->procShadowedTbl[0][3]: 7
+			nodeShadowInfo->procShadowedTbl[0][4]: 9
+			nodeShadowInfo->procShadowedTbl[0][5]: 11
+			nodeShadowInfo->procShadowedTbl[0][6]: 13
+			nodeShadowInfo->procShadowedTbl[0][7]: 15
+			nodeShadowInfo->procShadowedTbl[0][8]: 17
+			nodeShadowInfo->procShadowedTbl[0][9]: 19
+			nodeShadowInfo->procShadowedTbl[0][10]: 21
+			nodeShadowInfo->procShadowedTbl[0][11]: 23
+			nodeShadowInfo->procShadowedTbl[0][12]: 25
+			nodeShadowInfo->procShadowedTbl[0][13]: 27
+			nodeShadowInfo->procShadowedTbl[0][14]: 29
+			nodeShadowInfo->procShadowedTbl[0][15]: 31
+	nodeShadowInfo->procShadowCnt (ptr): 0x8062650
+		nodeShadowInfo->procShadowCnt[0]: 16
+	nodeShadowInfo->procShadowTbl (ptr): 0x80625d0
+		nodeShadowInfo->procShadowTbl[0] (ptr): 0x8062660
+			nodeShadowInfo->procShadowTbl[0][0]: 32
+			nodeShadowInfo->procShadowTbl[0][1]: 33
+			nodeShadowInfo->procShadowTbl[0][2]: 34
+			nodeShadowInfo->procShadowTbl[0][3]: 35
+			nodeShadowInfo->procShadowTbl[0][4]: 36
+			nodeShadowInfo->procShadowTbl[0][5]: 37
+			nodeShadowInfo->procShadowTbl[0][6]: 38
+			nodeShadowInfo->procShadowTbl[0][7]: 39
+			nodeShadowInfo->procShadowTbl[0][8]: 40
+			nodeShadowInfo->procShadowTbl[0][9]: 41
+			nodeShadowInfo->procShadowTbl[0][10]: 42
+			nodeShadowInfo->procShadowTbl[0][11]: 43
+			nodeShadowInfo->procShadowTbl[0][12]: 44
+			nodeShadowInfo->procShadowTbl[0][13]: 45
+			nodeShadowInfo->procShadowTbl[0][14]: 46
+			nodeShadowInfo->procShadowTbl[0][15]: 47
+Pre-sync:
+	nodeCoord[0]: { 2, 2, 2 } - temp: 12
+	nodeCoord[1]: { 2, 2, 2 } - temp: 12
+	nodeCoord[2]: { 2, 2, 2 } - temp: 12
+	nodeCoord[3]: { 2, 2, 2 } - temp: 12
+	nodeCoord[4]: { 2, 2, 2 } - temp: 12
+	nodeCoord[5]: { 2, 2, 2 } - temp: 12
+	nodeCoord[6]: { 2, 2, 2 } - temp: 12
+	nodeCoord[7]: { 2, 2, 2 } - temp: 12
+	nodeCoord[8]: { 2, 2, 2 } - temp: 12
+	nodeCoord[9]: { 2, 2, 2 } - temp: 12
+	nodeCoord[10]: { 2, 2, 2 } - temp: 12
+	nodeCoord[11]: { 2, 2, 2 } - temp: 12
+	nodeCoord[12]: { 2, 2, 2 } - temp: 12
+	nodeCoord[13]: { 2, 2, 2 } - temp: 12
+	nodeCoord[14]: { 2, 2, 2 } - temp: 12
+	nodeCoord[15]: { 2, 2, 2 } - temp: 12
+	nodeCoord[16]: { 2, 2, 2 } - temp: 12
+	nodeCoord[17]: { 2, 2, 2 } - temp: 12
+	nodeCoord[18]: { 2, 2, 2 } - temp: 12
+	nodeCoord[19]: { 2, 2, 2 } - temp: 12
+	nodeCoord[20]: { 2, 2, 2 } - temp: 12
+	nodeCoord[21]: { 2, 2, 2 } - temp: 12
+	nodeCoord[22]: { 2, 2, 2 } - temp: 12
+	nodeCoord[23]: { 2, 2, 2 } - temp: 12
+	nodeCoord[24]: { 2, 2, 2 } - temp: 12
+	nodeCoord[25]: { 2, 2, 2 } - temp: 12
+	nodeCoord[26]: { 2, 2, 2 } - temp: 12
+	nodeCoord[27]: { 2, 2, 2 } - temp: 12
+	nodeCoord[28]: { 2, 2, 2 } - temp: 12
+	nodeCoord[29]: { 2, 2, 2 } - temp: 12
+	nodeCoord[30]: { 2, 2, 2 } - temp: 12
+	nodeCoord[31]: { 2, 2, 2 } - temp: 12
+	nodeCoord[32]: { 2, 2, 2 } - temp: 12
+	nodeCoord[33]: { 2, 2, 2 } - temp: 12
+	nodeCoord[34]: { 2, 2, 2 } - temp: 12
+	nodeCoord[35]: { 2, 2, 2 } - temp: 12
+	nodeCoord[36]: { 2, 2, 2 } - temp: 12
+	nodeCoord[37]: { 2, 2, 2 } - temp: 12
+	nodeCoord[38]: { 2, 2, 2 } - temp: 12
+	nodeCoord[39]: { 2, 2, 2 } - temp: 12
+	nodeCoord[40]: { 2, 2, 2 } - temp: 12
+	nodeCoord[41]: { 2, 2, 2 } - temp: 12
+	nodeCoord[42]: { 2, 2, 2 } - temp: 12
+	nodeCoord[43]: { 2, 2, 2 } - temp: 12
+	nodeCoord[44]: { 2, 2, 2 } - temp: 12
+	nodeCoord[45]: { 2, 2, 2 } - temp: 12
+	nodeCoord[46]: { 2, 2, 2 } - temp: 12
+	nodeCoord[47]: { 2, 2, 2 } - temp: 12
+	element[0]: temp: 22
+	element[1]: temp: 22
+	element[2]: temp: 22
+	element[3]: temp: 22
+	element[4]: temp: 22
+	element[5]: temp: 22
+	element[6]: temp: 22
+	element[7]: temp: 22
+	element[8]: temp: 22
+	element[9]: temp: 22
+	element[10]: temp: 22
+	element[11]: temp: 22
+	element[12]: temp: 22
+	element[13]: temp: 22
+	element[14]: temp: 22
+	element[15]: temp: 22
+	element[16]: temp: 22
+	element[17]: temp: 22
+Post-sync:
+	nodeCoord[0]: { 2, 2, 2 } - temp: 12
+	nodeCoord[1]: { 2, 2, 2 } - temp: 12
+	nodeCoord[2]: { 2, 2, 2 } - temp: 12
+	nodeCoord[3]: { 2, 2, 2 } - temp: 12
+	nodeCoord[4]: { 2, 2, 2 } - temp: 12
+	nodeCoord[5]: { 2, 2, 2 } - temp: 12
+	nodeCoord[6]: { 2, 2, 2 } - temp: 12
+	nodeCoord[7]: { 2, 2, 2 } - temp: 12
+	nodeCoord[8]: { 2, 2, 2 } - temp: 12
+	nodeCoord[9]: { 2, 2, 2 } - temp: 12
+	nodeCoord[10]: { 2, 2, 2 } - temp: 12
+	nodeCoord[11]: { 2, 2, 2 } - temp: 12
+	nodeCoord[12]: { 2, 2, 2 } - temp: 12
+	nodeCoord[13]: { 2, 2, 2 } - temp: 12
+	nodeCoord[14]: { 2, 2, 2 } - temp: 12
+	nodeCoord[15]: { 2, 2, 2 } - temp: 12
+	nodeCoord[16]: { 2, 2, 2 } - temp: 12
+	nodeCoord[17]: { 2, 2, 2 } - temp: 12
+	nodeCoord[18]: { 2, 2, 2 } - temp: 12
+	nodeCoord[19]: { 2, 2, 2 } - temp: 12
+	nodeCoord[20]: { 2, 2, 2 } - temp: 12
+	nodeCoord[21]: { 2, 2, 2 } - temp: 12
+	nodeCoord[22]: { 2, 2, 2 } - temp: 12
+	nodeCoord[23]: { 2, 2, 2 } - temp: 12
+	nodeCoord[24]: { 2, 2, 2 } - temp: 12
+	nodeCoord[25]: { 2, 2, 2 } - temp: 12
+	nodeCoord[26]: { 2, 2, 2 } - temp: 12
+	nodeCoord[27]: { 2, 2, 2 } - temp: 12
+	nodeCoord[28]: { 2, 2, 2 } - temp: 12
+	nodeCoord[29]: { 2, 2, 2 } - temp: 12
+	nodeCoord[30]: { 2, 2, 2 } - temp: 12
+	nodeCoord[31]: { 2, 2, 2 } - temp: 12
+	nodeCoord[32]: { 1, 1, 1 } - temp: 11
+	nodeCoord[33]: { 1, 1, 1 } - temp: 11
+	nodeCoord[34]: { 1, 1, 1 } - temp: 11
+	nodeCoord[35]: { 1, 1, 1 } - temp: 11
+	nodeCoord[36]: { 1, 1, 1 } - temp: 11
+	nodeCoord[37]: { 1, 1, 1 } - temp: 11
+	nodeCoord[38]: { 1, 1, 1 } - temp: 11
+	nodeCoord[39]: { 1, 1, 1 } - temp: 11
+	nodeCoord[40]: { 1, 1, 1 } - temp: 11
+	nodeCoord[41]: { 1, 1, 1 } - temp: 11
+	nodeCoord[42]: { 1, 1, 1 } - temp: 11
+	nodeCoord[43]: { 1, 1, 1 } - temp: 11
+	nodeCoord[44]: { 1, 1, 1 } - temp: 11
+	nodeCoord[45]: { 1, 1, 1 } - temp: 11
+	nodeCoord[46]: { 1, 1, 1 } - temp: 11
+	nodeCoord[47]: { 1, 1, 1 } - temp: 11
+	element[0]: temp: 22
+	element[1]: temp: 22
+	element[2]: temp: 22
+	element[3]: temp: 22
+	element[4]: temp: 22
+	element[5]: temp: 22
+	element[6]: temp: 22
+	element[7]: temp: 22
+	element[8]: temp: 22
+	element[9]: temp: 21
+	element[10]: temp: 21
+	element[11]: temp: 21
+	element[12]: temp: 21
+	element[13]: temp: 21
+	element[14]: temp: 21
+	element[15]: temp: 21
+	element[16]: temp: 21
+	element[17]: temp: 21

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshSync " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testMeshSync.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.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;
+	Stream*			stream;
+	Node_DomainIndex	node_dI;
+	Element_DomainIndex	element_dI;
+	
+	/* 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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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;
+	
+	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( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( False ) );
+	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( 1 ) );
+	
+	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_All( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout, 1 );
+	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;
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	
+	for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+		mesh->nodeCoord[node_dI][0] = (double)rank;
+		mesh->nodeCoord[node_dI][1] = (double)rank;
+		mesh->nodeCoord[node_dI][2] = (double)rank;
+		mesh->node[node_dI].temp = 10.0 + (double)rank;
+	}
+	for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ ) {
+		mesh->element[element_dI].temp = 20.0 + (double)rank;
+	}
+	
+	if( rank == procToWatch ) {
+		Print(mesh, stream);
+		
+		printf( "Pre-sync:\n" );
+		for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+			printf( "\tnodeCoord[%d]: { %g, %g, %g } - temp: %g\n",  node_dI, mesh->nodeCoord[node_dI][0],
+				mesh->nodeCoord[node_dI][1], mesh->nodeCoord[node_dI][2], mesh->node[node_dI].temp );
+		}
+		for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ )
+			printf( "\telement[%d]: temp: %g\n", element_dI, mesh->element[element_dI].temp );
+	}
+	
+	Mesh_Sync( mesh );
+	
+	if( rank == procToWatch ) {
+		printf( "Post-sync:\n" );
+		for( node_dI = 0; node_dI < mesh->nodeDomainCount; node_dI++ ) {
+			printf( "\tnodeCoord[%d]: { %g, %g, %g } - temp: %g\n",  node_dI, mesh->nodeCoord[node_dI][0],
+				mesh->nodeCoord[node_dI][1], mesh->nodeCoord[node_dI][2], mesh->node[node_dI].temp );
+		}
+		for( element_dI = 0; element_dI < mesh->elementDomainCount; element_dI++ )
+			printf( "\telement[%d]: temp: %g\n", element_dI, mesh->element[element_dI].temp );
+	}
+	
+	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 );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testMeshTopology.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 testSetElements( unsigned rank, unsigned nProcs, unsigned watch );
+void buildElements( unsigned rank, unsigned nProcs, 
+		    unsigned* nEls, unsigned** els );
+
+
+#define nTests	1
+
+TestSuite_Test	tests[nTests] = {{"set elements", testSetElements}};
+
+
+Bool testSetElements( unsigned rank, unsigned nProcs, unsigned watch ) {
+	MeshTopology*	topo;
+	unsigned	nDims = 3;
+	unsigned	nEls = 0;
+	unsigned*	els = NULL;
+
+	buildElements( rank, nProcs, &nEls, &els );
+	topo = MeshTopology_New( "" );
+	MeshTopology_SetNDims( topo, nDims );
+	MeshTopology_SetElements( topo, MT_VERTEX, nEls, els );
+
+	if( rank == watch ) {
+		if( topo->nDims != 3 || topo->nTDims != 4 || 
+		    !topo->domains || !topo->domains[MT_VERTEX] || !topo->domains[MT_VERTEX]->decomp )
+		{
+			FreeArray( els );
+			FreeObject( topo );
+			return False;
+		}
+	}
+
+	FreeArray( els );
+	FreeObject( topo );
+
+	return True;
+}
+
+void buildElements( unsigned rank, unsigned nProcs, 
+		    unsigned* nEls, unsigned** els )
+{
+	unsigned	start;
+	unsigned	e_i;
+
+	*nEls = 100;
+	*els = Memory_Alloc_Array_Unnamed( unsigned, *nEls );
+	start = rank * (*nEls - 10);
+
+	for( e_i = 0; e_i < *nEls; e_i++ )
+		(*els)[e_i] = start + e_i;
+}
+
+
+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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,835 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00,0.00):
+		Incl    0, Excl    0
+	Test point 0 (0.10,0.10,0.10):
+		Incl    0, Excl    0
+	Node 1 (0.50,0.00,0.00):
+		Incl    1, Excl    1
+	Test point 1 (0.60,0.10,0.10):
+		Incl    1, Excl    1
+	Node 2 (1.00,0.00,0.00):
+		Incl    2, Excl    2
+	Test point 2 (1.10,0.10,0.10):
+		Incl    2, Excl    2
+	Node 3 (1.50,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 3 (1.60,0.10,0.10):
+		Incl    3, Excl    3
+	Node 4 (2.00,0.00,0.00):
+		Incl    4, Excl    4
+	Test point 4 (2.10,0.10,0.10):
+		Incl    4, Excl    4
+	Node 5 (2.50,0.00,0.00):
+		Incl    5, Excl    5
+	Test point 5 (2.60,0.10,0.10):
+		Incl    5, Excl    5
+	Node 6 (3.00,0.00,0.00):
+		Incl    6, Excl    6
+	Test point 6 (3.10,0.10,0.10):
+		Incl    6, Excl    6
+	Node 7 (3.50,0.00,0.00):
+		Incl    7, Excl    7
+	Test point 7 (3.60,0.10,0.10):
+		Incl    7, Excl    7
+	Node 8 (4.00,0.00,0.00):
+		Incl    8, Excl    8
+	Test point 8 (4.10,0.10,0.10):
+		Incl    8, Excl    8
+	Node 9 (4.50,0.00,0.00):
+		Incl    9, Excl    9
+	Test point 9 (4.60,0.10,0.10):
+		Incl    9, Excl    9
+	Node 10 (5.00,0.00,0.00):
+		Incl   10, Excl   10
+	Test point 10 (5.10,0.10,0.10):
+		Incl   10, Excl   10
+	Node 11 (5.50,0.00,0.00):
+		Incl   11, Excl   11
+	Test point 11 (5.60,0.10,0.10):
+		Incl   11, Excl   11
+	Node 12 (6.00,0.00,0.00):
+		Incl   11, Excl   11
+	Test point 12 (6.10,0.10,0.10):
+		Incl  108, Excl  108
+	Node 13 (0.00,0.33,0.00):
+		Incl   12, Excl   12
+	Test point 13 (0.10,0.43,0.10):
+		Incl   12, Excl   12
+	Node 14 (0.50,0.33,0.00):
+		Incl   13, Excl   13
+	Test point 14 (0.60,0.43,0.10):
+		Incl   13, Excl   13
+	Node 15 (1.00,0.33,0.00):
+		Incl   14, Excl   14
+	Test point 15 (1.10,0.43,0.10):
+		Incl   14, Excl   14
+	Node 16 (1.50,0.33,0.00):
+		Incl   15, Excl   15
+	Test point 16 (1.60,0.43,0.10):
+		Incl   15, Excl   15
+	Node 17 (2.00,0.33,0.00):
+		Incl   16, Excl   16
+	Test point 17 (2.10,0.43,0.10):
+		Incl   16, Excl   16
+	Node 18 (2.50,0.33,0.00):
+		Incl   17, Excl   17
+	Test point 18 (2.60,0.43,0.10):
+		Incl   17, Excl   17
+	Node 19 (3.00,0.33,0.00):
+		Incl   18, Excl   18
+	Test point 19 (3.10,0.43,0.10):
+		Incl   18, Excl   18
+	Node 20 (3.50,0.33,0.00):
+		Incl   19, Excl   19
+	Test point 20 (3.60,0.43,0.10):
+		Incl   19, Excl   19
+	Node 21 (4.00,0.33,0.00):
+		Incl   20, Excl   20
+	Test point 21 (4.10,0.43,0.10):
+		Incl   20, Excl   20
+	Node 22 (4.50,0.33,0.00):
+		Incl   21, Excl   21
+	Test point 22 (4.60,0.43,0.10):
+		Incl   21, Excl   21
+	Node 23 (5.00,0.33,0.00):
+		Incl   22, Excl   22
+	Test point 23 (5.10,0.43,0.10):
+		Incl   22, Excl   22
+	Node 24 (5.50,0.33,0.00):
+		Incl   23, Excl   23
+	Test point 24 (5.60,0.43,0.10):
+		Incl   23, Excl   23
+	Node 25 (6.00,0.33,0.00):
+		Incl   23, Excl   23
+	Test point 25 (6.10,0.43,0.10):
+		Incl  108, Excl  108
+	Node 26 (0.00,0.67,0.00):
+		Incl   24, Excl   24
+	Test point 26 (0.10,0.77,0.10):
+		Incl   24, Excl   24
+	Node 27 (0.50,0.67,0.00):
+		Incl   25, Excl   25
+	Test point 27 (0.60,0.77,0.10):
+		Incl   25, Excl   25
+	Node 28 (1.00,0.67,0.00):
+		Incl   26, Excl   26
+	Test point 28 (1.10,0.77,0.10):
+		Incl   26, Excl   26
+	Node 29 (1.50,0.67,0.00):
+		Incl   27, Excl   27
+	Test point 29 (1.60,0.77,0.10):
+		Incl   27, Excl   27
+	Node 30 (2.00,0.67,0.00):
+		Incl   28, Excl   28
+	Test point 30 (2.10,0.77,0.10):
+		Incl   28, Excl   28
+	Node 31 (2.50,0.67,0.00):
+		Incl   29, Excl   29
+	Test point 31 (2.60,0.77,0.10):
+		Incl   29, Excl   29
+	Node 32 (3.00,0.67,0.00):
+		Incl   30, Excl   30
+	Test point 32 (3.10,0.77,0.10):
+		Incl   30, Excl   30
+	Node 33 (3.50,0.67,0.00):
+		Incl   31, Excl   31
+	Test point 33 (3.60,0.77,0.10):
+		Incl   31, Excl   31
+	Node 34 (4.00,0.67,0.00):
+		Incl   32, Excl   32
+	Test point 34 (4.10,0.77,0.10):
+		Incl   32, Excl   32
+	Node 35 (4.50,0.67,0.00):
+		Incl   33, Excl   33
+	Test point 35 (4.60,0.77,0.10):
+		Incl   33, Excl   33
+	Node 36 (5.00,0.67,0.00):
+		Incl   34, Excl   34
+	Test point 36 (5.10,0.77,0.10):
+		Incl   34, Excl   34
+	Node 37 (5.50,0.67,0.00):
+		Incl   35, Excl   35
+	Test point 37 (5.60,0.77,0.10):
+		Incl   35, Excl   35
+	Node 38 (6.00,0.67,0.00):
+		Incl   35, Excl   35
+	Test point 38 (6.10,0.77,0.10):
+		Incl  108, Excl  108
+	Node 39 (0.00,1.00,0.00):
+		Incl   24, Excl   24
+	Test point 39 (0.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 40 (0.50,1.00,0.00):
+		Incl   25, Excl   25
+	Test point 40 (0.60,1.10,0.10):
+		Incl  108, Excl  108
+	Node 41 (1.00,1.00,0.00):
+		Incl   26, Excl   26
+	Test point 41 (1.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 42 (1.50,1.00,0.00):
+		Incl   27, Excl   27
+	Test point 42 (1.60,1.10,0.10):
+		Incl  108, Excl  108
+	Node 43 (2.00,1.00,0.00):
+		Incl   28, Excl   28
+	Test point 43 (2.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 44 (2.50,1.00,0.00):
+		Incl   29, Excl   29
+	Test point 44 (2.60,1.10,0.10):
+		Incl  108, Excl  108
+	Node 45 (3.00,1.00,0.00):
+		Incl   30, Excl   30
+	Test point 45 (3.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 46 (3.50,1.00,0.00):
+		Incl   31, Excl   31
+	Test point 46 (3.60,1.10,0.10):
+		Incl  108, Excl  108
+	Node 47 (4.00,1.00,0.00):
+		Incl   32, Excl   32
+	Test point 47 (4.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 48 (4.50,1.00,0.00):
+		Incl   33, Excl   33
+	Test point 48 (4.60,1.10,0.10):
+		Incl  108, Excl  108
+	Node 49 (5.00,1.00,0.00):
+		Incl   34, Excl   34
+	Test point 49 (5.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 50 (5.50,1.00,0.00):
+		Incl   35, Excl   35
+	Test point 50 (5.60,1.10,0.10):
+		Incl  108, Excl  108
+	Node 51 (6.00,1.00,0.00):
+		Incl   35, Excl   35
+	Test point 51 (6.10,1.10,0.10):
+		Incl  108, Excl  108
+	Node 52 (0.00,0.00,0.33):
+		Incl   36, Excl   36
+	Test point 52 (0.10,0.10,0.43):
+		Incl   36, Excl   36
+	Node 53 (0.50,0.00,0.33):
+		Incl   37, Excl   37
+	Test point 53 (0.60,0.10,0.43):
+		Incl   37, Excl   37
+	Node 54 (1.00,0.00,0.33):
+		Incl   38, Excl   38
+	Test point 54 (1.10,0.10,0.43):
+		Incl   38, Excl   38
+	Node 55 (1.50,0.00,0.33):
+		Incl   39, Excl   39
+	Test point 55 (1.60,0.10,0.43):
+		Incl   39, Excl   39
+	Node 56 (2.00,0.00,0.33):
+		Incl   40, Excl   40
+	Test point 56 (2.10,0.10,0.43):
+		Incl   40, Excl   40
+	Node 57 (2.50,0.00,0.33):
+		Incl   41, Excl   41
+	Test point 57 (2.60,0.10,0.43):
+		Incl   41, Excl   41
+	Node 58 (3.00,0.00,0.33):
+		Incl   42, Excl   42
+	Test point 58 (3.10,0.10,0.43):
+		Incl   42, Excl   42
+	Node 59 (3.50,0.00,0.33):
+		Incl   43, Excl   43
+	Test point 59 (3.60,0.10,0.43):
+		Incl   43, Excl   43
+	Node 60 (4.00,0.00,0.33):
+		Incl   44, Excl   44
+	Test point 60 (4.10,0.10,0.43):
+		Incl   44, Excl   44
+	Node 61 (4.50,0.00,0.33):
+		Incl   45, Excl   45
+	Test point 61 (4.60,0.10,0.43):
+		Incl   45, Excl   45
+	Node 62 (5.00,0.00,0.33):
+		Incl   46, Excl   46
+	Test point 62 (5.10,0.10,0.43):
+		Incl   46, Excl   46
+	Node 63 (5.50,0.00,0.33):
+		Incl   47, Excl   47
+	Test point 63 (5.60,0.10,0.43):
+		Incl   47, Excl   47
+	Node 64 (6.00,0.00,0.33):
+		Incl   47, Excl   47
+	Test point 64 (6.10,0.10,0.43):
+		Incl  108, Excl  108
+	Node 65 (0.00,0.33,0.33):
+		Incl   48, Excl   48
+	Test point 65 (0.10,0.43,0.43):
+		Incl   48, Excl   48
+	Node 66 (0.50,0.33,0.33):
+		Incl   49, Excl   49
+	Test point 66 (0.60,0.43,0.43):
+		Incl   49, Excl   49
+	Node 67 (1.00,0.33,0.33):
+		Incl   50, Excl   50
+	Test point 67 (1.10,0.43,0.43):
+		Incl   50, Excl   50
+	Node 68 (1.50,0.33,0.33):
+		Incl   51, Excl   51
+	Test point 68 (1.60,0.43,0.43):
+		Incl   51, Excl   51
+	Node 69 (2.00,0.33,0.33):
+		Incl   52, Excl   52
+	Test point 69 (2.10,0.43,0.43):
+		Incl   52, Excl   52
+	Node 70 (2.50,0.33,0.33):
+		Incl   53, Excl   53
+	Test point 70 (2.60,0.43,0.43):
+		Incl   53, Excl   53
+	Node 71 (3.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 71 (3.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 72 (3.50,0.33,0.33):
+		Incl   55, Excl   55
+	Test point 72 (3.60,0.43,0.43):
+		Incl   55, Excl   55
+	Node 73 (4.00,0.33,0.33):
+		Incl   56, Excl   56
+	Test point 73 (4.10,0.43,0.43):
+		Incl   56, Excl   56
+	Node 74 (4.50,0.33,0.33):
+		Incl   57, Excl   57
+	Test point 74 (4.60,0.43,0.43):
+		Incl   57, Excl   57
+	Node 75 (5.00,0.33,0.33):
+		Incl   58, Excl   58
+	Test point 75 (5.10,0.43,0.43):
+		Incl   58, Excl   58
+	Node 76 (5.50,0.33,0.33):
+		Incl   59, Excl   59
+	Test point 76 (5.60,0.43,0.43):
+		Incl   59, Excl   59
+	Node 77 (6.00,0.33,0.33):
+		Incl   59, Excl   59
+	Test point 77 (6.10,0.43,0.43):
+		Incl  108, Excl  108
+	Node 78 (0.00,0.67,0.33):
+		Incl   60, Excl   60
+	Test point 78 (0.10,0.77,0.43):
+		Incl   60, Excl   60
+	Node 79 (0.50,0.67,0.33):
+		Incl   61, Excl   61
+	Test point 79 (0.60,0.77,0.43):
+		Incl   61, Excl   61
+	Node 80 (1.00,0.67,0.33):
+		Incl   62, Excl   62
+	Test point 80 (1.10,0.77,0.43):
+		Incl   62, Excl   62
+	Node 81 (1.50,0.67,0.33):
+		Incl   63, Excl   63
+	Test point 81 (1.60,0.77,0.43):
+		Incl   63, Excl   63
+	Node 82 (2.00,0.67,0.33):
+		Incl   64, Excl   64
+	Test point 82 (2.10,0.77,0.43):
+		Incl   64, Excl   64
+	Node 83 (2.50,0.67,0.33):
+		Incl   65, Excl   65
+	Test point 83 (2.60,0.77,0.43):
+		Incl   65, Excl   65
+	Node 84 (3.00,0.67,0.33):
+		Incl   66, Excl   66
+	Test point 84 (3.10,0.77,0.43):
+		Incl   66, Excl   66
+	Node 85 (3.50,0.67,0.33):
+		Incl   67, Excl   67
+	Test point 85 (3.60,0.77,0.43):
+		Incl   67, Excl   67
+	Node 86 (4.00,0.67,0.33):
+		Incl   68, Excl   68
+	Test point 86 (4.10,0.77,0.43):
+		Incl   68, Excl   68
+	Node 87 (4.50,0.67,0.33):
+		Incl   69, Excl   69
+	Test point 87 (4.60,0.77,0.43):
+		Incl   69, Excl   69
+	Node 88 (5.00,0.67,0.33):
+		Incl   70, Excl   70
+	Test point 88 (5.10,0.77,0.43):
+		Incl   70, Excl   70
+	Node 89 (5.50,0.67,0.33):
+		Incl   71, Excl   71
+	Test point 89 (5.60,0.77,0.43):
+		Incl   71, Excl   71
+	Node 90 (6.00,0.67,0.33):
+		Incl   71, Excl   71
+	Test point 90 (6.10,0.77,0.43):
+		Incl  108, Excl  108
+	Node 91 (0.00,1.00,0.33):
+		Incl   60, Excl   60
+	Test point 91 (0.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 92 (0.50,1.00,0.33):
+		Incl   61, Excl   61
+	Test point 92 (0.60,1.10,0.43):
+		Incl  108, Excl  108
+	Node 93 (1.00,1.00,0.33):
+		Incl   62, Excl   62
+	Test point 93 (1.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 94 (1.50,1.00,0.33):
+		Incl   63, Excl   63
+	Test point 94 (1.60,1.10,0.43):
+		Incl  108, Excl  108
+	Node 95 (2.00,1.00,0.33):
+		Incl   64, Excl   64
+	Test point 95 (2.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 96 (2.50,1.00,0.33):
+		Incl   65, Excl   65
+	Test point 96 (2.60,1.10,0.43):
+		Incl  108, Excl  108
+	Node 97 (3.00,1.00,0.33):
+		Incl   66, Excl   66
+	Test point 97 (3.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 98 (3.50,1.00,0.33):
+		Incl   67, Excl   67
+	Test point 98 (3.60,1.10,0.43):
+		Incl  108, Excl  108
+	Node 99 (4.00,1.00,0.33):
+		Incl   68, Excl   68
+	Test point 99 (4.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 100 (4.50,1.00,0.33):
+		Incl   69, Excl   69
+	Test point 100 (4.60,1.10,0.43):
+		Incl  108, Excl  108
+	Node 101 (5.00,1.00,0.33):
+		Incl   70, Excl   70
+	Test point 101 (5.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 102 (5.50,1.00,0.33):
+		Incl   71, Excl   71
+	Test point 102 (5.60,1.10,0.43):
+		Incl  108, Excl  108
+	Node 103 (6.00,1.00,0.33):
+		Incl   71, Excl   71
+	Test point 103 (6.10,1.10,0.43):
+		Incl  108, Excl  108
+	Node 104 (0.00,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 104 (0.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 105 (0.50,0.00,0.67):
+		Incl   73, Excl   73
+	Test point 105 (0.60,0.10,0.77):
+		Incl   73, Excl   73
+	Node 106 (1.00,0.00,0.67):
+		Incl   74, Excl   74
+	Test point 106 (1.10,0.10,0.77):
+		Incl   74, Excl   74
+	Node 107 (1.50,0.00,0.67):
+		Incl   75, Excl   75
+	Test point 107 (1.60,0.10,0.77):
+		Incl   75, Excl   75
+	Node 108 (2.00,0.00,0.67):
+		Incl   76, Excl   76
+	Test point 108 (2.10,0.10,0.77):
+		Incl   76, Excl   76
+	Node 109 (2.50,0.00,0.67):
+		Incl   77, Excl   77
+	Test point 109 (2.60,0.10,0.77):
+		Incl   77, Excl   77
+	Node 110 (3.00,0.00,0.67):
+		Incl   78, Excl   78
+	Test point 110 (3.10,0.10,0.77):
+		Incl   78, Excl   78
+	Node 111 (3.50,0.00,0.67):
+		Incl   79, Excl   79
+	Test point 111 (3.60,0.10,0.77):
+		Incl   79, Excl   79
+	Node 112 (4.00,0.00,0.67):
+		Incl   80, Excl   80
+	Test point 112 (4.10,0.10,0.77):
+		Incl   80, Excl   80
+	Node 113 (4.50,0.00,0.67):
+		Incl   81, Excl   81
+	Test point 113 (4.60,0.10,0.77):
+		Incl   81, Excl   81
+	Node 114 (5.00,0.00,0.67):
+		Incl   82, Excl   82
+	Test point 114 (5.10,0.10,0.77):
+		Incl   82, Excl   82
+	Node 115 (5.50,0.00,0.67):
+		Incl   83, Excl   83
+	Test point 115 (5.60,0.10,0.77):
+		Incl   83, Excl   83
+	Node 116 (6.00,0.00,0.67):
+		Incl   83, Excl   83
+	Test point 116 (6.10,0.10,0.77):
+		Incl  108, Excl  108
+	Node 117 (0.00,0.33,0.67):
+		Incl   84, Excl   84
+	Test point 117 (0.10,0.43,0.77):
+		Incl   84, Excl   84
+	Node 118 (0.50,0.33,0.67):
+		Incl   85, Excl   85
+	Test point 118 (0.60,0.43,0.77):
+		Incl   85, Excl   85
+	Node 119 (1.00,0.33,0.67):
+		Incl   86, Excl   86
+	Test point 119 (1.10,0.43,0.77):
+		Incl   86, Excl   86
+	Node 120 (1.50,0.33,0.67):
+		Incl   87, Excl   87
+	Test point 120 (1.60,0.43,0.77):
+		Incl   87, Excl   87
+	Node 121 (2.00,0.33,0.67):
+		Incl   88, Excl   88
+	Test point 121 (2.10,0.43,0.77):
+		Incl   88, Excl   88
+	Node 122 (2.50,0.33,0.67):
+		Incl   89, Excl   89
+	Test point 122 (2.60,0.43,0.77):
+		Incl   89, Excl   89
+	Node 123 (3.00,0.33,0.67):
+		Incl   90, Excl   90
+	Test point 123 (3.10,0.43,0.77):
+		Incl   90, Excl   90
+	Node 124 (3.50,0.33,0.67):
+		Incl   91, Excl   91
+	Test point 124 (3.60,0.43,0.77):
+		Incl   91, Excl   91
+	Node 125 (4.00,0.33,0.67):
+		Incl   92, Excl   92
+	Test point 125 (4.10,0.43,0.77):
+		Incl   92, Excl   92
+	Node 126 (4.50,0.33,0.67):
+		Incl   93, Excl   93
+	Test point 126 (4.60,0.43,0.77):
+		Incl   93, Excl   93
+	Node 127 (5.00,0.33,0.67):
+		Incl   94, Excl   94
+	Test point 127 (5.10,0.43,0.77):
+		Incl   94, Excl   94
+	Node 128 (5.50,0.33,0.67):
+		Incl   95, Excl   95
+	Test point 128 (5.60,0.43,0.77):
+		Incl   95, Excl   95
+	Node 129 (6.00,0.33,0.67):
+		Incl   95, Excl   95
+	Test point 129 (6.10,0.43,0.77):
+		Incl  108, Excl  108
+	Node 130 (0.00,0.67,0.67):
+		Incl   96, Excl   96
+	Test point 130 (0.10,0.77,0.77):
+		Incl   96, Excl   96
+	Node 131 (0.50,0.67,0.67):
+		Incl   97, Excl   97
+	Test point 131 (0.60,0.77,0.77):
+		Incl   97, Excl   97
+	Node 132 (1.00,0.67,0.67):
+		Incl   98, Excl   98
+	Test point 132 (1.10,0.77,0.77):
+		Incl   98, Excl   98
+	Node 133 (1.50,0.67,0.67):
+		Incl   99, Excl   99
+	Test point 133 (1.60,0.77,0.77):
+		Incl   99, Excl   99
+	Node 134 (2.00,0.67,0.67):
+		Incl  100, Excl  100
+	Test point 134 (2.10,0.77,0.77):
+		Incl  100, Excl  100
+	Node 135 (2.50,0.67,0.67):
+		Incl  101, Excl  101
+	Test point 135 (2.60,0.77,0.77):
+		Incl  101, Excl  101
+	Node 136 (3.00,0.67,0.67):
+		Incl  102, Excl  102
+	Test point 136 (3.10,0.77,0.77):
+		Incl  102, Excl  102
+	Node 137 (3.50,0.67,0.67):
+		Incl  103, Excl  103
+	Test point 137 (3.60,0.77,0.77):
+		Incl  103, Excl  103
+	Node 138 (4.00,0.67,0.67):
+		Incl  104, Excl  104
+	Test point 138 (4.10,0.77,0.77):
+		Incl  104, Excl  104
+	Node 139 (4.50,0.67,0.67):
+		Incl  105, Excl  105
+	Test point 139 (4.60,0.77,0.77):
+		Incl  105, Excl  105
+	Node 140 (5.00,0.67,0.67):
+		Incl  106, Excl  106
+	Test point 140 (5.10,0.77,0.77):
+		Incl  106, Excl  106
+	Node 141 (5.50,0.67,0.67):
+		Incl  107, Excl  107
+	Test point 141 (5.60,0.77,0.77):
+		Incl  107, Excl  107
+	Node 142 (6.00,0.67,0.67):
+		Incl  107, Excl  107
+	Test point 142 (6.10,0.77,0.77):
+		Incl  108, Excl  108
+	Node 143 (0.00,1.00,0.67):
+		Incl   96, Excl   96
+	Test point 143 (0.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 144 (0.50,1.00,0.67):
+		Incl   97, Excl   97
+	Test point 144 (0.60,1.10,0.77):
+		Incl  108, Excl  108
+	Node 145 (1.00,1.00,0.67):
+		Incl   98, Excl   98
+	Test point 145 (1.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 146 (1.50,1.00,0.67):
+		Incl   99, Excl   99
+	Test point 146 (1.60,1.10,0.77):
+		Incl  108, Excl  108
+	Node 147 (2.00,1.00,0.67):
+		Incl  100, Excl  100
+	Test point 147 (2.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 148 (2.50,1.00,0.67):
+		Incl  101, Excl  101
+	Test point 148 (2.60,1.10,0.77):
+		Incl  108, Excl  108
+	Node 149 (3.00,1.00,0.67):
+		Incl  102, Excl  102
+	Test point 149 (3.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 150 (3.50,1.00,0.67):
+		Incl  103, Excl  103
+	Test point 150 (3.60,1.10,0.77):
+		Incl  108, Excl  108
+	Node 151 (4.00,1.00,0.67):
+		Incl  104, Excl  104
+	Test point 151 (4.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 152 (4.50,1.00,0.67):
+		Incl  105, Excl  105
+	Test point 152 (4.60,1.10,0.77):
+		Incl  108, Excl  108
+	Node 153 (5.00,1.00,0.67):
+		Incl  106, Excl  106
+	Test point 153 (5.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 154 (5.50,1.00,0.67):
+		Incl  107, Excl  107
+	Test point 154 (5.60,1.10,0.77):
+		Incl  108, Excl  108
+	Node 155 (6.00,1.00,0.67):
+		Incl  107, Excl  107
+	Test point 155 (6.10,1.10,0.77):
+		Incl  108, Excl  108
+	Node 156 (0.00,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 156 (0.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 157 (0.50,0.00,1.00):
+		Incl   73, Excl   73
+	Test point 157 (0.60,0.10,1.10):
+		Incl  108, Excl  108
+	Node 158 (1.00,0.00,1.00):
+		Incl   74, Excl   74
+	Test point 158 (1.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 159 (1.50,0.00,1.00):
+		Incl   75, Excl   75
+	Test point 159 (1.60,0.10,1.10):
+		Incl  108, Excl  108
+	Node 160 (2.00,0.00,1.00):
+		Incl   76, Excl   76
+	Test point 160 (2.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 161 (2.50,0.00,1.00):
+		Incl   77, Excl   77
+	Test point 161 (2.60,0.10,1.10):
+		Incl  108, Excl  108
+	Node 162 (3.00,0.00,1.00):
+		Incl   78, Excl   78
+	Test point 162 (3.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 163 (3.50,0.00,1.00):
+		Incl   79, Excl   79
+	Test point 163 (3.60,0.10,1.10):
+		Incl  108, Excl  108
+	Node 164 (4.00,0.00,1.00):
+		Incl   80, Excl   80
+	Test point 164 (4.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 165 (4.50,0.00,1.00):
+		Incl   81, Excl   81
+	Test point 165 (4.60,0.10,1.10):
+		Incl  108, Excl  108
+	Node 166 (5.00,0.00,1.00):
+		Incl   82, Excl   82
+	Test point 166 (5.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 167 (5.50,0.00,1.00):
+		Incl   83, Excl   83
+	Test point 167 (5.60,0.10,1.10):
+		Incl  108, Excl  108
+	Node 168 (6.00,0.00,1.00):
+		Incl   83, Excl   83
+	Test point 168 (6.10,0.10,1.10):
+		Incl  108, Excl  108
+	Node 169 (0.00,0.33,1.00):
+		Incl   84, Excl   84
+	Test point 169 (0.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 170 (0.50,0.33,1.00):
+		Incl   85, Excl   85
+	Test point 170 (0.60,0.43,1.10):
+		Incl  108, Excl  108
+	Node 171 (1.00,0.33,1.00):
+		Incl   86, Excl   86
+	Test point 171 (1.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 172 (1.50,0.33,1.00):
+		Incl   87, Excl   87
+	Test point 172 (1.60,0.43,1.10):
+		Incl  108, Excl  108
+	Node 173 (2.00,0.33,1.00):
+		Incl   88, Excl   88
+	Test point 173 (2.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 174 (2.50,0.33,1.00):
+		Incl   89, Excl   89
+	Test point 174 (2.60,0.43,1.10):
+		Incl  108, Excl  108
+	Node 175 (3.00,0.33,1.00):
+		Incl   90, Excl   90
+	Test point 175 (3.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 176 (3.50,0.33,1.00):
+		Incl   91, Excl   91
+	Test point 176 (3.60,0.43,1.10):
+		Incl  108, Excl  108
+	Node 177 (4.00,0.33,1.00):
+		Incl   92, Excl   92
+	Test point 177 (4.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 178 (4.50,0.33,1.00):
+		Incl   93, Excl   93
+	Test point 178 (4.60,0.43,1.10):
+		Incl  108, Excl  108
+	Node 179 (5.00,0.33,1.00):
+		Incl   94, Excl   94
+	Test point 179 (5.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 180 (5.50,0.33,1.00):
+		Incl   95, Excl   95
+	Test point 180 (5.60,0.43,1.10):
+		Incl  108, Excl  108
+	Node 181 (6.00,0.33,1.00):
+		Incl   95, Excl   95
+	Test point 181 (6.10,0.43,1.10):
+		Incl  108, Excl  108
+	Node 182 (0.00,0.67,1.00):
+		Incl   96, Excl   96
+	Test point 182 (0.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 183 (0.50,0.67,1.00):
+		Incl   97, Excl   97
+	Test point 183 (0.60,0.77,1.10):
+		Incl  108, Excl  108
+	Node 184 (1.00,0.67,1.00):
+		Incl   98, Excl   98
+	Test point 184 (1.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 185 (1.50,0.67,1.00):
+		Incl   99, Excl   99
+	Test point 185 (1.60,0.77,1.10):
+		Incl  108, Excl  108
+	Node 186 (2.00,0.67,1.00):
+		Incl  100, Excl  100
+	Test point 186 (2.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 187 (2.50,0.67,1.00):
+		Incl  101, Excl  101
+	Test point 187 (2.60,0.77,1.10):
+		Incl  108, Excl  108
+	Node 188 (3.00,0.67,1.00):
+		Incl  102, Excl  102
+	Test point 188 (3.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 189 (3.50,0.67,1.00):
+		Incl  103, Excl  103
+	Test point 189 (3.60,0.77,1.10):
+		Incl  108, Excl  108
+	Node 190 (4.00,0.67,1.00):
+		Incl  104, Excl  104
+	Test point 190 (4.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 191 (4.50,0.67,1.00):
+		Incl  105, Excl  105
+	Test point 191 (4.60,0.77,1.10):
+		Incl  108, Excl  108
+	Node 192 (5.00,0.67,1.00):
+		Incl  106, Excl  106
+	Test point 192 (5.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 193 (5.50,0.67,1.00):
+		Incl  107, Excl  107
+	Test point 193 (5.60,0.77,1.10):
+		Incl  108, Excl  108
+	Node 194 (6.00,0.67,1.00):
+		Incl  107, Excl  107
+	Test point 194 (6.10,0.77,1.10):
+		Incl  108, Excl  108
+	Node 195 (0.00,1.00,1.00):
+		Incl   96, Excl   96
+	Test point 195 (0.10,1.10,1.10):
+		Incl  108, Excl  108
+	Node 196 (0.50,1.00,1.00):
+		Incl   97, Excl   97
+	Test point 196 (0.60,1.10,1.10):
+		Incl  108, Excl  108
+	Node 197 (1.00,1.00,1.00):
+		Incl   98, Excl   98
+	Test point 197 (1.10,1.10,1.10):
+		Incl  108, Excl  108
+	Node 198 (1.50,1.00,1.00):
+		Incl   99, Excl   99
+	Test point 198 (1.60,1.10,1.10):
+		Incl  108, Excl  108
+	Node 199 (2.00,1.00,1.00):
+		Incl  100, Excl  100
+	Test point 199 (2.10,1.10,1.10):
+		Incl  108, Excl  108
+	Node 200 (2.50,1.00,1.00):
+		Incl  101, Excl  101
+	Test point 200 (2.60,1.10,1.10):
+		Incl  108, Excl  108
+	Node 201 (3.00,1.00,1.00):
+		Incl  102, Excl  102
+	Test point 201 (3.10,1.10,1.10):
+		Incl  108, Excl  108
+	Node 202 (3.50,1.00,1.00):
+		Incl  103, Excl  103
+	Test point 202 (3.60,1.10,1.10):
+		Incl  108, Excl  108
+	Node 203 (4.00,1.00,1.00):
+		Incl  104, Excl  104
+	Test point 203 (4.10,1.10,1.10):
+		Incl  108, Excl  108
+	Node 204 (4.50,1.00,1.00):
+		Incl  105, Excl  105
+	Test point 204 (4.60,1.10,1.10):
+		Incl  108, Excl  108
+	Node 205 (5.00,1.00,1.00):
+		Incl  106, Excl  106
+	Test point 205 (5.10,1.10,1.10):
+		Incl  108, Excl  108
+	Node 206 (5.50,1.00,1.00):
+		Incl  107, Excl  107
+	Test point 206 (5.60,1.10,1.10):
+		Incl  108, Excl  108
+	Node 207 (6.00,1.00,1.00):
+		Incl  107, Excl  107
+	Test point 207 (6.10,1.10,1.10):
+		Incl  108, Excl  108
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,835 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00,0.00):
+		Incl    0, Excl    0
+	Test point 0 (0.10,0.10,0.10):
+		Incl    0, Excl    0
+	Node 1 (0.50,0.00,0.00):
+		Incl    1, Excl    1
+	Test point 1 (0.60,0.10,0.10):
+		Incl    1, Excl    1
+	Node 2 (1.00,0.00,0.00):
+		Incl    2, Excl    2
+	Test point 2 (1.10,0.10,0.10):
+		Incl    2, Excl    2
+	Node 3 (1.50,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 3 (1.60,0.10,0.10):
+		Incl    3, Excl    3
+	Node 4 (2.00,0.00,0.00):
+		Incl    4, Excl    4
+	Test point 4 (2.10,0.10,0.10):
+		Incl    4, Excl    4
+	Node 5 (2.50,0.00,0.00):
+		Incl    5, Excl    5
+	Test point 5 (2.60,0.10,0.10):
+		Incl    5, Excl    5
+	Node 6 (3.00,0.00,0.00):
+		Incl    5, Excl   54
+	Test point 6 (3.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 7 (3.50,0.00,0.00):
+		Incl   54, Excl   72
+	Test point 7 (3.60,0.10,0.10):
+		Incl   72, Excl   72
+	Node 8 (4.00,0.00,0.00):
+		Incl   72, Excl   72
+	Test point 8 (4.10,0.10,0.10):
+		Incl   72, Excl   72
+	Node 9 (4.50,0.00,0.00):
+		Incl   72, Excl   72
+	Test point 9 (4.60,0.10,0.10):
+		Incl   72, Excl   72
+	Node 10 (5.00,0.00,0.00):
+		Incl   72, Excl   72
+	Test point 10 (5.10,0.10,0.10):
+		Incl   72, Excl   72
+	Node 11 (5.50,0.00,0.00):
+		Incl   55, Excl   55
+	Test point 11 (5.60,0.10,0.10):
+		Incl   55, Excl   55
+	Node 12 (6.00,0.00,0.00):
+		Incl   55, Excl   55
+	Test point 12 (6.10,0.10,0.10):
+		Incl   72, Excl   72
+	Node 13 (0.00,0.33,0.00):
+		Incl    6, Excl    6
+	Test point 13 (0.10,0.43,0.10):
+		Incl    6, Excl    6
+	Node 14 (0.50,0.33,0.00):
+		Incl    7, Excl    7
+	Test point 14 (0.60,0.43,0.10):
+		Incl    7, Excl    7
+	Node 15 (1.00,0.33,0.00):
+		Incl    8, Excl    8
+	Test point 15 (1.10,0.43,0.10):
+		Incl    8, Excl    8
+	Node 16 (1.50,0.33,0.00):
+		Incl    9, Excl    9
+	Test point 16 (1.60,0.43,0.10):
+		Incl    9, Excl    9
+	Node 17 (2.00,0.33,0.00):
+		Incl   10, Excl   10
+	Test point 17 (2.10,0.43,0.10):
+		Incl   10, Excl   10
+	Node 18 (2.50,0.33,0.00):
+		Incl   11, Excl   11
+	Test point 18 (2.60,0.43,0.10):
+		Incl   11, Excl   11
+	Node 19 (3.00,0.33,0.00):
+		Incl   11, Excl   56
+	Test point 19 (3.10,0.43,0.10):
+		Incl   56, Excl   56
+	Node 20 (3.50,0.33,0.00):
+		Incl   56, Excl   72
+	Test point 20 (3.60,0.43,0.10):
+		Incl   72, Excl   72
+	Node 21 (4.00,0.33,0.00):
+		Incl   72, Excl   72
+	Test point 21 (4.10,0.43,0.10):
+		Incl   72, Excl   72
+	Node 22 (4.50,0.33,0.00):
+		Incl   72, Excl   72
+	Test point 22 (4.60,0.43,0.10):
+		Incl   72, Excl   72
+	Node 23 (5.00,0.33,0.00):
+		Incl   72, Excl   72
+	Test point 23 (5.10,0.43,0.10):
+		Incl   72, Excl   72
+	Node 24 (5.50,0.33,0.00):
+		Incl   57, Excl   57
+	Test point 24 (5.60,0.43,0.10):
+		Incl   57, Excl   57
+	Node 25 (6.00,0.33,0.00):
+		Incl   57, Excl   57
+	Test point 25 (6.10,0.43,0.10):
+		Incl   72, Excl   72
+	Node 26 (0.00,0.67,0.00):
+		Incl   12, Excl   12
+	Test point 26 (0.10,0.77,0.10):
+		Incl   12, Excl   12
+	Node 27 (0.50,0.67,0.00):
+		Incl   13, Excl   13
+	Test point 27 (0.60,0.77,0.10):
+		Incl   13, Excl   13
+	Node 28 (1.00,0.67,0.00):
+		Incl   14, Excl   14
+	Test point 28 (1.10,0.77,0.10):
+		Incl   14, Excl   14
+	Node 29 (1.50,0.67,0.00):
+		Incl   15, Excl   15
+	Test point 29 (1.60,0.77,0.10):
+		Incl   15, Excl   15
+	Node 30 (2.00,0.67,0.00):
+		Incl   16, Excl   16
+	Test point 30 (2.10,0.77,0.10):
+		Incl   16, Excl   16
+	Node 31 (2.50,0.67,0.00):
+		Incl   17, Excl   17
+	Test point 31 (2.60,0.77,0.10):
+		Incl   17, Excl   17
+	Node 32 (3.00,0.67,0.00):
+		Incl   17, Excl   58
+	Test point 32 (3.10,0.77,0.10):
+		Incl   58, Excl   58
+	Node 33 (3.50,0.67,0.00):
+		Incl   58, Excl   72
+	Test point 33 (3.60,0.77,0.10):
+		Incl   72, Excl   72
+	Node 34 (4.00,0.67,0.00):
+		Incl   72, Excl   72
+	Test point 34 (4.10,0.77,0.10):
+		Incl   72, Excl   72
+	Node 35 (4.50,0.67,0.00):
+		Incl   72, Excl   72
+	Test point 35 (4.60,0.77,0.10):
+		Incl   72, Excl   72
+	Node 36 (5.00,0.67,0.00):
+		Incl   72, Excl   72
+	Test point 36 (5.10,0.77,0.10):
+		Incl   72, Excl   72
+	Node 37 (5.50,0.67,0.00):
+		Incl   59, Excl   59
+	Test point 37 (5.60,0.77,0.10):
+		Incl   59, Excl   59
+	Node 38 (6.00,0.67,0.00):
+		Incl   59, Excl   59
+	Test point 38 (6.10,0.77,0.10):
+		Incl   72, Excl   72
+	Node 39 (0.00,1.00,0.00):
+		Incl   12, Excl   12
+	Test point 39 (0.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 40 (0.50,1.00,0.00):
+		Incl   13, Excl   13
+	Test point 40 (0.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 41 (1.00,1.00,0.00):
+		Incl   14, Excl   14
+	Test point 41 (1.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 42 (1.50,1.00,0.00):
+		Incl   15, Excl   15
+	Test point 42 (1.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 43 (2.00,1.00,0.00):
+		Incl   16, Excl   16
+	Test point 43 (2.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 44 (2.50,1.00,0.00):
+		Incl   17, Excl   17
+	Test point 44 (2.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 45 (3.00,1.00,0.00):
+		Incl   17, Excl   58
+	Test point 45 (3.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 46 (3.50,1.00,0.00):
+		Incl   58, Excl   72
+	Test point 46 (3.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 47 (4.00,1.00,0.00):
+		Incl   72, Excl   72
+	Test point 47 (4.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 48 (4.50,1.00,0.00):
+		Incl   72, Excl   72
+	Test point 48 (4.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 49 (5.00,1.00,0.00):
+		Incl   72, Excl   72
+	Test point 49 (5.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 50 (5.50,1.00,0.00):
+		Incl   59, Excl   59
+	Test point 50 (5.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 51 (6.00,1.00,0.00):
+		Incl   59, Excl   59
+	Test point 51 (6.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 52 (0.00,0.00,0.33):
+		Incl   18, Excl   18
+	Test point 52 (0.10,0.10,0.43):
+		Incl   18, Excl   18
+	Node 53 (0.50,0.00,0.33):
+		Incl   19, Excl   19
+	Test point 53 (0.60,0.10,0.43):
+		Incl   19, Excl   19
+	Node 54 (1.00,0.00,0.33):
+		Incl   20, Excl   20
+	Test point 54 (1.10,0.10,0.43):
+		Incl   20, Excl   20
+	Node 55 (1.50,0.00,0.33):
+		Incl   21, Excl   21
+	Test point 55 (1.60,0.10,0.43):
+		Incl   21, Excl   21
+	Node 56 (2.00,0.00,0.33):
+		Incl   22, Excl   22
+	Test point 56 (2.10,0.10,0.43):
+		Incl   22, Excl   22
+	Node 57 (2.50,0.00,0.33):
+		Incl   23, Excl   23
+	Test point 57 (2.60,0.10,0.43):
+		Incl   23, Excl   23
+	Node 58 (3.00,0.00,0.33):
+		Incl   23, Excl   60
+	Test point 58 (3.10,0.10,0.43):
+		Incl   60, Excl   60
+	Node 59 (3.50,0.00,0.33):
+		Incl   60, Excl   72
+	Test point 59 (3.60,0.10,0.43):
+		Incl   72, Excl   72
+	Node 60 (4.00,0.00,0.33):
+		Incl   72, Excl   72
+	Test point 60 (4.10,0.10,0.43):
+		Incl   72, Excl   72
+	Node 61 (4.50,0.00,0.33):
+		Incl   72, Excl   72
+	Test point 61 (4.60,0.10,0.43):
+		Incl   72, Excl   72
+	Node 62 (5.00,0.00,0.33):
+		Incl   72, Excl   72
+	Test point 62 (5.10,0.10,0.43):
+		Incl   72, Excl   72
+	Node 63 (5.50,0.00,0.33):
+		Incl   61, Excl   61
+	Test point 63 (5.60,0.10,0.43):
+		Incl   61, Excl   61
+	Node 64 (6.00,0.00,0.33):
+		Incl   61, Excl   61
+	Test point 64 (6.10,0.10,0.43):
+		Incl   72, Excl   72
+	Node 65 (0.00,0.33,0.33):
+		Incl   24, Excl   24
+	Test point 65 (0.10,0.43,0.43):
+		Incl   24, Excl   24
+	Node 66 (0.50,0.33,0.33):
+		Incl   25, Excl   25
+	Test point 66 (0.60,0.43,0.43):
+		Incl   25, Excl   25
+	Node 67 (1.00,0.33,0.33):
+		Incl   26, Excl   26
+	Test point 67 (1.10,0.43,0.43):
+		Incl   26, Excl   26
+	Node 68 (1.50,0.33,0.33):
+		Incl   27, Excl   27
+	Test point 68 (1.60,0.43,0.43):
+		Incl   27, Excl   27
+	Node 69 (2.00,0.33,0.33):
+		Incl   28, Excl   28
+	Test point 69 (2.10,0.43,0.43):
+		Incl   28, Excl   28
+	Node 70 (2.50,0.33,0.33):
+		Incl   29, Excl   29
+	Test point 70 (2.60,0.43,0.43):
+		Incl   29, Excl   29
+	Node 71 (3.00,0.33,0.33):
+		Incl   29, Excl   62
+	Test point 71 (3.10,0.43,0.43):
+		Incl   62, Excl   62
+	Node 72 (3.50,0.33,0.33):
+		Incl   62, Excl   72
+	Test point 72 (3.60,0.43,0.43):
+		Incl   72, Excl   72
+	Node 73 (4.00,0.33,0.33):
+		Incl   72, Excl   72
+	Test point 73 (4.10,0.43,0.43):
+		Incl   72, Excl   72
+	Node 74 (4.50,0.33,0.33):
+		Incl   72, Excl   72
+	Test point 74 (4.60,0.43,0.43):
+		Incl   72, Excl   72
+	Node 75 (5.00,0.33,0.33):
+		Incl   72, Excl   72
+	Test point 75 (5.10,0.43,0.43):
+		Incl   72, Excl   72
+	Node 76 (5.50,0.33,0.33):
+		Incl   63, Excl   63
+	Test point 76 (5.60,0.43,0.43):
+		Incl   63, Excl   63
+	Node 77 (6.00,0.33,0.33):
+		Incl   63, Excl   63
+	Test point 77 (6.10,0.43,0.43):
+		Incl   72, Excl   72
+	Node 78 (0.00,0.67,0.33):
+		Incl   30, Excl   30
+	Test point 78 (0.10,0.77,0.43):
+		Incl   30, Excl   30
+	Node 79 (0.50,0.67,0.33):
+		Incl   31, Excl   31
+	Test point 79 (0.60,0.77,0.43):
+		Incl   31, Excl   31
+	Node 80 (1.00,0.67,0.33):
+		Incl   32, Excl   32
+	Test point 80 (1.10,0.77,0.43):
+		Incl   32, Excl   32
+	Node 81 (1.50,0.67,0.33):
+		Incl   33, Excl   33
+	Test point 81 (1.60,0.77,0.43):
+		Incl   33, Excl   33
+	Node 82 (2.00,0.67,0.33):
+		Incl   34, Excl   34
+	Test point 82 (2.10,0.77,0.43):
+		Incl   34, Excl   34
+	Node 83 (2.50,0.67,0.33):
+		Incl   35, Excl   35
+	Test point 83 (2.60,0.77,0.43):
+		Incl   35, Excl   35
+	Node 84 (3.00,0.67,0.33):
+		Incl   35, Excl   64
+	Test point 84 (3.10,0.77,0.43):
+		Incl   64, Excl   64
+	Node 85 (3.50,0.67,0.33):
+		Incl   64, Excl   72
+	Test point 85 (3.60,0.77,0.43):
+		Incl   72, Excl   72
+	Node 86 (4.00,0.67,0.33):
+		Incl   72, Excl   72
+	Test point 86 (4.10,0.77,0.43):
+		Incl   72, Excl   72
+	Node 87 (4.50,0.67,0.33):
+		Incl   72, Excl   72
+	Test point 87 (4.60,0.77,0.43):
+		Incl   72, Excl   72
+	Node 88 (5.00,0.67,0.33):
+		Incl   72, Excl   72
+	Test point 88 (5.10,0.77,0.43):
+		Incl   72, Excl   72
+	Node 89 (5.50,0.67,0.33):
+		Incl   65, Excl   65
+	Test point 89 (5.60,0.77,0.43):
+		Incl   65, Excl   65
+	Node 90 (6.00,0.67,0.33):
+		Incl   65, Excl   65
+	Test point 90 (6.10,0.77,0.43):
+		Incl   72, Excl   72
+	Node 91 (0.00,1.00,0.33):
+		Incl   30, Excl   30
+	Test point 91 (0.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 92 (0.50,1.00,0.33):
+		Incl   31, Excl   31
+	Test point 92 (0.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 93 (1.00,1.00,0.33):
+		Incl   32, Excl   32
+	Test point 93 (1.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 94 (1.50,1.00,0.33):
+		Incl   33, Excl   33
+	Test point 94 (1.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 95 (2.00,1.00,0.33):
+		Incl   34, Excl   34
+	Test point 95 (2.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 96 (2.50,1.00,0.33):
+		Incl   35, Excl   35
+	Test point 96 (2.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 97 (3.00,1.00,0.33):
+		Incl   35, Excl   64
+	Test point 97 (3.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 98 (3.50,1.00,0.33):
+		Incl   64, Excl   72
+	Test point 98 (3.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 99 (4.00,1.00,0.33):
+		Incl   72, Excl   72
+	Test point 99 (4.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 100 (4.50,1.00,0.33):
+		Incl   72, Excl   72
+	Test point 100 (4.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 101 (5.00,1.00,0.33):
+		Incl   72, Excl   72
+	Test point 101 (5.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 102 (5.50,1.00,0.33):
+		Incl   65, Excl   65
+	Test point 102 (5.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 103 (6.00,1.00,0.33):
+		Incl   65, Excl   65
+	Test point 103 (6.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 104 (0.00,0.00,0.67):
+		Incl   36, Excl   36
+	Test point 104 (0.10,0.10,0.77):
+		Incl   36, Excl   36
+	Node 105 (0.50,0.00,0.67):
+		Incl   37, Excl   37
+	Test point 105 (0.60,0.10,0.77):
+		Incl   37, Excl   37
+	Node 106 (1.00,0.00,0.67):
+		Incl   38, Excl   38
+	Test point 106 (1.10,0.10,0.77):
+		Incl   38, Excl   38
+	Node 107 (1.50,0.00,0.67):
+		Incl   39, Excl   39
+	Test point 107 (1.60,0.10,0.77):
+		Incl   39, Excl   39
+	Node 108 (2.00,0.00,0.67):
+		Incl   40, Excl   40
+	Test point 108 (2.10,0.10,0.77):
+		Incl   40, Excl   40
+	Node 109 (2.50,0.00,0.67):
+		Incl   41, Excl   41
+	Test point 109 (2.60,0.10,0.77):
+		Incl   41, Excl   41
+	Node 110 (3.00,0.00,0.67):
+		Incl   41, Excl   66
+	Test point 110 (3.10,0.10,0.77):
+		Incl   66, Excl   66
+	Node 111 (3.50,0.00,0.67):
+		Incl   66, Excl   72
+	Test point 111 (3.60,0.10,0.77):
+		Incl   72, Excl   72
+	Node 112 (4.00,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 112 (4.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 113 (4.50,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 113 (4.60,0.10,0.77):
+		Incl   72, Excl   72
+	Node 114 (5.00,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 114 (5.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 115 (5.50,0.00,0.67):
+		Incl   67, Excl   67
+	Test point 115 (5.60,0.10,0.77):
+		Incl   67, Excl   67
+	Node 116 (6.00,0.00,0.67):
+		Incl   67, Excl   67
+	Test point 116 (6.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 117 (0.00,0.33,0.67):
+		Incl   42, Excl   42
+	Test point 117 (0.10,0.43,0.77):
+		Incl   42, Excl   42
+	Node 118 (0.50,0.33,0.67):
+		Incl   43, Excl   43
+	Test point 118 (0.60,0.43,0.77):
+		Incl   43, Excl   43
+	Node 119 (1.00,0.33,0.67):
+		Incl   44, Excl   44
+	Test point 119 (1.10,0.43,0.77):
+		Incl   44, Excl   44
+	Node 120 (1.50,0.33,0.67):
+		Incl   45, Excl   45
+	Test point 120 (1.60,0.43,0.77):
+		Incl   45, Excl   45
+	Node 121 (2.00,0.33,0.67):
+		Incl   46, Excl   46
+	Test point 121 (2.10,0.43,0.77):
+		Incl   46, Excl   46
+	Node 122 (2.50,0.33,0.67):
+		Incl   47, Excl   47
+	Test point 122 (2.60,0.43,0.77):
+		Incl   47, Excl   47
+	Node 123 (3.00,0.33,0.67):
+		Incl   47, Excl   68
+	Test point 123 (3.10,0.43,0.77):
+		Incl   68, Excl   68
+	Node 124 (3.50,0.33,0.67):
+		Incl   68, Excl   72
+	Test point 124 (3.60,0.43,0.77):
+		Incl   72, Excl   72
+	Node 125 (4.00,0.33,0.67):
+		Incl   72, Excl   72
+	Test point 125 (4.10,0.43,0.77):
+		Incl   72, Excl   72
+	Node 126 (4.50,0.33,0.67):
+		Incl   72, Excl   72
+	Test point 126 (4.60,0.43,0.77):
+		Incl   72, Excl   72
+	Node 127 (5.00,0.33,0.67):
+		Incl   72, Excl   72
+	Test point 127 (5.10,0.43,0.77):
+		Incl   72, Excl   72
+	Node 128 (5.50,0.33,0.67):
+		Incl   69, Excl   69
+	Test point 128 (5.60,0.43,0.77):
+		Incl   69, Excl   69
+	Node 129 (6.00,0.33,0.67):
+		Incl   69, Excl   69
+	Test point 129 (6.10,0.43,0.77):
+		Incl   72, Excl   72
+	Node 130 (0.00,0.67,0.67):
+		Incl   48, Excl   48
+	Test point 130 (0.10,0.77,0.77):
+		Incl   48, Excl   48
+	Node 131 (0.50,0.67,0.67):
+		Incl   49, Excl   49
+	Test point 131 (0.60,0.77,0.77):
+		Incl   49, Excl   49
+	Node 132 (1.00,0.67,0.67):
+		Incl   50, Excl   50
+	Test point 132 (1.10,0.77,0.77):
+		Incl   50, Excl   50
+	Node 133 (1.50,0.67,0.67):
+		Incl   51, Excl   51
+	Test point 133 (1.60,0.77,0.77):
+		Incl   51, Excl   51
+	Node 134 (2.00,0.67,0.67):
+		Incl   52, Excl   52
+	Test point 134 (2.10,0.77,0.77):
+		Incl   52, Excl   52
+	Node 135 (2.50,0.67,0.67):
+		Incl   53, Excl   53
+	Test point 135 (2.60,0.77,0.77):
+		Incl   53, Excl   53
+	Node 136 (3.00,0.67,0.67):
+		Incl   53, Excl   70
+	Test point 136 (3.10,0.77,0.77):
+		Incl   70, Excl   70
+	Node 137 (3.50,0.67,0.67):
+		Incl   70, Excl   72
+	Test point 137 (3.60,0.77,0.77):
+		Incl   72, Excl   72
+	Node 138 (4.00,0.67,0.67):
+		Incl   72, Excl   72
+	Test point 138 (4.10,0.77,0.77):
+		Incl   72, Excl   72
+	Node 139 (4.50,0.67,0.67):
+		Incl   72, Excl   72
+	Test point 139 (4.60,0.77,0.77):
+		Incl   72, Excl   72
+	Node 140 (5.00,0.67,0.67):
+		Incl   72, Excl   72
+	Test point 140 (5.10,0.77,0.77):
+		Incl   72, Excl   72
+	Node 141 (5.50,0.67,0.67):
+		Incl   71, Excl   71
+	Test point 141 (5.60,0.77,0.77):
+		Incl   71, Excl   71
+	Node 142 (6.00,0.67,0.67):
+		Incl   71, Excl   71
+	Test point 142 (6.10,0.77,0.77):
+		Incl   72, Excl   72
+	Node 143 (0.00,1.00,0.67):
+		Incl   48, Excl   48
+	Test point 143 (0.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 144 (0.50,1.00,0.67):
+		Incl   49, Excl   49
+	Test point 144 (0.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 145 (1.00,1.00,0.67):
+		Incl   50, Excl   50
+	Test point 145 (1.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 146 (1.50,1.00,0.67):
+		Incl   51, Excl   51
+	Test point 146 (1.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 147 (2.00,1.00,0.67):
+		Incl   52, Excl   52
+	Test point 147 (2.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 148 (2.50,1.00,0.67):
+		Incl   53, Excl   53
+	Test point 148 (2.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 149 (3.00,1.00,0.67):
+		Incl   53, Excl   70
+	Test point 149 (3.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 150 (3.50,1.00,0.67):
+		Incl   70, Excl   72
+	Test point 150 (3.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 151 (4.00,1.00,0.67):
+		Incl   72, Excl   72
+	Test point 151 (4.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 152 (4.50,1.00,0.67):
+		Incl   72, Excl   72
+	Test point 152 (4.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 153 (5.00,1.00,0.67):
+		Incl   72, Excl   72
+	Test point 153 (5.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 154 (5.50,1.00,0.67):
+		Incl   71, Excl   71
+	Test point 154 (5.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 155 (6.00,1.00,0.67):
+		Incl   71, Excl   71
+	Test point 155 (6.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 156 (0.00,0.00,1.00):
+		Incl   36, Excl   36
+	Test point 156 (0.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 157 (0.50,0.00,1.00):
+		Incl   37, Excl   37
+	Test point 157 (0.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 158 (1.00,0.00,1.00):
+		Incl   38, Excl   38
+	Test point 158 (1.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 159 (1.50,0.00,1.00):
+		Incl   39, Excl   39
+	Test point 159 (1.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 160 (2.00,0.00,1.00):
+		Incl   40, Excl   40
+	Test point 160 (2.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 161 (2.50,0.00,1.00):
+		Incl   41, Excl   41
+	Test point 161 (2.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 162 (3.00,0.00,1.00):
+		Incl   41, Excl   66
+	Test point 162 (3.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 163 (3.50,0.00,1.00):
+		Incl   66, Excl   72
+	Test point 163 (3.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 164 (4.00,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 164 (4.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 165 (4.50,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 165 (4.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 166 (5.00,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 166 (5.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 167 (5.50,0.00,1.00):
+		Incl   67, Excl   67
+	Test point 167 (5.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 168 (6.00,0.00,1.00):
+		Incl   67, Excl   67
+	Test point 168 (6.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 169 (0.00,0.33,1.00):
+		Incl   42, Excl   42
+	Test point 169 (0.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 170 (0.50,0.33,1.00):
+		Incl   43, Excl   43
+	Test point 170 (0.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 171 (1.00,0.33,1.00):
+		Incl   44, Excl   44
+	Test point 171 (1.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 172 (1.50,0.33,1.00):
+		Incl   45, Excl   45
+	Test point 172 (1.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 173 (2.00,0.33,1.00):
+		Incl   46, Excl   46
+	Test point 173 (2.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 174 (2.50,0.33,1.00):
+		Incl   47, Excl   47
+	Test point 174 (2.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 175 (3.00,0.33,1.00):
+		Incl   47, Excl   68
+	Test point 175 (3.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 176 (3.50,0.33,1.00):
+		Incl   68, Excl   72
+	Test point 176 (3.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 177 (4.00,0.33,1.00):
+		Incl   72, Excl   72
+	Test point 177 (4.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 178 (4.50,0.33,1.00):
+		Incl   72, Excl   72
+	Test point 178 (4.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 179 (5.00,0.33,1.00):
+		Incl   72, Excl   72
+	Test point 179 (5.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 180 (5.50,0.33,1.00):
+		Incl   69, Excl   69
+	Test point 180 (5.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 181 (6.00,0.33,1.00):
+		Incl   69, Excl   69
+	Test point 181 (6.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 182 (0.00,0.67,1.00):
+		Incl   48, Excl   48
+	Test point 182 (0.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 183 (0.50,0.67,1.00):
+		Incl   49, Excl   49
+	Test point 183 (0.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 184 (1.00,0.67,1.00):
+		Incl   50, Excl   50
+	Test point 184 (1.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 185 (1.50,0.67,1.00):
+		Incl   51, Excl   51
+	Test point 185 (1.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 186 (2.00,0.67,1.00):
+		Incl   52, Excl   52
+	Test point 186 (2.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 187 (2.50,0.67,1.00):
+		Incl   53, Excl   53
+	Test point 187 (2.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 188 (3.00,0.67,1.00):
+		Incl   53, Excl   70
+	Test point 188 (3.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 189 (3.50,0.67,1.00):
+		Incl   70, Excl   72
+	Test point 189 (3.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 190 (4.00,0.67,1.00):
+		Incl   72, Excl   72
+	Test point 190 (4.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 191 (4.50,0.67,1.00):
+		Incl   72, Excl   72
+	Test point 191 (4.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 192 (5.00,0.67,1.00):
+		Incl   72, Excl   72
+	Test point 192 (5.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 193 (5.50,0.67,1.00):
+		Incl   71, Excl   71
+	Test point 193 (5.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 194 (6.00,0.67,1.00):
+		Incl   71, Excl   71
+	Test point 194 (6.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 195 (0.00,1.00,1.00):
+		Incl   48, Excl   48
+	Test point 195 (0.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 196 (0.50,1.00,1.00):
+		Incl   49, Excl   49
+	Test point 196 (0.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 197 (1.00,1.00,1.00):
+		Incl   50, Excl   50
+	Test point 197 (1.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 198 (1.50,1.00,1.00):
+		Incl   51, Excl   51
+	Test point 198 (1.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 199 (2.00,1.00,1.00):
+		Incl   52, Excl   52
+	Test point 199 (2.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 200 (2.50,1.00,1.00):
+		Incl   53, Excl   53
+	Test point 200 (2.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 201 (3.00,1.00,1.00):
+		Incl   53, Excl   70
+	Test point 201 (3.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 202 (3.50,1.00,1.00):
+		Incl   70, Excl   72
+	Test point 202 (3.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 203 (4.00,1.00,1.00):
+		Incl   72, Excl   72
+	Test point 203 (4.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 204 (4.50,1.00,1.00):
+		Incl   72, Excl   72
+	Test point 204 (4.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 205 (5.00,1.00,1.00):
+		Incl   72, Excl   72
+	Test point 205 (5.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 206 (5.50,1.00,1.00):
+		Incl   71, Excl   71
+	Test point 206 (5.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 207 (6.00,1.00,1.00):
+		Incl   71, Excl   71
+	Test point 207 (6.10,1.10,1.10):
+		Incl   72, Excl   72
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,835 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00,0.00):
+		Incl    0, Excl    0
+	Test point 0 (0.10,0.10,0.10):
+		Incl    0, Excl    0
+	Node 1 (0.50,0.00,0.00):
+		Incl    1, Excl    1
+	Test point 1 (0.60,0.10,0.10):
+		Incl    1, Excl    1
+	Node 2 (1.00,0.00,0.00):
+		Incl    2, Excl    2
+	Test point 2 (1.10,0.10,0.10):
+		Incl    2, Excl    2
+	Node 3 (1.50,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 3 (1.60,0.10,0.10):
+		Incl    3, Excl    3
+	Node 4 (2.00,0.00,0.00):
+		Incl    3, Excl   36
+	Test point 4 (2.10,0.10,0.10):
+		Incl   36, Excl   36
+	Node 5 (2.50,0.00,0.00):
+		Incl   36, Excl   54
+	Test point 5 (2.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 6 (3.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 6 (3.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 7 (3.50,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 7 (3.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 8 (4.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 8 (4.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 9 (4.50,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 9 (4.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 10 (5.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 10 (5.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 11 (5.50,0.00,0.00):
+		Incl   37, Excl   37
+	Test point 11 (5.60,0.10,0.10):
+		Incl   37, Excl   37
+	Node 12 (6.00,0.00,0.00):
+		Incl   37, Excl   37
+	Test point 12 (6.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 13 (0.00,0.33,0.00):
+		Incl    4, Excl    4
+	Test point 13 (0.10,0.43,0.10):
+		Incl    4, Excl    4
+	Node 14 (0.50,0.33,0.00):
+		Incl    5, Excl    5
+	Test point 14 (0.60,0.43,0.10):
+		Incl    5, Excl    5
+	Node 15 (1.00,0.33,0.00):
+		Incl    6, Excl    6
+	Test point 15 (1.10,0.43,0.10):
+		Incl    6, Excl    6
+	Node 16 (1.50,0.33,0.00):
+		Incl    7, Excl    7
+	Test point 16 (1.60,0.43,0.10):
+		Incl    7, Excl    7
+	Node 17 (2.00,0.33,0.00):
+		Incl    7, Excl   38
+	Test point 17 (2.10,0.43,0.10):
+		Incl   38, Excl   38
+	Node 18 (2.50,0.33,0.00):
+		Incl   38, Excl   54
+	Test point 18 (2.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 19 (3.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 19 (3.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 20 (3.50,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 20 (3.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 21 (4.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 21 (4.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 22 (4.50,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 22 (4.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 23 (5.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 23 (5.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 24 (5.50,0.33,0.00):
+		Incl   39, Excl   39
+	Test point 24 (5.60,0.43,0.10):
+		Incl   39, Excl   39
+	Node 25 (6.00,0.33,0.00):
+		Incl   39, Excl   39
+	Test point 25 (6.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 26 (0.00,0.67,0.00):
+		Incl    8, Excl    8
+	Test point 26 (0.10,0.77,0.10):
+		Incl    8, Excl    8
+	Node 27 (0.50,0.67,0.00):
+		Incl    9, Excl    9
+	Test point 27 (0.60,0.77,0.10):
+		Incl    9, Excl    9
+	Node 28 (1.00,0.67,0.00):
+		Incl   10, Excl   10
+	Test point 28 (1.10,0.77,0.10):
+		Incl   10, Excl   10
+	Node 29 (1.50,0.67,0.00):
+		Incl   11, Excl   11
+	Test point 29 (1.60,0.77,0.10):
+		Incl   11, Excl   11
+	Node 30 (2.00,0.67,0.00):
+		Incl   11, Excl   40
+	Test point 30 (2.10,0.77,0.10):
+		Incl   40, Excl   40
+	Node 31 (2.50,0.67,0.00):
+		Incl   40, Excl   54
+	Test point 31 (2.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 32 (3.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 32 (3.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 33 (3.50,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 33 (3.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 34 (4.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 34 (4.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 35 (4.50,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 35 (4.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 36 (5.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 36 (5.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 37 (5.50,0.67,0.00):
+		Incl   41, Excl   41
+	Test point 37 (5.60,0.77,0.10):
+		Incl   41, Excl   41
+	Node 38 (6.00,0.67,0.00):
+		Incl   41, Excl   41
+	Test point 38 (6.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 39 (0.00,1.00,0.00):
+		Incl    8, Excl    8
+	Test point 39 (0.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 40 (0.50,1.00,0.00):
+		Incl    9, Excl    9
+	Test point 40 (0.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 41 (1.00,1.00,0.00):
+		Incl   10, Excl   10
+	Test point 41 (1.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 42 (1.50,1.00,0.00):
+		Incl   11, Excl   11
+	Test point 42 (1.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 43 (2.00,1.00,0.00):
+		Incl   11, Excl   40
+	Test point 43 (2.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 44 (2.50,1.00,0.00):
+		Incl   40, Excl   54
+	Test point 44 (2.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 45 (3.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 45 (3.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 46 (3.50,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 46 (3.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 47 (4.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 47 (4.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 48 (4.50,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 48 (4.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 49 (5.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 49 (5.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 50 (5.50,1.00,0.00):
+		Incl   41, Excl   41
+	Test point 50 (5.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 51 (6.00,1.00,0.00):
+		Incl   41, Excl   41
+	Test point 51 (6.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 52 (0.00,0.00,0.33):
+		Incl   12, Excl   12
+	Test point 52 (0.10,0.10,0.43):
+		Incl   12, Excl   12
+	Node 53 (0.50,0.00,0.33):
+		Incl   13, Excl   13
+	Test point 53 (0.60,0.10,0.43):
+		Incl   13, Excl   13
+	Node 54 (1.00,0.00,0.33):
+		Incl   14, Excl   14
+	Test point 54 (1.10,0.10,0.43):
+		Incl   14, Excl   14
+	Node 55 (1.50,0.00,0.33):
+		Incl   15, Excl   15
+	Test point 55 (1.60,0.10,0.43):
+		Incl   15, Excl   15
+	Node 56 (2.00,0.00,0.33):
+		Incl   15, Excl   42
+	Test point 56 (2.10,0.10,0.43):
+		Incl   42, Excl   42
+	Node 57 (2.50,0.00,0.33):
+		Incl   42, Excl   54
+	Test point 57 (2.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 58 (3.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 58 (3.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 59 (3.50,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 59 (3.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 60 (4.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 60 (4.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 61 (4.50,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 61 (4.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 62 (5.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 62 (5.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 63 (5.50,0.00,0.33):
+		Incl   43, Excl   43
+	Test point 63 (5.60,0.10,0.43):
+		Incl   43, Excl   43
+	Node 64 (6.00,0.00,0.33):
+		Incl   43, Excl   43
+	Test point 64 (6.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 65 (0.00,0.33,0.33):
+		Incl   16, Excl   16
+	Test point 65 (0.10,0.43,0.43):
+		Incl   16, Excl   16
+	Node 66 (0.50,0.33,0.33):
+		Incl   17, Excl   17
+	Test point 66 (0.60,0.43,0.43):
+		Incl   17, Excl   17
+	Node 67 (1.00,0.33,0.33):
+		Incl   18, Excl   18
+	Test point 67 (1.10,0.43,0.43):
+		Incl   18, Excl   18
+	Node 68 (1.50,0.33,0.33):
+		Incl   19, Excl   19
+	Test point 68 (1.60,0.43,0.43):
+		Incl   19, Excl   19
+	Node 69 (2.00,0.33,0.33):
+		Incl   19, Excl   44
+	Test point 69 (2.10,0.43,0.43):
+		Incl   44, Excl   44
+	Node 70 (2.50,0.33,0.33):
+		Incl   44, Excl   54
+	Test point 70 (2.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 71 (3.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 71 (3.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 72 (3.50,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 72 (3.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 73 (4.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 73 (4.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 74 (4.50,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 74 (4.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 75 (5.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 75 (5.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 76 (5.50,0.33,0.33):
+		Incl   45, Excl   45
+	Test point 76 (5.60,0.43,0.43):
+		Incl   45, Excl   45
+	Node 77 (6.00,0.33,0.33):
+		Incl   45, Excl   45
+	Test point 77 (6.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 78 (0.00,0.67,0.33):
+		Incl   20, Excl   20
+	Test point 78 (0.10,0.77,0.43):
+		Incl   20, Excl   20
+	Node 79 (0.50,0.67,0.33):
+		Incl   21, Excl   21
+	Test point 79 (0.60,0.77,0.43):
+		Incl   21, Excl   21
+	Node 80 (1.00,0.67,0.33):
+		Incl   22, Excl   22
+	Test point 80 (1.10,0.77,0.43):
+		Incl   22, Excl   22
+	Node 81 (1.50,0.67,0.33):
+		Incl   23, Excl   23
+	Test point 81 (1.60,0.77,0.43):
+		Incl   23, Excl   23
+	Node 82 (2.00,0.67,0.33):
+		Incl   23, Excl   46
+	Test point 82 (2.10,0.77,0.43):
+		Incl   46, Excl   46
+	Node 83 (2.50,0.67,0.33):
+		Incl   46, Excl   54
+	Test point 83 (2.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 84 (3.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 84 (3.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 85 (3.50,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 85 (3.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 86 (4.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 86 (4.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 87 (4.50,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 87 (4.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 88 (5.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 88 (5.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 89 (5.50,0.67,0.33):
+		Incl   47, Excl   47
+	Test point 89 (5.60,0.77,0.43):
+		Incl   47, Excl   47
+	Node 90 (6.00,0.67,0.33):
+		Incl   47, Excl   47
+	Test point 90 (6.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 91 (0.00,1.00,0.33):
+		Incl   20, Excl   20
+	Test point 91 (0.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 92 (0.50,1.00,0.33):
+		Incl   21, Excl   21
+	Test point 92 (0.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 93 (1.00,1.00,0.33):
+		Incl   22, Excl   22
+	Test point 93 (1.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 94 (1.50,1.00,0.33):
+		Incl   23, Excl   23
+	Test point 94 (1.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 95 (2.00,1.00,0.33):
+		Incl   23, Excl   46
+	Test point 95 (2.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 96 (2.50,1.00,0.33):
+		Incl   46, Excl   54
+	Test point 96 (2.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 97 (3.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 97 (3.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 98 (3.50,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 98 (3.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 99 (4.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 99 (4.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 100 (4.50,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 100 (4.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 101 (5.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 101 (5.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 102 (5.50,1.00,0.33):
+		Incl   47, Excl   47
+	Test point 102 (5.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 103 (6.00,1.00,0.33):
+		Incl   47, Excl   47
+	Test point 103 (6.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 104 (0.00,0.00,0.67):
+		Incl   24, Excl   24
+	Test point 104 (0.10,0.10,0.77):
+		Incl   24, Excl   24
+	Node 105 (0.50,0.00,0.67):
+		Incl   25, Excl   25
+	Test point 105 (0.60,0.10,0.77):
+		Incl   25, Excl   25
+	Node 106 (1.00,0.00,0.67):
+		Incl   26, Excl   26
+	Test point 106 (1.10,0.10,0.77):
+		Incl   26, Excl   26
+	Node 107 (1.50,0.00,0.67):
+		Incl   27, Excl   27
+	Test point 107 (1.60,0.10,0.77):
+		Incl   27, Excl   27
+	Node 108 (2.00,0.00,0.67):
+		Incl   27, Excl   48
+	Test point 108 (2.10,0.10,0.77):
+		Incl   48, Excl   48
+	Node 109 (2.50,0.00,0.67):
+		Incl   48, Excl   54
+	Test point 109 (2.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 110 (3.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 110 (3.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 111 (3.50,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 111 (3.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 112 (4.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 112 (4.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 113 (4.50,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 113 (4.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 114 (5.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 114 (5.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 115 (5.50,0.00,0.67):
+		Incl   49, Excl   49
+	Test point 115 (5.60,0.10,0.77):
+		Incl   49, Excl   49
+	Node 116 (6.00,0.00,0.67):
+		Incl   49, Excl   49
+	Test point 116 (6.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 117 (0.00,0.33,0.67):
+		Incl   28, Excl   28
+	Test point 117 (0.10,0.43,0.77):
+		Incl   28, Excl   28
+	Node 118 (0.50,0.33,0.67):
+		Incl   29, Excl   29
+	Test point 118 (0.60,0.43,0.77):
+		Incl   29, Excl   29
+	Node 119 (1.00,0.33,0.67):
+		Incl   30, Excl   30
+	Test point 119 (1.10,0.43,0.77):
+		Incl   30, Excl   30
+	Node 120 (1.50,0.33,0.67):
+		Incl   31, Excl   31
+	Test point 120 (1.60,0.43,0.77):
+		Incl   31, Excl   31
+	Node 121 (2.00,0.33,0.67):
+		Incl   31, Excl   50
+	Test point 121 (2.10,0.43,0.77):
+		Incl   50, Excl   50
+	Node 122 (2.50,0.33,0.67):
+		Incl   50, Excl   54
+	Test point 122 (2.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 123 (3.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 123 (3.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 124 (3.50,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 124 (3.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 125 (4.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 125 (4.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 126 (4.50,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 126 (4.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 127 (5.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 127 (5.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 128 (5.50,0.33,0.67):
+		Incl   51, Excl   51
+	Test point 128 (5.60,0.43,0.77):
+		Incl   51, Excl   51
+	Node 129 (6.00,0.33,0.67):
+		Incl   51, Excl   51
+	Test point 129 (6.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 130 (0.00,0.67,0.67):
+		Incl   32, Excl   32
+	Test point 130 (0.10,0.77,0.77):
+		Incl   32, Excl   32
+	Node 131 (0.50,0.67,0.67):
+		Incl   33, Excl   33
+	Test point 131 (0.60,0.77,0.77):
+		Incl   33, Excl   33
+	Node 132 (1.00,0.67,0.67):
+		Incl   34, Excl   34
+	Test point 132 (1.10,0.77,0.77):
+		Incl   34, Excl   34
+	Node 133 (1.50,0.67,0.67):
+		Incl   35, Excl   35
+	Test point 133 (1.60,0.77,0.77):
+		Incl   35, Excl   35
+	Node 134 (2.00,0.67,0.67):
+		Incl   35, Excl   52
+	Test point 134 (2.10,0.77,0.77):
+		Incl   52, Excl   52
+	Node 135 (2.50,0.67,0.67):
+		Incl   52, Excl   54
+	Test point 135 (2.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 136 (3.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 136 (3.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 137 (3.50,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 137 (3.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 138 (4.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 138 (4.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 139 (4.50,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 139 (4.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 140 (5.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 140 (5.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 141 (5.50,0.67,0.67):
+		Incl   53, Excl   53
+	Test point 141 (5.60,0.77,0.77):
+		Incl   53, Excl   53
+	Node 142 (6.00,0.67,0.67):
+		Incl   53, Excl   53
+	Test point 142 (6.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 143 (0.00,1.00,0.67):
+		Incl   32, Excl   32
+	Test point 143 (0.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 144 (0.50,1.00,0.67):
+		Incl   33, Excl   33
+	Test point 144 (0.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 145 (1.00,1.00,0.67):
+		Incl   34, Excl   34
+	Test point 145 (1.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 146 (1.50,1.00,0.67):
+		Incl   35, Excl   35
+	Test point 146 (1.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 147 (2.00,1.00,0.67):
+		Incl   35, Excl   52
+	Test point 147 (2.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 148 (2.50,1.00,0.67):
+		Incl   52, Excl   54
+	Test point 148 (2.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 149 (3.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 149 (3.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 150 (3.50,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 150 (3.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 151 (4.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 151 (4.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 152 (4.50,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 152 (4.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 153 (5.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 153 (5.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 154 (5.50,1.00,0.67):
+		Incl   53, Excl   53
+	Test point 154 (5.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 155 (6.00,1.00,0.67):
+		Incl   53, Excl   53
+	Test point 155 (6.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 156 (0.00,0.00,1.00):
+		Incl   24, Excl   24
+	Test point 156 (0.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 157 (0.50,0.00,1.00):
+		Incl   25, Excl   25
+	Test point 157 (0.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 158 (1.00,0.00,1.00):
+		Incl   26, Excl   26
+	Test point 158 (1.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 159 (1.50,0.00,1.00):
+		Incl   27, Excl   27
+	Test point 159 (1.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 160 (2.00,0.00,1.00):
+		Incl   27, Excl   48
+	Test point 160 (2.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 161 (2.50,0.00,1.00):
+		Incl   48, Excl   54
+	Test point 161 (2.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 162 (3.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 162 (3.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 163 (3.50,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 163 (3.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 164 (4.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 164 (4.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 165 (4.50,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 165 (4.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 166 (5.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 166 (5.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 167 (5.50,0.00,1.00):
+		Incl   49, Excl   49
+	Test point 167 (5.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 168 (6.00,0.00,1.00):
+		Incl   49, Excl   49
+	Test point 168 (6.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 169 (0.00,0.33,1.00):
+		Incl   28, Excl   28
+	Test point 169 (0.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 170 (0.50,0.33,1.00):
+		Incl   29, Excl   29
+	Test point 170 (0.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 171 (1.00,0.33,1.00):
+		Incl   30, Excl   30
+	Test point 171 (1.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 172 (1.50,0.33,1.00):
+		Incl   31, Excl   31
+	Test point 172 (1.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 173 (2.00,0.33,1.00):
+		Incl   31, Excl   50
+	Test point 173 (2.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 174 (2.50,0.33,1.00):
+		Incl   50, Excl   54
+	Test point 174 (2.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 175 (3.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 175 (3.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 176 (3.50,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 176 (3.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 177 (4.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 177 (4.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 178 (4.50,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 178 (4.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 179 (5.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 179 (5.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 180 (5.50,0.33,1.00):
+		Incl   51, Excl   51
+	Test point 180 (5.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 181 (6.00,0.33,1.00):
+		Incl   51, Excl   51
+	Test point 181 (6.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 182 (0.00,0.67,1.00):
+		Incl   32, Excl   32
+	Test point 182 (0.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 183 (0.50,0.67,1.00):
+		Incl   33, Excl   33
+	Test point 183 (0.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 184 (1.00,0.67,1.00):
+		Incl   34, Excl   34
+	Test point 184 (1.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 185 (1.50,0.67,1.00):
+		Incl   35, Excl   35
+	Test point 185 (1.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 186 (2.00,0.67,1.00):
+		Incl   35, Excl   52
+	Test point 186 (2.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 187 (2.50,0.67,1.00):
+		Incl   52, Excl   54
+	Test point 187 (2.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 188 (3.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 188 (3.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 189 (3.50,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 189 (3.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 190 (4.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 190 (4.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 191 (4.50,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 191 (4.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 192 (5.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 192 (5.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 193 (5.50,0.67,1.00):
+		Incl   53, Excl   53
+	Test point 193 (5.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 194 (6.00,0.67,1.00):
+		Incl   53, Excl   53
+	Test point 194 (6.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 195 (0.00,1.00,1.00):
+		Incl   32, Excl   32
+	Test point 195 (0.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 196 (0.50,1.00,1.00):
+		Incl   33, Excl   33
+	Test point 196 (0.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 197 (1.00,1.00,1.00):
+		Incl   34, Excl   34
+	Test point 197 (1.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 198 (1.50,1.00,1.00):
+		Incl   35, Excl   35
+	Test point 198 (1.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 199 (2.00,1.00,1.00):
+		Incl   35, Excl   52
+	Test point 199 (2.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 200 (2.50,1.00,1.00):
+		Incl   52, Excl   54
+	Test point 200 (2.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 201 (3.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 201 (3.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 202 (3.50,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 202 (3.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 203 (4.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 203 (4.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 204 (4.50,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 204 (4.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 205 (5.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 205 (5.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 206 (5.50,1.00,1.00):
+		Incl   53, Excl   53
+	Test point 206 (5.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 207 (6.00,1.00,1.00):
+		Incl   53, Excl   53
+	Test point 207 (6.10,1.10,1.10):
+		Incl   54, Excl   54
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,835 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 0 (0.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 1 (0.50,0.00,0.00):
+		Incl   54, Excl   72
+	Test point 1 (0.60,0.10,0.10):
+		Incl   72, Excl   72
+	Node 2 (1.00,0.00,0.00):
+		Incl   72, Excl   72
+	Test point 2 (1.10,0.10,0.10):
+		Incl   72, Excl   72
+	Node 3 (1.50,0.00,0.00):
+		Incl   72, Excl   72
+	Test point 3 (1.60,0.10,0.10):
+		Incl   72, Excl   72
+	Node 4 (2.00,0.00,0.00):
+		Incl   72, Excl   72
+	Test point 4 (2.10,0.10,0.10):
+		Incl   72, Excl   72
+	Node 5 (2.50,0.00,0.00):
+		Incl   55, Excl   55
+	Test point 5 (2.60,0.10,0.10):
+		Incl   55, Excl   55
+	Node 6 (3.00,0.00,0.00):
+		Incl    0, Excl    0
+	Test point 6 (3.10,0.10,0.10):
+		Incl    0, Excl    0
+	Node 7 (3.50,0.00,0.00):
+		Incl    1, Excl    1
+	Test point 7 (3.60,0.10,0.10):
+		Incl    1, Excl    1
+	Node 8 (4.00,0.00,0.00):
+		Incl    2, Excl    2
+	Test point 8 (4.10,0.10,0.10):
+		Incl    2, Excl    2
+	Node 9 (4.50,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 9 (4.60,0.10,0.10):
+		Incl    3, Excl    3
+	Node 10 (5.00,0.00,0.00):
+		Incl    4, Excl    4
+	Test point 10 (5.10,0.10,0.10):
+		Incl    4, Excl    4
+	Node 11 (5.50,0.00,0.00):
+		Incl    5, Excl    5
+	Test point 11 (5.60,0.10,0.10):
+		Incl    5, Excl    5
+	Node 12 (6.00,0.00,0.00):
+		Incl    5, Excl    5
+	Test point 12 (6.10,0.10,0.10):
+		Incl   72, Excl   72
+	Node 13 (0.00,0.33,0.00):
+		Incl   56, Excl   56
+	Test point 13 (0.10,0.43,0.10):
+		Incl   56, Excl   56
+	Node 14 (0.50,0.33,0.00):
+		Incl   56, Excl   72
+	Test point 14 (0.60,0.43,0.10):
+		Incl   72, Excl   72
+	Node 15 (1.00,0.33,0.00):
+		Incl   72, Excl   72
+	Test point 15 (1.10,0.43,0.10):
+		Incl   72, Excl   72
+	Node 16 (1.50,0.33,0.00):
+		Incl   72, Excl   72
+	Test point 16 (1.60,0.43,0.10):
+		Incl   72, Excl   72
+	Node 17 (2.00,0.33,0.00):
+		Incl   72, Excl   72
+	Test point 17 (2.10,0.43,0.10):
+		Incl   72, Excl   72
+	Node 18 (2.50,0.33,0.00):
+		Incl   57, Excl   57
+	Test point 18 (2.60,0.43,0.10):
+		Incl   57, Excl   57
+	Node 19 (3.00,0.33,0.00):
+		Incl    6, Excl    6
+	Test point 19 (3.10,0.43,0.10):
+		Incl    6, Excl    6
+	Node 20 (3.50,0.33,0.00):
+		Incl    7, Excl    7
+	Test point 20 (3.60,0.43,0.10):
+		Incl    7, Excl    7
+	Node 21 (4.00,0.33,0.00):
+		Incl    8, Excl    8
+	Test point 21 (4.10,0.43,0.10):
+		Incl    8, Excl    8
+	Node 22 (4.50,0.33,0.00):
+		Incl    9, Excl    9
+	Test point 22 (4.60,0.43,0.10):
+		Incl    9, Excl    9
+	Node 23 (5.00,0.33,0.00):
+		Incl   10, Excl   10
+	Test point 23 (5.10,0.43,0.10):
+		Incl   10, Excl   10
+	Node 24 (5.50,0.33,0.00):
+		Incl   11, Excl   11
+	Test point 24 (5.60,0.43,0.10):
+		Incl   11, Excl   11
+	Node 25 (6.00,0.33,0.00):
+		Incl   11, Excl   11
+	Test point 25 (6.10,0.43,0.10):
+		Incl   72, Excl   72
+	Node 26 (0.00,0.67,0.00):
+		Incl   58, Excl   58
+	Test point 26 (0.10,0.77,0.10):
+		Incl   58, Excl   58
+	Node 27 (0.50,0.67,0.00):
+		Incl   58, Excl   72
+	Test point 27 (0.60,0.77,0.10):
+		Incl   72, Excl   72
+	Node 28 (1.00,0.67,0.00):
+		Incl   72, Excl   72
+	Test point 28 (1.10,0.77,0.10):
+		Incl   72, Excl   72
+	Node 29 (1.50,0.67,0.00):
+		Incl   72, Excl   72
+	Test point 29 (1.60,0.77,0.10):
+		Incl   72, Excl   72
+	Node 30 (2.00,0.67,0.00):
+		Incl   72, Excl   72
+	Test point 30 (2.10,0.77,0.10):
+		Incl   72, Excl   72
+	Node 31 (2.50,0.67,0.00):
+		Incl   59, Excl   59
+	Test point 31 (2.60,0.77,0.10):
+		Incl   59, Excl   59
+	Node 32 (3.00,0.67,0.00):
+		Incl   12, Excl   12
+	Test point 32 (3.10,0.77,0.10):
+		Incl   12, Excl   12
+	Node 33 (3.50,0.67,0.00):
+		Incl   13, Excl   13
+	Test point 33 (3.60,0.77,0.10):
+		Incl   13, Excl   13
+	Node 34 (4.00,0.67,0.00):
+		Incl   14, Excl   14
+	Test point 34 (4.10,0.77,0.10):
+		Incl   14, Excl   14
+	Node 35 (4.50,0.67,0.00):
+		Incl   15, Excl   15
+	Test point 35 (4.60,0.77,0.10):
+		Incl   15, Excl   15
+	Node 36 (5.00,0.67,0.00):
+		Incl   16, Excl   16
+	Test point 36 (5.10,0.77,0.10):
+		Incl   16, Excl   16
+	Node 37 (5.50,0.67,0.00):
+		Incl   17, Excl   17
+	Test point 37 (5.60,0.77,0.10):
+		Incl   17, Excl   17
+	Node 38 (6.00,0.67,0.00):
+		Incl   17, Excl   17
+	Test point 38 (6.10,0.77,0.10):
+		Incl   72, Excl   72
+	Node 39 (0.00,1.00,0.00):
+		Incl   58, Excl   58
+	Test point 39 (0.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 40 (0.50,1.00,0.00):
+		Incl   58, Excl   72
+	Test point 40 (0.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 41 (1.00,1.00,0.00):
+		Incl   72, Excl   72
+	Test point 41 (1.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 42 (1.50,1.00,0.00):
+		Incl   72, Excl   72
+	Test point 42 (1.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 43 (2.00,1.00,0.00):
+		Incl   72, Excl   72
+	Test point 43 (2.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 44 (2.50,1.00,0.00):
+		Incl   59, Excl   59
+	Test point 44 (2.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 45 (3.00,1.00,0.00):
+		Incl   12, Excl   12
+	Test point 45 (3.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 46 (3.50,1.00,0.00):
+		Incl   13, Excl   13
+	Test point 46 (3.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 47 (4.00,1.00,0.00):
+		Incl   14, Excl   14
+	Test point 47 (4.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 48 (4.50,1.00,0.00):
+		Incl   15, Excl   15
+	Test point 48 (4.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 49 (5.00,1.00,0.00):
+		Incl   16, Excl   16
+	Test point 49 (5.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 50 (5.50,1.00,0.00):
+		Incl   17, Excl   17
+	Test point 50 (5.60,1.10,0.10):
+		Incl   72, Excl   72
+	Node 51 (6.00,1.00,0.00):
+		Incl   17, Excl   17
+	Test point 51 (6.10,1.10,0.10):
+		Incl   72, Excl   72
+	Node 52 (0.00,0.00,0.33):
+		Incl   60, Excl   60
+	Test point 52 (0.10,0.10,0.43):
+		Incl   60, Excl   60
+	Node 53 (0.50,0.00,0.33):
+		Incl   60, Excl   72
+	Test point 53 (0.60,0.10,0.43):
+		Incl   72, Excl   72
+	Node 54 (1.00,0.00,0.33):
+		Incl   72, Excl   72
+	Test point 54 (1.10,0.10,0.43):
+		Incl   72, Excl   72
+	Node 55 (1.50,0.00,0.33):
+		Incl   72, Excl   72
+	Test point 55 (1.60,0.10,0.43):
+		Incl   72, Excl   72
+	Node 56 (2.00,0.00,0.33):
+		Incl   72, Excl   72
+	Test point 56 (2.10,0.10,0.43):
+		Incl   72, Excl   72
+	Node 57 (2.50,0.00,0.33):
+		Incl   61, Excl   61
+	Test point 57 (2.60,0.10,0.43):
+		Incl   61, Excl   61
+	Node 58 (3.00,0.00,0.33):
+		Incl   18, Excl   18
+	Test point 58 (3.10,0.10,0.43):
+		Incl   18, Excl   18
+	Node 59 (3.50,0.00,0.33):
+		Incl   19, Excl   19
+	Test point 59 (3.60,0.10,0.43):
+		Incl   19, Excl   19
+	Node 60 (4.00,0.00,0.33):
+		Incl   20, Excl   20
+	Test point 60 (4.10,0.10,0.43):
+		Incl   20, Excl   20
+	Node 61 (4.50,0.00,0.33):
+		Incl   21, Excl   21
+	Test point 61 (4.60,0.10,0.43):
+		Incl   21, Excl   21
+	Node 62 (5.00,0.00,0.33):
+		Incl   22, Excl   22
+	Test point 62 (5.10,0.10,0.43):
+		Incl   22, Excl   22
+	Node 63 (5.50,0.00,0.33):
+		Incl   23, Excl   23
+	Test point 63 (5.60,0.10,0.43):
+		Incl   23, Excl   23
+	Node 64 (6.00,0.00,0.33):
+		Incl   23, Excl   23
+	Test point 64 (6.10,0.10,0.43):
+		Incl   72, Excl   72
+	Node 65 (0.00,0.33,0.33):
+		Incl   62, Excl   62
+	Test point 65 (0.10,0.43,0.43):
+		Incl   62, Excl   62
+	Node 66 (0.50,0.33,0.33):
+		Incl   62, Excl   72
+	Test point 66 (0.60,0.43,0.43):
+		Incl   72, Excl   72
+	Node 67 (1.00,0.33,0.33):
+		Incl   72, Excl   72
+	Test point 67 (1.10,0.43,0.43):
+		Incl   72, Excl   72
+	Node 68 (1.50,0.33,0.33):
+		Incl   72, Excl   72
+	Test point 68 (1.60,0.43,0.43):
+		Incl   72, Excl   72
+	Node 69 (2.00,0.33,0.33):
+		Incl   72, Excl   72
+	Test point 69 (2.10,0.43,0.43):
+		Incl   72, Excl   72
+	Node 70 (2.50,0.33,0.33):
+		Incl   63, Excl   63
+	Test point 70 (2.60,0.43,0.43):
+		Incl   63, Excl   63
+	Node 71 (3.00,0.33,0.33):
+		Incl   24, Excl   24
+	Test point 71 (3.10,0.43,0.43):
+		Incl   24, Excl   24
+	Node 72 (3.50,0.33,0.33):
+		Incl   25, Excl   25
+	Test point 72 (3.60,0.43,0.43):
+		Incl   25, Excl   25
+	Node 73 (4.00,0.33,0.33):
+		Incl   26, Excl   26
+	Test point 73 (4.10,0.43,0.43):
+		Incl   26, Excl   26
+	Node 74 (4.50,0.33,0.33):
+		Incl   27, Excl   27
+	Test point 74 (4.60,0.43,0.43):
+		Incl   27, Excl   27
+	Node 75 (5.00,0.33,0.33):
+		Incl   28, Excl   28
+	Test point 75 (5.10,0.43,0.43):
+		Incl   28, Excl   28
+	Node 76 (5.50,0.33,0.33):
+		Incl   29, Excl   29
+	Test point 76 (5.60,0.43,0.43):
+		Incl   29, Excl   29
+	Node 77 (6.00,0.33,0.33):
+		Incl   29, Excl   29
+	Test point 77 (6.10,0.43,0.43):
+		Incl   72, Excl   72
+	Node 78 (0.00,0.67,0.33):
+		Incl   64, Excl   64
+	Test point 78 (0.10,0.77,0.43):
+		Incl   64, Excl   64
+	Node 79 (0.50,0.67,0.33):
+		Incl   64, Excl   72
+	Test point 79 (0.60,0.77,0.43):
+		Incl   72, Excl   72
+	Node 80 (1.00,0.67,0.33):
+		Incl   72, Excl   72
+	Test point 80 (1.10,0.77,0.43):
+		Incl   72, Excl   72
+	Node 81 (1.50,0.67,0.33):
+		Incl   72, Excl   72
+	Test point 81 (1.60,0.77,0.43):
+		Incl   72, Excl   72
+	Node 82 (2.00,0.67,0.33):
+		Incl   72, Excl   72
+	Test point 82 (2.10,0.77,0.43):
+		Incl   72, Excl   72
+	Node 83 (2.50,0.67,0.33):
+		Incl   65, Excl   65
+	Test point 83 (2.60,0.77,0.43):
+		Incl   65, Excl   65
+	Node 84 (3.00,0.67,0.33):
+		Incl   30, Excl   30
+	Test point 84 (3.10,0.77,0.43):
+		Incl   30, Excl   30
+	Node 85 (3.50,0.67,0.33):
+		Incl   31, Excl   31
+	Test point 85 (3.60,0.77,0.43):
+		Incl   31, Excl   31
+	Node 86 (4.00,0.67,0.33):
+		Incl   32, Excl   32
+	Test point 86 (4.10,0.77,0.43):
+		Incl   32, Excl   32
+	Node 87 (4.50,0.67,0.33):
+		Incl   33, Excl   33
+	Test point 87 (4.60,0.77,0.43):
+		Incl   33, Excl   33
+	Node 88 (5.00,0.67,0.33):
+		Incl   34, Excl   34
+	Test point 88 (5.10,0.77,0.43):
+		Incl   34, Excl   34
+	Node 89 (5.50,0.67,0.33):
+		Incl   35, Excl   35
+	Test point 89 (5.60,0.77,0.43):
+		Incl   35, Excl   35
+	Node 90 (6.00,0.67,0.33):
+		Incl   35, Excl   35
+	Test point 90 (6.10,0.77,0.43):
+		Incl   72, Excl   72
+	Node 91 (0.00,1.00,0.33):
+		Incl   64, Excl   64
+	Test point 91 (0.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 92 (0.50,1.00,0.33):
+		Incl   64, Excl   72
+	Test point 92 (0.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 93 (1.00,1.00,0.33):
+		Incl   72, Excl   72
+	Test point 93 (1.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 94 (1.50,1.00,0.33):
+		Incl   72, Excl   72
+	Test point 94 (1.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 95 (2.00,1.00,0.33):
+		Incl   72, Excl   72
+	Test point 95 (2.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 96 (2.50,1.00,0.33):
+		Incl   65, Excl   65
+	Test point 96 (2.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 97 (3.00,1.00,0.33):
+		Incl   30, Excl   30
+	Test point 97 (3.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 98 (3.50,1.00,0.33):
+		Incl   31, Excl   31
+	Test point 98 (3.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 99 (4.00,1.00,0.33):
+		Incl   32, Excl   32
+	Test point 99 (4.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 100 (4.50,1.00,0.33):
+		Incl   33, Excl   33
+	Test point 100 (4.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 101 (5.00,1.00,0.33):
+		Incl   34, Excl   34
+	Test point 101 (5.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 102 (5.50,1.00,0.33):
+		Incl   35, Excl   35
+	Test point 102 (5.60,1.10,0.43):
+		Incl   72, Excl   72
+	Node 103 (6.00,1.00,0.33):
+		Incl   35, Excl   35
+	Test point 103 (6.10,1.10,0.43):
+		Incl   72, Excl   72
+	Node 104 (0.00,0.00,0.67):
+		Incl   66, Excl   66
+	Test point 104 (0.10,0.10,0.77):
+		Incl   66, Excl   66
+	Node 105 (0.50,0.00,0.67):
+		Incl   66, Excl   72
+	Test point 105 (0.60,0.10,0.77):
+		Incl   72, Excl   72
+	Node 106 (1.00,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 106 (1.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 107 (1.50,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 107 (1.60,0.10,0.77):
+		Incl   72, Excl   72
+	Node 108 (2.00,0.00,0.67):
+		Incl   72, Excl   72
+	Test point 108 (2.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 109 (2.50,0.00,0.67):
+		Incl   67, Excl   67
+	Test point 109 (2.60,0.10,0.77):
+		Incl   67, Excl   67
+	Node 110 (3.00,0.00,0.67):
+		Incl   36, Excl   36
+	Test point 110 (3.10,0.10,0.77):
+		Incl   36, Excl   36
+	Node 111 (3.50,0.00,0.67):
+		Incl   37, Excl   37
+	Test point 111 (3.60,0.10,0.77):
+		Incl   37, Excl   37
+	Node 112 (4.00,0.00,0.67):
+		Incl   38, Excl   38
+	Test point 112 (4.10,0.10,0.77):
+		Incl   38, Excl   38
+	Node 113 (4.50,0.00,0.67):
+		Incl   39, Excl   39
+	Test point 113 (4.60,0.10,0.77):
+		Incl   39, Excl   39
+	Node 114 (5.00,0.00,0.67):
+		Incl   40, Excl   40
+	Test point 114 (5.10,0.10,0.77):
+		Incl   40, Excl   40
+	Node 115 (5.50,0.00,0.67):
+		Incl   41, Excl   41
+	Test point 115 (5.60,0.10,0.77):
+		Incl   41, Excl   41
+	Node 116 (6.00,0.00,0.67):
+		Incl   41, Excl   41
+	Test point 116 (6.10,0.10,0.77):
+		Incl   72, Excl   72
+	Node 117 (0.00,0.33,0.67):
+		Incl   68, Excl   68
+	Test point 117 (0.10,0.43,0.77):
+		Incl   68, Excl   68
+	Node 118 (0.50,0.33,0.67):
+		Incl   68, Excl   72
+	Test point 118 (0.60,0.43,0.77):
+		Incl   72, Excl   72
+	Node 119 (1.00,0.33,0.67):
+		Incl   72, Excl   72
+	Test point 119 (1.10,0.43,0.77):
+		Incl   72, Excl   72
+	Node 120 (1.50,0.33,0.67):
+		Incl   72, Excl   72
+	Test point 120 (1.60,0.43,0.77):
+		Incl   72, Excl   72
+	Node 121 (2.00,0.33,0.67):
+		Incl   72, Excl   72
+	Test point 121 (2.10,0.43,0.77):
+		Incl   72, Excl   72
+	Node 122 (2.50,0.33,0.67):
+		Incl   69, Excl   69
+	Test point 122 (2.60,0.43,0.77):
+		Incl   69, Excl   69
+	Node 123 (3.00,0.33,0.67):
+		Incl   42, Excl   42
+	Test point 123 (3.10,0.43,0.77):
+		Incl   42, Excl   42
+	Node 124 (3.50,0.33,0.67):
+		Incl   43, Excl   43
+	Test point 124 (3.60,0.43,0.77):
+		Incl   43, Excl   43
+	Node 125 (4.00,0.33,0.67):
+		Incl   44, Excl   44
+	Test point 125 (4.10,0.43,0.77):
+		Incl   44, Excl   44
+	Node 126 (4.50,0.33,0.67):
+		Incl   45, Excl   45
+	Test point 126 (4.60,0.43,0.77):
+		Incl   45, Excl   45
+	Node 127 (5.00,0.33,0.67):
+		Incl   46, Excl   46
+	Test point 127 (5.10,0.43,0.77):
+		Incl   46, Excl   46
+	Node 128 (5.50,0.33,0.67):
+		Incl   47, Excl   47
+	Test point 128 (5.60,0.43,0.77):
+		Incl   47, Excl   47
+	Node 129 (6.00,0.33,0.67):
+		Incl   47, Excl   47
+	Test point 129 (6.10,0.43,0.77):
+		Incl   72, Excl   72
+	Node 130 (0.00,0.67,0.67):
+		Incl   70, Excl   70
+	Test point 130 (0.10,0.77,0.77):
+		Incl   70, Excl   70
+	Node 131 (0.50,0.67,0.67):
+		Incl   70, Excl   72
+	Test point 131 (0.60,0.77,0.77):
+		Incl   72, Excl   72
+	Node 132 (1.00,0.67,0.67):
+		Incl   72, Excl   72
+	Test point 132 (1.10,0.77,0.77):
+		Incl   72, Excl   72
+	Node 133 (1.50,0.67,0.67):
+		Incl   72, Excl   72
+	Test point 133 (1.60,0.77,0.77):
+		Incl   72, Excl   72
+	Node 134 (2.00,0.67,0.67):
+		Incl   72, Excl   72
+	Test point 134 (2.10,0.77,0.77):
+		Incl   72, Excl   72
+	Node 135 (2.50,0.67,0.67):
+		Incl   71, Excl   71
+	Test point 135 (2.60,0.77,0.77):
+		Incl   71, Excl   71
+	Node 136 (3.00,0.67,0.67):
+		Incl   48, Excl   48
+	Test point 136 (3.10,0.77,0.77):
+		Incl   48, Excl   48
+	Node 137 (3.50,0.67,0.67):
+		Incl   49, Excl   49
+	Test point 137 (3.60,0.77,0.77):
+		Incl   49, Excl   49
+	Node 138 (4.00,0.67,0.67):
+		Incl   50, Excl   50
+	Test point 138 (4.10,0.77,0.77):
+		Incl   50, Excl   50
+	Node 139 (4.50,0.67,0.67):
+		Incl   51, Excl   51
+	Test point 139 (4.60,0.77,0.77):
+		Incl   51, Excl   51
+	Node 140 (5.00,0.67,0.67):
+		Incl   52, Excl   52
+	Test point 140 (5.10,0.77,0.77):
+		Incl   52, Excl   52
+	Node 141 (5.50,0.67,0.67):
+		Incl   53, Excl   53
+	Test point 141 (5.60,0.77,0.77):
+		Incl   53, Excl   53
+	Node 142 (6.00,0.67,0.67):
+		Incl   53, Excl   53
+	Test point 142 (6.10,0.77,0.77):
+		Incl   72, Excl   72
+	Node 143 (0.00,1.00,0.67):
+		Incl   70, Excl   70
+	Test point 143 (0.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 144 (0.50,1.00,0.67):
+		Incl   70, Excl   72
+	Test point 144 (0.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 145 (1.00,1.00,0.67):
+		Incl   72, Excl   72
+	Test point 145 (1.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 146 (1.50,1.00,0.67):
+		Incl   72, Excl   72
+	Test point 146 (1.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 147 (2.00,1.00,0.67):
+		Incl   72, Excl   72
+	Test point 147 (2.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 148 (2.50,1.00,0.67):
+		Incl   71, Excl   71
+	Test point 148 (2.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 149 (3.00,1.00,0.67):
+		Incl   48, Excl   48
+	Test point 149 (3.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 150 (3.50,1.00,0.67):
+		Incl   49, Excl   49
+	Test point 150 (3.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 151 (4.00,1.00,0.67):
+		Incl   50, Excl   50
+	Test point 151 (4.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 152 (4.50,1.00,0.67):
+		Incl   51, Excl   51
+	Test point 152 (4.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 153 (5.00,1.00,0.67):
+		Incl   52, Excl   52
+	Test point 153 (5.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 154 (5.50,1.00,0.67):
+		Incl   53, Excl   53
+	Test point 154 (5.60,1.10,0.77):
+		Incl   72, Excl   72
+	Node 155 (6.00,1.00,0.67):
+		Incl   53, Excl   53
+	Test point 155 (6.10,1.10,0.77):
+		Incl   72, Excl   72
+	Node 156 (0.00,0.00,1.00):
+		Incl   66, Excl   66
+	Test point 156 (0.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 157 (0.50,0.00,1.00):
+		Incl   66, Excl   72
+	Test point 157 (0.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 158 (1.00,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 158 (1.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 159 (1.50,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 159 (1.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 160 (2.00,0.00,1.00):
+		Incl   72, Excl   72
+	Test point 160 (2.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 161 (2.50,0.00,1.00):
+		Incl   67, Excl   67
+	Test point 161 (2.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 162 (3.00,0.00,1.00):
+		Incl   36, Excl   36
+	Test point 162 (3.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 163 (3.50,0.00,1.00):
+		Incl   37, Excl   37
+	Test point 163 (3.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 164 (4.00,0.00,1.00):
+		Incl   38, Excl   38
+	Test point 164 (4.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 165 (4.50,0.00,1.00):
+		Incl   39, Excl   39
+	Test point 165 (4.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 166 (5.00,0.00,1.00):
+		Incl   40, Excl   40
+	Test point 166 (5.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 167 (5.50,0.00,1.00):
+		Incl   41, Excl   41
+	Test point 167 (5.60,0.10,1.10):
+		Incl   72, Excl   72
+	Node 168 (6.00,0.00,1.00):
+		Incl   41, Excl   41
+	Test point 168 (6.10,0.10,1.10):
+		Incl   72, Excl   72
+	Node 169 (0.00,0.33,1.00):
+		Incl   68, Excl   68
+	Test point 169 (0.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 170 (0.50,0.33,1.00):
+		Incl   68, Excl   72
+	Test point 170 (0.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 171 (1.00,0.33,1.00):
+		Incl   72, Excl   72
+	Test point 171 (1.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 172 (1.50,0.33,1.00):
+		Incl   72, Excl   72
+	Test point 172 (1.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 173 (2.00,0.33,1.00):
+		Incl   72, Excl   72
+	Test point 173 (2.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 174 (2.50,0.33,1.00):
+		Incl   69, Excl   69
+	Test point 174 (2.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 175 (3.00,0.33,1.00):
+		Incl   42, Excl   42
+	Test point 175 (3.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 176 (3.50,0.33,1.00):
+		Incl   43, Excl   43
+	Test point 176 (3.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 177 (4.00,0.33,1.00):
+		Incl   44, Excl   44
+	Test point 177 (4.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 178 (4.50,0.33,1.00):
+		Incl   45, Excl   45
+	Test point 178 (4.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 179 (5.00,0.33,1.00):
+		Incl   46, Excl   46
+	Test point 179 (5.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 180 (5.50,0.33,1.00):
+		Incl   47, Excl   47
+	Test point 180 (5.60,0.43,1.10):
+		Incl   72, Excl   72
+	Node 181 (6.00,0.33,1.00):
+		Incl   47, Excl   47
+	Test point 181 (6.10,0.43,1.10):
+		Incl   72, Excl   72
+	Node 182 (0.00,0.67,1.00):
+		Incl   70, Excl   70
+	Test point 182 (0.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 183 (0.50,0.67,1.00):
+		Incl   70, Excl   72
+	Test point 183 (0.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 184 (1.00,0.67,1.00):
+		Incl   72, Excl   72
+	Test point 184 (1.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 185 (1.50,0.67,1.00):
+		Incl   72, Excl   72
+	Test point 185 (1.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 186 (2.00,0.67,1.00):
+		Incl   72, Excl   72
+	Test point 186 (2.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 187 (2.50,0.67,1.00):
+		Incl   71, Excl   71
+	Test point 187 (2.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 188 (3.00,0.67,1.00):
+		Incl   48, Excl   48
+	Test point 188 (3.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 189 (3.50,0.67,1.00):
+		Incl   49, Excl   49
+	Test point 189 (3.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 190 (4.00,0.67,1.00):
+		Incl   50, Excl   50
+	Test point 190 (4.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 191 (4.50,0.67,1.00):
+		Incl   51, Excl   51
+	Test point 191 (4.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 192 (5.00,0.67,1.00):
+		Incl   52, Excl   52
+	Test point 192 (5.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 193 (5.50,0.67,1.00):
+		Incl   53, Excl   53
+	Test point 193 (5.60,0.77,1.10):
+		Incl   72, Excl   72
+	Node 194 (6.00,0.67,1.00):
+		Incl   53, Excl   53
+	Test point 194 (6.10,0.77,1.10):
+		Incl   72, Excl   72
+	Node 195 (0.00,1.00,1.00):
+		Incl   70, Excl   70
+	Test point 195 (0.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 196 (0.50,1.00,1.00):
+		Incl   70, Excl   72
+	Test point 196 (0.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 197 (1.00,1.00,1.00):
+		Incl   72, Excl   72
+	Test point 197 (1.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 198 (1.50,1.00,1.00):
+		Incl   72, Excl   72
+	Test point 198 (1.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 199 (2.00,1.00,1.00):
+		Incl   72, Excl   72
+	Test point 199 (2.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 200 (2.50,1.00,1.00):
+		Incl   71, Excl   71
+	Test point 200 (2.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 201 (3.00,1.00,1.00):
+		Incl   48, Excl   48
+	Test point 201 (3.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 202 (3.50,1.00,1.00):
+		Incl   49, Excl   49
+	Test point 202 (3.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 203 (4.00,1.00,1.00):
+		Incl   50, Excl   50
+	Test point 203 (4.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 204 (4.50,1.00,1.00):
+		Incl   51, Excl   51
+	Test point 204 (4.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 205 (5.00,1.00,1.00):
+		Incl   52, Excl   52
+	Test point 205 (5.10,1.10,1.10):
+		Incl   72, Excl   72
+	Node 206 (5.50,1.00,1.00):
+		Incl   53, Excl   53
+	Test point 206 (5.60,1.10,1.10):
+		Incl   72, Excl   72
+	Node 207 (6.00,1.00,1.00):
+		Incl   53, Excl   53
+	Test point 207 (6.10,1.10,1.10):
+		Incl   72, Excl   72
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,835 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 0 (0.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 1 (0.50,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 1 (0.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 2 (1.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 2 (1.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 3 (1.50,0.00,0.00):
+		Incl   36, Excl   36
+	Test point 3 (1.60,0.10,0.10):
+		Incl   36, Excl   36
+	Node 4 (2.00,0.00,0.00):
+		Incl    0, Excl    0
+	Test point 4 (2.10,0.10,0.10):
+		Incl    0, Excl    0
+	Node 5 (2.50,0.00,0.00):
+		Incl    1, Excl    1
+	Test point 5 (2.60,0.10,0.10):
+		Incl    1, Excl    1
+	Node 6 (3.00,0.00,0.00):
+		Incl    2, Excl    2
+	Test point 6 (3.10,0.10,0.10):
+		Incl    2, Excl    2
+	Node 7 (3.50,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 7 (3.60,0.10,0.10):
+		Incl    3, Excl    3
+	Node 8 (4.00,0.00,0.00):
+		Incl    3, Excl   37
+	Test point 8 (4.10,0.10,0.10):
+		Incl   37, Excl   37
+	Node 9 (4.50,0.00,0.00):
+		Incl   37, Excl   54
+	Test point 9 (4.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 10 (5.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 10 (5.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 11 (5.50,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 11 (5.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 12 (6.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 12 (6.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 13 (0.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 13 (0.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 14 (0.50,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 14 (0.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 15 (1.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 15 (1.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 16 (1.50,0.33,0.00):
+		Incl   38, Excl   38
+	Test point 16 (1.60,0.43,0.10):
+		Incl   38, Excl   38
+	Node 17 (2.00,0.33,0.00):
+		Incl    4, Excl    4
+	Test point 17 (2.10,0.43,0.10):
+		Incl    4, Excl    4
+	Node 18 (2.50,0.33,0.00):
+		Incl    5, Excl    5
+	Test point 18 (2.60,0.43,0.10):
+		Incl    5, Excl    5
+	Node 19 (3.00,0.33,0.00):
+		Incl    6, Excl    6
+	Test point 19 (3.10,0.43,0.10):
+		Incl    6, Excl    6
+	Node 20 (3.50,0.33,0.00):
+		Incl    7, Excl    7
+	Test point 20 (3.60,0.43,0.10):
+		Incl    7, Excl    7
+	Node 21 (4.00,0.33,0.00):
+		Incl    7, Excl   39
+	Test point 21 (4.10,0.43,0.10):
+		Incl   39, Excl   39
+	Node 22 (4.50,0.33,0.00):
+		Incl   39, Excl   54
+	Test point 22 (4.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 23 (5.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 23 (5.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 24 (5.50,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 24 (5.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 25 (6.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 25 (6.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 26 (0.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 26 (0.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 27 (0.50,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 27 (0.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 28 (1.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 28 (1.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 29 (1.50,0.67,0.00):
+		Incl   40, Excl   40
+	Test point 29 (1.60,0.77,0.10):
+		Incl   40, Excl   40
+	Node 30 (2.00,0.67,0.00):
+		Incl    8, Excl    8
+	Test point 30 (2.10,0.77,0.10):
+		Incl    8, Excl    8
+	Node 31 (2.50,0.67,0.00):
+		Incl    9, Excl    9
+	Test point 31 (2.60,0.77,0.10):
+		Incl    9, Excl    9
+	Node 32 (3.00,0.67,0.00):
+		Incl   10, Excl   10
+	Test point 32 (3.10,0.77,0.10):
+		Incl   10, Excl   10
+	Node 33 (3.50,0.67,0.00):
+		Incl   11, Excl   11
+	Test point 33 (3.60,0.77,0.10):
+		Incl   11, Excl   11
+	Node 34 (4.00,0.67,0.00):
+		Incl   11, Excl   41
+	Test point 34 (4.10,0.77,0.10):
+		Incl   41, Excl   41
+	Node 35 (4.50,0.67,0.00):
+		Incl   41, Excl   54
+	Test point 35 (4.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 36 (5.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 36 (5.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 37 (5.50,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 37 (5.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 38 (6.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 38 (6.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 39 (0.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 39 (0.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 40 (0.50,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 40 (0.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 41 (1.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 41 (1.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 42 (1.50,1.00,0.00):
+		Incl   40, Excl   40
+	Test point 42 (1.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 43 (2.00,1.00,0.00):
+		Incl    8, Excl    8
+	Test point 43 (2.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 44 (2.50,1.00,0.00):
+		Incl    9, Excl    9
+	Test point 44 (2.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 45 (3.00,1.00,0.00):
+		Incl   10, Excl   10
+	Test point 45 (3.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 46 (3.50,1.00,0.00):
+		Incl   11, Excl   11
+	Test point 46 (3.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 47 (4.00,1.00,0.00):
+		Incl   11, Excl   41
+	Test point 47 (4.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 48 (4.50,1.00,0.00):
+		Incl   41, Excl   54
+	Test point 48 (4.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 49 (5.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 49 (5.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 50 (5.50,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 50 (5.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 51 (6.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 51 (6.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 52 (0.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 52 (0.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 53 (0.50,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 53 (0.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 54 (1.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 54 (1.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 55 (1.50,0.00,0.33):
+		Incl   42, Excl   42
+	Test point 55 (1.60,0.10,0.43):
+		Incl   42, Excl   42
+	Node 56 (2.00,0.00,0.33):
+		Incl   12, Excl   12
+	Test point 56 (2.10,0.10,0.43):
+		Incl   12, Excl   12
+	Node 57 (2.50,0.00,0.33):
+		Incl   13, Excl   13
+	Test point 57 (2.60,0.10,0.43):
+		Incl   13, Excl   13
+	Node 58 (3.00,0.00,0.33):
+		Incl   14, Excl   14
+	Test point 58 (3.10,0.10,0.43):
+		Incl   14, Excl   14
+	Node 59 (3.50,0.00,0.33):
+		Incl   15, Excl   15
+	Test point 59 (3.60,0.10,0.43):
+		Incl   15, Excl   15
+	Node 60 (4.00,0.00,0.33):
+		Incl   15, Excl   43
+	Test point 60 (4.10,0.10,0.43):
+		Incl   43, Excl   43
+	Node 61 (4.50,0.00,0.33):
+		Incl   43, Excl   54
+	Test point 61 (4.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 62 (5.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 62 (5.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 63 (5.50,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 63 (5.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 64 (6.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 64 (6.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 65 (0.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 65 (0.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 66 (0.50,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 66 (0.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 67 (1.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 67 (1.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 68 (1.50,0.33,0.33):
+		Incl   44, Excl   44
+	Test point 68 (1.60,0.43,0.43):
+		Incl   44, Excl   44
+	Node 69 (2.00,0.33,0.33):
+		Incl   16, Excl   16
+	Test point 69 (2.10,0.43,0.43):
+		Incl   16, Excl   16
+	Node 70 (2.50,0.33,0.33):
+		Incl   17, Excl   17
+	Test point 70 (2.60,0.43,0.43):
+		Incl   17, Excl   17
+	Node 71 (3.00,0.33,0.33):
+		Incl   18, Excl   18
+	Test point 71 (3.10,0.43,0.43):
+		Incl   18, Excl   18
+	Node 72 (3.50,0.33,0.33):
+		Incl   19, Excl   19
+	Test point 72 (3.60,0.43,0.43):
+		Incl   19, Excl   19
+	Node 73 (4.00,0.33,0.33):
+		Incl   19, Excl   45
+	Test point 73 (4.10,0.43,0.43):
+		Incl   45, Excl   45
+	Node 74 (4.50,0.33,0.33):
+		Incl   45, Excl   54
+	Test point 74 (4.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 75 (5.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 75 (5.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 76 (5.50,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 76 (5.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 77 (6.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 77 (6.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 78 (0.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 78 (0.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 79 (0.50,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 79 (0.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 80 (1.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 80 (1.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 81 (1.50,0.67,0.33):
+		Incl   46, Excl   46
+	Test point 81 (1.60,0.77,0.43):
+		Incl   46, Excl   46
+	Node 82 (2.00,0.67,0.33):
+		Incl   20, Excl   20
+	Test point 82 (2.10,0.77,0.43):
+		Incl   20, Excl   20
+	Node 83 (2.50,0.67,0.33):
+		Incl   21, Excl   21
+	Test point 83 (2.60,0.77,0.43):
+		Incl   21, Excl   21
+	Node 84 (3.00,0.67,0.33):
+		Incl   22, Excl   22
+	Test point 84 (3.10,0.77,0.43):
+		Incl   22, Excl   22
+	Node 85 (3.50,0.67,0.33):
+		Incl   23, Excl   23
+	Test point 85 (3.60,0.77,0.43):
+		Incl   23, Excl   23
+	Node 86 (4.00,0.67,0.33):
+		Incl   23, Excl   47
+	Test point 86 (4.10,0.77,0.43):
+		Incl   47, Excl   47
+	Node 87 (4.50,0.67,0.33):
+		Incl   47, Excl   54
+	Test point 87 (4.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 88 (5.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 88 (5.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 89 (5.50,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 89 (5.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 90 (6.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 90 (6.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 91 (0.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 91 (0.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 92 (0.50,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 92 (0.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 93 (1.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 93 (1.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 94 (1.50,1.00,0.33):
+		Incl   46, Excl   46
+	Test point 94 (1.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 95 (2.00,1.00,0.33):
+		Incl   20, Excl   20
+	Test point 95 (2.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 96 (2.50,1.00,0.33):
+		Incl   21, Excl   21
+	Test point 96 (2.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 97 (3.00,1.00,0.33):
+		Incl   22, Excl   22
+	Test point 97 (3.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 98 (3.50,1.00,0.33):
+		Incl   23, Excl   23
+	Test point 98 (3.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 99 (4.00,1.00,0.33):
+		Incl   23, Excl   47
+	Test point 99 (4.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 100 (4.50,1.00,0.33):
+		Incl   47, Excl   54
+	Test point 100 (4.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 101 (5.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 101 (5.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 102 (5.50,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 102 (5.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 103 (6.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 103 (6.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 104 (0.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 104 (0.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 105 (0.50,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 105 (0.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 106 (1.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 106 (1.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 107 (1.50,0.00,0.67):
+		Incl   48, Excl   48
+	Test point 107 (1.60,0.10,0.77):
+		Incl   48, Excl   48
+	Node 108 (2.00,0.00,0.67):
+		Incl   24, Excl   24
+	Test point 108 (2.10,0.10,0.77):
+		Incl   24, Excl   24
+	Node 109 (2.50,0.00,0.67):
+		Incl   25, Excl   25
+	Test point 109 (2.60,0.10,0.77):
+		Incl   25, Excl   25
+	Node 110 (3.00,0.00,0.67):
+		Incl   26, Excl   26
+	Test point 110 (3.10,0.10,0.77):
+		Incl   26, Excl   26
+	Node 111 (3.50,0.00,0.67):
+		Incl   27, Excl   27
+	Test point 111 (3.60,0.10,0.77):
+		Incl   27, Excl   27
+	Node 112 (4.00,0.00,0.67):
+		Incl   27, Excl   49
+	Test point 112 (4.10,0.10,0.77):
+		Incl   49, Excl   49
+	Node 113 (4.50,0.00,0.67):
+		Incl   49, Excl   54
+	Test point 113 (4.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 114 (5.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 114 (5.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 115 (5.50,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 115 (5.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 116 (6.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 116 (6.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 117 (0.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 117 (0.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 118 (0.50,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 118 (0.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 119 (1.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 119 (1.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 120 (1.50,0.33,0.67):
+		Incl   50, Excl   50
+	Test point 120 (1.60,0.43,0.77):
+		Incl   50, Excl   50
+	Node 121 (2.00,0.33,0.67):
+		Incl   28, Excl   28
+	Test point 121 (2.10,0.43,0.77):
+		Incl   28, Excl   28
+	Node 122 (2.50,0.33,0.67):
+		Incl   29, Excl   29
+	Test point 122 (2.60,0.43,0.77):
+		Incl   29, Excl   29
+	Node 123 (3.00,0.33,0.67):
+		Incl   30, Excl   30
+	Test point 123 (3.10,0.43,0.77):
+		Incl   30, Excl   30
+	Node 124 (3.50,0.33,0.67):
+		Incl   31, Excl   31
+	Test point 124 (3.60,0.43,0.77):
+		Incl   31, Excl   31
+	Node 125 (4.00,0.33,0.67):
+		Incl   31, Excl   51
+	Test point 125 (4.10,0.43,0.77):
+		Incl   51, Excl   51
+	Node 126 (4.50,0.33,0.67):
+		Incl   51, Excl   54
+	Test point 126 (4.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 127 (5.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 127 (5.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 128 (5.50,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 128 (5.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 129 (6.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 129 (6.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 130 (0.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 130 (0.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 131 (0.50,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 131 (0.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 132 (1.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 132 (1.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 133 (1.50,0.67,0.67):
+		Incl   52, Excl   52
+	Test point 133 (1.60,0.77,0.77):
+		Incl   52, Excl   52
+	Node 134 (2.00,0.67,0.67):
+		Incl   32, Excl   32
+	Test point 134 (2.10,0.77,0.77):
+		Incl   32, Excl   32
+	Node 135 (2.50,0.67,0.67):
+		Incl   33, Excl   33
+	Test point 135 (2.60,0.77,0.77):
+		Incl   33, Excl   33
+	Node 136 (3.00,0.67,0.67):
+		Incl   34, Excl   34
+	Test point 136 (3.10,0.77,0.77):
+		Incl   34, Excl   34
+	Node 137 (3.50,0.67,0.67):
+		Incl   35, Excl   35
+	Test point 137 (3.60,0.77,0.77):
+		Incl   35, Excl   35
+	Node 138 (4.00,0.67,0.67):
+		Incl   35, Excl   53
+	Test point 138 (4.10,0.77,0.77):
+		Incl   53, Excl   53
+	Node 139 (4.50,0.67,0.67):
+		Incl   53, Excl   54
+	Test point 139 (4.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 140 (5.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 140 (5.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 141 (5.50,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 141 (5.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 142 (6.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 142 (6.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 143 (0.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 143 (0.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 144 (0.50,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 144 (0.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 145 (1.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 145 (1.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 146 (1.50,1.00,0.67):
+		Incl   52, Excl   52
+	Test point 146 (1.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 147 (2.00,1.00,0.67):
+		Incl   32, Excl   32
+	Test point 147 (2.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 148 (2.50,1.00,0.67):
+		Incl   33, Excl   33
+	Test point 148 (2.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 149 (3.00,1.00,0.67):
+		Incl   34, Excl   34
+	Test point 149 (3.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 150 (3.50,1.00,0.67):
+		Incl   35, Excl   35
+	Test point 150 (3.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 151 (4.00,1.00,0.67):
+		Incl   35, Excl   53
+	Test point 151 (4.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 152 (4.50,1.00,0.67):
+		Incl   53, Excl   54
+	Test point 152 (4.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 153 (5.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 153 (5.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 154 (5.50,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 154 (5.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 155 (6.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 155 (6.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 156 (0.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 156 (0.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 157 (0.50,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 157 (0.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 158 (1.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 158 (1.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 159 (1.50,0.00,1.00):
+		Incl   48, Excl   48
+	Test point 159 (1.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 160 (2.00,0.00,1.00):
+		Incl   24, Excl   24
+	Test point 160 (2.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 161 (2.50,0.00,1.00):
+		Incl   25, Excl   25
+	Test point 161 (2.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 162 (3.00,0.00,1.00):
+		Incl   26, Excl   26
+	Test point 162 (3.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 163 (3.50,0.00,1.00):
+		Incl   27, Excl   27
+	Test point 163 (3.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 164 (4.00,0.00,1.00):
+		Incl   27, Excl   49
+	Test point 164 (4.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 165 (4.50,0.00,1.00):
+		Incl   49, Excl   54
+	Test point 165 (4.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 166 (5.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 166 (5.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 167 (5.50,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 167 (5.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 168 (6.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 168 (6.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 169 (0.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 169 (0.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 170 (0.50,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 170 (0.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 171 (1.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 171 (1.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 172 (1.50,0.33,1.00):
+		Incl   50, Excl   50
+	Test point 172 (1.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 173 (2.00,0.33,1.00):
+		Incl   28, Excl   28
+	Test point 173 (2.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 174 (2.50,0.33,1.00):
+		Incl   29, Excl   29
+	Test point 174 (2.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 175 (3.00,0.33,1.00):
+		Incl   30, Excl   30
+	Test point 175 (3.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 176 (3.50,0.33,1.00):
+		Incl   31, Excl   31
+	Test point 176 (3.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 177 (4.00,0.33,1.00):
+		Incl   31, Excl   51
+	Test point 177 (4.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 178 (4.50,0.33,1.00):
+		Incl   51, Excl   54
+	Test point 178 (4.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 179 (5.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 179 (5.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 180 (5.50,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 180 (5.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 181 (6.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 181 (6.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 182 (0.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 182 (0.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 183 (0.50,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 183 (0.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 184 (1.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 184 (1.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 185 (1.50,0.67,1.00):
+		Incl   52, Excl   52
+	Test point 185 (1.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 186 (2.00,0.67,1.00):
+		Incl   32, Excl   32
+	Test point 186 (2.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 187 (2.50,0.67,1.00):
+		Incl   33, Excl   33
+	Test point 187 (2.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 188 (3.00,0.67,1.00):
+		Incl   34, Excl   34
+	Test point 188 (3.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 189 (3.50,0.67,1.00):
+		Incl   35, Excl   35
+	Test point 189 (3.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 190 (4.00,0.67,1.00):
+		Incl   35, Excl   53
+	Test point 190 (4.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 191 (4.50,0.67,1.00):
+		Incl   53, Excl   54
+	Test point 191 (4.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 192 (5.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 192 (5.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 193 (5.50,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 193 (5.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 194 (6.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 194 (6.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 195 (0.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 195 (0.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 196 (0.50,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 196 (0.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 197 (1.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 197 (1.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 198 (1.50,1.00,1.00):
+		Incl   52, Excl   52
+	Test point 198 (1.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 199 (2.00,1.00,1.00):
+		Incl   32, Excl   32
+	Test point 199 (2.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 200 (2.50,1.00,1.00):
+		Incl   33, Excl   33
+	Test point 200 (2.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 201 (3.00,1.00,1.00):
+		Incl   34, Excl   34
+	Test point 201 (3.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 202 (3.50,1.00,1.00):
+		Incl   35, Excl   35
+	Test point 202 (3.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 203 (4.00,1.00,1.00):
+		Incl   35, Excl   53
+	Test point 203 (4.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 204 (4.50,1.00,1.00):
+		Incl   53, Excl   54
+	Test point 204 (4.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 205 (5.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 205 (5.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 206 (5.50,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 206 (5.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 207 (6.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 207 (6.10,1.10,1.10):
+		Incl   54, Excl   54
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,835 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00,0.00):
+		Incl   36, Excl   36
+	Test point 0 (0.10,0.10,0.10):
+		Incl   36, Excl   36
+	Node 1 (0.50,0.00,0.00):
+		Incl   36, Excl   54
+	Test point 1 (0.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 2 (1.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 2 (1.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 3 (1.50,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 3 (1.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 4 (2.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 4 (2.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 5 (2.50,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 5 (2.60,0.10,0.10):
+		Incl   54, Excl   54
+	Node 6 (3.00,0.00,0.00):
+		Incl   54, Excl   54
+	Test point 6 (3.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 7 (3.50,0.00,0.00):
+		Incl   37, Excl   37
+	Test point 7 (3.60,0.10,0.10):
+		Incl   37, Excl   37
+	Node 8 (4.00,0.00,0.00):
+		Incl    0, Excl    0
+	Test point 8 (4.10,0.10,0.10):
+		Incl    0, Excl    0
+	Node 9 (4.50,0.00,0.00):
+		Incl    1, Excl    1
+	Test point 9 (4.60,0.10,0.10):
+		Incl    1, Excl    1
+	Node 10 (5.00,0.00,0.00):
+		Incl    2, Excl    2
+	Test point 10 (5.10,0.10,0.10):
+		Incl    2, Excl    2
+	Node 11 (5.50,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 11 (5.60,0.10,0.10):
+		Incl    3, Excl    3
+	Node 12 (6.00,0.00,0.00):
+		Incl    3, Excl    3
+	Test point 12 (6.10,0.10,0.10):
+		Incl   54, Excl   54
+	Node 13 (0.00,0.33,0.00):
+		Incl   38, Excl   38
+	Test point 13 (0.10,0.43,0.10):
+		Incl   38, Excl   38
+	Node 14 (0.50,0.33,0.00):
+		Incl   38, Excl   54
+	Test point 14 (0.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 15 (1.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 15 (1.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 16 (1.50,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 16 (1.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 17 (2.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 17 (2.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 18 (2.50,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 18 (2.60,0.43,0.10):
+		Incl   54, Excl   54
+	Node 19 (3.00,0.33,0.00):
+		Incl   54, Excl   54
+	Test point 19 (3.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 20 (3.50,0.33,0.00):
+		Incl   39, Excl   39
+	Test point 20 (3.60,0.43,0.10):
+		Incl   39, Excl   39
+	Node 21 (4.00,0.33,0.00):
+		Incl    4, Excl    4
+	Test point 21 (4.10,0.43,0.10):
+		Incl    4, Excl    4
+	Node 22 (4.50,0.33,0.00):
+		Incl    5, Excl    5
+	Test point 22 (4.60,0.43,0.10):
+		Incl    5, Excl    5
+	Node 23 (5.00,0.33,0.00):
+		Incl    6, Excl    6
+	Test point 23 (5.10,0.43,0.10):
+		Incl    6, Excl    6
+	Node 24 (5.50,0.33,0.00):
+		Incl    7, Excl    7
+	Test point 24 (5.60,0.43,0.10):
+		Incl    7, Excl    7
+	Node 25 (6.00,0.33,0.00):
+		Incl    7, Excl    7
+	Test point 25 (6.10,0.43,0.10):
+		Incl   54, Excl   54
+	Node 26 (0.00,0.67,0.00):
+		Incl   40, Excl   40
+	Test point 26 (0.10,0.77,0.10):
+		Incl   40, Excl   40
+	Node 27 (0.50,0.67,0.00):
+		Incl   40, Excl   54
+	Test point 27 (0.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 28 (1.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 28 (1.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 29 (1.50,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 29 (1.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 30 (2.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 30 (2.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 31 (2.50,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 31 (2.60,0.77,0.10):
+		Incl   54, Excl   54
+	Node 32 (3.00,0.67,0.00):
+		Incl   54, Excl   54
+	Test point 32 (3.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 33 (3.50,0.67,0.00):
+		Incl   41, Excl   41
+	Test point 33 (3.60,0.77,0.10):
+		Incl   41, Excl   41
+	Node 34 (4.00,0.67,0.00):
+		Incl    8, Excl    8
+	Test point 34 (4.10,0.77,0.10):
+		Incl    8, Excl    8
+	Node 35 (4.50,0.67,0.00):
+		Incl    9, Excl    9
+	Test point 35 (4.60,0.77,0.10):
+		Incl    9, Excl    9
+	Node 36 (5.00,0.67,0.00):
+		Incl   10, Excl   10
+	Test point 36 (5.10,0.77,0.10):
+		Incl   10, Excl   10
+	Node 37 (5.50,0.67,0.00):
+		Incl   11, Excl   11
+	Test point 37 (5.60,0.77,0.10):
+		Incl   11, Excl   11
+	Node 38 (6.00,0.67,0.00):
+		Incl   11, Excl   11
+	Test point 38 (6.10,0.77,0.10):
+		Incl   54, Excl   54
+	Node 39 (0.00,1.00,0.00):
+		Incl   40, Excl   40
+	Test point 39 (0.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 40 (0.50,1.00,0.00):
+		Incl   40, Excl   54
+	Test point 40 (0.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 41 (1.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 41 (1.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 42 (1.50,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 42 (1.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 43 (2.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 43 (2.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 44 (2.50,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 44 (2.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 45 (3.00,1.00,0.00):
+		Incl   54, Excl   54
+	Test point 45 (3.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 46 (3.50,1.00,0.00):
+		Incl   41, Excl   41
+	Test point 46 (3.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 47 (4.00,1.00,0.00):
+		Incl    8, Excl    8
+	Test point 47 (4.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 48 (4.50,1.00,0.00):
+		Incl    9, Excl    9
+	Test point 48 (4.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 49 (5.00,1.00,0.00):
+		Incl   10, Excl   10
+	Test point 49 (5.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 50 (5.50,1.00,0.00):
+		Incl   11, Excl   11
+	Test point 50 (5.60,1.10,0.10):
+		Incl   54, Excl   54
+	Node 51 (6.00,1.00,0.00):
+		Incl   11, Excl   11
+	Test point 51 (6.10,1.10,0.10):
+		Incl   54, Excl   54
+	Node 52 (0.00,0.00,0.33):
+		Incl   42, Excl   42
+	Test point 52 (0.10,0.10,0.43):
+		Incl   42, Excl   42
+	Node 53 (0.50,0.00,0.33):
+		Incl   42, Excl   54
+	Test point 53 (0.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 54 (1.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 54 (1.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 55 (1.50,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 55 (1.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 56 (2.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 56 (2.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 57 (2.50,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 57 (2.60,0.10,0.43):
+		Incl   54, Excl   54
+	Node 58 (3.00,0.00,0.33):
+		Incl   54, Excl   54
+	Test point 58 (3.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 59 (3.50,0.00,0.33):
+		Incl   43, Excl   43
+	Test point 59 (3.60,0.10,0.43):
+		Incl   43, Excl   43
+	Node 60 (4.00,0.00,0.33):
+		Incl   12, Excl   12
+	Test point 60 (4.10,0.10,0.43):
+		Incl   12, Excl   12
+	Node 61 (4.50,0.00,0.33):
+		Incl   13, Excl   13
+	Test point 61 (4.60,0.10,0.43):
+		Incl   13, Excl   13
+	Node 62 (5.00,0.00,0.33):
+		Incl   14, Excl   14
+	Test point 62 (5.10,0.10,0.43):
+		Incl   14, Excl   14
+	Node 63 (5.50,0.00,0.33):
+		Incl   15, Excl   15
+	Test point 63 (5.60,0.10,0.43):
+		Incl   15, Excl   15
+	Node 64 (6.00,0.00,0.33):
+		Incl   15, Excl   15
+	Test point 64 (6.10,0.10,0.43):
+		Incl   54, Excl   54
+	Node 65 (0.00,0.33,0.33):
+		Incl   44, Excl   44
+	Test point 65 (0.10,0.43,0.43):
+		Incl   44, Excl   44
+	Node 66 (0.50,0.33,0.33):
+		Incl   44, Excl   54
+	Test point 66 (0.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 67 (1.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 67 (1.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 68 (1.50,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 68 (1.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 69 (2.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 69 (2.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 70 (2.50,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 70 (2.60,0.43,0.43):
+		Incl   54, Excl   54
+	Node 71 (3.00,0.33,0.33):
+		Incl   54, Excl   54
+	Test point 71 (3.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 72 (3.50,0.33,0.33):
+		Incl   45, Excl   45
+	Test point 72 (3.60,0.43,0.43):
+		Incl   45, Excl   45
+	Node 73 (4.00,0.33,0.33):
+		Incl   16, Excl   16
+	Test point 73 (4.10,0.43,0.43):
+		Incl   16, Excl   16
+	Node 74 (4.50,0.33,0.33):
+		Incl   17, Excl   17
+	Test point 74 (4.60,0.43,0.43):
+		Incl   17, Excl   17
+	Node 75 (5.00,0.33,0.33):
+		Incl   18, Excl   18
+	Test point 75 (5.10,0.43,0.43):
+		Incl   18, Excl   18
+	Node 76 (5.50,0.33,0.33):
+		Incl   19, Excl   19
+	Test point 76 (5.60,0.43,0.43):
+		Incl   19, Excl   19
+	Node 77 (6.00,0.33,0.33):
+		Incl   19, Excl   19
+	Test point 77 (6.10,0.43,0.43):
+		Incl   54, Excl   54
+	Node 78 (0.00,0.67,0.33):
+		Incl   46, Excl   46
+	Test point 78 (0.10,0.77,0.43):
+		Incl   46, Excl   46
+	Node 79 (0.50,0.67,0.33):
+		Incl   46, Excl   54
+	Test point 79 (0.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 80 (1.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 80 (1.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 81 (1.50,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 81 (1.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 82 (2.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 82 (2.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 83 (2.50,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 83 (2.60,0.77,0.43):
+		Incl   54, Excl   54
+	Node 84 (3.00,0.67,0.33):
+		Incl   54, Excl   54
+	Test point 84 (3.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 85 (3.50,0.67,0.33):
+		Incl   47, Excl   47
+	Test point 85 (3.60,0.77,0.43):
+		Incl   47, Excl   47
+	Node 86 (4.00,0.67,0.33):
+		Incl   20, Excl   20
+	Test point 86 (4.10,0.77,0.43):
+		Incl   20, Excl   20
+	Node 87 (4.50,0.67,0.33):
+		Incl   21, Excl   21
+	Test point 87 (4.60,0.77,0.43):
+		Incl   21, Excl   21
+	Node 88 (5.00,0.67,0.33):
+		Incl   22, Excl   22
+	Test point 88 (5.10,0.77,0.43):
+		Incl   22, Excl   22
+	Node 89 (5.50,0.67,0.33):
+		Incl   23, Excl   23
+	Test point 89 (5.60,0.77,0.43):
+		Incl   23, Excl   23
+	Node 90 (6.00,0.67,0.33):
+		Incl   23, Excl   23
+	Test point 90 (6.10,0.77,0.43):
+		Incl   54, Excl   54
+	Node 91 (0.00,1.00,0.33):
+		Incl   46, Excl   46
+	Test point 91 (0.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 92 (0.50,1.00,0.33):
+		Incl   46, Excl   54
+	Test point 92 (0.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 93 (1.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 93 (1.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 94 (1.50,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 94 (1.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 95 (2.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 95 (2.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 96 (2.50,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 96 (2.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 97 (3.00,1.00,0.33):
+		Incl   54, Excl   54
+	Test point 97 (3.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 98 (3.50,1.00,0.33):
+		Incl   47, Excl   47
+	Test point 98 (3.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 99 (4.00,1.00,0.33):
+		Incl   20, Excl   20
+	Test point 99 (4.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 100 (4.50,1.00,0.33):
+		Incl   21, Excl   21
+	Test point 100 (4.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 101 (5.00,1.00,0.33):
+		Incl   22, Excl   22
+	Test point 101 (5.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 102 (5.50,1.00,0.33):
+		Incl   23, Excl   23
+	Test point 102 (5.60,1.10,0.43):
+		Incl   54, Excl   54
+	Node 103 (6.00,1.00,0.33):
+		Incl   23, Excl   23
+	Test point 103 (6.10,1.10,0.43):
+		Incl   54, Excl   54
+	Node 104 (0.00,0.00,0.67):
+		Incl   48, Excl   48
+	Test point 104 (0.10,0.10,0.77):
+		Incl   48, Excl   48
+	Node 105 (0.50,0.00,0.67):
+		Incl   48, Excl   54
+	Test point 105 (0.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 106 (1.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 106 (1.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 107 (1.50,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 107 (1.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 108 (2.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 108 (2.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 109 (2.50,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 109 (2.60,0.10,0.77):
+		Incl   54, Excl   54
+	Node 110 (3.00,0.00,0.67):
+		Incl   54, Excl   54
+	Test point 110 (3.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 111 (3.50,0.00,0.67):
+		Incl   49, Excl   49
+	Test point 111 (3.60,0.10,0.77):
+		Incl   49, Excl   49
+	Node 112 (4.00,0.00,0.67):
+		Incl   24, Excl   24
+	Test point 112 (4.10,0.10,0.77):
+		Incl   24, Excl   24
+	Node 113 (4.50,0.00,0.67):
+		Incl   25, Excl   25
+	Test point 113 (4.60,0.10,0.77):
+		Incl   25, Excl   25
+	Node 114 (5.00,0.00,0.67):
+		Incl   26, Excl   26
+	Test point 114 (5.10,0.10,0.77):
+		Incl   26, Excl   26
+	Node 115 (5.50,0.00,0.67):
+		Incl   27, Excl   27
+	Test point 115 (5.60,0.10,0.77):
+		Incl   27, Excl   27
+	Node 116 (6.00,0.00,0.67):
+		Incl   27, Excl   27
+	Test point 116 (6.10,0.10,0.77):
+		Incl   54, Excl   54
+	Node 117 (0.00,0.33,0.67):
+		Incl   50, Excl   50
+	Test point 117 (0.10,0.43,0.77):
+		Incl   50, Excl   50
+	Node 118 (0.50,0.33,0.67):
+		Incl   50, Excl   54
+	Test point 118 (0.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 119 (1.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 119 (1.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 120 (1.50,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 120 (1.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 121 (2.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 121 (2.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 122 (2.50,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 122 (2.60,0.43,0.77):
+		Incl   54, Excl   54
+	Node 123 (3.00,0.33,0.67):
+		Incl   54, Excl   54
+	Test point 123 (3.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 124 (3.50,0.33,0.67):
+		Incl   51, Excl   51
+	Test point 124 (3.60,0.43,0.77):
+		Incl   51, Excl   51
+	Node 125 (4.00,0.33,0.67):
+		Incl   28, Excl   28
+	Test point 125 (4.10,0.43,0.77):
+		Incl   28, Excl   28
+	Node 126 (4.50,0.33,0.67):
+		Incl   29, Excl   29
+	Test point 126 (4.60,0.43,0.77):
+		Incl   29, Excl   29
+	Node 127 (5.00,0.33,0.67):
+		Incl   30, Excl   30
+	Test point 127 (5.10,0.43,0.77):
+		Incl   30, Excl   30
+	Node 128 (5.50,0.33,0.67):
+		Incl   31, Excl   31
+	Test point 128 (5.60,0.43,0.77):
+		Incl   31, Excl   31
+	Node 129 (6.00,0.33,0.67):
+		Incl   31, Excl   31
+	Test point 129 (6.10,0.43,0.77):
+		Incl   54, Excl   54
+	Node 130 (0.00,0.67,0.67):
+		Incl   52, Excl   52
+	Test point 130 (0.10,0.77,0.77):
+		Incl   52, Excl   52
+	Node 131 (0.50,0.67,0.67):
+		Incl   52, Excl   54
+	Test point 131 (0.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 132 (1.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 132 (1.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 133 (1.50,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 133 (1.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 134 (2.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 134 (2.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 135 (2.50,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 135 (2.60,0.77,0.77):
+		Incl   54, Excl   54
+	Node 136 (3.00,0.67,0.67):
+		Incl   54, Excl   54
+	Test point 136 (3.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 137 (3.50,0.67,0.67):
+		Incl   53, Excl   53
+	Test point 137 (3.60,0.77,0.77):
+		Incl   53, Excl   53
+	Node 138 (4.00,0.67,0.67):
+		Incl   32, Excl   32
+	Test point 138 (4.10,0.77,0.77):
+		Incl   32, Excl   32
+	Node 139 (4.50,0.67,0.67):
+		Incl   33, Excl   33
+	Test point 139 (4.60,0.77,0.77):
+		Incl   33, Excl   33
+	Node 140 (5.00,0.67,0.67):
+		Incl   34, Excl   34
+	Test point 140 (5.10,0.77,0.77):
+		Incl   34, Excl   34
+	Node 141 (5.50,0.67,0.67):
+		Incl   35, Excl   35
+	Test point 141 (5.60,0.77,0.77):
+		Incl   35, Excl   35
+	Node 142 (6.00,0.67,0.67):
+		Incl   35, Excl   35
+	Test point 142 (6.10,0.77,0.77):
+		Incl   54, Excl   54
+	Node 143 (0.00,1.00,0.67):
+		Incl   52, Excl   52
+	Test point 143 (0.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 144 (0.50,1.00,0.67):
+		Incl   52, Excl   54
+	Test point 144 (0.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 145 (1.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 145 (1.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 146 (1.50,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 146 (1.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 147 (2.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 147 (2.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 148 (2.50,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 148 (2.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 149 (3.00,1.00,0.67):
+		Incl   54, Excl   54
+	Test point 149 (3.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 150 (3.50,1.00,0.67):
+		Incl   53, Excl   53
+	Test point 150 (3.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 151 (4.00,1.00,0.67):
+		Incl   32, Excl   32
+	Test point 151 (4.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 152 (4.50,1.00,0.67):
+		Incl   33, Excl   33
+	Test point 152 (4.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 153 (5.00,1.00,0.67):
+		Incl   34, Excl   34
+	Test point 153 (5.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 154 (5.50,1.00,0.67):
+		Incl   35, Excl   35
+	Test point 154 (5.60,1.10,0.77):
+		Incl   54, Excl   54
+	Node 155 (6.00,1.00,0.67):
+		Incl   35, Excl   35
+	Test point 155 (6.10,1.10,0.77):
+		Incl   54, Excl   54
+	Node 156 (0.00,0.00,1.00):
+		Incl   48, Excl   48
+	Test point 156 (0.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 157 (0.50,0.00,1.00):
+		Incl   48, Excl   54
+	Test point 157 (0.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 158 (1.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 158 (1.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 159 (1.50,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 159 (1.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 160 (2.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 160 (2.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 161 (2.50,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 161 (2.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 162 (3.00,0.00,1.00):
+		Incl   54, Excl   54
+	Test point 162 (3.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 163 (3.50,0.00,1.00):
+		Incl   49, Excl   49
+	Test point 163 (3.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 164 (4.00,0.00,1.00):
+		Incl   24, Excl   24
+	Test point 164 (4.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 165 (4.50,0.00,1.00):
+		Incl   25, Excl   25
+	Test point 165 (4.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 166 (5.00,0.00,1.00):
+		Incl   26, Excl   26
+	Test point 166 (5.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 167 (5.50,0.00,1.00):
+		Incl   27, Excl   27
+	Test point 167 (5.60,0.10,1.10):
+		Incl   54, Excl   54
+	Node 168 (6.00,0.00,1.00):
+		Incl   27, Excl   27
+	Test point 168 (6.10,0.10,1.10):
+		Incl   54, Excl   54
+	Node 169 (0.00,0.33,1.00):
+		Incl   50, Excl   50
+	Test point 169 (0.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 170 (0.50,0.33,1.00):
+		Incl   50, Excl   54
+	Test point 170 (0.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 171 (1.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 171 (1.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 172 (1.50,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 172 (1.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 173 (2.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 173 (2.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 174 (2.50,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 174 (2.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 175 (3.00,0.33,1.00):
+		Incl   54, Excl   54
+	Test point 175 (3.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 176 (3.50,0.33,1.00):
+		Incl   51, Excl   51
+	Test point 176 (3.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 177 (4.00,0.33,1.00):
+		Incl   28, Excl   28
+	Test point 177 (4.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 178 (4.50,0.33,1.00):
+		Incl   29, Excl   29
+	Test point 178 (4.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 179 (5.00,0.33,1.00):
+		Incl   30, Excl   30
+	Test point 179 (5.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 180 (5.50,0.33,1.00):
+		Incl   31, Excl   31
+	Test point 180 (5.60,0.43,1.10):
+		Incl   54, Excl   54
+	Node 181 (6.00,0.33,1.00):
+		Incl   31, Excl   31
+	Test point 181 (6.10,0.43,1.10):
+		Incl   54, Excl   54
+	Node 182 (0.00,0.67,1.00):
+		Incl   52, Excl   52
+	Test point 182 (0.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 183 (0.50,0.67,1.00):
+		Incl   52, Excl   54
+	Test point 183 (0.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 184 (1.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 184 (1.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 185 (1.50,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 185 (1.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 186 (2.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 186 (2.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 187 (2.50,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 187 (2.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 188 (3.00,0.67,1.00):
+		Incl   54, Excl   54
+	Test point 188 (3.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 189 (3.50,0.67,1.00):
+		Incl   53, Excl   53
+	Test point 189 (3.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 190 (4.00,0.67,1.00):
+		Incl   32, Excl   32
+	Test point 190 (4.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 191 (4.50,0.67,1.00):
+		Incl   33, Excl   33
+	Test point 191 (4.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 192 (5.00,0.67,1.00):
+		Incl   34, Excl   34
+	Test point 192 (5.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 193 (5.50,0.67,1.00):
+		Incl   35, Excl   35
+	Test point 193 (5.60,0.77,1.10):
+		Incl   54, Excl   54
+	Node 194 (6.00,0.67,1.00):
+		Incl   35, Excl   35
+	Test point 194 (6.10,0.77,1.10):
+		Incl   54, Excl   54
+	Node 195 (0.00,1.00,1.00):
+		Incl   52, Excl   52
+	Test point 195 (0.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 196 (0.50,1.00,1.00):
+		Incl   52, Excl   54
+	Test point 196 (0.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 197 (1.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 197 (1.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 198 (1.50,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 198 (1.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 199 (2.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 199 (2.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 200 (2.50,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 200 (2.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 201 (3.00,1.00,1.00):
+		Incl   54, Excl   54
+	Test point 201 (3.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 202 (3.50,1.00,1.00):
+		Incl   53, Excl   53
+	Test point 202 (3.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 203 (4.00,1.00,1.00):
+		Incl   32, Excl   32
+	Test point 203 (4.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 204 (4.50,1.00,1.00):
+		Incl   33, Excl   33
+	Test point 204 (4.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 205 (5.00,1.00,1.00):
+		Incl   34, Excl   34
+	Test point 205 (5.10,1.10,1.10):
+		Incl   54, Excl   54
+	Node 206 (5.50,1.00,1.00):
+		Incl   35, Excl   35
+	Test point 206 (5.60,1.10,1.10):
+		Incl   54, Excl   54
+	Node 207 (6.00,1.00,1.00):
+		Incl   35, Excl   35
+	Test point 207 (6.10,1.10,1.10):
+		Incl   54, Excl   54
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedHexaEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testParallelPipedHexaEL.c 3817 2006-09-27 06:55:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	Dictionary*		dictionary;
+	Geometry*		geometry;
+	ElementLayout*		eLayout;
+	Topology*		nTopology;
+	NodeLayout*		nLayout;
+	HexaMD*			meshDecomp;
+	Index			i;
+	Processor_Index		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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 13 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "maxX", Dictionary_Entry_Value_FromUnsignedInt( 6 ) );
+	Dictionary_Add( dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "isPeriodicI", Dictionary_Entry_Value_FromBool( True ) );
+
+	
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "PPHexaEL", 3, dictionary );
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	meshDecomp = HexaMD_New( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout );
+	
+	ElementLayout_Build( eLayout, meshDecomp );
+	
+	if (rank == procToWatch) {
+		printf( "Element with point:\n" );
+	}
+	geometry = eLayout->geometry;
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		int excEl, incEl;
+		
+		geometry->pointAt( geometry, i, point );
+
+		if (rank == procToWatch) {
+			printf( "\tNode %u (%0.2f,%0.2f,%0.2f):\n", i, point[0], point[1], point[2] );
+			excEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   EXCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			incEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   INCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			printf( "\t\tIncl %4u, Excl %4u\n", incEl, excEl );		
+		}
+
+		point[0] += 0.1;
+		point[1] += 0.1;
+		point[2] += 0.1;
+		
+		if (rank == procToWatch) {
+			printf( "\tTest point %u (%0.2f,%0.2f,%0.2f):\n", i, point[0], point[1], point[2] );
+			excEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   EXCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			incEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   INCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			printf( "\t\tIncl %4u, Excl %4u\n", incEl, excEl );		
+		}
+	}
+	if (rank == procToWatch) {
+		printf( "\n" );
+	}	
+	
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( meshDecomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( eLayout );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00):
+		Incl    0, Excl    0
+	Test Point 0 (0.10,0.10):
+		Incl    0, Excl    0
+	Node 1 (0.50,0.00):
+		Incl    1, Excl    1
+	Test Point 1 (0.60,0.10):
+		Incl    1, Excl    1
+	Node 2 (1.00,0.00):
+		Incl    2, Excl    2
+	Test Point 2 (1.10,0.10):
+		Incl    2, Excl    2
+	Node 3 (1.50,0.00):
+		Incl    3, Excl    3
+	Test Point 3 (1.60,0.10):
+		Incl    3, Excl    3
+	Node 4 (2.00,0.00):
+		Incl    4, Excl    4
+	Test Point 4 (2.10,0.10):
+		Incl    4, Excl    4
+	Node 5 (2.50,0.00):
+		Incl    5, Excl    5
+	Test Point 5 (2.60,0.10):
+		Incl    5, Excl    5
+	Node 6 (3.00,0.00):
+		Incl    6, Excl    6
+	Test Point 6 (3.10,0.10):
+		Incl    6, Excl    6
+	Node 7 (3.50,0.00):
+		Incl    7, Excl    7
+	Test Point 7 (3.60,0.10):
+		Incl    7, Excl    7
+	Node 8 (4.00,0.00):
+		Incl    8, Excl    8
+	Test Point 8 (4.10,0.10):
+		Incl    8, Excl    8
+	Node 9 (4.50,0.00):
+		Incl    9, Excl    9
+	Test Point 9 (4.60,0.10):
+		Incl    9, Excl    9
+	Node 10 (5.00,0.00):
+		Incl   10, Excl   10
+	Test Point 10 (5.10,0.10):
+		Incl   10, Excl   10
+	Node 11 (5.50,0.00):
+		Incl   11, Excl   11
+	Test Point 11 (5.60,0.10):
+		Incl   11, Excl   11
+	Node 12 (6.00,0.00):
+		Incl   11, Excl   11
+	Test Point 12 (6.10,0.10):
+		Incl   36, Excl   36
+	Node 13 (0.00,0.33):
+		Incl   12, Excl   12
+	Test Point 13 (0.10,0.43):
+		Incl   12, Excl   12
+	Node 14 (0.50,0.33):
+		Incl   13, Excl   13
+	Test Point 14 (0.60,0.43):
+		Incl   13, Excl   13
+	Node 15 (1.00,0.33):
+		Incl   14, Excl   14
+	Test Point 15 (1.10,0.43):
+		Incl   14, Excl   14
+	Node 16 (1.50,0.33):
+		Incl   15, Excl   15
+	Test Point 16 (1.60,0.43):
+		Incl   15, Excl   15
+	Node 17 (2.00,0.33):
+		Incl   16, Excl   16
+	Test Point 17 (2.10,0.43):
+		Incl   16, Excl   16
+	Node 18 (2.50,0.33):
+		Incl   17, Excl   17
+	Test Point 18 (2.60,0.43):
+		Incl   17, Excl   17
+	Node 19 (3.00,0.33):
+		Incl   18, Excl   18
+	Test Point 19 (3.10,0.43):
+		Incl   18, Excl   18
+	Node 20 (3.50,0.33):
+		Incl   19, Excl   19
+	Test Point 20 (3.60,0.43):
+		Incl   19, Excl   19
+	Node 21 (4.00,0.33):
+		Incl   20, Excl   20
+	Test Point 21 (4.10,0.43):
+		Incl   20, Excl   20
+	Node 22 (4.50,0.33):
+		Incl   21, Excl   21
+	Test Point 22 (4.60,0.43):
+		Incl   21, Excl   21
+	Node 23 (5.00,0.33):
+		Incl   22, Excl   22
+	Test Point 23 (5.10,0.43):
+		Incl   22, Excl   22
+	Node 24 (5.50,0.33):
+		Incl   23, Excl   23
+	Test Point 24 (5.60,0.43):
+		Incl   23, Excl   23
+	Node 25 (6.00,0.33):
+		Incl   23, Excl   23
+	Test Point 25 (6.10,0.43):
+		Incl   36, Excl   36
+	Node 26 (0.00,0.67):
+		Incl   24, Excl   24
+	Test Point 26 (0.10,0.77):
+		Incl   24, Excl   24
+	Node 27 (0.50,0.67):
+		Incl   25, Excl   25
+	Test Point 27 (0.60,0.77):
+		Incl   25, Excl   25
+	Node 28 (1.00,0.67):
+		Incl   26, Excl   26
+	Test Point 28 (1.10,0.77):
+		Incl   26, Excl   26
+	Node 29 (1.50,0.67):
+		Incl   27, Excl   27
+	Test Point 29 (1.60,0.77):
+		Incl   27, Excl   27
+	Node 30 (2.00,0.67):
+		Incl   28, Excl   28
+	Test Point 30 (2.10,0.77):
+		Incl   28, Excl   28
+	Node 31 (2.50,0.67):
+		Incl   29, Excl   29
+	Test Point 31 (2.60,0.77):
+		Incl   29, Excl   29
+	Node 32 (3.00,0.67):
+		Incl   30, Excl   30
+	Test Point 32 (3.10,0.77):
+		Incl   30, Excl   30
+	Node 33 (3.50,0.67):
+		Incl   31, Excl   31
+	Test Point 33 (3.60,0.77):
+		Incl   31, Excl   31
+	Node 34 (4.00,0.67):
+		Incl   32, Excl   32
+	Test Point 34 (4.10,0.77):
+		Incl   32, Excl   32
+	Node 35 (4.50,0.67):
+		Incl   33, Excl   33
+	Test Point 35 (4.60,0.77):
+		Incl   33, Excl   33
+	Node 36 (5.00,0.67):
+		Incl   34, Excl   34
+	Test Point 36 (5.10,0.77):
+		Incl   34, Excl   34
+	Node 37 (5.50,0.67):
+		Incl   35, Excl   35
+	Test Point 37 (5.60,0.77):
+		Incl   35, Excl   35
+	Node 38 (6.00,0.67):
+		Incl   35, Excl   35
+	Test Point 38 (6.10,0.77):
+		Incl   36, Excl   36
+	Node 39 (0.00,1.00):
+		Incl   24, Excl   24
+	Test Point 39 (0.10,1.10):
+		Incl   36, Excl   36
+	Node 40 (0.50,1.00):
+		Incl   25, Excl   25
+	Test Point 40 (0.60,1.10):
+		Incl   36, Excl   36
+	Node 41 (1.00,1.00):
+		Incl   26, Excl   26
+	Test Point 41 (1.10,1.10):
+		Incl   36, Excl   36
+	Node 42 (1.50,1.00):
+		Incl   27, Excl   27
+	Test Point 42 (1.60,1.10):
+		Incl   36, Excl   36
+	Node 43 (2.00,1.00):
+		Incl   28, Excl   28
+	Test Point 43 (2.10,1.10):
+		Incl   36, Excl   36
+	Node 44 (2.50,1.00):
+		Incl   29, Excl   29
+	Test Point 44 (2.60,1.10):
+		Incl   36, Excl   36
+	Node 45 (3.00,1.00):
+		Incl   30, Excl   30
+	Test Point 45 (3.10,1.10):
+		Incl   36, Excl   36
+	Node 46 (3.50,1.00):
+		Incl   31, Excl   31
+	Test Point 46 (3.60,1.10):
+		Incl   36, Excl   36
+	Node 47 (4.00,1.00):
+		Incl   32, Excl   32
+	Test Point 47 (4.10,1.10):
+		Incl   36, Excl   36
+	Node 48 (4.50,1.00):
+		Incl   33, Excl   33
+	Test Point 48 (4.60,1.10):
+		Incl   36, Excl   36
+	Node 49 (5.00,1.00):
+		Incl   34, Excl   34
+	Test Point 49 (5.10,1.10):
+		Incl   36, Excl   36
+	Node 50 (5.50,1.00):
+		Incl   35, Excl   35
+	Test Point 50 (5.60,1.10):
+		Incl   36, Excl   36
+	Node 51 (6.00,1.00):
+		Incl   35, Excl   35
+	Test Point 51 (6.10,1.10):
+		Incl   36, Excl   36
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00):
+		Incl    0, Excl    0
+	Test Point 0 (0.10,0.10):
+		Incl    0, Excl    0
+	Node 1 (0.50,0.00):
+		Incl    1, Excl    1
+	Test Point 1 (0.60,0.10):
+		Incl    1, Excl    1
+	Node 2 (1.00,0.00):
+		Incl    2, Excl    2
+	Test Point 2 (1.10,0.10):
+		Incl    2, Excl    2
+	Node 3 (1.50,0.00):
+		Incl    3, Excl    3
+	Test Point 3 (1.60,0.10):
+		Incl    3, Excl    3
+	Node 4 (2.00,0.00):
+		Incl    4, Excl    4
+	Test Point 4 (2.10,0.10):
+		Incl    4, Excl    4
+	Node 5 (2.50,0.00):
+		Incl    5, Excl    5
+	Test Point 5 (2.60,0.10):
+		Incl    5, Excl    5
+	Node 6 (3.00,0.00):
+		Incl    5, Excl   18
+	Test Point 6 (3.10,0.10):
+		Incl   18, Excl   18
+	Node 7 (3.50,0.00):
+		Incl   18, Excl   24
+	Test Point 7 (3.60,0.10):
+		Incl   24, Excl   24
+	Node 8 (4.00,0.00):
+		Incl   24, Excl   24
+	Test Point 8 (4.10,0.10):
+		Incl   24, Excl   24
+	Node 9 (4.50,0.00):
+		Incl   24, Excl   24
+	Test Point 9 (4.60,0.10):
+		Incl   24, Excl   24
+	Node 10 (5.00,0.00):
+		Incl   24, Excl   24
+	Test Point 10 (5.10,0.10):
+		Incl   24, Excl   24
+	Node 11 (5.50,0.00):
+		Incl   19, Excl   19
+	Test Point 11 (5.60,0.10):
+		Incl   19, Excl   19
+	Node 12 (6.00,0.00):
+		Incl   19, Excl   19
+	Test Point 12 (6.10,0.10):
+		Incl   24, Excl   24
+	Node 13 (0.00,0.33):
+		Incl    6, Excl    6
+	Test Point 13 (0.10,0.43):
+		Incl    6, Excl    6
+	Node 14 (0.50,0.33):
+		Incl    7, Excl    7
+	Test Point 14 (0.60,0.43):
+		Incl    7, Excl    7
+	Node 15 (1.00,0.33):
+		Incl    8, Excl    8
+	Test Point 15 (1.10,0.43):
+		Incl    8, Excl    8
+	Node 16 (1.50,0.33):
+		Incl    9, Excl    9
+	Test Point 16 (1.60,0.43):
+		Incl    9, Excl    9
+	Node 17 (2.00,0.33):
+		Incl   10, Excl   10
+	Test Point 17 (2.10,0.43):
+		Incl   10, Excl   10
+	Node 18 (2.50,0.33):
+		Incl   11, Excl   11
+	Test Point 18 (2.60,0.43):
+		Incl   11, Excl   11
+	Node 19 (3.00,0.33):
+		Incl   11, Excl   20
+	Test Point 19 (3.10,0.43):
+		Incl   20, Excl   20
+	Node 20 (3.50,0.33):
+		Incl   20, Excl   24
+	Test Point 20 (3.60,0.43):
+		Incl   24, Excl   24
+	Node 21 (4.00,0.33):
+		Incl   24, Excl   24
+	Test Point 21 (4.10,0.43):
+		Incl   24, Excl   24
+	Node 22 (4.50,0.33):
+		Incl   24, Excl   24
+	Test Point 22 (4.60,0.43):
+		Incl   24, Excl   24
+	Node 23 (5.00,0.33):
+		Incl   24, Excl   24
+	Test Point 23 (5.10,0.43):
+		Incl   24, Excl   24
+	Node 24 (5.50,0.33):
+		Incl   21, Excl   21
+	Test Point 24 (5.60,0.43):
+		Incl   21, Excl   21
+	Node 25 (6.00,0.33):
+		Incl   21, Excl   21
+	Test Point 25 (6.10,0.43):
+		Incl   24, Excl   24
+	Node 26 (0.00,0.67):
+		Incl   12, Excl   12
+	Test Point 26 (0.10,0.77):
+		Incl   12, Excl   12
+	Node 27 (0.50,0.67):
+		Incl   13, Excl   13
+	Test Point 27 (0.60,0.77):
+		Incl   13, Excl   13
+	Node 28 (1.00,0.67):
+		Incl   14, Excl   14
+	Test Point 28 (1.10,0.77):
+		Incl   14, Excl   14
+	Node 29 (1.50,0.67):
+		Incl   15, Excl   15
+	Test Point 29 (1.60,0.77):
+		Incl   15, Excl   15
+	Node 30 (2.00,0.67):
+		Incl   16, Excl   16
+	Test Point 30 (2.10,0.77):
+		Incl   16, Excl   16
+	Node 31 (2.50,0.67):
+		Incl   17, Excl   17
+	Test Point 31 (2.60,0.77):
+		Incl   17, Excl   17
+	Node 32 (3.00,0.67):
+		Incl   17, Excl   22
+	Test Point 32 (3.10,0.77):
+		Incl   22, Excl   22
+	Node 33 (3.50,0.67):
+		Incl   22, Excl   24
+	Test Point 33 (3.60,0.77):
+		Incl   24, Excl   24
+	Node 34 (4.00,0.67):
+		Incl   24, Excl   24
+	Test Point 34 (4.10,0.77):
+		Incl   24, Excl   24
+	Node 35 (4.50,0.67):
+		Incl   24, Excl   24
+	Test Point 35 (4.60,0.77):
+		Incl   24, Excl   24
+	Node 36 (5.00,0.67):
+		Incl   24, Excl   24
+	Test Point 36 (5.10,0.77):
+		Incl   24, Excl   24
+	Node 37 (5.50,0.67):
+		Incl   23, Excl   23
+	Test Point 37 (5.60,0.77):
+		Incl   23, Excl   23
+	Node 38 (6.00,0.67):
+		Incl   23, Excl   23
+	Test Point 38 (6.10,0.77):
+		Incl   24, Excl   24
+	Node 39 (0.00,1.00):
+		Incl   12, Excl   12
+	Test Point 39 (0.10,1.10):
+		Incl   24, Excl   24
+	Node 40 (0.50,1.00):
+		Incl   13, Excl   13
+	Test Point 40 (0.60,1.10):
+		Incl   24, Excl   24
+	Node 41 (1.00,1.00):
+		Incl   14, Excl   14
+	Test Point 41 (1.10,1.10):
+		Incl   24, Excl   24
+	Node 42 (1.50,1.00):
+		Incl   15, Excl   15
+	Test Point 42 (1.60,1.10):
+		Incl   24, Excl   24
+	Node 43 (2.00,1.00):
+		Incl   16, Excl   16
+	Test Point 43 (2.10,1.10):
+		Incl   24, Excl   24
+	Node 44 (2.50,1.00):
+		Incl   17, Excl   17
+	Test Point 44 (2.60,1.10):
+		Incl   24, Excl   24
+	Node 45 (3.00,1.00):
+		Incl   17, Excl   22
+	Test Point 45 (3.10,1.10):
+		Incl   24, Excl   24
+	Node 46 (3.50,1.00):
+		Incl   22, Excl   24
+	Test Point 46 (3.60,1.10):
+		Incl   24, Excl   24
+	Node 47 (4.00,1.00):
+		Incl   24, Excl   24
+	Test Point 47 (4.10,1.10):
+		Incl   24, Excl   24
+	Node 48 (4.50,1.00):
+		Incl   24, Excl   24
+	Test Point 48 (4.60,1.10):
+		Incl   24, Excl   24
+	Node 49 (5.00,1.00):
+		Incl   24, Excl   24
+	Test Point 49 (5.10,1.10):
+		Incl   24, Excl   24
+	Node 50 (5.50,1.00):
+		Incl   23, Excl   23
+	Test Point 50 (5.60,1.10):
+		Incl   24, Excl   24
+	Node 51 (6.00,1.00):
+		Incl   23, Excl   23
+	Test Point 51 (6.10,1.10):
+		Incl   24, Excl   24
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00):
+		Incl    0, Excl    0
+	Test Point 0 (0.10,0.10):
+		Incl    0, Excl    0
+	Node 1 (0.50,0.00):
+		Incl    1, Excl    1
+	Test Point 1 (0.60,0.10):
+		Incl    1, Excl    1
+	Node 2 (1.00,0.00):
+		Incl    2, Excl    2
+	Test Point 2 (1.10,0.10):
+		Incl    2, Excl    2
+	Node 3 (1.50,0.00):
+		Incl    3, Excl    3
+	Test Point 3 (1.60,0.10):
+		Incl    3, Excl    3
+	Node 4 (2.00,0.00):
+		Incl    3, Excl   12
+	Test Point 4 (2.10,0.10):
+		Incl   12, Excl   12
+	Node 5 (2.50,0.00):
+		Incl   12, Excl   18
+	Test Point 5 (2.60,0.10):
+		Incl   18, Excl   18
+	Node 6 (3.00,0.00):
+		Incl   18, Excl   18
+	Test Point 6 (3.10,0.10):
+		Incl   18, Excl   18
+	Node 7 (3.50,0.00):
+		Incl   18, Excl   18
+	Test Point 7 (3.60,0.10):
+		Incl   18, Excl   18
+	Node 8 (4.00,0.00):
+		Incl   18, Excl   18
+	Test Point 8 (4.10,0.10):
+		Incl   18, Excl   18
+	Node 9 (4.50,0.00):
+		Incl   18, Excl   18
+	Test Point 9 (4.60,0.10):
+		Incl   18, Excl   18
+	Node 10 (5.00,0.00):
+		Incl   18, Excl   18
+	Test Point 10 (5.10,0.10):
+		Incl   18, Excl   18
+	Node 11 (5.50,0.00):
+		Incl   13, Excl   13
+	Test Point 11 (5.60,0.10):
+		Incl   13, Excl   13
+	Node 12 (6.00,0.00):
+		Incl   13, Excl   13
+	Test Point 12 (6.10,0.10):
+		Incl   18, Excl   18
+	Node 13 (0.00,0.33):
+		Incl    4, Excl    4
+	Test Point 13 (0.10,0.43):
+		Incl    4, Excl    4
+	Node 14 (0.50,0.33):
+		Incl    5, Excl    5
+	Test Point 14 (0.60,0.43):
+		Incl    5, Excl    5
+	Node 15 (1.00,0.33):
+		Incl    6, Excl    6
+	Test Point 15 (1.10,0.43):
+		Incl    6, Excl    6
+	Node 16 (1.50,0.33):
+		Incl    7, Excl    7
+	Test Point 16 (1.60,0.43):
+		Incl    7, Excl    7
+	Node 17 (2.00,0.33):
+		Incl    7, Excl   14
+	Test Point 17 (2.10,0.43):
+		Incl   14, Excl   14
+	Node 18 (2.50,0.33):
+		Incl   14, Excl   18
+	Test Point 18 (2.60,0.43):
+		Incl   18, Excl   18
+	Node 19 (3.00,0.33):
+		Incl   18, Excl   18
+	Test Point 19 (3.10,0.43):
+		Incl   18, Excl   18
+	Node 20 (3.50,0.33):
+		Incl   18, Excl   18
+	Test Point 20 (3.60,0.43):
+		Incl   18, Excl   18
+	Node 21 (4.00,0.33):
+		Incl   18, Excl   18
+	Test Point 21 (4.10,0.43):
+		Incl   18, Excl   18
+	Node 22 (4.50,0.33):
+		Incl   18, Excl   18
+	Test Point 22 (4.60,0.43):
+		Incl   18, Excl   18
+	Node 23 (5.00,0.33):
+		Incl   18, Excl   18
+	Test Point 23 (5.10,0.43):
+		Incl   18, Excl   18
+	Node 24 (5.50,0.33):
+		Incl   15, Excl   15
+	Test Point 24 (5.60,0.43):
+		Incl   15, Excl   15
+	Node 25 (6.00,0.33):
+		Incl   15, Excl   15
+	Test Point 25 (6.10,0.43):
+		Incl   18, Excl   18
+	Node 26 (0.00,0.67):
+		Incl    8, Excl    8
+	Test Point 26 (0.10,0.77):
+		Incl    8, Excl    8
+	Node 27 (0.50,0.67):
+		Incl    9, Excl    9
+	Test Point 27 (0.60,0.77):
+		Incl    9, Excl    9
+	Node 28 (1.00,0.67):
+		Incl   10, Excl   10
+	Test Point 28 (1.10,0.77):
+		Incl   10, Excl   10
+	Node 29 (1.50,0.67):
+		Incl   11, Excl   11
+	Test Point 29 (1.60,0.77):
+		Incl   11, Excl   11
+	Node 30 (2.00,0.67):
+		Incl   11, Excl   16
+	Test Point 30 (2.10,0.77):
+		Incl   16, Excl   16
+	Node 31 (2.50,0.67):
+		Incl   16, Excl   18
+	Test Point 31 (2.60,0.77):
+		Incl   18, Excl   18
+	Node 32 (3.00,0.67):
+		Incl   18, Excl   18
+	Test Point 32 (3.10,0.77):
+		Incl   18, Excl   18
+	Node 33 (3.50,0.67):
+		Incl   18, Excl   18
+	Test Point 33 (3.60,0.77):
+		Incl   18, Excl   18
+	Node 34 (4.00,0.67):
+		Incl   18, Excl   18
+	Test Point 34 (4.10,0.77):
+		Incl   18, Excl   18
+	Node 35 (4.50,0.67):
+		Incl   18, Excl   18
+	Test Point 35 (4.60,0.77):
+		Incl   18, Excl   18
+	Node 36 (5.00,0.67):
+		Incl   18, Excl   18
+	Test Point 36 (5.10,0.77):
+		Incl   18, Excl   18
+	Node 37 (5.50,0.67):
+		Incl   17, Excl   17
+	Test Point 37 (5.60,0.77):
+		Incl   17, Excl   17
+	Node 38 (6.00,0.67):
+		Incl   17, Excl   17
+	Test Point 38 (6.10,0.77):
+		Incl   18, Excl   18
+	Node 39 (0.00,1.00):
+		Incl    8, Excl    8
+	Test Point 39 (0.10,1.10):
+		Incl   18, Excl   18
+	Node 40 (0.50,1.00):
+		Incl    9, Excl    9
+	Test Point 40 (0.60,1.10):
+		Incl   18, Excl   18
+	Node 41 (1.00,1.00):
+		Incl   10, Excl   10
+	Test Point 41 (1.10,1.10):
+		Incl   18, Excl   18
+	Node 42 (1.50,1.00):
+		Incl   11, Excl   11
+	Test Point 42 (1.60,1.10):
+		Incl   18, Excl   18
+	Node 43 (2.00,1.00):
+		Incl   11, Excl   16
+	Test Point 43 (2.10,1.10):
+		Incl   18, Excl   18
+	Node 44 (2.50,1.00):
+		Incl   16, Excl   18
+	Test Point 44 (2.60,1.10):
+		Incl   18, Excl   18
+	Node 45 (3.00,1.00):
+		Incl   18, Excl   18
+	Test Point 45 (3.10,1.10):
+		Incl   18, Excl   18
+	Node 46 (3.50,1.00):
+		Incl   18, Excl   18
+	Test Point 46 (3.60,1.10):
+		Incl   18, Excl   18
+	Node 47 (4.00,1.00):
+		Incl   18, Excl   18
+	Test Point 47 (4.10,1.10):
+		Incl   18, Excl   18
+	Node 48 (4.50,1.00):
+		Incl   18, Excl   18
+	Test Point 48 (4.60,1.10):
+		Incl   18, Excl   18
+	Node 49 (5.00,1.00):
+		Incl   18, Excl   18
+	Test Point 49 (5.10,1.10):
+		Incl   18, Excl   18
+	Node 50 (5.50,1.00):
+		Incl   17, Excl   17
+	Test Point 50 (5.60,1.10):
+		Incl   18, Excl   18
+	Node 51 (6.00,1.00):
+		Incl   17, Excl   17
+	Test Point 51 (6.10,1.10):
+		Incl   18, Excl   18
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00):
+		Incl   18, Excl   18
+	Test Point 0 (0.10,0.10):
+		Incl   18, Excl   18
+	Node 1 (0.50,0.00):
+		Incl   18, Excl   24
+	Test Point 1 (0.60,0.10):
+		Incl   24, Excl   24
+	Node 2 (1.00,0.00):
+		Incl   24, Excl   24
+	Test Point 2 (1.10,0.10):
+		Incl   24, Excl   24
+	Node 3 (1.50,0.00):
+		Incl   24, Excl   24
+	Test Point 3 (1.60,0.10):
+		Incl   24, Excl   24
+	Node 4 (2.00,0.00):
+		Incl   24, Excl   24
+	Test Point 4 (2.10,0.10):
+		Incl   24, Excl   24
+	Node 5 (2.50,0.00):
+		Incl   19, Excl   19
+	Test Point 5 (2.60,0.10):
+		Incl   19, Excl   19
+	Node 6 (3.00,0.00):
+		Incl    0, Excl    0
+	Test Point 6 (3.10,0.10):
+		Incl    0, Excl    0
+	Node 7 (3.50,0.00):
+		Incl    1, Excl    1
+	Test Point 7 (3.60,0.10):
+		Incl    1, Excl    1
+	Node 8 (4.00,0.00):
+		Incl    2, Excl    2
+	Test Point 8 (4.10,0.10):
+		Incl    2, Excl    2
+	Node 9 (4.50,0.00):
+		Incl    3, Excl    3
+	Test Point 9 (4.60,0.10):
+		Incl    3, Excl    3
+	Node 10 (5.00,0.00):
+		Incl    4, Excl    4
+	Test Point 10 (5.10,0.10):
+		Incl    4, Excl    4
+	Node 11 (5.50,0.00):
+		Incl    5, Excl    5
+	Test Point 11 (5.60,0.10):
+		Incl    5, Excl    5
+	Node 12 (6.00,0.00):
+		Incl    5, Excl    5
+	Test Point 12 (6.10,0.10):
+		Incl   24, Excl   24
+	Node 13 (0.00,0.33):
+		Incl   20, Excl   20
+	Test Point 13 (0.10,0.43):
+		Incl   20, Excl   20
+	Node 14 (0.50,0.33):
+		Incl   20, Excl   24
+	Test Point 14 (0.60,0.43):
+		Incl   24, Excl   24
+	Node 15 (1.00,0.33):
+		Incl   24, Excl   24
+	Test Point 15 (1.10,0.43):
+		Incl   24, Excl   24
+	Node 16 (1.50,0.33):
+		Incl   24, Excl   24
+	Test Point 16 (1.60,0.43):
+		Incl   24, Excl   24
+	Node 17 (2.00,0.33):
+		Incl   24, Excl   24
+	Test Point 17 (2.10,0.43):
+		Incl   24, Excl   24
+	Node 18 (2.50,0.33):
+		Incl   21, Excl   21
+	Test Point 18 (2.60,0.43):
+		Incl   21, Excl   21
+	Node 19 (3.00,0.33):
+		Incl    6, Excl    6
+	Test Point 19 (3.10,0.43):
+		Incl    6, Excl    6
+	Node 20 (3.50,0.33):
+		Incl    7, Excl    7
+	Test Point 20 (3.60,0.43):
+		Incl    7, Excl    7
+	Node 21 (4.00,0.33):
+		Incl    8, Excl    8
+	Test Point 21 (4.10,0.43):
+		Incl    8, Excl    8
+	Node 22 (4.50,0.33):
+		Incl    9, Excl    9
+	Test Point 22 (4.60,0.43):
+		Incl    9, Excl    9
+	Node 23 (5.00,0.33):
+		Incl   10, Excl   10
+	Test Point 23 (5.10,0.43):
+		Incl   10, Excl   10
+	Node 24 (5.50,0.33):
+		Incl   11, Excl   11
+	Test Point 24 (5.60,0.43):
+		Incl   11, Excl   11
+	Node 25 (6.00,0.33):
+		Incl   11, Excl   11
+	Test Point 25 (6.10,0.43):
+		Incl   24, Excl   24
+	Node 26 (0.00,0.67):
+		Incl   22, Excl   22
+	Test Point 26 (0.10,0.77):
+		Incl   22, Excl   22
+	Node 27 (0.50,0.67):
+		Incl   22, Excl   24
+	Test Point 27 (0.60,0.77):
+		Incl   24, Excl   24
+	Node 28 (1.00,0.67):
+		Incl   24, Excl   24
+	Test Point 28 (1.10,0.77):
+		Incl   24, Excl   24
+	Node 29 (1.50,0.67):
+		Incl   24, Excl   24
+	Test Point 29 (1.60,0.77):
+		Incl   24, Excl   24
+	Node 30 (2.00,0.67):
+		Incl   24, Excl   24
+	Test Point 30 (2.10,0.77):
+		Incl   24, Excl   24
+	Node 31 (2.50,0.67):
+		Incl   23, Excl   23
+	Test Point 31 (2.60,0.77):
+		Incl   23, Excl   23
+	Node 32 (3.00,0.67):
+		Incl   12, Excl   12
+	Test Point 32 (3.10,0.77):
+		Incl   12, Excl   12
+	Node 33 (3.50,0.67):
+		Incl   13, Excl   13
+	Test Point 33 (3.60,0.77):
+		Incl   13, Excl   13
+	Node 34 (4.00,0.67):
+		Incl   14, Excl   14
+	Test Point 34 (4.10,0.77):
+		Incl   14, Excl   14
+	Node 35 (4.50,0.67):
+		Incl   15, Excl   15
+	Test Point 35 (4.60,0.77):
+		Incl   15, Excl   15
+	Node 36 (5.00,0.67):
+		Incl   16, Excl   16
+	Test Point 36 (5.10,0.77):
+		Incl   16, Excl   16
+	Node 37 (5.50,0.67):
+		Incl   17, Excl   17
+	Test Point 37 (5.60,0.77):
+		Incl   17, Excl   17
+	Node 38 (6.00,0.67):
+		Incl   17, Excl   17
+	Test Point 38 (6.10,0.77):
+		Incl   24, Excl   24
+	Node 39 (0.00,1.00):
+		Incl   22, Excl   22
+	Test Point 39 (0.10,1.10):
+		Incl   24, Excl   24
+	Node 40 (0.50,1.00):
+		Incl   22, Excl   24
+	Test Point 40 (0.60,1.10):
+		Incl   24, Excl   24
+	Node 41 (1.00,1.00):
+		Incl   24, Excl   24
+	Test Point 41 (1.10,1.10):
+		Incl   24, Excl   24
+	Node 42 (1.50,1.00):
+		Incl   24, Excl   24
+	Test Point 42 (1.60,1.10):
+		Incl   24, Excl   24
+	Node 43 (2.00,1.00):
+		Incl   24, Excl   24
+	Test Point 43 (2.10,1.10):
+		Incl   24, Excl   24
+	Node 44 (2.50,1.00):
+		Incl   23, Excl   23
+	Test Point 44 (2.60,1.10):
+		Incl   24, Excl   24
+	Node 45 (3.00,1.00):
+		Incl   12, Excl   12
+	Test Point 45 (3.10,1.10):
+		Incl   24, Excl   24
+	Node 46 (3.50,1.00):
+		Incl   13, Excl   13
+	Test Point 46 (3.60,1.10):
+		Incl   24, Excl   24
+	Node 47 (4.00,1.00):
+		Incl   14, Excl   14
+	Test Point 47 (4.10,1.10):
+		Incl   24, Excl   24
+	Node 48 (4.50,1.00):
+		Incl   15, Excl   15
+	Test Point 48 (4.60,1.10):
+		Incl   24, Excl   24
+	Node 49 (5.00,1.00):
+		Incl   16, Excl   16
+	Test Point 49 (5.10,1.10):
+		Incl   24, Excl   24
+	Node 50 (5.50,1.00):
+		Incl   17, Excl   17
+	Test Point 50 (5.60,1.10):
+		Incl   24, Excl   24
+	Node 51 (6.00,1.00):
+		Incl   17, Excl   17
+	Test Point 51 (6.10,1.10):
+		Incl   24, Excl   24
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00):
+		Incl   18, Excl   18
+	Test Point 0 (0.10,0.10):
+		Incl   18, Excl   18
+	Node 1 (0.50,0.00):
+		Incl   18, Excl   18
+	Test Point 1 (0.60,0.10):
+		Incl   18, Excl   18
+	Node 2 (1.00,0.00):
+		Incl   18, Excl   18
+	Test Point 2 (1.10,0.10):
+		Incl   18, Excl   18
+	Node 3 (1.50,0.00):
+		Incl   12, Excl   12
+	Test Point 3 (1.60,0.10):
+		Incl   12, Excl   12
+	Node 4 (2.00,0.00):
+		Incl    0, Excl    0
+	Test Point 4 (2.10,0.10):
+		Incl    0, Excl    0
+	Node 5 (2.50,0.00):
+		Incl    1, Excl    1
+	Test Point 5 (2.60,0.10):
+		Incl    1, Excl    1
+	Node 6 (3.00,0.00):
+		Incl    2, Excl    2
+	Test Point 6 (3.10,0.10):
+		Incl    2, Excl    2
+	Node 7 (3.50,0.00):
+		Incl    3, Excl    3
+	Test Point 7 (3.60,0.10):
+		Incl    3, Excl    3
+	Node 8 (4.00,0.00):
+		Incl    3, Excl   13
+	Test Point 8 (4.10,0.10):
+		Incl   13, Excl   13
+	Node 9 (4.50,0.00):
+		Incl   13, Excl   18
+	Test Point 9 (4.60,0.10):
+		Incl   18, Excl   18
+	Node 10 (5.00,0.00):
+		Incl   18, Excl   18
+	Test Point 10 (5.10,0.10):
+		Incl   18, Excl   18
+	Node 11 (5.50,0.00):
+		Incl   18, Excl   18
+	Test Point 11 (5.60,0.10):
+		Incl   18, Excl   18
+	Node 12 (6.00,0.00):
+		Incl   18, Excl   18
+	Test Point 12 (6.10,0.10):
+		Incl   18, Excl   18
+	Node 13 (0.00,0.33):
+		Incl   18, Excl   18
+	Test Point 13 (0.10,0.43):
+		Incl   18, Excl   18
+	Node 14 (0.50,0.33):
+		Incl   18, Excl   18
+	Test Point 14 (0.60,0.43):
+		Incl   18, Excl   18
+	Node 15 (1.00,0.33):
+		Incl   18, Excl   18
+	Test Point 15 (1.10,0.43):
+		Incl   18, Excl   18
+	Node 16 (1.50,0.33):
+		Incl   14, Excl   14
+	Test Point 16 (1.60,0.43):
+		Incl   14, Excl   14
+	Node 17 (2.00,0.33):
+		Incl    4, Excl    4
+	Test Point 17 (2.10,0.43):
+		Incl    4, Excl    4
+	Node 18 (2.50,0.33):
+		Incl    5, Excl    5
+	Test Point 18 (2.60,0.43):
+		Incl    5, Excl    5
+	Node 19 (3.00,0.33):
+		Incl    6, Excl    6
+	Test Point 19 (3.10,0.43):
+		Incl    6, Excl    6
+	Node 20 (3.50,0.33):
+		Incl    7, Excl    7
+	Test Point 20 (3.60,0.43):
+		Incl    7, Excl    7
+	Node 21 (4.00,0.33):
+		Incl    7, Excl   15
+	Test Point 21 (4.10,0.43):
+		Incl   15, Excl   15
+	Node 22 (4.50,0.33):
+		Incl   15, Excl   18
+	Test Point 22 (4.60,0.43):
+		Incl   18, Excl   18
+	Node 23 (5.00,0.33):
+		Incl   18, Excl   18
+	Test Point 23 (5.10,0.43):
+		Incl   18, Excl   18
+	Node 24 (5.50,0.33):
+		Incl   18, Excl   18
+	Test Point 24 (5.60,0.43):
+		Incl   18, Excl   18
+	Node 25 (6.00,0.33):
+		Incl   18, Excl   18
+	Test Point 25 (6.10,0.43):
+		Incl   18, Excl   18
+	Node 26 (0.00,0.67):
+		Incl   18, Excl   18
+	Test Point 26 (0.10,0.77):
+		Incl   18, Excl   18
+	Node 27 (0.50,0.67):
+		Incl   18, Excl   18
+	Test Point 27 (0.60,0.77):
+		Incl   18, Excl   18
+	Node 28 (1.00,0.67):
+		Incl   18, Excl   18
+	Test Point 28 (1.10,0.77):
+		Incl   18, Excl   18
+	Node 29 (1.50,0.67):
+		Incl   16, Excl   16
+	Test Point 29 (1.60,0.77):
+		Incl   16, Excl   16
+	Node 30 (2.00,0.67):
+		Incl    8, Excl    8
+	Test Point 30 (2.10,0.77):
+		Incl    8, Excl    8
+	Node 31 (2.50,0.67):
+		Incl    9, Excl    9
+	Test Point 31 (2.60,0.77):
+		Incl    9, Excl    9
+	Node 32 (3.00,0.67):
+		Incl   10, Excl   10
+	Test Point 32 (3.10,0.77):
+		Incl   10, Excl   10
+	Node 33 (3.50,0.67):
+		Incl   11, Excl   11
+	Test Point 33 (3.60,0.77):
+		Incl   11, Excl   11
+	Node 34 (4.00,0.67):
+		Incl   11, Excl   17
+	Test Point 34 (4.10,0.77):
+		Incl   17, Excl   17
+	Node 35 (4.50,0.67):
+		Incl   17, Excl   18
+	Test Point 35 (4.60,0.77):
+		Incl   18, Excl   18
+	Node 36 (5.00,0.67):
+		Incl   18, Excl   18
+	Test Point 36 (5.10,0.77):
+		Incl   18, Excl   18
+	Node 37 (5.50,0.67):
+		Incl   18, Excl   18
+	Test Point 37 (5.60,0.77):
+		Incl   18, Excl   18
+	Node 38 (6.00,0.67):
+		Incl   18, Excl   18
+	Test Point 38 (6.10,0.77):
+		Incl   18, Excl   18
+	Node 39 (0.00,1.00):
+		Incl   18, Excl   18
+	Test Point 39 (0.10,1.10):
+		Incl   18, Excl   18
+	Node 40 (0.50,1.00):
+		Incl   18, Excl   18
+	Test Point 40 (0.60,1.10):
+		Incl   18, Excl   18
+	Node 41 (1.00,1.00):
+		Incl   18, Excl   18
+	Test Point 41 (1.10,1.10):
+		Incl   18, Excl   18
+	Node 42 (1.50,1.00):
+		Incl   16, Excl   16
+	Test Point 42 (1.60,1.10):
+		Incl   18, Excl   18
+	Node 43 (2.00,1.00):
+		Incl    8, Excl    8
+	Test Point 43 (2.10,1.10):
+		Incl   18, Excl   18
+	Node 44 (2.50,1.00):
+		Incl    9, Excl    9
+	Test Point 44 (2.60,1.10):
+		Incl   18, Excl   18
+	Node 45 (3.00,1.00):
+		Incl   10, Excl   10
+	Test Point 45 (3.10,1.10):
+		Incl   18, Excl   18
+	Node 46 (3.50,1.00):
+		Incl   11, Excl   11
+	Test Point 46 (3.60,1.10):
+		Incl   18, Excl   18
+	Node 47 (4.00,1.00):
+		Incl   11, Excl   17
+	Test Point 47 (4.10,1.10):
+		Incl   18, Excl   18
+	Node 48 (4.50,1.00):
+		Incl   17, Excl   18
+	Test Point 48 (4.60,1.10):
+		Incl   18, Excl   18
+	Node 49 (5.00,1.00):
+		Incl   18, Excl   18
+	Test Point 49 (5.10,1.10):
+		Incl   18, Excl   18
+	Node 50 (5.50,1.00):
+		Incl   18, Excl   18
+	Test Point 50 (5.60,1.10):
+		Incl   18, Excl   18
+	Node 51 (6.00,1.00):
+		Incl   18, Excl   18
+	Test Point 51 (6.10,1.10):
+		Incl   18, Excl   18
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,211 @@
+StGermain Framework revision 3473. Copyright (C) 2003-2005 VPAC.
+Element with point:
+	Node 0 (0.00,0.00):
+		Incl   12, Excl   12
+	Test Point 0 (0.10,0.10):
+		Incl   12, Excl   12
+	Node 1 (0.50,0.00):
+		Incl   12, Excl   18
+	Test Point 1 (0.60,0.10):
+		Incl   18, Excl   18
+	Node 2 (1.00,0.00):
+		Incl   18, Excl   18
+	Test Point 2 (1.10,0.10):
+		Incl   18, Excl   18
+	Node 3 (1.50,0.00):
+		Incl   18, Excl   18
+	Test Point 3 (1.60,0.10):
+		Incl   18, Excl   18
+	Node 4 (2.00,0.00):
+		Incl   18, Excl   18
+	Test Point 4 (2.10,0.10):
+		Incl   18, Excl   18
+	Node 5 (2.50,0.00):
+		Incl   18, Excl   18
+	Test Point 5 (2.60,0.10):
+		Incl   18, Excl   18
+	Node 6 (3.00,0.00):
+		Incl   18, Excl   18
+	Test Point 6 (3.10,0.10):
+		Incl   18, Excl   18
+	Node 7 (3.50,0.00):
+		Incl   13, Excl   13
+	Test Point 7 (3.60,0.10):
+		Incl   13, Excl   13
+	Node 8 (4.00,0.00):
+		Incl    0, Excl    0
+	Test Point 8 (4.10,0.10):
+		Incl    0, Excl    0
+	Node 9 (4.50,0.00):
+		Incl    1, Excl    1
+	Test Point 9 (4.60,0.10):
+		Incl    1, Excl    1
+	Node 10 (5.00,0.00):
+		Incl    2, Excl    2
+	Test Point 10 (5.10,0.10):
+		Incl    2, Excl    2
+	Node 11 (5.50,0.00):
+		Incl    3, Excl    3
+	Test Point 11 (5.60,0.10):
+		Incl    3, Excl    3
+	Node 12 (6.00,0.00):
+		Incl    3, Excl    3
+	Test Point 12 (6.10,0.10):
+		Incl   18, Excl   18
+	Node 13 (0.00,0.33):
+		Incl   14, Excl   14
+	Test Point 13 (0.10,0.43):
+		Incl   14, Excl   14
+	Node 14 (0.50,0.33):
+		Incl   14, Excl   18
+	Test Point 14 (0.60,0.43):
+		Incl   18, Excl   18
+	Node 15 (1.00,0.33):
+		Incl   18, Excl   18
+	Test Point 15 (1.10,0.43):
+		Incl   18, Excl   18
+	Node 16 (1.50,0.33):
+		Incl   18, Excl   18
+	Test Point 16 (1.60,0.43):
+		Incl   18, Excl   18
+	Node 17 (2.00,0.33):
+		Incl   18, Excl   18
+	Test Point 17 (2.10,0.43):
+		Incl   18, Excl   18
+	Node 18 (2.50,0.33):
+		Incl   18, Excl   18
+	Test Point 18 (2.60,0.43):
+		Incl   18, Excl   18
+	Node 19 (3.00,0.33):
+		Incl   18, Excl   18
+	Test Point 19 (3.10,0.43):
+		Incl   18, Excl   18
+	Node 20 (3.50,0.33):
+		Incl   15, Excl   15
+	Test Point 20 (3.60,0.43):
+		Incl   15, Excl   15
+	Node 21 (4.00,0.33):
+		Incl    4, Excl    4
+	Test Point 21 (4.10,0.43):
+		Incl    4, Excl    4
+	Node 22 (4.50,0.33):
+		Incl    5, Excl    5
+	Test Point 22 (4.60,0.43):
+		Incl    5, Excl    5
+	Node 23 (5.00,0.33):
+		Incl    6, Excl    6
+	Test Point 23 (5.10,0.43):
+		Incl    6, Excl    6
+	Node 24 (5.50,0.33):
+		Incl    7, Excl    7
+	Test Point 24 (5.60,0.43):
+		Incl    7, Excl    7
+	Node 25 (6.00,0.33):
+		Incl    7, Excl    7
+	Test Point 25 (6.10,0.43):
+		Incl   18, Excl   18
+	Node 26 (0.00,0.67):
+		Incl   16, Excl   16
+	Test Point 26 (0.10,0.77):
+		Incl   16, Excl   16
+	Node 27 (0.50,0.67):
+		Incl   16, Excl   18
+	Test Point 27 (0.60,0.77):
+		Incl   18, Excl   18
+	Node 28 (1.00,0.67):
+		Incl   18, Excl   18
+	Test Point 28 (1.10,0.77):
+		Incl   18, Excl   18
+	Node 29 (1.50,0.67):
+		Incl   18, Excl   18
+	Test Point 29 (1.60,0.77):
+		Incl   18, Excl   18
+	Node 30 (2.00,0.67):
+		Incl   18, Excl   18
+	Test Point 30 (2.10,0.77):
+		Incl   18, Excl   18
+	Node 31 (2.50,0.67):
+		Incl   18, Excl   18
+	Test Point 31 (2.60,0.77):
+		Incl   18, Excl   18
+	Node 32 (3.00,0.67):
+		Incl   18, Excl   18
+	Test Point 32 (3.10,0.77):
+		Incl   18, Excl   18
+	Node 33 (3.50,0.67):
+		Incl   17, Excl   17
+	Test Point 33 (3.60,0.77):
+		Incl   17, Excl   17
+	Node 34 (4.00,0.67):
+		Incl    8, Excl    8
+	Test Point 34 (4.10,0.77):
+		Incl    8, Excl    8
+	Node 35 (4.50,0.67):
+		Incl    9, Excl    9
+	Test Point 35 (4.60,0.77):
+		Incl    9, Excl    9
+	Node 36 (5.00,0.67):
+		Incl   10, Excl   10
+	Test Point 36 (5.10,0.77):
+		Incl   10, Excl   10
+	Node 37 (5.50,0.67):
+		Incl   11, Excl   11
+	Test Point 37 (5.60,0.77):
+		Incl   11, Excl   11
+	Node 38 (6.00,0.67):
+		Incl   11, Excl   11
+	Test Point 38 (6.10,0.77):
+		Incl   18, Excl   18
+	Node 39 (0.00,1.00):
+		Incl   16, Excl   16
+	Test Point 39 (0.10,1.10):
+		Incl   18, Excl   18
+	Node 40 (0.50,1.00):
+		Incl   16, Excl   18
+	Test Point 40 (0.60,1.10):
+		Incl   18, Excl   18
+	Node 41 (1.00,1.00):
+		Incl   18, Excl   18
+	Test Point 41 (1.10,1.10):
+		Incl   18, Excl   18
+	Node 42 (1.50,1.00):
+		Incl   18, Excl   18
+	Test Point 42 (1.60,1.10):
+		Incl   18, Excl   18
+	Node 43 (2.00,1.00):
+		Incl   18, Excl   18
+	Test Point 43 (2.10,1.10):
+		Incl   18, Excl   18
+	Node 44 (2.50,1.00):
+		Incl   18, Excl   18
+	Test Point 44 (2.60,1.10):
+		Incl   18, Excl   18
+	Node 45 (3.00,1.00):
+		Incl   18, Excl   18
+	Test Point 45 (3.10,1.10):
+		Incl   18, Excl   18
+	Node 46 (3.50,1.00):
+		Incl   17, Excl   17
+	Test Point 46 (3.60,1.10):
+		Incl   18, Excl   18
+	Node 47 (4.00,1.00):
+		Incl    8, Excl    8
+	Test Point 47 (4.10,1.10):
+		Incl   18, Excl   18
+	Node 48 (4.50,1.00):
+		Incl    9, Excl    9
+	Test Point 48 (4.60,1.10):
+		Incl   18, Excl   18
+	Node 49 (5.00,1.00):
+		Incl   10, Excl   10
+	Test Point 49 (5.10,1.10):
+		Incl   18, Excl   18
+	Node 50 (5.50,1.00):
+		Incl   11, Excl   11
+	Test Point 50 (5.60,1.10):
+		Incl   18, Excl   18
+	Node 51 (6.00,1.00):
+		Incl   11, Excl   11
+	Test Point 51 (6.10,1.10):
+		Incl   18, Excl   18
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testParallelPipedQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testParallelPipedQuadEL.c 3817 2006-09-27 06:55:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Dictionary*		dictionary;
+	Geometry*		geometry;
+	ElementLayout*		eLayout;
+	Topology*		nTopology;
+	NodeLayout*		nLayout;
+	MeshDecomp*		meshDecomp;	
+	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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 13 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "maxX", Dictionary_Entry_Value_FromUnsignedInt( 6 ) );
+	Dictionary_Add( dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "isPeriodicI", Dictionary_Entry_Value_FromBool( True ) );
+	
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "PPQuadEL", 2, dictionary );
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	meshDecomp = (MeshDecomp*)HexaMD_New( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout );
+
+	ElementLayout_Build( eLayout, meshDecomp );
+
+	if (rank == procToWatch) {
+		printf( "Element with point:\n" );
+	}
+	geometry = eLayout->geometry;
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		Index excEl, incEl;
+		
+		geometry->pointAt( geometry, i, point );
+
+		if (rank == procToWatch) {
+			printf( "\tNode %u (%0.2f,%0.2f):\n", i, point[0], point[1] );
+			excEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   EXCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			incEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   INCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			printf( "\t\tIncl %4u, Excl %4u\n", incEl, excEl );
+		}
+
+		point[0] += 0.1;
+		point[1] += 0.1;
+		point[2] += 0.1;
+		
+		if (rank == procToWatch) {
+			printf( "\tTest Point %u (%0.2f,%0.2f):\n", i, point[0], point[1] );
+			excEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   EXCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			incEl = eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+							   INCLUSIVE_UPPER_BOUNDARY, 0, NULL );
+			printf( "\t\tIncl %4u, Excl %4u\n", incEl, excEl );
+		}
+	}
+	if (rank == procToWatch) {
+		printf( "\n" );
+	}	
+	
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( meshDecomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( eLayout );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,48 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Element corner indices:
+	Element 0 : { 0, 1, 5, 4 }
+	Element 1 : { 1, 2, 6, 5 }
+	Element 2 : { 2, 3, 7, 6 }
+	Element 3 : { 4, 5, 9, 8 }
+	Element 4 : { 5, 6, 10, 9 }
+	Element 5 : { 6, 7, 11, 10 }
+	Element 6 : { 8, 9, 13, 12 }
+	Element 7 : { 9, 10, 14, 13 }
+	Element 8 : { 10, 11, 15, 14 }
+
+Corner element indices:
+	Corner 0 : { 9, 9, 9, 0 }
+	Corner 1 : { 9, 9, 0, 1 }
+	Corner 2 : { 9, 9, 1, 2 }
+	Corner 3 : { 9, 9, 2, 9 }
+	Corner 4 : { 9, 0, 9, 3 }
+	Corner 5 : { 0, 1, 3, 4 }
+	Corner 6 : { 1, 2, 4, 5 }
+	Corner 7 : { 2, 9, 5, 9 }
+	Corner 8 : { 9, 3, 9, 6 }
+	Corner 9 : { 3, 4, 6, 7 }
+	Corner 10 : { 4, 5, 7, 8 }
+	Corner 11 : { 5, 9, 8, 9 }
+	Corner 12 : { 9, 6, 9, 9 }
+	Corner 13 : { 6, 7, 9, 9 }
+	Corner 14 : { 7, 8, 9, 9 }
+	Corner 15 : { 8, 9, 9, 9 }
+
+Element with point:
+	Point 0 : 0
+	Point 1 : 1
+	Point 2 : 2
+	Point 3 : 9
+	Point 4 : 3
+	Point 5 : 4
+	Point 6 : 5
+	Point 7 : 9
+	Point 8 : 6
+	Point 9 : 7
+	Point 10 : 8
+	Point 11 : 9
+	Point 12 : 9
+	Point 13 : 9
+	Point 14 : 9
+	Point 15 : 9
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testQuadEL " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testQuadEL.c 3817 2006-09-27 06:55:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			procCount;
+	Dictionary*		dictionary;
+	Geometry*		geometry;
+	ElementLayout*		eLayout;
+	Topology*		nTopology;
+	NodeLayout*		nLayout;
+	HexaMD*			meshDecomp;
+	Element_GlobalIndex	e_I;
+	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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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( 1 ) );
+	
+	geometry = (Geometry*)BlockGeometry_New( "blockGeometry", dictionary );
+	eLayout = (ElementLayout*)HexaEL_New( "QuadEL", 2, dictionary, geometry );
+	nTopology = (Topology*)IJK6Topology_New( "IJK6Topology", dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "CornerNL", dictionary, eLayout, nTopology );
+	meshDecomp = HexaMD_New( "HexaMD", dictionary, MPI_COMM_WORLD, eLayout, nLayout );
+
+	ElementLayout_Build( eLayout, meshDecomp );
+	
+	printf( "Element corner indices:\n" );
+	for( e_I = 0; e_I < eLayout->elementCount; e_I++ ) {
+		Index* corners = Memory_Alloc_Array( Index, eLayout->elementCornerCount, "corners" );
+		
+		eLayout->buildCornerIndices( eLayout, e_I, corners );
+		
+		printf( "\tElement %u : { %u", e_I, corners[0] );
+		for( i = 1; i < eLayout->elementCornerCount; i++ )
+			printf( ", %u", corners[i] );
+		printf( " }\n" );
+	}
+	printf( "\n" );
+	
+	printf( "Corner element indices:\n" );
+	for( i = 0; i < eLayout->cornerCount; i++ ) {
+		Element_GlobalIndex	elementCnt = eLayout->cornerElementCount( eLayout, i );
+		Element_GlobalIndex*	elements = Memory_Alloc_Array( Element_GlobalIndex, elementCnt, "elements" );
+		
+		eLayout->buildCornerElements( eLayout, i, elements );
+		
+		printf( "\tCorner %u : { %u", i, elements[0] );
+		for( e_I = 1; e_I < elementCnt; e_I++ )
+			printf( ", %u", elements[e_I] );
+		printf( " }\n" );
+	}
+	printf( "\n" );
+	
+	printf( "Element with point:\n" );
+	for( i = 0; i < geometry->pointCount; i++ ) {
+		Coord point;
+		
+		geometry->pointAt( geometry, i, point );
+		point[0] += 0.1;
+		point[1] += 0.1;
+		point[2] += 0.1;
+		
+		printf( "\tPoint %u : %u\n", i, eLayout->elementWithPoint( eLayout, meshDecomp, point, NULL, 
+									   EXCLUSIVE_UPPER_BOUNDARY, 0, NULL ) );
+	}
+	printf( "\n" );
+	
+	Stg_Class_Delete( dictionary );
+	Stg_Class_Delete( meshDecomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( nTopology );
+
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( geometry );
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,414 @@
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 0
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.000000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.000000, 0.000000}
+Node 1 : {0.750000, 0.000000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.500000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.500000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.500000, 0.000000}
+Node 1 : {0.750000, 0.500000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.250000, 0.000000}
+Node 1 : {0.000000, 0.750000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.250000, 0.000000}
+Node 1 : {0.500000, 0.750000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 4
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.250000, 0.000000}
+Node 1 : {0.750000, 0.250000, 0.000000}
+Node 2 : {0.250000, 0.750000, 0.000000}
+Node 3 : {0.750000, 0.750000, 0.000000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.000000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.000000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.000000, 0.500000}
+Node 1 : {0.750000, 0.000000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.500000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 1
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.500000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.500000, 0.500000}
+Node 1 : {0.750000, 0.500000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.250000, 0.500000}
+Node 1 : {0.000000, 0.750000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.250000, 0.500000}
+Node 1 : {0.500000, 0.750000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 4
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.250000, 0.500000}
+Node 1 : {0.750000, 0.250000, 0.500000}
+Node 2 : {0.250000, 0.750000, 0.500000}
+Node 3 : {0.750000, 0.750000, 0.500000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.000000, 0.250000}
+Node 1 : {0.000000, 0.000000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.000000, 0.250000}
+Node 1 : {0.500000, 0.000000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 4
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.000000, 0.250000}
+Node 1 : {0.750000, 0.000000, 0.250000}
+Node 2 : {0.250000, 0.000000, 0.750000}
+Node 3 : {0.750000, 0.000000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.500000, 0.250000}
+Node 1 : {0.000000, 0.500000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 2
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.500000, 0.250000}
+Node 1 : {0.500000, 0.500000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 4
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.500000, 0.250000}
+Node 1 : {0.750000, 0.500000, 0.250000}
+Node 2 : {0.250000, 0.500000, 0.750000}
+Node 3 : {0.750000, 0.500000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 4
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.000000, 0.250000, 0.250000}
+Node 1 : {0.000000, 0.750000, 0.250000}
+Node 2 : {0.000000, 0.250000, 0.750000}
+Node 3 : {0.000000, 0.750000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 4
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.500000, 0.250000, 0.250000}
+Node 1 : {0.500000, 0.750000, 0.250000}
+Node 2 : {0.500000, 0.250000, 0.750000}
+Node 3 : {0.500000, 0.750000, 0.750000}
+
+SingleCellMeshGeometry (ptr): 0x80c48f8
+	layout (ptr): 0x80c48d0
+MeshGeometry (ptr): 0x80c48f8
+	buildNodes (func ptr): 0x804f514
+	nodeAt (func ptr): 0x804f56e
+	nodeCount: 8
+Class (ptr): 0x80c48f8
+	sizeOfSelf: 36
+	_deleteSelf: True
+	type: SingleCellMeshGeometry
+	_delete (func ptr): 0x804f46c
+	_print (func ptr): 0x804f498
+Node 0 : {0.250000, 0.250000, 0.250000}
+Node 1 : {0.750000, 0.250000, 0.250000}
+Node 2 : {0.250000, 0.750000, 0.250000}
+Node 3 : {0.750000, 0.750000, 0.250000}
+Node 4 : {0.250000, 0.250000, 0.750000}
+Node 5 : {0.750000, 0.250000, 0.750000}
+Node 6 : {0.250000, 0.750000, 0.750000}
+Node 7 : {0.750000, 0.750000, 0.750000}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testSingleCellMeshGeometry " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testSingleCellMeshGeometry.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	
+	Dictionary	*dictionary;
+	MeshTopology	*pmt;
+	MeshGeometry	*mg, *pmg;
+	MeshDecomp	*pmd;
+	MeshLayout	*pml;
+	Coord		coord;
+	Node_Index	sizeI, sizeJ, sizeK;
+	Index		i;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	/* Read input */
+	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 ) );
+	
+	for (sizeK = 1; sizeK < 4; sizeK++) {
+		for (sizeJ = 1; sizeJ < 4; sizeJ++) {
+			for (sizeI = 1; sizeI < 4; sizeI++) {
+				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 ) );
+				
+				pmt = (MeshTopology*)HexaMeshTopology_New(dictionary);
+				pmg = (MeshGeometry*)HexaMeshGeometry_New(dictionary);
+				pmd = (MeshDecomp*)RegularMeshDecomp_New(dictionary, MPI_COMM_WORLD, pmt);
+				pml = (MeshLayout*)MeshLayout_New(pmt, pmg, pmd);
+				
+				mg = (MeshGeometry *)SingleCellMeshGeometry_New(pml);
+				
+				Print(mg);
+	
+				for (i = 0; i < mg->nodeCount; i++)
+				{
+					printf("Node %u : ", i);
+					mg->nodeAt(mg, i, coord);
+					printf("{%lf, %lf, %lf}\n", coord[0], coord[1], coord[2]);
+				}
+				printf("\n");
+				
+				Stg_Class_Delete(mg);
+				Stg_Class_Delete(pml);
+				Stg_Class_Delete(pmd);
+				Stg_Class_Delete(pmg);
+				Stg_Class_Delete(pmt);
+			}
+		}
+	}
+	
+	/* Destroy stuff */
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,66 @@
+TriSurfGeometry (ptr): 0x8066de8
+	dictionary (ptr): 0x8054b98
+	listKey (ptr): 0x8051259
+		listKey: imNodes
+	nodeTbl (ptr): 0x8057038
+		nodeTbl[0]: {0.2, 0.9, 0.1}
+		nodeTbl[1]: {0.1, 0.7, 0}
+		nodeTbl[2]: {0.2, 0.5, 0.08}
+		nodeTbl[3]: {0.3, 0.3, 0.1}
+		nodeTbl[4]: {0.2, 0.1, 0.1}
+		nodeTbl[5]: {0.3, 0.9, 0.3}
+		nodeTbl[6]: {0.2, 0.7, 0.2}
+		nodeTbl[7]: {0.3, 0.5, 0.28}
+		nodeTbl[8]: {0.4, 0.3, 0.3}
+		nodeTbl[9]: {0.3, 0.1, 0.3}
+		nodeTbl[10]: {0.5, 0.9, 0.5}
+		nodeTbl[11]: {0.4, 0.7, 0.4}
+		nodeTbl[12]: {0.5, 0.5, 0.48}
+		nodeTbl[13]: {0.6, 0.3, 0.4}
+		nodeTbl[14]: {0.5, 0.1, 0.4}
+		nodeTbl[15]: {0.7, 0.9, 0.7}
+		nodeTbl[16]: {0.6, 0.7, 0.6}
+		nodeTbl[17]: {0.7, 0.5, 0.68}
+		nodeTbl[18]: {0.8, 0.3, 0.7}
+		nodeTbl[19]: {0.7, 0.1, 0.7}
+		nodeTbl[20]: {0.8, 0.9, 0.9}
+		nodeTbl[21]: {0.7, 0.7, 0.8}
+		nodeTbl[22]: {0.8, 0.5, 0.88}
+		nodeTbl[23]: {0.9, 0.3, 0.9}
+		nodeTbl[24]: {0.8, 0.1, 0.9}
+MeshGeometry (ptr): 0x8066de8
+	buildNodes (func ptr): 0x804a3e3
+	nodeAt (func ptr): 0x804a430
+	nodeCount: 25
+Class (ptr): 0x8066de8
+	sizeOfSelf: 44
+	_deleteSelf: True
+	type: TriSurfGeometry
+	_delete (func ptr): 0x804a236
+	_print (func ptr): 0x804a27c
+Node 0 : {0.200000, 0.900000, 0.100000}
+Node 1 : {0.100000, 0.700000, 0.000000}
+Node 2 : {0.200000, 0.500000, 0.080000}
+Node 3 : {0.300000, 0.300000, 0.100000}
+Node 4 : {0.200000, 0.100000, 0.100000}
+Node 5 : {0.300000, 0.900000, 0.300000}
+Node 6 : {0.200000, 0.700000, 0.200000}
+Node 7 : {0.300000, 0.500000, 0.280000}
+Node 8 : {0.400000, 0.300000, 0.300000}
+Node 9 : {0.300000, 0.100000, 0.300000}
+Node 10 : {0.500000, 0.900000, 0.500000}
+Node 11 : {0.400000, 0.700000, 0.400000}
+Node 12 : {0.500000, 0.500000, 0.480000}
+Node 13 : {0.600000, 0.300000, 0.400000}
+Node 14 : {0.500000, 0.100000, 0.400000}
+Node 15 : {0.700000, 0.900000, 0.700000}
+Node 16 : {0.600000, 0.700000, 0.600000}
+Node 17 : {0.700000, 0.500000, 0.680000}
+Node 18 : {0.800000, 0.300000, 0.700000}
+Node 19 : {0.700000, 0.100000, 0.700000}
+Node 20 : {0.800000, 0.900000, 0.900000}
+Node 21 : {0.700000, 0.700000, 0.800000}
+Node 22 : {0.800000, 0.500000, 0.880000}
+Node 23 : {0.900000, 0.300000, 0.900000}
+Node 24 : {0.800000, 0.100000, 0.900000}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testTriSurfGeometry " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testTriSurfGeometry.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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 ) {
+		Dictionary*	dictionary;
+		MeshGeometry*	mg;
+		Coord		coord;
+		Index		i;
+		XML_IO_Handler*	io_handler = XML_IO_Handler_New();
+
+		/* Read input */
+		dictionary = Dictionary_New();
+		IO_Handler_ReadAllFromFile(io_handler, "data/surface.xml", dictionary);
+
+		mg = (MeshGeometry*)TriSurfGeometry_New(dictionary, "imNodes");
+		Print(mg);
+
+		for (i = 0; i < mg->nodeCount; i++)
+		{
+			printf("Node %u : ", i);
+			mg->nodeAt(mg, i, coord);
+			printf("{%lf, %lf, %lf}\n", coord[0], coord[1], coord[2]);
+		}
+		printf("\n");
+
+		Stg_Class_Delete(mg);
+
+		/* Destroy stuff */
+		Stg_Class_Delete(dictionary);
+	}
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,289 @@
+TriSurfTopology (ptr): (0x8068648)
+	dictionary (ptr): 0x80563f8
+	listKey (ptr): (0x8052731)
+		listKey: imElements
+	elementTbl (ptr): 0x8058898
+		elementTbl[0]: {0, 1, 5}
+		elementTbl[1]: {1, 2, 6}
+		elementTbl[2]: {2, 3, 7}
+		elementTbl[3]: {3, 4, 8}
+		elementTbl[4]: {1, 6, 5}
+		elementTbl[5]: {2, 7, 6}
+		elementTbl[6]: {3, 8, 7}
+		elementTbl[7]: {4, 9, 8}
+		elementTbl[8]: {5, 6, 10}
+		elementTbl[9]: {6, 7, 11}
+		elementTbl[10]: {7, 8, 12}
+		elementTbl[11]: {8, 9, 13}
+		elementTbl[12]: {6, 11, 10}
+		elementTbl[13]: {7, 12, 11}
+		elementTbl[14]: {8, 13, 12}
+		elementTbl[15]: {9, 14, 13}
+		elementTbl[16]: {10, 11, 15}
+		elementTbl[17]: {11, 12, 16}
+		elementTbl[18]: {12, 13, 17}
+		elementTbl[19]: {13, 14, 18}
+		elementTbl[20]: {11, 16, 15}
+		elementTbl[21]: {12, 17, 16}
+		elementTbl[22]: {13, 18, 17}
+		elementTbl[23]: {14, 19, 18}
+		elementTbl[24]: {15, 16, 20}
+		elementTbl[25]: {16, 17, 21}
+		elementTbl[26]: {17, 18, 22}
+		elementTbl[27]: {18, 19, 23}
+		elementTbl[28]: {16, 21, 20}
+		elementTbl[29]: {17, 22, 21}
+		elementTbl[30]: {18, 23, 22}
+		elementTbl[31]: {19, 24, 23}
+	edgeCount: 56
+	edgeTbl (ptr): 0x80564b0
+		edgeTbl[0]: {0, 1}
+		edgeTbl[1]: {1, 5}
+		edgeTbl[2]: {5, 0}
+		edgeTbl[3]: {1, 2}
+		edgeTbl[4]: {2, 6}
+		edgeTbl[5]: {6, 1}
+		edgeTbl[6]: {2, 3}
+		edgeTbl[7]: {3, 7}
+		edgeTbl[8]: {7, 2}
+		edgeTbl[9]: {3, 4}
+		edgeTbl[10]: {4, 8}
+		edgeTbl[11]: {8, 3}
+		edgeTbl[12]: {6, 5}
+		edgeTbl[13]: {7, 6}
+		edgeTbl[14]: {8, 7}
+		edgeTbl[15]: {4, 9}
+		edgeTbl[16]: {9, 8}
+		edgeTbl[17]: {6, 10}
+		edgeTbl[18]: {10, 5}
+		edgeTbl[19]: {7, 11}
+		edgeTbl[20]: {11, 6}
+		edgeTbl[21]: {8, 12}
+		edgeTbl[22]: {12, 7}
+		edgeTbl[23]: {9, 13}
+		edgeTbl[24]: {13, 8}
+		edgeTbl[25]: {11, 10}
+		edgeTbl[26]: {12, 11}
+		edgeTbl[27]: {13, 12}
+		edgeTbl[28]: {9, 14}
+		edgeTbl[29]: {14, 13}
+		edgeTbl[30]: {11, 15}
+		edgeTbl[31]: {15, 10}
+		edgeTbl[32]: {12, 16}
+		edgeTbl[33]: {16, 11}
+		edgeTbl[34]: {13, 17}
+		edgeTbl[35]: {17, 12}
+		edgeTbl[36]: {14, 18}
+		edgeTbl[37]: {18, 13}
+		edgeTbl[38]: {16, 15}
+		edgeTbl[39]: {17, 16}
+		edgeTbl[40]: {18, 17}
+		edgeTbl[41]: {14, 19}
+		edgeTbl[42]: {19, 18}
+		edgeTbl[43]: {16, 20}
+		edgeTbl[44]: {20, 15}
+		edgeTbl[45]: {17, 21}
+		edgeTbl[46]: {21, 16}
+		edgeTbl[47]: {18, 22}
+		edgeTbl[48]: {22, 17}
+		edgeTbl[49]: {19, 23}
+		edgeTbl[50]: {23, 18}
+		edgeTbl[51]: {21, 20}
+		edgeTbl[52]: {22, 21}
+		edgeTbl[53]: {23, 22}
+		edgeTbl[54]: {19, 24}
+		edgeTbl[55]: {24, 23}
+	edgeElementsTbl (ptr): 0x8068758
+		edgeElementsTbl[0]: {0, 32}
+		edgeElementsTbl[1]: {0, 4}
+		edgeElementsTbl[2]: {0, 32}
+		edgeElementsTbl[3]: {1, 32}
+		edgeElementsTbl[4]: {1, 5}
+		edgeElementsTbl[5]: {1, 4}
+		edgeElementsTbl[6]: {2, 32}
+		edgeElementsTbl[7]: {2, 6}
+		edgeElementsTbl[8]: {2, 5}
+		edgeElementsTbl[9]: {3, 32}
+		edgeElementsTbl[10]: {3, 7}
+		edgeElementsTbl[11]: {3, 6}
+		edgeElementsTbl[12]: {4, 8}
+		edgeElementsTbl[13]: {5, 9}
+		edgeElementsTbl[14]: {6, 10}
+		edgeElementsTbl[15]: {7, 32}
+		edgeElementsTbl[16]: {7, 11}
+		edgeElementsTbl[17]: {8, 12}
+		edgeElementsTbl[18]: {8, 32}
+		edgeElementsTbl[19]: {9, 13}
+		edgeElementsTbl[20]: {9, 12}
+		edgeElementsTbl[21]: {10, 14}
+		edgeElementsTbl[22]: {10, 13}
+		edgeElementsTbl[23]: {11, 15}
+		edgeElementsTbl[24]: {11, 14}
+		edgeElementsTbl[25]: {12, 16}
+		edgeElementsTbl[26]: {13, 17}
+		edgeElementsTbl[27]: {14, 18}
+		edgeElementsTbl[28]: {15, 32}
+		edgeElementsTbl[29]: {15, 19}
+		edgeElementsTbl[30]: {16, 20}
+		edgeElementsTbl[31]: {16, 32}
+		edgeElementsTbl[32]: {17, 21}
+		edgeElementsTbl[33]: {17, 20}
+		edgeElementsTbl[34]: {18, 22}
+		edgeElementsTbl[35]: {18, 21}
+		edgeElementsTbl[36]: {19, 23}
+		edgeElementsTbl[37]: {19, 22}
+		edgeElementsTbl[38]: {20, 24}
+		edgeElementsTbl[39]: {21, 25}
+		edgeElementsTbl[40]: {22, 26}
+		edgeElementsTbl[41]: {23, 32}
+		edgeElementsTbl[42]: {23, 27}
+		edgeElementsTbl[43]: {24, 28}
+		edgeElementsTbl[44]: {24, 32}
+		edgeElementsTbl[45]: {25, 29}
+		edgeElementsTbl[46]: {25, 28}
+		edgeElementsTbl[47]: {26, 30}
+		edgeElementsTbl[48]: {26, 29}
+		edgeElementsTbl[49]: {27, 31}
+		edgeElementsTbl[50]: {27, 30}
+		edgeElementsTbl[51]: {28, 32}
+		edgeElementsTbl[52]: {29, 32}
+		edgeElementsTbl[53]: {30, 32}
+		edgeElementsTbl[54]: {31, 32}
+		edgeElementsTbl[55]: {31, 32}
+MeshTopology (ptr): 0x8068648
+	nodeNeighbourCount (func ptr): 0x804ae6f
+	nodeBuildNeighbours (func ptr): 0x804aed7
+	nodeElementCount (func ptr): 0x804af92
+	nodeBuildElements (func ptr): 0x804b022
+	elementNeighbourCount (func ptr): 0x804b0c5
+	elementBuildNeighbours (func ptr): 0x804b302
+	elementNodeCount (func ptr): 0x804b54f
+	elementBuildNodes (func ptr): 0x804b57b
+	nodeCount: 25
+	elementCount: 32
+	boundaryNodeCount: 0
+	boundaryNodeTbl (ptr): (nil)
+Class (ptr): 0x8068648
+	sizeOfSelf: 92
+	_deleteSelf: True
+	type: TriSurfTopology
+	_delete (func ptr): 0x804ab8b
+	_print (func ptr): 0x804ac05
+Node global: 0, Neighbours: 2, {1, 5}
+Node global: 1, Neighbours: 4, {0, 5, 2, 6}
+Node global: 2, Neighbours: 4, {1, 6, 3, 7}
+Node global: 3, Neighbours: 4, {2, 7, 4, 8}
+Node global: 4, Neighbours: 3, {3, 8, 9}
+Node global: 5, Neighbours: 4, {1, 0, 6, 10}
+Node global: 6, Neighbours: 6, {2, 1, 5, 7, 10, 11}
+Node global: 7, Neighbours: 6, {3, 2, 6, 8, 11, 12}
+Node global: 8, Neighbours: 6, {4, 3, 7, 9, 12, 13}
+Node global: 9, Neighbours: 4, {4, 8, 13, 14}
+Node global: 10, Neighbours: 4, {6, 5, 11, 15}
+Node global: 11, Neighbours: 6, {7, 6, 10, 12, 15, 16}
+Node global: 12, Neighbours: 6, {8, 7, 11, 13, 16, 17}
+Node global: 13, Neighbours: 6, {9, 8, 12, 14, 17, 18}
+Node global: 14, Neighbours: 4, {9, 13, 18, 19}
+Node global: 15, Neighbours: 4, {11, 10, 16, 20}
+Node global: 16, Neighbours: 6, {12, 11, 15, 17, 20, 21}
+Node global: 17, Neighbours: 6, {13, 12, 16, 18, 21, 22}
+Node global: 18, Neighbours: 6, {14, 13, 17, 19, 22, 23}
+Node global: 19, Neighbours: 4, {14, 18, 23, 24}
+Node global: 20, Neighbours: 3, {16, 15, 21}
+Node global: 21, Neighbours: 4, {17, 16, 20, 22}
+Node global: 22, Neighbours: 4, {18, 17, 21, 23}
+Node global: 23, Neighbours: 4, {19, 18, 22, 24}
+Node global: 24, Neighbours: 2, {19, 23}
+
+Node global: 0, Elements: 1, {0}
+Node global: 1, Elements: 3, {0, 1, 4}
+Node global: 2, Elements: 3, {1, 2, 5}
+Node global: 3, Elements: 3, {2, 3, 6}
+Node global: 4, Elements: 2, {3, 7}
+Node global: 5, Elements: 3, {0, 4, 8}
+Node global: 6, Elements: 6, {1, 4, 5, 8, 9, 12}
+Node global: 7, Elements: 6, {2, 5, 6, 9, 10, 13}
+Node global: 8, Elements: 6, {3, 6, 7, 10, 11, 14}
+Node global: 9, Elements: 3, {7, 11, 15}
+Node global: 10, Elements: 3, {8, 12, 16}
+Node global: 11, Elements: 6, {9, 12, 13, 16, 17, 20}
+Node global: 12, Elements: 6, {10, 13, 14, 17, 18, 21}
+Node global: 13, Elements: 6, {11, 14, 15, 18, 19, 22}
+Node global: 14, Elements: 3, {15, 19, 23}
+Node global: 15, Elements: 3, {16, 20, 24}
+Node global: 16, Elements: 6, {17, 20, 21, 24, 25, 28}
+Node global: 17, Elements: 6, {18, 21, 22, 25, 26, 29}
+Node global: 18, Elements: 6, {19, 22, 23, 26, 27, 30}
+Node global: 19, Elements: 3, {23, 27, 31}
+Node global: 20, Elements: 2, {24, 28}
+Node global: 21, Elements: 3, {25, 28, 29}
+Node global: 22, Elements: 3, {26, 29, 30}
+Node global: 23, Elements: 3, {27, 30, 31}
+Node global: 24, Elements: 1, {31}
+
+Element global: 0, Neighbours: 3, {1, 4, 8}
+Element global: 1, Neighbours: 7, {0, 2, 4, 5, 8, 9, 12}
+Element global: 2, Neighbours: 7, {1, 3, 5, 6, 9, 10, 13}
+Element global: 3, Neighbours: 6, {2, 6, 7, 10, 11, 14}
+Element global: 4, Neighbours: 6, {0, 1, 5, 8, 9, 12}
+Element global: 5, Neighbours: 9, {1, 2, 4, 6, 8, 9, 10, 12, 13}
+Element global: 6, Neighbours: 9, {2, 3, 5, 7, 9, 10, 11, 13, 14}
+Element global: 7, Neighbours: 6, {3, 6, 10, 11, 14, 15}
+Element global: 8, Neighbours: 7, {0, 1, 4, 5, 9, 12, 16}
+Element global: 9, Neighbours: 12, {1, 2, 4, 5, 6, 8, 10, 12, 13, 16, 17, 20}
+Element global: 10, Neighbours: 12, {2, 3, 5, 6, 7, 9, 11, 13, 14, 17, 18, 21}
+Element global: 11, Neighbours: 9, {3, 6, 7, 10, 14, 15, 18, 19, 22}
+Element global: 12, Neighbours: 9, {1, 4, 5, 8, 9, 13, 16, 17, 20}
+Element global: 13, Neighbours: 12, {2, 5, 6, 9, 10, 12, 14, 16, 17, 18, 20, 21}
+Element global: 14, Neighbours: 12, {3, 6, 7, 10, 11, 13, 15, 17, 18, 19, 21, 22}
+Element global: 15, Neighbours: 7, {7, 11, 14, 18, 19, 22, 23}
+Element global: 16, Neighbours: 7, {8, 9, 12, 13, 17, 20, 24}
+Element global: 17, Neighbours: 12, {9, 10, 12, 13, 14, 16, 18, 20, 21, 24, 25, 28}
+Element global: 18, Neighbours: 12, {10, 11, 13, 14, 15, 17, 19, 21, 22, 25, 26, 29}
+Element global: 19, Neighbours: 9, {11, 14, 15, 18, 22, 23, 26, 27, 30}
+Element global: 20, Neighbours: 9, {9, 12, 13, 16, 17, 21, 24, 25, 28}
+Element global: 21, Neighbours: 12, {10, 13, 14, 17, 18, 20, 22, 24, 25, 26, 28, 29}
+Element global: 22, Neighbours: 12, {11, 14, 15, 18, 19, 21, 23, 25, 26, 27, 29, 30}
+Element global: 23, Neighbours: 7, {15, 19, 22, 26, 27, 30, 31}
+Element global: 24, Neighbours: 6, {16, 17, 20, 21, 25, 28}
+Element global: 25, Neighbours: 9, {17, 18, 20, 21, 22, 24, 26, 28, 29}
+Element global: 26, Neighbours: 9, {18, 19, 21, 22, 23, 25, 27, 29, 30}
+Element global: 27, Neighbours: 6, {19, 22, 23, 26, 30, 31}
+Element global: 28, Neighbours: 6, {17, 20, 21, 24, 25, 29}
+Element global: 29, Neighbours: 7, {18, 21, 22, 25, 26, 28, 30}
+Element global: 30, Neighbours: 7, {19, 22, 23, 26, 27, 29, 31}
+Element global: 31, Neighbours: 3, {23, 27, 30}
+
+Element global: 0, Nodes: 3, {0, 1, 5}
+Element global: 1, Nodes: 3, {1, 2, 6}
+Element global: 2, Nodes: 3, {2, 3, 7}
+Element global: 3, Nodes: 3, {3, 4, 8}
+Element global: 4, Nodes: 3, {1, 6, 5}
+Element global: 5, Nodes: 3, {2, 7, 6}
+Element global: 6, Nodes: 3, {3, 8, 7}
+Element global: 7, Nodes: 3, {4, 9, 8}
+Element global: 8, Nodes: 3, {5, 6, 10}
+Element global: 9, Nodes: 3, {6, 7, 11}
+Element global: 10, Nodes: 3, {7, 8, 12}
+Element global: 11, Nodes: 3, {8, 9, 13}
+Element global: 12, Nodes: 3, {6, 11, 10}
+Element global: 13, Nodes: 3, {7, 12, 11}
+Element global: 14, Nodes: 3, {8, 13, 12}
+Element global: 15, Nodes: 3, {9, 14, 13}
+Element global: 16, Nodes: 3, {10, 11, 15}
+Element global: 17, Nodes: 3, {11, 12, 16}
+Element global: 18, Nodes: 3, {12, 13, 17}
+Element global: 19, Nodes: 3, {13, 14, 18}
+Element global: 20, Nodes: 3, {11, 16, 15}
+Element global: 21, Nodes: 3, {12, 17, 16}
+Element global: 22, Nodes: 3, {13, 18, 17}
+Element global: 23, Nodes: 3, {14, 19, 18}
+Element global: 24, Nodes: 3, {15, 16, 20}
+Element global: 25, Nodes: 3, {16, 17, 21}
+Element global: 26, Nodes: 3, {17, 18, 22}
+Element global: 27, Nodes: 3, {18, 19, 23}
+Element global: 28, Nodes: 3, {16, 21, 20}
+Element global: 29, Nodes: 3, {17, 22, 21}
+Element global: 30, Nodes: 3, {18, 23, 22}
+Element global: 31, Nodes: 3, {19, 24, 23}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testTriSurfTopology " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,204 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testTriSurfTopology.c 3664 2006-07-04 04:26:57Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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 ) {
+		TriSurfTopology*	mt;
+		Dictionary*		dictionary;
+		XML_IO_Handler*		io_handler = XML_IO_Handler_New();
+
+		Node_GlobalIndex	nodeCnt;
+		Node_NeighbourIndex	nodeNbrCnt;
+		Node_Neighbours		nodeNbr;
+		Node_ElementIndex	nodeEltCnt;
+		Node_Elements		nodeElt;
+		Element_GlobalIndex	eltCnt;
+		Element_NeighbourIndex	elementNbrCnt;
+		Element_Neighbours	elementNbr;
+		Element_NodeIndex	elementNodeCnt;
+		Element_Nodes		elementNode;
+		Index			i, j;
+
+		dictionary = Dictionary_New();
+		IO_Handler_ReadAllFromFile(io_handler, "data/surface.xml", dictionary);
+
+		mt = TriSurfTopology_New(dictionary, "imElements");
+		Print(mt);
+
+		nodeCnt = mt->nodeCount;
+		eltCnt = mt->elementCount;
+
+		for (i = 0; i < nodeCnt; i++)
+		{
+			nodeNbrCnt = mt->nodeNeighbourCount(mt, i);
+			printf("Node global: %u, Neighbours: %u", i, nodeNbrCnt);
+			if (nodeNbrCnt)
+			{
+				nodeNbr = Memory_Alloc_Array( Node_GlobalIndex, nodeNbrCnt, "nodeNbr" );
+				mt->nodeBuildNeighbours(mt, i, nodeNbr);
+				if (nodeNbr[0] < nodeCnt)
+					printf(", {%u", nodeNbr[0]);
+				else
+					printf(", {X");
+				for (j = 1; j < nodeNbrCnt; j++)
+					if (nodeNbr[j] < nodeCnt)
+						printf(", %u", nodeNbr[j]);
+					else
+						printf(", X");
+				printf("}");
+				Memory_Free(nodeNbr);
+			}
+			printf("\n");
+		}
+		printf("\n");
+
+		for (i = 0; i < nodeCnt; i++)
+		{
+			nodeEltCnt = mt->nodeElementCount(mt, i);
+			printf("Node global: %u, Elements: %u", i, nodeEltCnt);
+			if (nodeEltCnt)
+			{
+				nodeElt = Memory_Alloc_Array( Element_DomainIndex, nodeEltCnt, "nodeElt" );
+				mt->nodeBuildElements(mt, i, nodeElt);
+				if (nodeElt[0] < eltCnt)
+					printf(", {%u", nodeElt[0]);
+				else
+					printf(", {X");
+				for (j = 1; j < nodeEltCnt; j++)
+					if (nodeElt[j] < eltCnt)
+						printf(", %u", nodeElt[j]);
+					else
+						printf(", X");
+				printf("}");
+				Memory_Free(nodeElt);
+			}
+			printf("\n");
+		}
+		printf("\n");
+
+		for (i = 0; i < eltCnt; i++)
+		{
+			elementNbrCnt = mt->elementNeighbourCount(mt, i);
+			printf("Element global: %u, Neighbours: %u", i, elementNbrCnt);
+			if (elementNbrCnt)
+			{
+				elementNbr = Memory_Alloc_Array( Node_GlobalIndex, elementNbrCnt, "elementNbr" );
+				mt->elementBuildNeighbours(mt, i, elementNbr);
+				if (elementNbr[0] < eltCnt)
+					printf(", {%u", elementNbr[0]);
+				else
+					printf(", {X");
+				for (j = 1; j < elementNbrCnt; j++)
+					if (elementNbr[j] < eltCnt)
+						printf(", %u", elementNbr[j]);
+					else
+						printf(", X");
+				printf("}");
+				Memory_Free(elementNbr);
+			}
+			printf("\n");
+		}
+		printf("\n");
+
+		for (i = 0; i < eltCnt; i++)
+		{
+			elementNodeCnt = mt->elementNodeCount(mt, i);
+			printf("Element global: %u, Nodes: %u", i, elementNodeCnt);
+			if (elementNodeCnt)
+			{
+				elementNode = Memory_Alloc_Array( Element_DomainIndex, elementNodeCnt, "elementNode" );
+				mt->elementBuildNodes(mt, i, elementNode);
+				if (elementNode[0] < nodeCnt)
+					printf(", {%u", elementNode[0]);
+				else
+					printf(", {X");
+				for (j = 1; j < elementNodeCnt; j++)
+					if (elementNode[j] < nodeCnt)
+						printf(", %u", elementNode[j]);
+					else
+						printf(", X");
+				printf("}");
+				Memory_Free(elementNode);
+			}
+			printf("\n");
+		}
+		printf("\n");
+
+		Stg_Class_Delete(mt);
+		Stg_Class_Delete(dictionary);
+	}
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Discretisation/Bindings
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermainDiscretisation -lStGermainBase `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS)
+LCCFLAGS =
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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/Base/Base.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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Mesh_Python_bindings_h__
+#define __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 /* __Mesh_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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." );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Mesh_Python_misc_h__
+#define __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 /* __Mesh_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 $"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Discretisation
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 $"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: BelowCosinePlane.c 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/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,
+		double                                delta,
+		double                                period,
+		double                                phase )
+{
+	BelowCosinePlane* self = (BelowCosinePlane*) _BelowCosinePlane_DefaultNew( name );
+
+	BelowCosinePlane_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		offset,
+		width,
+		delta,
+		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 delta, double period, double phase ) {
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+
+	_BelowPlane_Init( self, offset, width );	
+	self->delta = delta;
+	self->period = period;
+	self->radPeriod = M_PI * period / 180.0;
+	self->phase = phase;
+}
+
+
+void BelowCosinePlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset, 
+		XYZ                                   width,
+		double                                delta,
+		double                                period,
+		double                                phase )
+{
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+
+	BelowPlane_InitAll( self, dim, centre, alpha, beta, gamma, offset, width );
+	_BelowCosinePlane_Init( self, offset, width, delta, 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->delta = self->delta;
+	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                       delta;
+	double                       period;
+	double                       phase;
+
+	_BelowPlane_Construct( self, cf, data );
+
+	delta = Stg_ComponentFactory_GetDouble( cf, self->name, "delta", 0.5 );
+	period = Stg_ComponentFactory_GetDouble( cf, self->name, "period", 1.0 );
+	phase = Stg_ComponentFactory_GetDouble( cf, self->name, "phase", 0.0 );
+
+	_BelowCosinePlane_Init( self, self->offset, self->width, delta, 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->delta * cos( ( self->radPeriod * x ) + self->phase );
+
+	if ( fabs( newCoord[ J_AXIS ] < y) ) {
+		return True;
+	}
+	return False;
+}
+
+double _BelowCosinePlane_CalculateVolume( void* belowPlane ) {
+	BelowCosinePlane* self = (BelowCosinePlane*)belowPlane;
+	double volume;
+
+	if ( self->dim == 2 ) {
+		/*
+		 * y = delta * cos( radPeriod * x + phase ) + offset
+		 *
+		 * A = [ (delta/radPeriod) * sin( radPeriod * x + phase ) + offset * x ] (from phase to width)
+		 */
+		volume =
+		( 
+			( self->delta / self->radPeriod ) * sin( (self->radPeriod * self->width[ I_AXIS ]) + self->phase ) + 
+			( self->offset * self->width[ I_AXIS ] ) 
+		)
+		-
+		(
+			( self->delta / self->radPeriod ) * sin( self->phase ) + ( self->offset * self->phase ) 
+		);
+	}
+	else {
+		/* does not work in 3D right now...work out the integral later */
+		volume = 1.0;
+	}
+	
+	return volume;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Comments:
+**
+** $Id: BelowCosinePlane.h 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Discretisation_Shape_BelowCosinePlaneClass_h__
+#define __StGermain_Discretisation_Shape_BelowCosinePlaneClass_h__
+
+	/* Textual name of this class */
+	extern const Type BelowCosinePlane_Type;
+
+	/* BelowCosinePlane information */
+	#define __BelowCosinePlane \
+		/* General info */ \
+		__BelowPlane \
+		/* Virtual Info */\
+		\
+		double                  delta;  \
+		double                  period; \
+		double                  radPeriod; \
+		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 delta, double period, double phase ) ;
+	void BelowCosinePlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset,
+		XYZ                                   width,
+		double                                delta,
+		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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+<?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="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="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>
+	<struct>
+		<param name="Name">delta</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.5</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">preiod</param>
+		<param name="Type">Double</param>
+		<param name="Default">1.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">phase</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,276 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org) )
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 <Base/Base.h>
+#include <Discretisation/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 )
+{
+	BelowPlane* self = (BelowPlane*) _BelowPlane_DefaultNew( name );
+
+	BelowPlane_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		offset,
+		width ) ;
+	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 ) {
+	BelowPlane* self = (BelowPlane*)belowPlane;
+
+	self->offset = offset;
+
+	memcpy( self->width, width, sizeof(XYZ) );
+}
+
+
+void BelowPlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offest,
+		XYZ                                   width )
+{
+	BelowPlane* self = (BelowPlane*)belowPlane;
+
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma );
+	_BelowPlane_Init( self, offest, width );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** 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 );
+}
+
+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;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: BelowPlane.h 3523 2006-04-11 06:42:09Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Discretisation_Shape_BelowPlaneClass_h__
+#define __StGermain_Discretisation_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 */
+
+	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 ) ;
+	void BelowPlane_InitAll( 
+		void*                                 belowPlane, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		double                                offset,
+		XYZ                                   width );
+
+	/* 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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">BelowPlane</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/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;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_BoxClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Box</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/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 ) 
+				{ Vector_Div( 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;
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_ConvexHullClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ConvexHull</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/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;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_CylinderClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,76 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_EverywhereClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Everywhere</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/Geometry/Geometry.h>
+
+
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool DiscretisationShape_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_Finalise_h__
+#define __StGermain_Discretisation_Shape_Finalise_h__
+	
+	Bool DiscretisationShape_Finalise( void ) ;
+	
+#endif 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/Geometry/Geometry.h>
+
+
+#include "Shape.h"
+
+#include <stdio.h>
+
+Bool DiscretisationShape_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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_Init_h__
+#define __StGermain_Discretisation_Shape_Init_h__
+	
+	Bool DiscretisationShape_Init( int* argc, char** argv[] );
+	
+#endif 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/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
+*/
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_IntersectionClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Intersection</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: PolygonShape.c 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/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,
+		double                                startZ,
+		double                                endZ )
+{
+	PolygonShape* self = (PolygonShape*)_PolygonShape_DefaultNew( name );
+
+	PolygonShape_InitAll( 
+		self, 
+		dim,
+		centre,
+		alpha,
+		beta,
+		gamma,
+		vertexList,
+		vertexCount,
+		startZ,
+		endZ);
+	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, double startZ, double endZ ) {
+	PolygonShape* self = (PolygonShape*)polygon;
+	
+	self->vertexList = Memory_Alloc_Array( Coord, vertexCount, "vertexList" );
+	memcpy( self->vertexList , vertexList, sizeof(Coord) * vertexCount );
+	self->vertexCount = vertexCount;
+	self->startZ = startZ;
+	self->endZ   = endZ;
+}
+
+
+void PolygonShape_InitAll( 
+		void*                                 polygon, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount,
+		double                                startZ,
+		double                                endZ	)
+{
+	PolygonShape* self = (PolygonShape*)polygon;
+	Stg_Shape_InitAll( self, dim, centre, alpha, beta, gamma);
+	_PolygonShape_Init( self, vertexList, vertexCount, startZ, endZ );
+}
+	
+
+/*------------------------------------------------------------------------------------------------------------------------
+** 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;
+	newPolygonShape->startZ      = self->startZ;
+	newPolygonShape->endZ        = self->endZ;
+	
+	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;
+	double                  startZ;
+	double                  endZ;
+	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 );
+
+	startZ = Stg_ComponentFactory_GetDouble( cf, self->name, "startZ", 0.0 );
+	endZ   = Stg_ComponentFactory_GetDouble( cf, self->name, "endZ",   0.0 );
+
+	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 */
+		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"));
+
+		/* Print Position */
+		Journal_PrintfL( stream, 2, "(%0.3g, %0.3g)\n", coord[ I_AXIS ], coord[ J_AXIS ] );
+	}
+	Stream_UnIndent( stream );
+
+	_PolygonShape_Init( self, vertexList, vertexCount, startZ, endZ );
+
+	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;
+	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[ K_AXIS ] < self->startZ || testCoord[ K_AXIS ] > self->endZ ))
+		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, 2 );
+		StGermain_VectorSubtraction( vectorToEndVertex,   testCoord, endVertex,   2 );
+
+		/* Work out angle - just by doing dot product - will always be positive */
+		currAngle = StGermain_AngleBetweenVectors( vectorToStartVertex, vectorToEndVertex, 2 );
+
+		/* Work out 'sign' of angle but working out cross product */
+		StGermain_VectorCrossProduct( crossproduct, vectorToEndVertex, vectorToStartVertex );
+
+		if ( crossproduct[ K_AXIS ] > 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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: PolygonShape.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Discretisation_Shape_PolygonShapeClass_h__
+#define __StGermain_Discretisation_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;   \
+		double                  startZ;        \
+		double                  endZ;          \
+
+	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,
+		double                                startZ,
+		double                                endZ);
+		
+	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, double startZ, double endZ ) ;
+	void PolygonShape_InitAll( 
+		void*                                 polygon, 
+		Dimension_Index                       dim, 
+		Coord                                 centre,
+		double                                alpha,
+		double                                beta,
+		double                                gamma,
+		Coord_List                            vertexList,
+		Index                                 vertexCount,
+		double                                startZ,
+		double                                endZ
+		) ;
+		
+	/* 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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">PolygonShape</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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">startZ</param>
+		<param name="Type">Double</param>
+		<param name="Default">0.0</param>
+		<param name="Description">...</param>
+	</struct>
+	<struct>
+		<param name="Name">endZ</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/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 */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_PythonShapeClass_h__
+#define __StGermain_Discretisation_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 */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">PythonShape</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Shape.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Shape.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Shape.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/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;
+
+	Vector_Sub( translatedCoord, coord, self->centre );
+}
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_Shape_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Stg_Shape</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/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;
+	}
+}
+	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_SphereClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Sphere</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/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;
+}
+	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_SuperellipsoidClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Superellipsoid</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3869 2006-10-16 13:42:59Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/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;
+}
+	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_UnionClass_h__
+#define __StGermain_Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Union</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+#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
+
+# Source Code and Header files
+SRCS := $(wildcard *.c)
+HDRS := $(wildcard *.h)
+
+# External Libraries and Headers 
+packages = MPI XML 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+EXTERNAL_INCLUDES += -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBase -lStGermainDiscretisationGeometry
+
+# Work out name to call library
+lib = ${PROJECT}Discretisation$(shell basename `pwd | sed s/src//g`)
+libdynamic = yes
+libstatic = yes
+
+# Name of directory to place header files
+includes := ${PROJECT}/Discretisation/$(shell basename `pwd | sed s/src//g`)
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Shape_types_h__
+#define __StGermain_Discretisation_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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/Viewport.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/Viewport.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/Viewport.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull2D.0of1.output.dat.expected
===================================================================

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testCylinder.0of1.output.dat.expected
===================================================================

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+1589
+2497
+4125
+4126
+4441
+6110
+7057
+7121
+7133
+7945
+9743

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape3D.0of1.output.dat.expected
===================================================================

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3D.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3D.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3D.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+
+#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}_DiscretisationShape
+
+SRCS = $(wildcard *.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} -lStGermainDiscretisationShape -lStGermainDiscretisationGeometry -lStGermainBase ${RPATH_LFLAGS}
+
+packages = MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/output/window.mpeg
===================================================================

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DDoubleNot.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DDoubleNot.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DDoubleNot.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DDoubleNot.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DSingleNot.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DSingleNot.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DSingleNot.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DSingleNot.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DDoubleNot.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DDoubleNot.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DDoubleNot.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DDoubleNot.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DSingleNot.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DSingleNot.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DSingleNot.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DSingleNot.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionDoubleNot.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionDoubleNot.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionDoubleNot.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionSingleNot.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionSingleNot.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionSingleNot.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,103 @@
+#ifdef HAVE_PYTHON
+#include <Python.h>
+#endif
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/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
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_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 );
+	
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	Base_Finalise();
+	
+	#ifdef HAVE_PYTHON
+	Py_Finalize();
+	#endif
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere-invert.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere-invert.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere-invert.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D-invert.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D-invert.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D-invert.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D-invert.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2DSingleNot.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2DSingleNot.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2DSingleNot.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2DSingleNot.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3D.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3D.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3D.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3D.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3DSingleNot.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3DSingleNot.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3DSingleNot.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3DSingleNot.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnionSingleNot.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnionSingleNot.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnionSingleNot.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libDiscretisationSwarm
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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, Element_DomainIndex 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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,149 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_CellLayout_h__
+#define __Discretisation_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, 
+										Cell_Points points );
+	typedef Cell_Index	(CellLayout_MapElementIdToCellIdFunction)	( void* cellLayout, Element_DomainIndex 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, Element_DomainIndex 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 /* __Discretisation_Swarm_CellLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,419 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "shortcuts.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;
+	if (False == self->mesh->buildElementNodeTbl ) {
+		Stream* elementCellLayoutStream = Journal_Register( ErrorStream_Type, self->type );
+		Journal_Printf( elementCellLayoutStream, "Warning: Mesh not configured to build element node table. "
+			"Activating it now.\n" );
+		Mesh_ActivateElementNodeTbl( self->mesh );
+	}
+}
+
+
+void _ElementCellLayout_Delete( void* elementCellLayout ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	
+	/* 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 ){
+	
+}
+	
+void _ElementCellLayout_Initialise( void *elementCellLayout, void *data ){
+	
+}
+	
+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 self->mesh->elementLocalCount;
+}
+
+Cell_Index _ElementCellLayout_CellShadowCount( void* elementCellLayout ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	return self->mesh->elementShadowCount;
+}
+
+Cell_PointIndex _ElementCellLayout_PointCount( void* elementCellLayout, Cell_Index cellIndex ) {
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	return self->mesh->elementNodeCountTbl[cellIndex];
+}
+
+void _ElementCellLayout_InitialisePoints( void* elementCellLayout, Cell_Index cellIndex, Cell_PointIndex pointCount, 
+		Cell_Points points ) 
+{
+	ElementCellLayout* self = (ElementCellLayout*)elementCellLayout;
+	Cell_PointIndex point_I;
+	
+	/* point to the mesh's node's coordinates */
+	for( point_I = 0; point_I < pointCount; point_I++ ) {
+		points[point_I] = &self->mesh->nodeCoord[self->mesh->elementNodeTbl[cellIndex][point_I]];
+	}
+}
+
+
+Cell_Index _ElementCellLayout_MapElementIdToCellId( void* elementCellLayout, Element_DomainIndex element_dI ) {
+	
+	#ifdef CAUTIOUS
+	{
+		ElementCellLayout*      self = (ElementCellLayout*)elementCellLayout;
+		Stream* errorStr = Journal_Register( Error_Type, self->type );
+		Journal_Firewall( element_dI < self->mesh->elementDomainCount, 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, self->mesh->elementDomainCount );
+	}	
+	#endif
+	
+	return element_dI;
+}
+
+
+Bool _ElementCellLayout_IsInCell( void* elementCellLayout, Cell_Index cellIndex, void* _particle ) {
+	ElementCellLayout*      self     = (ElementCellLayout*)elementCellLayout;
+	ElementLayout*		eLayout  = self->mesh->layout->elementLayout;
+	GlobalParticle*	        particle = (GlobalParticle*)_particle;
+	Index                   element_I = 0;
+
+	/* If we already have an owning cell, use that as a hint as to where the particle may now be. */
+	if( particle->owningCell < self->mesh->layout->decomp->elementDomainCount ) {
+		Mesh*		mesh = self->mesh;
+		unsigned	elInd = particle->owningCell;
+
+		/* Check current cell. */
+		element_I = eLayout->elementWithPoint( eLayout, self->mesh->layout->decomp, particle->coord, self->mesh, 
+						       EXCLUSIVE_UPPER_BOUNDARY, 
+						       1, &elInd );
+
+		if( element_I >= mesh->layout->decomp->elementDomainCount ) {
+			/* Check neighbours. */
+			if( mesh->elementNeighbourCountTbl && mesh->elementNeighbourTbl ) {
+				element_I = eLayout->elementWithPoint( eLayout, self->mesh->layout->decomp, particle->coord, 
+								       self->mesh, 
+								       EXCLUSIVE_UPPER_BOUNDARY, 
+								       mesh->elementNeighbourCountTbl[elInd], 
+								       mesh->elementNeighbourTbl[elInd] );
+			}
+
+			if( element_I >= mesh->layout->decomp->elementDomainCount ) {
+				/* Check the lot. */
+				/* Use exclusive upper boundaries, since we want a unique answer across the processors as to
+				   which proc owns a certain particle in its local space */
+				element_I = Mesh_ElementWithPoint( self->mesh, particle->coord, EXCLUSIVE_UPPER_BOUNDARY );
+			}
+		}
+	}
+	else {
+		/* Check the lot. */
+		/* Use exclusive upper boundaries, since we want a unique answer across the processors as to
+		   which proc owns a certain particle in its local space */
+		element_I = Mesh_ElementWithPoint( self->mesh, particle->coord, EXCLUSIVE_UPPER_BOUNDARY );
+	}
+
+	return element_I == cellIndex ? True : False;
+}
+
+Cell_Index _ElementCellLayout_CellOf( void* elementCellLayout, void* _particle ) {
+	ElementCellLayout*      self     = (ElementCellLayout*)elementCellLayout;
+	ElementLayout*		eLayout  = self->mesh->layout->elementLayout;
+	GlobalParticle*	        particle = (GlobalParticle*)_particle;
+	unsigned		element_I;
+
+	/* If we already have an owning cell, use that as a hint as to where the particle may now be. */
+	if( particle->owningCell < self->mesh->layout->decomp->elementDomainCount ) {
+		Mesh*		mesh = self->mesh;
+		unsigned	elInd = particle->owningCell;
+
+		/* Check current cell. */
+		element_I = eLayout->elementWithPoint( eLayout, self->mesh->layout->decomp, particle->coord, self->mesh, 
+						       EXCLUSIVE_UPPER_BOUNDARY, 
+						       1, &elInd );
+
+		if( element_I >= mesh->layout->decomp->elementDomainCount ) {
+			/* Check neighbours. */
+			if( mesh->elementNeighbourCountTbl && mesh->elementNeighbourTbl ) {
+				element_I = eLayout->elementWithPoint( eLayout, self->mesh->layout->decomp, particle->coord,
+								       self->mesh, 
+								       EXCLUSIVE_UPPER_BOUNDARY, 
+								       mesh->elementNeighbourCountTbl[elInd], 
+								       mesh->elementNeighbourTbl[elInd] );
+			}
+
+			if( element_I >= mesh->layout->decomp->elementDomainCount ) {
+				/* Check the lot. */
+				/* Use exclusive upper boundaries, since we want a unique answer across the processors as to
+				   which proc owns a certain particle in its local space */
+				element_I = Mesh_ElementWithPoint( self->mesh, particle->coord, EXCLUSIVE_UPPER_BOUNDARY );
+			}
+		}
+	}
+	else {
+		/* Check the lot. */
+		/* Use exclusive upper boundaries, since we want a unique answer across the processors as to
+		   which proc owns a certain particle in its local space */
+		element_I = Mesh_ElementWithPoint( self->mesh, particle->coord, EXCLUSIVE_UPPER_BOUNDARY );
+	}
+
+	return element_I;
+}
+
+
+ShadowInfo* _ElementCellLayout_GetShadowInfo( void* elementCellLayout ) {
+	ElementCellLayout*      self = (ElementCellLayout*)elementCellLayout;
+
+	return self->mesh->elementShadowInfo;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_ElementCellLayout_h__
+#define __Discretisation_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;
+
+	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, 
+		Cell_Points points );
+	
+	/** Implements CellLayout_MapElementIdToCellId(): just returns a cell number, after checking size */
+	Cell_Index _ElementCellLayout_MapElementIdToCellId( void* cellLayout, Element_DomainIndex 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 );
+	
+#endif /* __Discretisation_Swarm_ElementCellLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: FileParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 "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 );
+}
+		
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_FileParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_FileParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">FileParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include "Swarm_Register.h"
+
+
+#include <stdio.h>
+
+Bool DiscretisationSwarm_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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_Finalise_h__
+#define __Discretisation_Swarm_Finalise_h__
+	
+	Bool DiscretisationSwarm_Finalise( void );
+	
+#endif /* __Discretisation_Swarm_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_GaussParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_GaussParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">GaussParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_GlobalParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_GlobalParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">GlobalParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,143 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3887 2006-11-06 05:19:51Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Init.h"
+
+#include "ParticleLayout.h"
+#include "PerCellParticleLayout.h"
+#include "GaussParticleLayout.h"
+#include "TriGaussParticleLayout.h"
+#include "RandomParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "SpaceFillerParticleLayout.h"
+#include "WithinShapeParticleLayout.h"
+#include "ManualParticleLayout.h"
+#include "LineParticleLayout.h"
+#include "PlaneParticleLayout.h"
+#include "FileParticleLayout.h"
+#include "CellLayout.h"
+#include "SingleCellLayout.h"
+#include "ElementCellLayout.h"
+#include "Swarm.h"
+#include "Swarm_Register.h"
+#include "SwarmVariable_Register.h"
+#include "SwarmVariable.h"
+#include "OperatorSwarmVariable.h"
+#include "SwarmOutput.h"
+#include "SwarmDump.h"
+
+#include "StandardParticle.h"
+#include "IntegrationPoint.h"
+
+#include "Swarm.h"
+
+#include <stdio.h>
+
+Stream* Swarm_VerboseConfig = NULL;
+Stream* Swarm_Debug = NULL;
+Stream* Swarm_Warning = NULL;
+Stream* Swarm_Error = NULL;
+
+Bool DiscretisationSwarm_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 */
+	
+	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(), 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 );
+
+	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( 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( Swarm_Type, Stg_Component_Type );
+	RegisterParent( Swarm_Register_Type, Stg_Class_Type );
+
+	/* Create the singletons */
+	stgSwarm_Register = Swarm_Register_New(); 
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_Init_h__
+#define __Discretisation_Swarm_Init_h__
+	
+	Bool DiscretisationSwarm_Init( int* argc, char** argv[] );
+	
+#endif /* __Discretisation_Swarm_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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";
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_IntegrationPoint_h__
+#define __Discretisation_Swarm_IntegrationPoint_h__
+
+	extern const Type IntegrationPoint_Type;
+
+	#define __IntegrationPoint \
+		__LocalParticle \
+		double			weight;         /**< Integration weight of this point */
+
+	struct IntegrationPoint { __IntegrationPoint };
+
+#endif /* __Discretisation_Swarm_IntegrationPoint_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: LineParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 "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 ] )  ;
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_LineParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_LineParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,76 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_lib = StGermainDiscretisationSwarm
+def_inc = StGermain/Discretisation/Swarm
+
+def_srcs = $(wildcard *.c)
+
+def_hdrs = $(wildcard *.h)
+
+def_objlists = 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: ManualParticleLayout.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 "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 );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_ManualParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_ManualParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,67 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,291 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 = self->mesh->nSpaceDims;
+	Coord*			nodeCoords = self->mesh->nodeCoord;
+	unsigned		nNodes, *incNodes;
+	Particle_InCellIndex	particlesThisCell = swarm->cellParticleCountTbl[cell_I];
+	Particle_InCellIndex	cParticle_I = 0;
+	GlobalParticle*	        particle = NULL;
+	unsigned		d_i, n_i;
+
+	assert( nDims == 2 || nDims == 3 );
+
+	nNodes = self->mesh->elementNodeCountTbl[cell_I];
+	incNodes = self->mesh->elementNodeTbl[cell_I];
+
+	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[3] = 0.25 * (1.0 - localCoord[0]) * (1.0 + localCoord[1]);
+			basis[2] = 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[3] = 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[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[7] = 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]);
+		}
+
+		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];
+			}
+		}
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_MeshParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_MeshParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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++ ) 
+		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++ ) 
+		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 ); 
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_OperatorSwarmVariable_h__
+#define __Discretisation_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 /* __Discretisation_Utils_OperatorSwarmVariable_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1491 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3885 2006-10-26 05:52:26Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "ParticleCommHandler.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 ParticleCommHandler_Type = "ParticleCommHandler";
+
+/* MPI tags */
+static const int SHADOW_PARTICLE_COUNTS_PER_CELL = 10;
+static const int SHADOW_PARTICLES = 20;
+
+ParticleCommHandler* ParticleCommHandler_DefaultNew( Name name )
+{
+	return _ParticleCommHandler_New( sizeof(ParticleCommHandler), ParticleCommHandler_Type,
+		_ParticleCommHandler_Delete, _ParticleCommHandler_Print, _ParticleCommHandler_Copy,
+		(Stg_Component_DefaultConstructorFunction*)ParticleCommHandler_DefaultNew,
+		_ParticleCommHandler_Construct, _ParticleCommHandler_Build, _ParticleCommHandler_Initialise,
+		_ParticleCommHandler_Execute, _ParticleCommHandler_Destroy, name, False,
+		_ParticleCommHandler_HandleParticleMovementBetweenProcs, NULL );
+}
+
+ParticleCommHandler* ParticleCommHandler_New( 
+		Name name,
+		void* swarm )
+{
+	return _ParticleCommHandler_New( sizeof(ParticleCommHandler), ParticleCommHandler_Type,
+		_ParticleCommHandler_Delete, _ParticleCommHandler_Print, _ParticleCommHandler_Copy,
+		(Stg_Component_DefaultConstructorFunction*)ParticleCommHandler_DefaultNew,
+		_ParticleCommHandler_Construct, _ParticleCommHandler_Build, _ParticleCommHandler_Initialise,
+		_ParticleCommHandler_Execute, _ParticleCommHandler_Destroy, name, True,
+		_ParticleCommHandler_HandleParticleMovementBetweenProcs, swarm );
+}
+
+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_HandleParticleMovementBetweenProcsFunction	handleParticleMovementBetweenProcs,
+		void*								swarm )
+{
+	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->_handleParticleMovementBetweenProcs = handleParticleMovementBetweenProcs;
+	
+	/* ParticleCommHandler info */
+	if( initFlag ){
+		_ParticleCommHandler_Init( self, swarm );
+	}
+	
+	return self;
+}
+
+
+void _ParticleCommHandler_Init( ParticleCommHandler* self, void* swarm ) {
+	self->isConstructed = True;
+	self->swarm = (Swarm*) swarm;
+	self->debug = Stream_RegisterChild( Swarm_Debug, self->type );
+	self->shadowParticlesLeavingMeIndices = NULL;
+	self->shadowParticlesLeavingMeTotalCount = 0;
+	self->shadowParticlesLeavingMeUnfilledCount = 0;
+	self->currShadowParticleLeavingMeIndex = 0;
+	self->particlesOutsideDomainIndices = NULL;
+	self->particlesOutsideDomainTotalCount = 0;
+	self->particlesOutsideDomainUnfilledCount = 0;
+	self->currParticleLeavingMyDomainIndex = 0;
+	self->defensive = True;
+}
+
+
+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->_handleParticleMovementBetweenProcs (ptr): %p\n", 
+		self->_handleParticleMovementBetweenProcs );
+
+	/* 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->particlesOutsideDomainTotalCount: %d\n", self->particlesOutsideDomainTotalCount ); 
+	Journal_Printf( stream, "self->particlesOutsideDomainUnfiledCount: %d\n", self->particlesOutsideDomainUnfilledCount ); 
+	Journal_Printf( stream, "self->currParticleLeavingMyDomainIndex: %d\n", self->currParticleLeavingMyDomainIndex ); 
+	Journal_Printf( stream, "self->particlesOutsideDomainIndices(ptr): %p\n", self->particlesOutsideDomainIndices ); 
+}
+
+
+void* _ParticleCommHandler_Copy( void* particleCommHandler, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	ParticleCommHandler*	self = (ParticleCommHandler*)particleCommHandler;
+	ParticleCommHandler*	newParticleCommHandler;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newParticleCommHandler = _Stg_Class_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newParticleCommHandler->_handleParticleMovementBetweenProcs = self->_handleParticleMovementBetweenProcs;
+	
+	newParticleCommHandler->shadowParticlesLeavingMeTotalCount = self->shadowParticlesLeavingMeTotalCount;
+	newParticleCommHandler->shadowParticlesLeavingMeUnfilledCount = self->shadowParticlesLeavingMeUnfilledCount;
+	newParticleCommHandler->currShadowParticleLeavingMeIndex = self->currShadowParticleLeavingMeIndex;
+	newParticleCommHandler->particlesOutsideDomainTotalCount = self->particlesOutsideDomainTotalCount;
+	newParticleCommHandler->particlesOutsideDomainUnfilledCount = self->particlesOutsideDomainUnfilledCount;
+	newParticleCommHandler->currParticleLeavingMyDomainIndex = self->currParticleLeavingMyDomainIndex;
+	
+	if( deep ) {
+		newParticleCommHandler->debug = (Stream*)Stg_Class_Copy( self->debug, NULL, deep, nameExt, map );
+		newParticleCommHandler->swarm = (Swarm*)Stg_Class_Copy( self->swarm, NULL, deep, nameExt, map );
+		
+		if( (newParticleCommHandler->shadowParticlesLeavingMeIndices = PtrMap_Find( map, self->shadowParticlesLeavingMeIndices )) == NULL && self->shadowParticlesLeavingMeIndices ) {
+			newParticleCommHandler->shadowParticlesLeavingMeIndices = Memory_Alloc_Array( Index, newParticleCommHandler->shadowParticlesLeavingMeTotalCount, "ParticleCommHandler->shadowParticlesLeavingMeIndices" );
+			memcpy( newParticleCommHandler->shadowParticlesLeavingMeIndices, self->shadowParticlesLeavingMeIndices, sizeof(Index) * newParticleCommHandler->shadowParticlesLeavingMeTotalCount );
+			PtrMap_Append( map, self->shadowParticlesLeavingMeIndices, newParticleCommHandler->shadowParticlesLeavingMeIndices );
+		}
+		
+		if( (newParticleCommHandler->particlesOutsideDomainIndices = PtrMap_Find( map, self->particlesOutsideDomainIndices )) == NULL && self->particlesOutsideDomainIndices ) {
+			newParticleCommHandler->particlesOutsideDomainIndices = Memory_Alloc_Array( Index, newParticleCommHandler->particlesOutsideDomainTotalCount, "ParticleCommHandler->particlesOutsideDomainIndices" );
+			memcpy( newParticleCommHandler->particlesOutsideDomainIndices, self->particlesOutsideDomainIndices, sizeof(Index) * newParticleCommHandler->particlesOutsideDomainTotalCount );
+			PtrMap_Append( map, self->particlesOutsideDomainIndices, newParticleCommHandler->particlesOutsideDomainIndices );
+		}
+		
+		if( (newParticleCommHandler->shadowParticlesLeavingMeTotalCounts = PtrMap_Find( map, self->shadowParticlesLeavingMeTotalCounts )) == NULL && self->shadowParticlesLeavingMeTotalCounts ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			
+			newParticleCommHandler->shadowParticlesLeavingMeTotalCounts = Memory_Alloc_Array( Particle_Index, nbrCount, "ParticleCommHandler->shadowParticlesLeavingMeTotalCounts" );
+			memcpy( newParticleCommHandler->shadowParticlesLeavingMeTotalCounts, self->shadowParticlesLeavingMeTotalCounts, sizeof(Particle_Index) * nbrCount );
+			PtrMap_Append( map, self->shadowParticlesLeavingMeTotalCounts, newParticleCommHandler->shadowParticlesLeavingMeTotalCounts );
+		}
+		
+		if( (newParticleCommHandler->shadowParticlesLeavingMeCountsPerCell = PtrMap_Find( map, self->shadowParticlesLeavingMeCountsPerCell )) == NULL && self->shadowParticlesLeavingMeCountsPerCell ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->shadowParticlesLeavingMeCountsPerCell = Memory_Alloc_2DComplex( Particle_Index, nbrCount, newParticleCommHandler->shadowParticlesLeavingMeTotalCounts, "ParticleCommHandler->shadowParticlesLeavingMeCountsPerCell" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				memcpy( newParticleCommHandler->shadowParticlesLeavingMeCountsPerCell[nbr_I], self->shadowParticlesLeavingMeCountsPerCell[nbr_I], sizeof(Particle_Index) * newParticleCommHandler->shadowParticlesLeavingMeTotalCounts[nbr_I] );
+			}
+			PtrMap_Append( map, self->shadowParticlesLeavingMeCountsPerCell, newParticleCommHandler->shadowParticlesLeavingMeCountsPerCell );
+		}
+		
+		if( (newParticleCommHandler->shadowParticlesLeavingMe = PtrMap_Find( map, self->shadowParticlesLeavingMe )) == NULL && self->shadowParticlesLeavingMe ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->shadowParticlesLeavingMe = Memory_Alloc_Array( Particle*, nbrCount, "ParticleCommHandler->shadowParticlesLeavingMe" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				SizeT	particlesArraySize = self->swarm->particleExtensionMgr->finalSize * newParticleCommHandler->shadowParticlesLeavingMeTotalCounts[nbr_I];
+				
+				newParticleCommHandler->shadowParticlesLeavingMe[nbr_I] = Memory_Alloc_Bytes( particlesArraySize, "Particle", "particleCommHandler->shadowParticlesLeavingMe[]" );
+				memcpy( newParticleCommHandler->shadowParticlesLeavingMe[nbr_I], self->shadowParticlesLeavingMe[nbr_I], particlesArraySize );
+			}
+			PtrMap_Append( map, self->shadowParticlesLeavingMe, newParticleCommHandler->shadowParticlesLeavingMe );
+		}
+		
+		if( (newParticleCommHandler->shadowParticlesLeavingMeHandles = PtrMap_Find( map, self->shadowParticlesLeavingMeHandles )) == NULL && self->shadowParticlesLeavingMeHandles ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->shadowParticlesLeavingMeHandles = Memory_Alloc_Array( MPI_Request*, nbrCount, "ParticleCommHandler->shadowParticlesLeavingMeHandles" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				if( self->shadowParticlesLeavingMeHandles[nbr_I] ) {
+					newParticleCommHandler->shadowParticlesLeavingMeHandles[nbr_I] = Memory_Alloc( MPI_Request, "particleCommHandler->shadowParticlesLeavingMeHandles[]" );
+					memcpy( newParticleCommHandler->shadowParticlesLeavingMeHandles[nbr_I], self->shadowParticlesLeavingMeHandles[nbr_I], sizeof(MPI_Request) );
+				}
+				else {
+					newParticleCommHandler->shadowParticlesLeavingMeHandles[nbr_I] = NULL;
+				}
+			}
+			PtrMap_Append( map, self->shadowParticlesLeavingMeHandles, newParticleCommHandler->shadowParticlesLeavingMeHandles );
+		}
+		
+		/*
+		** Temporary
+		*/
+		
+		if( (newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts = PtrMap_Find( map, self->particlesArrivingFromNbrShadowCellsTotalCounts )) == NULL && self->particlesArrivingFromNbrShadowCellsTotalCounts ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			
+			newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts = Memory_Alloc_Array( Particle_Index, nbrCount, "ParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts" );
+			memcpy( newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts, self->particlesArrivingFromNbrShadowCellsTotalCounts, sizeof(Particle_Index) * nbrCount );
+			PtrMap_Append( map, self->particlesArrivingFromNbrShadowCellsTotalCounts, newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts );
+		}
+		
+		if( (newParticleCommHandler->particlesArrivingFromNbrShadowCellCounts = PtrMap_Find( map, self->particlesArrivingFromNbrShadowCellCounts )) == NULL && self->particlesArrivingFromNbrShadowCellCounts ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->particlesArrivingFromNbrShadowCellCounts = Memory_Alloc_2DComplex( Particle_Index, nbrCount, newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts, "ParticleCommHandler->particlesArrivingFromNbrShadowCellCounts" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				memcpy( newParticleCommHandler->particlesArrivingFromNbrShadowCellCounts[nbr_I], self->particlesArrivingFromNbrShadowCellCounts[nbr_I], sizeof(Particle_Index) * newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I] );
+			}
+			PtrMap_Append( map, self->particlesArrivingFromNbrShadowCellCounts, newParticleCommHandler->particlesArrivingFromNbrShadowCellCounts );
+		}
+		
+		if( (newParticleCommHandler->particlesArrivingFromNbrShadowCells = PtrMap_Find( map, self->particlesArrivingFromNbrShadowCells )) == NULL && self->particlesArrivingFromNbrShadowCells ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->particlesArrivingFromNbrShadowCells = Memory_Alloc_Array( Particle*, nbrCount, "ParticleCommHandler->particlesArrivingFromNbrShadowCells" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				SizeT	particlesArraySize = self->swarm->particleExtensionMgr->finalSize * newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+				
+				newParticleCommHandler->particlesArrivingFromNbrShadowCells[nbr_I] = Memory_Alloc_Bytes( particlesArraySize, "Particle", "particleCommHandler->particlesArrivingFromNbrShadowCells[]" );
+				memcpy( newParticleCommHandler->particlesArrivingFromNbrShadowCells[nbr_I], self->particlesArrivingFromNbrShadowCells[nbr_I], particlesArraySize );
+			}
+			PtrMap_Append( map, self->particlesArrivingFromNbrShadowCells, newParticleCommHandler->particlesArrivingFromNbrShadowCells );
+		}
+		
+		if( (newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles = PtrMap_Find( map, self->particlesArrivingFromNbrShadowCellsHandles )) == NULL && self->particlesArrivingFromNbrShadowCellsHandles ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles = Memory_Alloc_Array( MPI_Request*, nbrCount, "ParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				if( self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] ) {
+					newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles[nbr_I] = Memory_Alloc( MPI_Request, "particleCommHandler->particlesArrivingFromNbrShadowCellsHandles[]" );
+					memcpy( newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles[nbr_I], self->particlesArrivingFromNbrShadowCellsHandles[nbr_I], sizeof(MPI_Request) );
+				}
+				else {
+					newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles[nbr_I] = NULL;
+				}
+			}
+			PtrMap_Append( map, self->particlesArrivingFromNbrShadowCellsHandles, newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles );
+		}
+		
+		if( (newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles = PtrMap_Find( map, self->particlesArrivingFromNbrShadowCellCountsHandles )) == NULL && self->particlesArrivingFromNbrShadowCellCountsHandles ) {
+			ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+			ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+			Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+			Neighbour_Index		nbr_I;
+			
+			newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles = Memory_Alloc_Array( MPI_Request*, nbrCount, "ParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles" );
+			for( nbr_I = 0; nbr_I < nbrCount; nbr_I++ ) {
+				if( self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] ) {
+					newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] = Memory_Alloc( MPI_Request, "particleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles[]" );
+					memcpy( newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I], self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I], sizeof(MPI_Request) );
+				}
+				else {
+					newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] = NULL;
+				}
+			}
+			PtrMap_Append( map, self->particlesArrivingFromNbrShadowCellCountsHandles, newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles );
+		}
+	}
+	else {
+		newParticleCommHandler->debug = self->debug;
+		newParticleCommHandler->swarm = self->swarm;
+		newParticleCommHandler->shadowParticlesLeavingMeIndices = self->shadowParticlesLeavingMeIndices;
+		newParticleCommHandler->particlesOutsideDomainIndices = self->particlesOutsideDomainIndices;
+		newParticleCommHandler->shadowParticlesLeavingMeTotalCounts = self->shadowParticlesLeavingMeTotalCounts;
+		newParticleCommHandler->shadowParticlesLeavingMeCountsPerCell = self->shadowParticlesLeavingMeCountsPerCell;
+		newParticleCommHandler->shadowParticlesLeavingMe = self->shadowParticlesLeavingMe;
+		newParticleCommHandler->shadowParticlesLeavingMeHandles = self->shadowParticlesLeavingMeHandles;
+		newParticleCommHandler->particlesArrivingFromNbrShadowCellsTotalCounts = self->particlesArrivingFromNbrShadowCellsTotalCounts;
+		newParticleCommHandler->particlesArrivingFromNbrShadowCellCounts = self->particlesArrivingFromNbrShadowCellCounts;
+		newParticleCommHandler->particlesArrivingFromNbrShadowCells = self->particlesArrivingFromNbrShadowCells;
+		newParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles = self->particlesArrivingFromNbrShadowCellsHandles;
+		newParticleCommHandler->particlesArrivingFromNbrShadowCellCountsHandles = self->particlesArrivingFromNbrShadowCellCountsHandles;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newParticleCommHandler;
+}
+
+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 ){
+	
+}
+
+void ParticleCommHandler_HandleParticleMovementBetweenProcs( void* pCommsHandler ) {
+	ParticleCommHandler*	self = (ParticleCommHandler*)pCommsHandler;
+
+	self->_handleParticleMovementBetweenProcs( self );
+}
+
+void _ParticleCommHandler_HandleParticleMovementBetweenProcs( void* pCommsHandler ) {
+	ParticleCommHandler*	self = (ParticleCommHandler*)pCommsHandler;
+	double                  startTime = 0;
+	double                  myProcTime = 0;
+	double*                 procTimes = NULL;
+	double                  maxProcTime = 0;
+	Processor_Index         proc_I = 0;
+	Neighbour_Index         nbrCount = 0;
+	Particle_Index          totalParticlesRecvdViaShadowFromNbrs = 0;
+	Stream*                 info = Journal_Register( Info_Type, self->type );
+	Particle_Index          globalParticlesArrivingMyDomainCount = 0;
+	Particle_Index          globalParticlesOutsideDomainTotal = 0;
+	
+	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;
+	}
+
+	Journal_Printf( info, "Proc %d in %s() for swarm \"%s\": beginning comms...\n",
+		self->swarm->myRank, __func__, self->swarm->name );
+	startTime = MPI_Wtime();
+	Stream_IndentBranch( Swarm_Debug );
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		ShadowInfo*		cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+		ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+		Neighbour_Index		nbr_I;
+		Processor_Index		proc_I;
+		Neighbour_Index		nbrCount = procNbrInfo->procNbrCnt;
+
+		/* Allocate the recv count arrays and handles */
+		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" );
+
+		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] );
+		}
+
+		self->shadowParticlesLeavingMeCountsPerCell = Memory_Alloc_2DComplex(
+			Particle_Index, nbrCount, cellShadowInfo->procShadowCnt,
+			"ParticleCommHandler->shadowParticlesLeavingMeCountsPerCell" );
+		self->shadowParticlesLeavingMeTotalCounts = Memory_Alloc_Array( Particle_Index, nbrCount,
+			"ParticleCommHandler->shadowParticlesLeavingMeTotalCounts" );
+
+		_ParticleCommHandler_SendParticleTotalsInShadowCellsToNbrs( self );
+
+		/* wait until recv of totals from nbrs complete, then start non-blocking recv of particles */
+		{	
+			Particle_Index			incomingCellParticleCount = 0;
+			SizeT				particlesArraySize;
+			MPI_Status			status;
+			Cell_ShadowTransferIndex	stCell_I;
+			Processor_Index			proc_I;
+
+			self->particlesArrivingFromNbrShadowCellsHandles = Memory_Alloc_Array(
+				MPI_Request*, procNbrInfo->procNbrCnt,
+				"ParticleCommHandler->particlesArrivingFromNbrShadowCellsHandles");
+			self->particlesArrivingFromNbrShadowCells = Memory_Alloc_Array(
+				Particle*, procNbrInfo->procNbrCnt,
+				"ParticleCommHandler->particlesArrivingFromNbrShadowCells" );
+			
+			/* 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 );
+				Memory_Free( self->particlesArrivingFromNbrShadowCellCountsHandles[nbr_I] );
+				
+				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] );
+
+				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 */
+					particlesArraySize = self->swarm->particleExtensionMgr->finalSize * 
+						self->particlesArrivingFromNbrShadowCellsTotalCounts[nbr_I];
+					self->particlesArrivingFromNbrShadowCells[nbr_I] = Memory_Alloc_Bytes( particlesArraySize,
+						"Particle", "particleCommHandler->particlesArrivingFromNbrShadowCells[]" );
+					/* start non-blocking recv of particles */
+					MPI_Irecv( self->particlesArrivingFromNbrShadowCells[nbr_I], particlesArraySize, MPI_BYTE,
+						proc_I, SHADOW_PARTICLES, self->swarm->comm,
+						self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] );
+				}		
+			}
+
+			Memory_Free( self->particlesArrivingFromNbrShadowCellCountsHandles );
+		}
+			
+		_ParticleCommHandler_NonBlockingSendParticlesInShadowCellsToNbrs( self );
+
+		Memory_Free( self->shadowParticlesLeavingMeCountsPerCell );
+	}
+	
+	/* Now check for particles that have moved further than the shadow cells */ 
+	_ParticleCommHandler_FindParticlesThatHaveMovedOutsideMyDomain( self );
+
+	_ParticleCommHandler_ShareAndUpdateParticlesThatHaveMovedOutsideDomains( self,
+		&globalParticlesArrivingMyDomainCount,
+		&globalParticlesOutsideDomainTotal );
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		_ParticleCommHandler_ReceiveAndUpdateShadowParticlesEnteringMyDomain( self );
+	}
+
+	/* final update of the 'holes' in my particles list, if any left, of particles that left */
+	_ParticleCommHandler_FillRemainingHolesInLocalParticlesArray( self );
+
+	if ( self->swarm->cellShadowCount > 0 ) {
+		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 );
+				Memory_Free( self->shadowParticlesLeavingMe[nbr_I] );
+				Memory_Free( self->shadowParticlesLeavingMeHandles[nbr_I] );
+			}	
+		}
+		Memory_Free( self->shadowParticlesLeavingMe );
+		Memory_Free( self->shadowParticlesLeavingMeHandles );
+		Memory_Free( self->shadowParticlesLeavingMeTotalCounts );
+		Memory_Free( self->shadowParticlesLeavingMeIndices );
+	}
+
+
+	/* Useful info for profiling... */
+	myProcTime = MPI_Wtime() - startTime;
+
+	totalParticlesRecvdViaShadowFromNbrs = 0;
+	nbrCount = 0;
+	if ( self->swarm->cellShadowCount > 0 ) {
+		ShadowInfo*	        cellShadowInfo = CellLayout_GetShadowInfo( self->swarm->cellLayout );
+		ProcNbrInfo*		procNbrInfo = cellShadowInfo->procNbrInfo;
+		Neighbour_Index		nbr_I;
+
+		nbrCount = procNbrInfo->procNbrCnt;
+		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( info, "...proc %d finished particle communication:\n", self->swarm->myRank );
+			Stream_Indent( info );
+			Journal_Printf( info, "- Particle comm totals via shadow cells (%d nbr procs): sent %d, recvd %d\n",
+				nbrCount, self->shadowParticlesLeavingMeTotalCount,
+				totalParticlesRecvdViaShadowFromNbrs );
+			Journal_Printf( info, "- Particle comm totals via global synch (%d total procs): sent %d, recvd %d (of %d synched)\n", 
+				self->swarm->nProc,
+				self->particlesOutsideDomainTotalCount,
+				globalParticlesArrivingMyDomainCount,
+				globalParticlesOutsideDomainTotal );
+			Journal_Printf( info, "- time taken = %.2f (secs)\n", myProcTime );
+			Stream_UnIndent( info );
+		}
+	}
+
+	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( info, "...Max Communication time by any proc was %.2f (secs)\n", maxProcTime );
+	}
+	Memory_Free( procTimes );
+	MPI_Barrier( self->swarm->comm );
+
+	/* clean up allocated memory, and zero counters, ready for next timestep */
+	Memory_Free( self->particlesArrivingFromNbrShadowCellsTotalCounts );
+	self->shadowParticlesLeavingMeIndices = NULL;
+	self->currShadowParticleLeavingMeIndex = 0;
+	self->shadowParticlesLeavingMeTotalCount = 0;
+	self->shadowParticlesLeavingMeUnfilledCount = 0;
+	Memory_Free( self->particlesOutsideDomainIndices );
+	self->particlesOutsideDomainIndices = NULL;
+	self->particlesOutsideDomainTotalCount = 0;
+	self->particlesOutsideDomainUnfilledCount = 0;
+	self->currParticleLeavingMyDomainIndex = 0;
+	
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+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_NonBlockingSendParticlesInShadowCellsToNbrs( 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 */
+	SizeT				particlesArrayBytes;
+	#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
+
+	/* 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" );
+
+	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 ) {
+			/* If we're not sending any particles to this proc, skip to next */
+			self->shadowParticlesLeavingMeHandles[nbr_I] = NULL;
+			self->shadowParticlesLeavingMe[nbr_I] = NULL;
+		}
+		else {
+			#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 );
+
+			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[]" );
+
+			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 );
+}
+
+
+/* TODO: look at using MPI_Indexed instead */
+void _ParticleCommHandler_ReceiveAndUpdateShadowParticlesEnteringMyDomain( 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 = _ParticleCommHandler_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--;
+					Memory_Free( self->particlesArrivingFromNbrShadowCells[nbr_I] );
+					Memory_Free( self->particlesArrivingFromNbrShadowCellsHandles[nbr_I] );
+					Stream_UnIndent( self->debug );
+				}
+			}
+		}
+	}	
+	Memory_Free( incomingParticlesReceived );
+	Memory_Free( self->particlesArrivingFromNbrShadowCells );
+	Memory_Free( self->particlesArrivingFromNbrShadowCellsHandles );
+	Memory_Free( self->particlesArrivingFromNbrShadowCellCounts );
+	Stream_UnIndentBranch( Swarm_Debug );
+}	
+
+
+void _ParticleCommHandler_FindParticlesThatHaveMovedOutsideMyDomain( ParticleCommHandler* 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;
+	self->particlesOutsideDomainIndices = Memory_Alloc_Array( Particle_Index, particlesOutsideDomainSize,
+		"self->particlesOutsideDomainIndices" );
+
+
+	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 _ParticleCommHandler_ShareAndUpdateParticlesThatHaveMovedOutsideDomains(
+		ParticleCommHandler* 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... */
+	_ParticleCommHandler_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;
+		Particle_Index		totalParticlesFoundEnteringDomains = 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 = _ParticleCommHandler_FindFreeSlotAndPrepareForInsertion( 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 ) {
+			MPI_Reduce( globalParticlesArrivingMyDomainCountPtr, &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 == (*globalParticlesOutsideDomainTotalPtr),
+						  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__, (*globalParticlesOutsideDomainTotalPtr),
+						  totalParticlesFoundEnteringDomains );
+			}
+		}
+	}	
+	Memory_Free( globalParticlesOutsideDomainCounts );
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+void _ParticleCommHandler_GetCountOfParticlesOutsideDomainPerProcessor(
+	ParticleCommHandler*	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
+}
+
+
+Particle_Index _ParticleCommHandler_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++;
+	}
+
+	return lParticle_I;
+}
+
+
+void _ParticleCommHandler_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 ) ) {
+		_ParticleCommHandler_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 = _ParticleCommHandler_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 );
+		self->swarm->particles = Memory_Realloc_Array_Bytes(
+			self->swarm->particles,
+			self->swarm->particleExtensionMgr->finalSize,
+			self->swarm->particlesArraySize );
+	}	
+
+	Stream_UnIndentBranch( Swarm_Debug );
+}
+
+
+Particle_Index* _ParticleCommHandler_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 _ParticleCommHandler_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" );
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,178 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+#ifndef __Discretisation_Swarm_ParticleCommHandler_h__
+#define __Discretisation_Swarm_ParticleCommHandler_h__
+
+	typedef void (ParticleCommHandler_HandleParticleMovementBetweenProcsFunction)	( void* pCommHandler );
+	
+	/** Textual name of this class */
+	extern const Type ParticleCommHandler_Type;
+
+	#define __ParticleCommHandler \
+		__Stg_Component \
+		/* Virtual info */ \
+		ParticleCommHandler_HandleParticleMovementBetweenProcsFunction* \
+			_handleParticleMovementBetweenProcs;\
+		/* General info */ \
+		Stream*				debug; \
+		Swarm*				swarm; \
+		Particle_Index* 		shadowParticlesLeavingMeIndices; \
+		Index				shadowParticlesLeavingMeTotalCount; \
+		Index				shadowParticlesLeavingMeUnfilledCount; \
+		Index				currShadowParticleLeavingMeIndex; \
+		Particle_Index* 		particlesOutsideDomainIndices; \
+		Index				particlesOutsideDomainTotalCount; \
+		Index				particlesOutsideDomainUnfilledCount; \
+		Index				currParticleLeavingMyDomainIndex; \
+		/** 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; \
+		Bool				defensive;
+
+
+	struct ParticleCommHandler { __ParticleCommHandler };	
+
+	/* --- virtual functions --- */
+
+	/** Constructor interface */
+	ParticleCommHandler* ParticleCommHandler_DefaultNew( Name name );
+	
+	ParticleCommHandler* ParticleCommHandler_New(
+			Name name,
+			void* swarm );
+	
+	/** 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_HandleParticleMovementBetweenProcsFunction	handleParticleMovementBetweenProcs,
+		void*								swarm );
+	
+	/** Variable initialiser */
+	void _ParticleCommHandler_Init( ParticleCommHandler* self, void* swarm );
+
+	/** 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 functions --- */
+	
+	/** Handle particle movement between processors */
+	void ParticleCommHandler_HandleParticleMovementBetweenProcs( void* pCommsHandler );
+	/** ParticleCommHandler_HandleParticleMovementBetweenProcs() implementation */
+	void _ParticleCommHandler_HandleParticleMovementBetweenProcs( void* pCommsHandler );
+
+	/* --- private functions --- */
+
+	void _ParticleCommHandler_SendParticleTotalsInShadowCellsToNbrs( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_NonBlockingSendParticlesInShadowCellsToNbrs( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_ReceiveAndUpdateShadowParticlesEnteringMyDomain( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_FindParticlesThatHaveMovedOutsideMyDomain( ParticleCommHandler* self );
+
+	void
+	_ParticleCommHandler_ShareAndUpdateParticlesThatHaveMovedOutsideDomains(
+		ParticleCommHandler* self,
+		Particle_Index*      globalParticlesArrivingMyDomainCountPtr,
+		Particle_Index*      globalParticlesOutsideDomainTotalPtr );
+
+	void _ParticleCommHandler_GetCountOfParticlesOutsideDomainPerProcessor(
+		ParticleCommHandler*	self,
+		Particle_Index**	globalParticlesOutsideDomainCountsPtr,
+		Particle_Index*		maxGlobalParticlesOutsideDomainCountPtr,
+		Particle_Index*		globalParticlesOutsideDomainTotalPtr );
+		
+	Particle_Index _ParticleCommHandler_FindFreeSlotAndPrepareForInsertion( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_FillRemainingHolesInLocalParticlesArray( ParticleCommHandler*	self );
+
+	Particle_Index* _ParticleCommHandler_MergeListsOfUnfilledParticleSlots( ParticleCommHandler* self );
+
+	void _ParticleCommHandler_PrintParticleSlotsYetToFill( ParticleCommHandler* self );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ParticleCommHandler</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_ParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_ParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ParticleLayout</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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+}
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_PerCellParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_PerCellParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">PerCellParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 <Base/Base.h>
+#include <Discretisation/Geometry/Geometry.h>
+#include <Discretisation/Shape/Shape.h>
+#include <Discretisation/Mesh/Mesh.h>
+#include <Discretisation/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;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_PlaneParticleLayout_h__
+#define __Discretisation_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_Discretisation_PlaneParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">PlaneParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_Random_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_Random_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 ] );
+		}
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_RandomParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_RandomParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,428 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 ) {
+			newSingleCellLayout->cellPointCoords = Memory_Alloc_Array( Coord, newSingleCellLayout->pointCount, "SingleCellLayout->cellPoints" );
+			memcpy( newSingleCellLayout->cellPointCoords, self->cellPointCoords, sizeof(Coord) * 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_Array( Coord, self->pointCount, "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;
+	Coord* coord = (Coord*)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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_SingleCellLayout_h__
+#define __Discretisation_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 */ \
+		Coord*          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, Element_DomainIndex 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 /* __Discretisation_Swarm_SingleCellLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,288 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 "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;
+	Coord                       min;
+	Coord                       max;
+	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;
+
+	for ( dim_I=0; dim_I < self->dim; dim_I++ ) {
+		min[dim_I] = ((BlockGeometry*) mesh->layout->elementLayout->geometry)->min[dim_I];
+		max[dim_I] = ((BlockGeometry*) mesh->layout->elementLayout->geometry)->max[dim_I];
+	}	
+	
+	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 ], 
+					min[ dim_I ], 
+					max[ dim_I ]);
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_SpaceFillerParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_SpaceFillerParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">SpaceFillerParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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";
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_StandardParticle_h__
+#define __Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	External header file to libDiscretisation_Swarm.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Swarm.h 3887 2006-11-06 05:19:51Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_h__
+#define __Discretisation_Swarm_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+
+	#include "StandardParticle.h"
+	#include "IntegrationPoint.h"
+	#include "CellLayout.h"
+	#include "ParticleLayout.h"
+	#include "SwarmClass.h"
+	#include "Swarm_Register.h"
+	#include "ParticleCommHandler.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 "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 "Init.h"
+	#include "Finalise.h"
+
+#endif /* __Discretisation_Swarm_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1332 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "SwarmClass.h"
+
+#include "StandardParticle.h"
+#include "CellLayout.h"
+#include "ElementCellLayout.h"
+#include "ParticleLayout.h"
+#include "GlobalParticleLayout.h"
+#include "SingleCellLayout.h"
+#include "FileParticleLayout.h"
+#include "ParticleCommHandler.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 ) 
+{
+	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 );
+}
+
+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 )
+{
+	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;
+	
+	/* Swarm info */
+	if( initFlag )
+		_Swarm_Init( 
+				self,
+				cellLayout,
+				particleLayout,
+				dim,
+				cellParticleTblDelta,
+				extraParticlesFactor,
+				extensionMgr_Register,
+				variable_Register,
+				comm );
+	
+	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 )
+{
+	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->cellParticleTblDelta = cellParticleTblDelta;
+	
+	self->particles = NULL;
+	self->particleLocalCount = 0;
+	self->particlesArraySize = 0;
+	self->particlesArrayDelta = 0;
+	self->extraParticlesFactor = extraParticlesFactor;
+	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->particleCommunicationHandler = ParticleCommHandler_New( defaultSwarmParticleCommHandlerName, self );
+
+	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 );
+
+}
+
+
+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_Class_Delete( self->particleCommunicationHandler );
+	
+	Memory_Free( self->cellPointTbl );
+	Memory_Free( self->cellPointCountTbl );
+	
+	for( cell_I = 0; cell_I < self->cellLocalCount; cell_I++ ) {
+		Memory_Free( self->cellParticleTbl[cell_I] );
+	}
+	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 );
+	}
+	
+	/* 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 */
+	Print( self->cellLayout, stream );
+	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 );
+}
+
+
+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( 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->particleCommunicationHandler = (ParticleCommHandler*)Stg_Class_Copy( self->particleCommunicationHandler, 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;
+			}
+		}
+	}
+	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->particleExtensionMgr = self->particleExtensionMgr;
+		newSwarm->particleCommunicationHandler = self->particleCommunicationHandler;
+	}
+	
+	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 );
+}
+
+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;
+
+	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 );
+	
+	_Swarm_Init( 
+			self,
+			cellLayout,
+			particleLayout, 
+			dim,
+			cellParticleTblDelta,
+			extraParticlesFactor,
+			extensionManagerRegister,
+			variable_Register,
+			context->communicator );
+}
+
+
+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 );
+	
+	Journal_DPrintf( self->debug, "allocating memory for cell->particle mappings:\n" );
+	_Swarm_BuildCells( self );
+	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 );
+	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" );
+	Stream_UnIndentBranch( Swarm_Debug );
+	Journal_DPrintf( self->debug, "...done in %s().\n", __func__ );
+}
+
+			
+void _Swarm_Initialise( void* swarm, void* data ) {
+	Swarm* self = (Swarm*)swarm;
+	
+	Journal_DPrintf( self->debug, "In %s(): for swarm \"%s\" (of type %s)\n", __func__, self->name, self->type ); 
+	Stream_IndentBranch( Swarm_Debug );
+	
+	_Swarm_InitialiseCells( self );
+	_Swarm_InitialiseParticles( self );
+
+	Stg_Component_Initialise( self->owningCellVariable, data, False );
+	self->stillDoingInitialisation = False;
+
+	Stream_UnIndentBranch( Swarm_Debug );
+	Journal_DPrintf( self->debug, "...done in %s().\n", __func__ );
+}
+
+
+void _Swarm_Execute( void* swarm, void* data ) {
+}
+
+void _Swarm_Destroy( void* swarm, void* data ) {
+}
+
+void _Swarm_BuildCells( void* swarm ) {
+	Swarm*			self = (Swarm*)swarm;
+	Cell_Index		cell_I;
+	Cell_PointIndex		pointCount;
+	
+	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 ) {
+	Swarm*			self = (Swarm*)swarm;
+	
+	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_InitialiseCells( void* swarm ) {
+	Swarm*			self = (Swarm*)swarm;
+	Cell_Index		cell_I;
+	
+	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 ) {
+	Swarm*			self = (Swarm*)swarm;
+	
+	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 ) { 
+		ParticleCommHandler_HandleParticleMovementBetweenProcs( self->particleCommunicationHandler );
+	}
+
+	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_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" );
+}
+
+
+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;
+	Topology*            topology;
+	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 */
+	topology = ((ElementCellLayout*)swarm->cellLayout)->mesh->layout->elementLayout->topology;
+	neighbourCount = Topology_NeighbourCount( topology, lCell_I );
+	neighbourList  = Memory_Alloc_Array( NeighbourIndex, neighbourCount, "ElementNeighbours" );
+	Topology_BuildNeighbours( topology, lCell_I, neighbourList );
+
+	/* Loop over neighbours */
+	for ( neighbour_I = 0 ; neighbour_I < neighbourCount ; neighbour_I++ ) {
+		lCell_I = neighbourList[ neighbour_I ];
+		if ( lCell_I == Topology_Invalid( topology ) )
+			continue;
+
+		/* TODO - Be more clever than checking every particle in this cell */
+		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 ];
+		}
+	}
+	Memory_Free( neighbourList );
+
+	/* 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,
+		(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,
+		(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;
+
+	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 );
+
+	/* 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 );
+	}
+}
+
+
+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 );
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,292 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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... equivlant 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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_SwarmClass_h__
+#define __Discretisation_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; \
+		Partition_Index                 myRank; \
+		Partition_Index                 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; \
+		/** Variable Stuff */ \
+		SwarmVariable_Register*         swarmVariable_Register; \
+		SwarmVariable*                  owningCellVariable; \
+		/** Extension manager for particles */ \
+		ExtensionManager*               particleExtensionMgr; \
+		/** Particle Communication handler */ \
+		ParticleCommHandler*            particleCommunicationHandler; \
+		\
+		Index                           swarmReg_I; /**< Own index inside the Swarm_Register */
+
+	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 ) ;
+	
+	/* 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 );
+
+	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 );
+	
+	/* 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 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 );
+
+	/** 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 );
+
+	/** 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 );
+	
+	/* Build particles */
+	void _Swarm_BuildParticles( void* swarm );
+	
+	/* Initialise cells */
+	void _Swarm_InitialiseCells( void* swarm );
+	
+	/* Initialise particles */
+	void _Swarm_InitialiseParticles( void* swarm );
+
+	/** 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 );
+
+#endif /* __Discretisation_Swarm_SwarmClass_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Swarm</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">
+	<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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_SwarmDump_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_SwarmDump_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+<?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="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">
+	<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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,378 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,131 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_SwarmOutput_h__
+#define __Discretisation_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 ) ;
+	#define SwarmOutput_PrintValue( swarmOutput, stream, value )\
+		SwarmOutput_PrintDouble( swarmOutput, stream, (double) ( value ) )
+
+#endif /* __Discretisation_Swarm_SwarmOutput_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">SwarmOutput</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">
+	<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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: SwarmVariable.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 ( 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;
+}
+
+	
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_SwarmVariable_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_SwarmVariable_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+<?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="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">
+	<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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_SwarmVariable_Register_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_SwarmVariable_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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__ );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_Swarm_Register_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_Swarm_Register_h__ */
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+	}	
+	
+	
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_TriGaussParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_TriGaussParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">TriGaussParticleLayout</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3885 2006-10-26 05:52:26Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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( Coord, "points[0]" );
+			points[1] = Memory_Alloc( Coord, "points[1]" );
+			points[2] = Memory_Alloc( Coord, "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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_TriSingleCellLayout_h__
+#define __Discretisation_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, Element_DomainIndex 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 /* __Discretisation_Swarm_TriSingleCellLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_UnionParticleLayout_h__
+#define __Discretisation_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 /* __Discretisation_Swarm_UnionParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">UnionParticleLayout</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="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>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/Geometry/Geometry.h>
+#include <Discretisation/Shape/Shape.h>
+#include <Discretisation/Mesh/Mesh.h>
+#include <Discretisation/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 */
+	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 );
+			}
+		}
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Swarm_WithinShapeParticleLayout_h__
+#define __Discretisation_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_Discretisation_Shape_WithinShapeParticleLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,39 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationUtils ${RPATH_LFLAGS}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 Discretisation_Swarm user.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_shortcuts_h__
+#define __Discretisation_Swarm_shortcuts_h__
+
+	/* Discretisation_Swarm shortcuts */
+
+#endif /* __Discretisation_Swarm_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Comments:
+**
+** $Id: types.h 3887 2006-11-06 05:19:51Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Swarm_types_h__
+#define __Discretisation_Swarm_types_h__
+	
+	/* Types user needs to define */
+	typedef struct _Particle			Particle;
+
+	/** 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 Coord*					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;
+	
+	/* Discretisation_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 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 SwarmVariable_Register	SwarmVariable_Register;
+	typedef struct SwarmVariable			SwarmVariable;
+	typedef struct OperatorSwarmVariable		OperatorSwarmVariable;
+	typedef struct SwarmOutput			SwarmOutput;
+
+	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 /* __Discretisation_Swarm_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/Bouncer.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/Bouncer.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/Bouncer.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,119 @@
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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( DiscretisationContext* 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 ) {
+	DiscretisationContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DiscretisationContext, 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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+
+#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 = MPI XML MATH
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/SingleAttractor.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/SingleAttractor.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/SingleAttractor.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,121 @@
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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( DiscretisationContext* 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( Info_Type, "particleUpdate" );
+	unsigned int                    movementSpeedDivisor = 0;
+	int                             movementSign = 1;
+	unsigned int                    explosionPeriod = 20;
+
+	Stream_SetPrintingRank( stream, Dictionary_GetUnsignedInt_WithDefault( context->dictionary, "procToWatch", 0 ) );
+	movementSpeedDivisor = Dictionary_GetDouble_WithDefault( context->dictionary, "movementSpeedDivisor", 10 );
+	
+	blockGeometry = (BlockGeometry*) LiveComponentRegister_Get( context->CF->LCRegister, "geometry" );
+	for ( dim_I=0; dim_I < 3; dim_I++ ) {
+		attractorPoint[dim_I] = ( blockGeometry->max[dim_I] - blockGeometry->min[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 ) {
+	DiscretisationContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DiscretisationContext, 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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+
+#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 = MPI XML MATH
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/Spinner.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/Spinner.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/Spinner.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,118 @@
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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( DiscretisationContext* 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 ) {
+	DiscretisationContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DiscretisationContext, 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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+
+#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 = MPI XML MATH
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,161 @@
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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( DiscretisationContext* 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 ) {
+	DiscretisationContext*   context;
+
+	context = Stg_ComponentFactory_ConstructByName( cf, "context", DiscretisationContext, 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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+
+#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 = MPI XML MATH
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,187 @@
+SpaceFillerParticleLayout (ptr): 0x806374c:
+	GlobalParticleLayout (ptr): 0x806374c
+	ParticleLayout (ptr): 0x806374c
+	Stg_Class (ptr): 0x806374c
+		sizeOfSelf: 124
+		_deleteSelf: Yes
+		type: SpaceFillerParticleLayout
+		_delete (func ptr): 0xb7f80e68
+		_print (func ptr): 0xb7f80ebe
+		_copy (func ptr): 0xb7f80f4d
+		_setInitialCounts (func ptr): 0xb7f793f3
+		_initialiseParticles (func ptr): 0xb7f81151
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7f81181
+		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      7): (    125,    62.5,   68.75)
+		part. InCell   1 (local index     13): (    175,    37.5,   81.25)
+		part. InCell   2 (local index     25): (  162.5,   56.25,  59.375)
+		part. InCell   3 (local index     27): (  112.5,   31.25,  96.875)
+		part. InCell   4 (local index     41): ( 131.25,   9.375,  39.062)
+		part. InCell   5 (local index     43): ( 181.25,  84.375,  1.5625)
+		part. InCell   6 (local index     55): ( 168.75,  15.625,  29.688)
+		part. InCell   7 (local index     61): ( 118.75,  90.625,  17.188)
+		part. InCell   8 (local index     63): ( 159.38,  89.062,  80.469)
+		part. InCell   9 (local index     69): ( 109.38,  14.062,  67.969)
+		part. InCell  10 (local index     81): ( 146.88,  82.812,  89.844)
+		part. InCell  11 (local index     83): ( 196.88,  7.8125,  52.344)
+		part. InCell  12 (local index     97): ( 153.12,  35.938,  10.156)
+		part. InCell  13 (local index     99): ( 103.12,  60.938,  47.656)
+		part. InCell  14 (local index    111): ( 140.62,  42.188,  19.531)
+		part. InCell  15 (local index    117): ( 190.62,  67.188,  32.031)
+		part. InCell  16 (local index    137): ( 107.81,  69.531, 0.39062)
+		part. InCell  17 (local index    139): ( 157.81,  44.531,  37.891)
+		part. InCell  18 (local index    151): ( 195.31,  50.781,  16.016)
+		part. InCell  19 (local index    157): ( 145.31,  25.781,  28.516)
+	Local Cell   2:
+		part. InCell   0 (local index     10): (    225,    12.5,   43.75)
+		part. InCell   1 (local index     12): (    275,    87.5,    6.25)
+		part. InCell   2 (local index     24): (  262.5,    6.25,  34.375)
+		part. InCell   3 (local index     30): (  212.5,   81.25,  21.875)
+		part. InCell   4 (local index     40): ( 231.25,  59.375,  64.062)
+		part. InCell   5 (local index     46): ( 281.25,  34.375,  76.562)
+		part. InCell   6 (local index     58): ( 268.75,  65.625,  54.688)
+		part. InCell   7 (local index     60): ( 218.75,  40.625,  92.188)
+		part. InCell   8 (local index     66): ( 259.38,  39.062,  5.4688)
+		part. InCell   9 (local index     68): ( 209.38,  64.062,  42.969)
+		part. InCell  10 (local index     80): ( 246.88,  32.812,  14.844)
+		part. InCell  11 (local index     86): ( 296.88,  57.812,  27.344)
+		part. InCell  12 (local index     96): ( 253.12,  85.938,  85.156)
+		part. InCell  13 (local index    102): ( 203.12,  10.938,  72.656)
+		part. InCell  14 (local index    114): ( 240.62,  92.188,  94.531)
+		part. InCell  15 (local index    116): ( 290.62,  17.188,  57.031)
+		part. InCell  16 (local index    136): ( 207.81,  19.531,  75.391)
+		part. InCell  17 (local index    142): ( 257.81,  94.531,  62.891)
+		part. InCell  18 (local index    154): ( 295.31, 0.78125,  91.016)
+		part. InCell  19 (local index    156): ( 245.31,  75.781,  53.516)
+	Local Cell   3:
+		part. InCell   0 (local index      2): (    300,      50,      75)
+		part. InCell   1 (local index      4): (    350,      25,    62.5)
+		part. InCell   2 (local index     16): (  387.5,   68.75,  90.625)
+		part. InCell   3 (local index     22): (  337.5,   43.75,  53.125)
+		part. InCell   4 (local index     32): ( 306.25,  21.875,  7.8125)
+		part. InCell   5 (local index     38): ( 356.25,  96.875,  45.312)
+		part. InCell   6 (local index     50): ( 393.75,   3.125,  23.438)
+		part. InCell   7 (local index     52): ( 343.75,  78.125,  35.938)
+		part. InCell   8 (local index     74): ( 384.38,  76.562,  74.219)
+		part. InCell   9 (local index     76): ( 334.38,  1.5625,  86.719)
+		part. InCell  10 (local index     88): ( 321.88,  95.312,  58.594)
+		part. InCell  11 (local index     94): ( 371.88,  20.312,  96.094)
+		part. InCell  12 (local index    104): ( 378.12,  48.438,  41.406)
+		part. InCell  13 (local index    110): ( 328.12,  73.438,  3.9062)
+		part. InCell  14 (local index    122): ( 315.62,  29.688,  25.781)
+		part. InCell  15 (local index    124): ( 365.62,  54.688,  13.281)
+		part. InCell  16 (local index    128): ( 332.81,  57.031,  44.141)
+		part. InCell  17 (local index    134): ( 382.81,  32.031,  6.6406)
+		part. InCell  18 (local index    146): ( 370.31,  63.281,  34.766)
+		part. InCell  19 (local index    148): ( 320.31,  38.281,  22.266)
+	Local Cell   4:
+		part. InCell   0 (local index      9): (     25,   112.5,   93.75)
+		part. InCell   1 (local index     11): (     75,   187.5,   56.25)
+		part. InCell   2 (local index     23): (   62.5,  106.25,  84.375)
+		part. InCell   3 (local index     29): (   12.5,  181.25,  71.875)
+		part. InCell   4 (local index     39): (  31.25,  159.38,  14.062)
+		part. InCell   5 (local index     45): (  81.25,  134.38,  26.562)
+		part. InCell   6 (local index     57): (  68.75,  165.62,  4.6875)
+		part. InCell   7 (local index     59): (  18.75,  140.62,  42.188)
+		part. InCell   8 (local index     65): ( 59.375,  139.06,  55.469)
+		part. InCell   9 (local index     67): (  9.375,  164.06,  92.969)
+		part. InCell  10 (local index     79): ( 46.875,  132.81,  64.844)
+		part. InCell  11 (local index     85): ( 96.875,  157.81,  77.344)
+		part. InCell  12 (local index     95): ( 53.125,  185.94,  35.156)
+		part. InCell  13 (local index    101): (  3.125,  110.94,  22.656)
+		part. InCell  14 (local index    113): ( 40.625,  192.19,  44.531)
+		part. InCell  15 (local index    115): ( 90.625,  117.19,  7.0312)
+		part. InCell  16 (local index    135): ( 7.8125,  119.53,  25.391)
+		part. InCell  17 (local index    141): ( 57.812,  194.53,  12.891)
+		part. InCell  18 (local index    153): ( 95.312,  100.78,  41.016)
+		part. InCell  19 (local index    155): ( 45.312,  175.78,  3.5156)
+	Local Cell   5:
+		part. InCell   0 (local index      1): (    100,     150,      25)
+		part. InCell   1 (local index      3): (    150,     125,    12.5)
+		part. InCell   2 (local index     15): (  187.5,  168.75,  40.625)
+		part. InCell   3 (local index     21): (  137.5,  143.75,   3.125)
+		part. InCell   4 (local index     31): ( 106.25,  121.88,  57.812)
+		part. InCell   5 (local index     37): ( 156.25,  196.88,  95.312)
+		part. InCell   6 (local index     49): ( 193.75,  103.12,  73.438)
+		part. InCell   7 (local index     51): ( 143.75,  178.12,  85.938)
+		part. InCell   8 (local index     73): ( 184.38,  176.56,  24.219)
+		part. InCell   9 (local index     75): ( 134.38,  101.56,  36.719)
+		part. InCell  10 (local index     87): ( 121.88,  195.31,  8.5938)
+		part. InCell  11 (local index     93): ( 171.88,  120.31,  46.094)
+		part. InCell  12 (local index    103): ( 178.12,  148.44,  91.406)
+		part. InCell  13 (local index    109): ( 128.12,  173.44,  53.906)
+		part. InCell  14 (local index    121): ( 115.62,  129.69,  75.781)
+		part. InCell  15 (local index    123): ( 165.62,  154.69,  63.281)
+		part. InCell  16 (local index    127): ( 132.81,  157.03,  94.141)
+		part. InCell  17 (local index    133): ( 182.81,  132.03,  56.641)
+		part. InCell  18 (local index    145): ( 170.31,  163.28,  84.766)
+		part. InCell  19 (local index    147): ( 120.31,  138.28,  72.266)
+	Local Cell   6:
+		part. InCell   0 (local index      0): (    200,     100,      50)
+		part. InCell   1 (local index      6): (    250,     175,    87.5)
+		part. InCell   2 (local index     18): (  287.5,  118.75,  65.625)
+		part. InCell   3 (local index     20): (  237.5,  193.75,  78.125)
+		part. InCell   4 (local index     34): ( 206.25,  171.88,  32.812)
+		part. InCell   5 (local index     36): ( 256.25,  146.88,  20.312)
+		part. InCell   6 (local index     48): ( 293.75,  153.12,  48.438)
+		part. InCell   7 (local index     54): ( 243.75,  128.12,  10.938)
+		part. InCell   8 (local index     72): ( 284.38,  126.56,  99.219)
+		part. InCell   9 (local index     78): ( 234.38,  151.56,  61.719)
+		part. InCell  10 (local index     90): ( 221.88,  145.31,  83.594)
+		part. InCell  11 (local index     92): ( 271.88,  170.31,  71.094)
+		part. InCell  12 (local index    106): ( 278.12,  198.44,  16.406)
+		part. InCell  13 (local index    108): ( 228.12,  123.44,  28.906)
+		part. InCell  14 (local index    120): ( 215.62,  179.69, 0.78125)
+		part. InCell  15 (local index    126): ( 265.62,  104.69,  38.281)
+		part. InCell  16 (local index    130): ( 232.81,  107.03,  19.141)
+		part. InCell  17 (local index    132): ( 282.81,  182.03,  31.641)
+		part. InCell  18 (local index    144): ( 270.31,  113.28,  9.7656)
+		part. InCell  19 (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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,103 @@
+SpaceFillerParticleLayout (ptr): 0x8064654:
+	GlobalParticleLayout (ptr): 0x8064654
+	ParticleLayout (ptr): 0x8064654
+	Stg_Class (ptr): 0x8064654
+		sizeOfSelf: 124
+		_deleteSelf: Yes
+		type: SpaceFillerParticleLayout
+		_delete (func ptr): 0xb7ef9e68
+		_print (func ptr): 0xb7ef9ebe
+		_copy (func ptr): 0xb7ef9f4d
+		_setInitialCounts (func ptr): 0xb7ef23f3
+		_initialiseParticles (func ptr): 0xb7efa151
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7efa181
+		totalInitialParticles: 160
+		averageInitialParticlesPerCell: 20
+	self->dim = 3
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      2): (     50,      75,    37.5)
+		part. InCell   1 (local index      8): (   87.5,   18.75,  15.625)
+		part. InCell   2 (local index      9): (   37.5,   93.75,  28.125)
+		part. InCell   3 (local index     16): (   6.25,  71.875,  82.812)
+		part. InCell   4 (local index     17): (  56.25,  46.875,  70.312)
+		part. InCell   5 (local index     23): (  93.75,  53.125,  98.438)
+		part. InCell   6 (local index     26): (  43.75,  28.125,  60.938)
+		part. InCell   7 (local index     35): ( 84.375,  26.562,  49.219)
+		part. InCell   8 (local index     38): ( 34.375,  51.562,  11.719)
+		part. InCell   9 (local index     44): ( 21.875,  45.312,  33.594)
+		part. InCell  10 (local index     45): ( 71.875,  70.312,  21.094)
+		part. InCell  11 (local index     52): ( 78.125,  98.438,  66.406)
+		part. InCell  12 (local index     53): ( 28.125,  23.438,  78.906)
+		part. InCell  13 (local index     59): ( 15.625,  79.688,  50.781)
+		part. InCell  14 (local index     62): ( 65.625,  4.6875,  88.281)
+		part. InCell  15 (local index     64): ( 32.812,  7.0312,  69.141)
+		part. InCell  16 (local index     65): ( 82.812,  82.031,  81.641)
+		part. InCell  17 (local index     71): ( 70.312,  13.281,  59.766)
+		part. InCell  18 (local index     74): ( 20.312,  88.281,  97.266)
+		part. InCell  19 (local index     79): ( 26.562,  66.406,  39.453)
+	Local Cell   1:
+		part. InCell   0 (local index      3): (    125,    62.5,   68.75)
+		part. InCell   1 (local index      6): (    175,    37.5,   81.25)
+		part. InCell   2 (local index     12): (  162.5,   56.25,  59.375)
+		part. InCell   3 (local index     13): (  112.5,   31.25,  96.875)
+		part. InCell   4 (local index     20): ( 131.25,   9.375,  39.062)
+		part. InCell   5 (local index     21): ( 181.25,  84.375,  1.5625)
+		part. InCell   6 (local index     27): ( 168.75,  15.625,  29.688)
+		part. InCell   7 (local index     30): ( 118.75,  90.625,  17.188)
+		part. InCell   8 (local index     31): ( 159.38,  89.062,  80.469)
+		part. InCell   9 (local index     34): ( 109.38,  14.062,  67.969)
+		part. InCell  10 (local index     40): ( 146.88,  82.812,  89.844)
+		part. InCell  11 (local index     41): ( 196.88,  7.8125,  52.344)
+		part. InCell  12 (local index     48): ( 153.12,  35.938,  10.156)
+		part. InCell  13 (local index     49): ( 103.12,  60.938,  47.656)
+		part. InCell  14 (local index     55): ( 140.62,  42.188,  19.531)
+		part. InCell  15 (local index     58): ( 190.62,  67.188,  32.031)
+		part. InCell  16 (local index     68): ( 107.81,  69.531, 0.39062)
+		part. InCell  17 (local index     69): ( 157.81,  44.531,  37.891)
+		part. InCell  18 (local index     75): ( 195.31,  50.781,  16.016)
+		part. InCell  19 (local index     78): ( 145.31,  25.781,  28.516)
+	Local Cell   2:
+		part. InCell   0 (local index      4): (     25,   112.5,   93.75)
+		part. InCell   1 (local index      5): (     75,   187.5,   56.25)
+		part. InCell   2 (local index     11): (   62.5,  106.25,  84.375)
+		part. InCell   3 (local index     14): (   12.5,  181.25,  71.875)
+		part. InCell   4 (local index     19): (  31.25,  159.38,  14.062)
+		part. InCell   5 (local index     22): (  81.25,  134.38,  26.562)
+		part. InCell   6 (local index     28): (  68.75,  165.62,  4.6875)
+		part. InCell   7 (local index     29): (  18.75,  140.62,  42.188)
+		part. InCell   8 (local index     32): ( 59.375,  139.06,  55.469)
+		part. InCell   9 (local index     33): (  9.375,  164.06,  92.969)
+		part. InCell  10 (local index     39): ( 46.875,  132.81,  64.844)
+		part. InCell  11 (local index     42): ( 96.875,  157.81,  77.344)
+		part. InCell  12 (local index     47): ( 53.125,  185.94,  35.156)
+		part. InCell  13 (local index     50): (  3.125,  110.94,  22.656)
+		part. InCell  14 (local index     56): ( 40.625,  192.19,  44.531)
+		part. InCell  15 (local index     57): ( 90.625,  117.19,  7.0312)
+		part. InCell  16 (local index     67): ( 7.8125,  119.53,  25.391)
+		part. InCell  17 (local index     70): ( 57.812,  194.53,  12.891)
+		part. InCell  18 (local index     76): ( 95.312,  100.78,  41.016)
+		part. InCell  19 (local index     77): ( 45.312,  175.78,  3.5156)
+	Local Cell   3:
+		part. InCell   0 (local index      0): (    100,     150,      25)
+		part. InCell   1 (local index      1): (    150,     125,    12.5)
+		part. InCell   2 (local index      7): (  187.5,  168.75,  40.625)
+		part. InCell   3 (local index     10): (  137.5,  143.75,   3.125)
+		part. InCell   4 (local index     15): ( 106.25,  121.88,  57.812)
+		part. InCell   5 (local index     18): ( 156.25,  196.88,  95.312)
+		part. InCell   6 (local index     24): ( 193.75,  103.12,  73.438)
+		part. InCell   7 (local index     25): ( 143.75,  178.12,  85.938)
+		part. InCell   8 (local index     36): ( 184.38,  176.56,  24.219)
+		part. InCell   9 (local index     37): ( 134.38,  101.56,  36.719)
+		part. InCell  10 (local index     43): ( 121.88,  195.31,  8.5938)
+		part. InCell  11 (local index     46): ( 171.88,  120.31,  46.094)
+		part. InCell  12 (local index     51): ( 178.12,  148.44,  91.406)
+		part. InCell  13 (local index     54): ( 128.12,  173.44,  53.906)
+		part. InCell  14 (local index     60): ( 115.62,  129.69,  75.781)
+		part. InCell  15 (local index     61): ( 165.62,  154.69,  63.281)
+		part. InCell  16 (local index     63): ( 132.81,  157.03,  94.141)
+		part. InCell  17 (local index     66): ( 182.81,  132.03,  56.641)
+		part. InCell  18 (local index     72): ( 170.31,  163.28,  84.766)
+		part. InCell  19 (local index     73): ( 120.31,  138.28,  72.266)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,103 @@
+SpaceFillerParticleLayout (ptr): 0x80638cc:
+	GlobalParticleLayout (ptr): 0x80638cc
+	ParticleLayout (ptr): 0x80638cc
+	Stg_Class (ptr): 0x80638cc
+		sizeOfSelf: 124
+		_deleteSelf: Yes
+		type: SpaceFillerParticleLayout
+		_delete (func ptr): 0xb7f43e68
+		_print (func ptr): 0xb7f43ebe
+		_copy (func ptr): 0xb7f43f4d
+		_setInitialCounts (func ptr): 0xb7f3c3f3
+		_initialiseParticles (func ptr): 0xb7f44151
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7f44181
+		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): (    225,    12.5,   43.75)
+		part. InCell   1 (local index      6): (    275,    87.5,    6.25)
+		part. InCell   2 (local index     12): (  262.5,    6.25,  34.375)
+		part. InCell   3 (local index     15): (  212.5,   81.25,  21.875)
+		part. InCell   4 (local index     20): ( 231.25,  59.375,  64.062)
+		part. InCell   5 (local index     23): ( 281.25,  34.375,  76.562)
+		part. InCell   6 (local index     29): ( 268.75,  65.625,  54.688)
+		part. InCell   7 (local index     30): ( 218.75,  40.625,  92.188)
+		part. InCell   8 (local index     33): ( 259.38,  39.062,  5.4688)
+		part. InCell   9 (local index     34): ( 209.38,  64.062,  42.969)
+		part. InCell  10 (local index     40): ( 246.88,  32.812,  14.844)
+		part. InCell  11 (local index     43): ( 296.88,  57.812,  27.344)
+		part. InCell  12 (local index     48): ( 253.12,  85.938,  85.156)
+		part. InCell  13 (local index     51): ( 203.12,  10.938,  72.656)
+		part. InCell  14 (local index     57): ( 240.62,  92.188,  94.531)
+		part. InCell  15 (local index     58): ( 290.62,  17.188,  57.031)
+		part. InCell  16 (local index     68): ( 207.81,  19.531,  75.391)
+		part. InCell  17 (local index     71): ( 257.81,  94.531,  62.891)
+		part. InCell  18 (local index     77): ( 295.31, 0.78125,  91.016)
+		part. InCell  19 (local index     78): ( 245.31,  75.781,  53.516)
+	Local Cell   1:
+		part. InCell   0 (local index      1): (    300,      50,      75)
+		part. InCell   1 (local index      2): (    350,      25,    62.5)
+		part. InCell   2 (local index      8): (  387.5,   68.75,  90.625)
+		part. InCell   3 (local index     11): (  337.5,   43.75,  53.125)
+		part. InCell   4 (local index     16): ( 306.25,  21.875,  7.8125)
+		part. InCell   5 (local index     19): ( 356.25,  96.875,  45.312)
+		part. InCell   6 (local index     25): ( 393.75,   3.125,  23.438)
+		part. InCell   7 (local index     26): ( 343.75,  78.125,  35.938)
+		part. InCell   8 (local index     37): ( 384.38,  76.562,  74.219)
+		part. InCell   9 (local index     38): ( 334.38,  1.5625,  86.719)
+		part. InCell  10 (local index     44): ( 321.88,  95.312,  58.594)
+		part. InCell  11 (local index     47): ( 371.88,  20.312,  96.094)
+		part. InCell  12 (local index     52): ( 378.12,  48.438,  41.406)
+		part. InCell  13 (local index     55): ( 328.12,  73.438,  3.9062)
+		part. InCell  14 (local index     61): ( 315.62,  29.688,  25.781)
+		part. InCell  15 (local index     62): ( 365.62,  54.688,  13.281)
+		part. InCell  16 (local index     64): ( 332.81,  57.031,  44.141)
+		part. InCell  17 (local index     67): ( 382.81,  32.031,  6.6406)
+		part. InCell  18 (local index     73): ( 370.31,  63.281,  34.766)
+		part. InCell  19 (local index     74): ( 320.31,  38.281,  22.266)
+	Local Cell   2:
+		part. InCell   0 (local index      0): (    200,     100,      50)
+		part. InCell   1 (local index      3): (    250,     175,    87.5)
+		part. InCell   2 (local index      9): (  287.5,  118.75,  65.625)
+		part. InCell   3 (local index     10): (  237.5,  193.75,  78.125)
+		part. InCell   4 (local index     17): ( 206.25,  171.88,  32.812)
+		part. InCell   5 (local index     18): ( 256.25,  146.88,  20.312)
+		part. InCell   6 (local index     24): ( 293.75,  153.12,  48.438)
+		part. InCell   7 (local index     27): ( 243.75,  128.12,  10.938)
+		part. InCell   8 (local index     36): ( 284.38,  126.56,  99.219)
+		part. InCell   9 (local index     39): ( 234.38,  151.56,  61.719)
+		part. InCell  10 (local index     45): ( 221.88,  145.31,  83.594)
+		part. InCell  11 (local index     46): ( 271.88,  170.31,  71.094)
+		part. InCell  12 (local index     53): ( 278.12,  198.44,  16.406)
+		part. InCell  13 (local index     54): ( 228.12,  123.44,  28.906)
+		part. InCell  14 (local index     60): ( 215.62,  179.69, 0.78125)
+		part. InCell  15 (local index     63): ( 265.62,  104.69,  38.281)
+		part. InCell  16 (local index     65): ( 232.81,  107.03,  19.141)
+		part. InCell  17 (local index     66): ( 282.81,  182.03,  31.641)
+		part. InCell  18 (local index     72): ( 270.31,  113.28,  9.7656)
+		part. InCell  19 (local index     75): ( 220.31,  188.28,  47.266)
+	Local Cell   3:
+		part. InCell   0 (local index      4): (    325,   162.5,   18.75)
+		part. InCell   1 (local index      7): (    375,   137.5,   31.25)
+		part. InCell   2 (local index     13): (  362.5,  156.25,   9.375)
+		part. InCell   3 (local index     14): (  312.5,  131.25,  46.875)
+		part. InCell   4 (local index     21): ( 331.25,  109.38,  89.062)
+		part. InCell   5 (local index     22): ( 381.25,  184.38,  51.562)
+		part. InCell   6 (local index     28): ( 368.75,  115.62,  79.688)
+		part. InCell   7 (local index     31): ( 318.75,  190.62,  67.188)
+		part. InCell   8 (local index     32): ( 359.38,  189.06,  30.469)
+		part. InCell   9 (local index     35): ( 309.38,  114.06,  17.969)
+		part. InCell  10 (local index     41): ( 346.88,  182.81,  39.844)
+		part. InCell  11 (local index     42): ( 396.88,  107.81,  2.3438)
+		part. InCell  12 (local index     49): ( 353.12,  135.94,  60.156)
+		part. InCell  13 (local index     50): ( 303.12,  160.94,  97.656)
+		part. InCell  14 (local index     56): ( 340.62,  142.19,  69.531)
+		part. InCell  15 (local index     59): ( 390.62,  167.19,  82.031)
+		part. InCell  16 (local index     69): ( 307.81,  169.53,  50.391)
+		part. InCell  17 (local index     70): ( 357.81,  144.53,  87.891)
+		part. InCell  18 (local index     76): ( 395.31,  150.78,  66.016)
+		part. InCell  19 (local index     79): ( 345.31,  125.78,  78.516)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3557 2006-05-11 05:08:25Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+subdirs = ${def_sub}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationSwarm -lStGermainDiscretisationUtils -lStGermainDiscretisationMesh -lStGermainDiscretisationShape -lStGermainDiscretisationGeometry -lStGermainBase ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,170 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,114 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,58 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 ElementCellLayout has the same layout and geometry as the mesh's element layout.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: testElementCellLayout0.c 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/Swarm/Swarm.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define ConvertNode(node) \
+	(node == 2 ? 3 : node == 3 ? 2 : node == 6 ? 7 : node == 7 ? 6 : node)
+
+struct _Node {
+	double temp;
+};
+
+struct _Element {
+	double temp;
+};
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	int				procToWatch;
+	Dictionary*			dictionary;
+	Topology*			nTopology;
+	ElementLayout*			eLayout;
+	NodeLayout*			nLayout;
+	MeshDecomp*			decomp;
+	MeshLayout*			layout;
+	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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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, "allowUnbalancing", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "buildElementNodeTbl", Dictionary_Entry_Value_FromBool( True ) );
+	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 ) );
+	
+	/* Run the mesher */
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	Initialise( mesh, 0, False );
+	
+	if( rank == procToWatch ) {
+		Cell_Index cell;
+		Element_DomainIndex	element;
+		GlobalParticle          testParticle;
+		
+		for( element = 0; element < mesh->elementLocalCount; element++ ) {
+			Cell_PointIndex			point;
+			Cell_PointIndex			count;
+			Coord**				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( Coord*, 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[3])[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-1])[0] + 1;
+			testParticle.coord[1] = (*cellPoints[count-1])[1] + 1;
+			testParticle.coord[2] = (*cellPoints[count-1])[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 );
+	Stg_Class_Delete( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,29 @@
+StGermain Framework revision 3378. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+GaussParticleLayout (ptr): 0x8063684:
+PerCellParticleLayout (ptr): 0x8063684
+ParticleLayout (ptr): 0x8063684
+Stg_Class (ptr): 0x8063684
+	sizeOfSelf: 116
+	_deleteSelf: Yes
+	type: GaussParticleLayout
+	_delete (func ptr): 0xb7ee777f
+	_print (func ptr): 0xb7ee77a8
+	_copy (func ptr): 0xb7ee78ca
+	_setInitialCounts (func ptr): 0xb7eee579
+	_initialiseParticles (func ptr): 0xb7eee710
+	coordSystem: LocalCoordSystem
+	weightsInitialisedAtStartup : True
+	_initialCount (func ptr): 0xb7ee7b31
+	_initialiseParticlesOfCell (func ptr): 0xb7ee7b7b
+	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 }

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** 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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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;
+	Topology*			nTopology;
+	ElementLayout*			eLayout;
+	NodeLayout*			nLayout;
+	MeshDecomp*			decomp;
+	MeshLayout*			layout;
+	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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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( 2 ) );
+	Dictionary_Add( dictionary, "gaussParticlesZ", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	
+	
+	/* Run the mesher */
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	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 );
+	
+	
+	/* Build the swarm */
+	Build( swarm, 0, False );
+	Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		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( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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 );
+	
+	/* Build the swarm */
+	Build( swarm, 0, False );
+	Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		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 );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,32 @@
+StGermain Framework revision 3378. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+ManualParticleLayout (ptr): 0x8063e3c:
+	GlobalParticleLayout (ptr): 0x8063e3c
+	ParticleLayout (ptr): 0x8063e3c
+	Stg_Class (ptr): 0x8063e3c
+		sizeOfSelf: 112
+		_deleteSelf: Yes
+		type: ManualParticleLayout
+		_delete (func ptr): 0xb7ef495a
+		_print (func ptr): 0xb7ef4983
+		_copy (func ptr): 0xb7ef49e5
+		_setInitialCounts (func ptr): 0xb7ef33f3
+		_initialiseParticles (func ptr): 0xb7ef362d
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7ef4b56
+		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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,25 @@
+StGermain Framework revision 3378. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+ManualParticleLayout (ptr): 0x806487c:
+	GlobalParticleLayout (ptr): 0x806487c
+	ParticleLayout (ptr): 0x806487c
+	Stg_Class (ptr): 0x806487c
+		sizeOfSelf: 112
+		_deleteSelf: Yes
+		type: ManualParticleLayout
+		_delete (func ptr): 0xb7f0295a
+		_print (func ptr): 0xb7f02983
+		_copy (func ptr): 0xb7f029e5
+		_setInitialCounts (func ptr): 0xb7f013f3
+		_initialiseParticles (func ptr): 0xb7f0162d
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7f02b56
+		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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+StGermain Framework revision 3378. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+ManualParticleLayout (ptr): 0x8063acc:
+	GlobalParticleLayout (ptr): 0x8063acc
+	ParticleLayout (ptr): 0x8063acc
+	Stg_Class (ptr): 0x8063acc
+		sizeOfSelf: 112
+		_deleteSelf: Yes
+		type: ManualParticleLayout
+		_delete (func ptr): 0xb7f5395a
+		_print (func ptr): 0xb7f53983
+		_copy (func ptr): 0xb7f539e5
+		_setInitialCounts (func ptr): 0xb7f523f3
+		_initialiseParticles (func ptr): 0xb7f5262d
+		coordSystem: GlobalCoordSystem
+		weightsInitialisedAtStartup : False
+		_initialiseParticle (func ptr): 0xb7f53b56
+		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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,210 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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;
+	Topology*                   nTopology;
+	ElementLayout*              eLayout;
+	NodeLayout*                 nLayout;
+	MeshDecomp*                 decomp;
+	MeshLayout*                 layout;
+	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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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( 5 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	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( 1.0f ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	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 ) );
+	
+	/* Run the mesher */
+	dim       = Dictionary_GetUnsignedInt( dictionary, "dim" );
+
+	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 );
+	layout    = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	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 );
+	
+	/* Build the swarm */
+	Build( swarm, 0, False );
+	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( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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;
+
+	DiscretisationContext*    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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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 = DiscretisationContext_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 );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	<struct name="components">
+		<struct name="cornerNodeTopology">
+			<param name="Type">IJK6Topology</param>
+			<param name="sizeI">elementResI</param>
+			<param name="sizeJ">elementResJ</param>
+			<param name="sizeK">elementResK</param>
+			<param name="sizeShift">1</param>
+		</struct>
+		<struct name="cornerNodeLayout">
+			<param name="Type">CornerNL</param>
+			<param name="ElementLayout">elementLayout</param>
+			<param name="Topology">cornerNodeTopology</param>
+		</struct>
+		<struct name="decomp-linear">
+			<param name="Type">HexaMD</param>
+			<param name="ElementLayout">elementLayout</param>
+			<param name="NodeLayout">cornerNodeLayout</param>
+		</struct>
+		<struct name="meshLayout-linear">
+			<param name="Type">MeshLayout</param>
+			<param name="ElementLayout">elementLayout</param>
+			<param name="NodeLayout">cornerNodeLayout</param>
+			<param name="MeshDecomp">decomp-linear</param>
+		</struct>
+		<struct name="mesh-linear">
+			<param name="Type">Mesh</param>
+			<param name="MeshLayout">meshLayout-linear</param>
+			<param name="ElementSize">8</param>
+			<param name="NodeSize">0</param>
+		</struct>
+		<struct name="geometry">
+			<param name="Type">BlockGeometry</param>
+			<param name="sizeI">elementResI</param>
+			<param name="sizeJ">elementResJ</param>
+			<param name="sizeK">elementResK</param>
+			<param name="sizeShift">+1</param>
+		</struct>
+			<struct name="elementTopology">
+			<param name="Type">IJK26Topology</param>
+			<param name="sizeI">elementResI</param>
+			<param name="sizeJ">elementResJ</param>
+			<param name="sizeK">elementResK</param>
+		</struct>
+		<struct name="elementLayout">
+			<param name="Type">ParallelPipedHexaEL</param>
+			<param name="Topology">elementTopology</param>
+			<param name="Geometry">geometry</param>
+		</struct>
+ 
+		<struct name="elementCellLayout"> 
+			<param name="Type">ElementCellLayout</param>
+			<param name="Mesh">mesh-linear</param>
+		</struct>
+		<struct name="swarm">
+			<param name="Type">Swarm</param>
+			<param name="CellLayout">elementCellLayout</param>
+			<param name="ParticleLayout">particleLayout</param>
+		</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="shadowDepth">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="allowUnbalancing">True</param> 
+	<param name="buildElementNodeTbl">True</param> 
+	
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** 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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	Stream_SetLevel( stgMemory->infoStream, 3 );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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;
+		Coord**				cellPoints = NULL;
+		Coord testCoord = { 0, 0, 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( Coord*, 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 );
+	}
+	
+
+	
+	/* Destroy stuff */
+	Stg_Class_Delete( singleCellLayout );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	//Memory_Print_Leak();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** 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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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;
+	Topology*                   nTopology;
+	ElementLayout*              eLayout;
+	NodeLayout*                 nLayout;
+	MeshDecomp*                 decomp;
+	MeshLayout*                 layout;
+	ExtensionManager_Register*  extensionMgr_Register;
+	Mesh*                       mesh;
+	SpaceFillerParticleLayout*        particleLayout;
+	ElementCellLayout*          elementCellLayout;
+	Swarm*                      swarm;
+	Stream*                     stream;
+	Dimension_Index             dim;
+	
+	/* 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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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();
+	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( 5 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	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( 400.0f ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( 200.0f ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 100.0f ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	
+	
+	/* Run the mesher */
+	dim       = Dictionary_GetUnsignedInt( dictionary, "dim" );
+
+	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 );
+	layout    = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	Initialise( mesh, 0, False );
+	
+	particleLayout = SpaceFillerParticleLayout_New( "spaceFillerParticleLayout", dim, SpaceFillerParticleLayout_Invalid, 20 );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New(  "testSwarm", elementCellLayout, particleLayout, dim, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld );
+	
+	/* Build the swarm */
+	Build( swarm, 0, False );
+	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( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,305 @@
+StGermain Framework revision 3623. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+Swarm (ptr): 0x80682d0
+Stg_Component (ptr): 0x80682d0
+Stg_Object (ptr): 0x80682d0
+	Stg_Class (ptr): 0x80682d0
+		sizeOfSelf: 220
+		_deleteSelf: Yes
+		type: Swarm
+		_delete (func ptr): 0x4002cbb0
+		_print (func ptr): 0x4002ccc4
+		_copy (func ptr): 0x4002d2d9
+	name: testSwarm
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x4002dbd4
+	_construct (func ptr): 0x4002dcb7
+	_build (func ptr): 0x4002def7
+	_initialise (func ptr): 0x4002e21e
+	_execute (func ptr): 0x4002e2f7
+	_destroy (func ptr): 0x4002e2fc
+	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): 0x8067860
+CellLayout (ptr): 0x8067860
+Stg_Component (ptr): 0x8067860
+Stg_Object (ptr): 0x8067860
+	Stg_Class (ptr): 0x8067860
+		sizeOfSelf: 132
+		_deleteSelf: Yes
+		type: ElementCellLayout
+		_delete (func ptr): 0x400214dc
+		_print (func ptr): 0x40021505
+		_copy (func ptr): 0x40021579
+	name: elementCellLayout
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x40021010
+	_construct (func ptr): 0x40021651
+	_build (func ptr): 0x400216c5
+	_initialise (func ptr): 0x400216ca
+	_execute (func ptr): 0x400216cf
+	_destroy (func ptr): 0x400216d4
+	isConstructed: True
+	isBuilt: False
+	isInitialised: False
+	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): 0x400216d9
+	_cellShadowCount (func ptr): 0x400216f6
+	_pointCount (func ptr): 0x40021713
+	_initialisePoints (func ptr): 0x4002173d
+	_mapElementIdToCellId (func ptr): 0x400217c7
+	_isInCell (func ptr): 0x4002185a
+	_cellOf (func ptr): 0x40021a5d
+	_getShadowInfo (func ptr): 0x40021c50
+	mesh (ptr): 0x8066280
+RandomParticleLayout (ptr): 0x8067c78:
+PerCellParticleLayout (ptr): 0x8067c78
+ParticleLayout (ptr): 0x8067c78
+Stg_Class (ptr): 0x8067c78
+	sizeOfSelf: 132
+	_deleteSelf: Yes
+	type: RandomParticleLayout
+	_delete (func ptr): 0x4002aed3
+	_print (func ptr): 0x4002aefc
+	_copy (func ptr): 0x4002af8f
+	_setInitialCounts (func ptr): 0x4002a335
+	_initialiseParticles (func ptr): 0x4002a4d2
+	coordSystem: GlobalCoordSystem
+	weightsInitialisedAtStartup : False
+	_initialCount (func ptr): 0x4002b168
+	_initialiseParticlesOfCell (func ptr): 0x4002b17c
+	cellParticleCount: 4
+	seed: 13
+	cellLocalCount: 12
+	cellDomainCount: 12
+	cellShadowCount: 0
+	cellPointCountTbl (ptr): 0x8069710
+	cellPointCountTbl[0-12]: 008 008 008 008 008 008 008 008 008 008 008 008 
+	cellPointTbl (ptr): 0x8069750
+	cellPointTbl[0-12]: {
+	cellPointTbl[0][0-8]: {0 0 0} {150 0 0} {150 4 0} {0 4 0} {0 0 150} {150 0 150} {150 4 150} {0 4 150} 
+	cellPointTbl[1][0-8]: {150 0 0} {300 0 0} {300 4 0} {150 4 0} {150 0 150} {300 0 150} {300 4 150} {150 4 150} 
+	cellPointTbl[2][0-8]: {0 4 0} {150 4 0} {150 8 0} {0 8 0} {0 4 150} {150 4 150} {150 8 150} {0 8 150} 
+	cellPointTbl[3][0-8]: {150 4 0} {300 4 0} {300 8 0} {150 8 0} {150 4 150} {300 4 150} {300 8 150} {150 8 150} 
+	cellPointTbl[4][0-8]: {0 8 0} {150 8 0} {150 12 0} {0 12 0} {0 8 150} {150 8 150} {150 12 150} {0 12 150} 
+	cellPointTbl[5][0-8]: {150 8 0} {300 8 0} {300 12 0} {150 12 0} {150 8 150} {300 8 150} {300 12 150} {150 12 150} 
+	cellPointTbl[6][0-8]: {0 0 150} {150 0 150} {150 4 150} {0 4 150} {0 0 300} {150 0 300} {150 4 300} {0 4 300} 
+	cellPointTbl[7][0-8]: {150 0 150} {300 0 150} {300 4 150} {150 4 150} {150 0 300} {300 0 300} {300 4 300} {150 4 300} 
+	cellPointTbl[8][0-8]: {0 4 150} {150 4 150} {150 8 150} {0 8 150} {0 4 300} {150 4 300} {150 8 300} {0 8 300} 
+	cellPointTbl[9][0-8]: {150 4 150} {300 4 150} {300 8 150} {150 8 150} {150 4 300} {300 4 300} {300 8 300} {150 8 300} 
+	cellPointTbl[10][0-8]: {0 8 150} {150 8 150} {150 12 150} {0 12 150} {0 8 300} {150 8 300} {150 12 300} {0 12 300} 
+	cellPointTbl[11][0-8]: {150 8 150} {300 8 150} {300 12 150} {150 12 150} {150 8 300} {300 8 300} {300 12 300} {150 12 300} 
+}
+
+	cellParticleCountTbl (ptr): 0x8069910
+	cellParticleCountTbl[0-12]: 004 004 004 004 004 004 004 004 004 004 004 004 
+	cellParticleSizeTbl (ptr): 0x8069950
+	cellParticleSizeTbl[0-12]: 004 004 004 004 004 004 004 004 004 004 004 004 
+	cellParticleTbl (ptr): 0x8069990
+	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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,237 @@
+StGermain Framework revision 3623. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+Swarm (ptr): 0x80683c0
+Stg_Component (ptr): 0x80683c0
+Stg_Object (ptr): 0x80683c0
+	Stg_Class (ptr): 0x80683c0
+		sizeOfSelf: 220
+		_deleteSelf: Yes
+		type: Swarm
+		_delete (func ptr): 0x4002cbb0
+		_print (func ptr): 0x4002ccc4
+		_copy (func ptr): 0x4002d2d9
+	name: testSwarm
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x4002dbd4
+	_construct (func ptr): 0x4002dcb7
+	_build (func ptr): 0x4002def7
+	_initialise (func ptr): 0x4002e21e
+	_execute (func ptr): 0x4002e2f7
+	_destroy (func ptr): 0x4002e2fc
+	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): 0x80679b8
+CellLayout (ptr): 0x80679b8
+Stg_Component (ptr): 0x80679b8
+Stg_Object (ptr): 0x80679b8
+	Stg_Class (ptr): 0x80679b8
+		sizeOfSelf: 132
+		_deleteSelf: Yes
+		type: ElementCellLayout
+		_delete (func ptr): 0x400214dc
+		_print (func ptr): 0x40021505
+		_copy (func ptr): 0x40021579
+	name: elementCellLayout
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x40021010
+	_construct (func ptr): 0x40021651
+	_build (func ptr): 0x400216c5
+	_initialise (func ptr): 0x400216ca
+	_execute (func ptr): 0x400216cf
+	_destroy (func ptr): 0x400216d4
+	isConstructed: True
+	isBuilt: False
+	isInitialised: False
+	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): 0x400216d9
+	_cellShadowCount (func ptr): 0x400216f6
+	_pointCount (func ptr): 0x40021713
+	_initialisePoints (func ptr): 0x4002173d
+	_mapElementIdToCellId (func ptr): 0x400217c7
+	_isInCell (func ptr): 0x4002185a
+	_cellOf (func ptr): 0x40021a5d
+	_getShadowInfo (func ptr): 0x40021c50
+	mesh (ptr): 0x8066688
+RandomParticleLayout (ptr): 0x8067df0:
+PerCellParticleLayout (ptr): 0x8067df0
+ParticleLayout (ptr): 0x8067df0
+Stg_Class (ptr): 0x8067df0
+	sizeOfSelf: 132
+	_deleteSelf: Yes
+	type: RandomParticleLayout
+	_delete (func ptr): 0x4002aed3
+	_print (func ptr): 0x4002aefc
+	_copy (func ptr): 0x4002af8f
+	_setInitialCounts (func ptr): 0x4002a335
+	_initialiseParticles (func ptr): 0x4002a4d2
+	coordSystem: GlobalCoordSystem
+	weightsInitialisedAtStartup : False
+	_initialCount (func ptr): 0x4002b168
+	_initialiseParticlesOfCell (func ptr): 0x4002b17c
+	cellParticleCount: 4
+	seed: 13
+	cellLocalCount: 8
+	cellDomainCount: 8
+	cellShadowCount: 0
+	cellPointCountTbl (ptr): 0x8069078
+	cellPointCountTbl[0-8]: 008 008 008 008 008 008 008 008 
+	cellPointTbl (ptr): 0x80698a0
+	cellPointTbl[0-8]: {
+	cellPointTbl[0][0-8]: {0 0 0} {150 0 0} {150 4 0} {0 4 0} {0 0 150} {150 0 150} {150 4 150} {0 4 150} 
+	cellPointTbl[1][0-8]: {150 0 0} {300 0 0} {300 4 0} {150 4 0} {150 0 150} {300 0 150} {300 4 150} {150 4 150} 
+	cellPointTbl[2][0-8]: {0 4 0} {150 4 0} {150 8 0} {0 8 0} {0 4 150} {150 4 150} {150 8 150} {0 8 150} 
+	cellPointTbl[3][0-8]: {150 4 0} {300 4 0} {300 8 0} {150 8 0} {150 4 150} {300 4 150} {300 8 150} {150 8 150} 
+	cellPointTbl[4][0-8]: {0 0 150} {150 0 150} {150 4 150} {0 4 150} {0 0 300} {150 0 300} {150 4 300} {0 4 300} 
+	cellPointTbl[5][0-8]: {150 0 150} {300 0 150} {300 4 150} {150 4 150} {150 0 300} {300 0 300} {300 4 300} {150 4 300} 
+	cellPointTbl[6][0-8]: {0 4 150} {150 4 150} {150 8 150} {0 8 150} {0 4 300} {150 4 300} {150 8 300} {0 8 300} 
+	cellPointTbl[7][0-8]: {150 4 150} {300 4 150} {300 8 150} {150 8 150} {150 4 300} {300 4 300} {300 8 300} {150 8 300} 
+}
+
+	cellParticleCountTbl (ptr): 0x80699d0
+	cellParticleCountTbl[0-8]: 004 004 004 004 004 004 004 004 
+	cellParticleSizeTbl (ptr): 0x8069a00
+	cellParticleSizeTbl[0-8]: 004 004 004 004 004 004 004 004 
+	cellParticleTbl (ptr): 0x8069a30
+	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-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
+
+	}
+	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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,173 @@
+StGermain Framework revision 3623. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+Swarm (ptr): 0x80673d0
+Stg_Component (ptr): 0x80673d0
+Stg_Object (ptr): 0x80673d0
+	Stg_Class (ptr): 0x80673d0
+		sizeOfSelf: 220
+		_deleteSelf: Yes
+		type: Swarm
+		_delete (func ptr): 0x4002cbb0
+		_print (func ptr): 0x4002ccc4
+		_copy (func ptr): 0x4002d2d9
+	name: testSwarm
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x4002dbd4
+	_construct (func ptr): 0x4002dcb7
+	_build (func ptr): 0x4002def7
+	_initialise (func ptr): 0x4002e21e
+	_execute (func ptr): 0x4002e2f7
+	_destroy (func ptr): 0x4002e2fc
+	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): 0x8066a28
+CellLayout (ptr): 0x8066a28
+Stg_Component (ptr): 0x8066a28
+Stg_Object (ptr): 0x8066a28
+	Stg_Class (ptr): 0x8066a28
+		sizeOfSelf: 132
+		_deleteSelf: Yes
+		type: ElementCellLayout
+		_delete (func ptr): 0x400214dc
+		_print (func ptr): 0x40021505
+		_copy (func ptr): 0x40021579
+	name: elementCellLayout
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0x40021010
+	_construct (func ptr): 0x40021651
+	_build (func ptr): 0x400216c5
+	_initialise (func ptr): 0x400216ca
+	_execute (func ptr): 0x400216cf
+	_destroy (func ptr): 0x400216d4
+	isConstructed: True
+	isBuilt: False
+	isInitialised: False
+	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): 0x400216d9
+	_cellShadowCount (func ptr): 0x400216f6
+	_pointCount (func ptr): 0x40021713
+	_initialisePoints (func ptr): 0x4002173d
+	_mapElementIdToCellId (func ptr): 0x400217c7
+	_isInCell (func ptr): 0x4002185a
+	_cellOf (func ptr): 0x40021a5d
+	_getShadowInfo (func ptr): 0x40021c50
+	mesh (ptr): 0x8065908
+RandomParticleLayout (ptr): 0x8066ee8:
+PerCellParticleLayout (ptr): 0x8066ee8
+ParticleLayout (ptr): 0x8066ee8
+Stg_Class (ptr): 0x8066ee8
+	sizeOfSelf: 132
+	_deleteSelf: Yes
+	type: RandomParticleLayout
+	_delete (func ptr): 0x4002aed3
+	_print (func ptr): 0x4002aefc
+	_copy (func ptr): 0x4002af8f
+	_setInitialCounts (func ptr): 0x4002a335
+	_initialiseParticles (func ptr): 0x4002a4d2
+	coordSystem: GlobalCoordSystem
+	weightsInitialisedAtStartup : False
+	_initialCount (func ptr): 0x4002b168
+	_initialiseParticlesOfCell (func ptr): 0x4002b17c
+	cellParticleCount: 4
+	seed: 13
+	cellLocalCount: 4
+	cellDomainCount: 4
+	cellShadowCount: 0
+	cellPointCountTbl (ptr): 0x8068058
+	cellPointCountTbl[0-4]: 008 008 008 008 
+	cellPointTbl (ptr): 0x8068880
+	cellPointTbl[0-4]: {
+	cellPointTbl[0][0-8]: {0 8 0} {150 8 0} {150 12 0} {0 12 0} {0 8 150} {150 8 150} {150 12 150} {0 12 150} 
+	cellPointTbl[1][0-8]: {150 8 0} {300 8 0} {300 12 0} {150 12 0} {150 8 150} {300 8 150} {300 12 150} {150 12 150} 
+	cellPointTbl[2][0-8]: {0 8 150} {150 8 150} {150 12 150} {0 12 150} {0 8 300} {150 8 300} {150 12 300} {0 12 300} 
+	cellPointTbl[3][0-8]: {150 8 150} {300 8 150} {300 12 150} {150 12 150} {150 8 300} {300 8 300} {300 12 300} {150 12 300} 
+}
+
+	cellParticleCountTbl (ptr): 0x8068920
+	cellParticleCountTbl[0-4]: 004 004 004 004 
+	cellParticleSizeTbl (ptr): 0x8068940
+	cellParticleSizeTbl[0-4]: 004 004 004 004 
+	cellParticleTbl (ptr): 0x8068960
+	cellParticleTbl [0-4]: {
+		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
+
+	}
+	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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/Swarm/Swarm.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+};
+
+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;
+	Topology*			nTopology;
+	ElementLayout*			eLayout;
+	NodeLayout*			nLayout;
+	MeshDecomp*			decomp;
+	MeshLayout*			layout;
+	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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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, "allowUnbalancing", Dictionary_Entry_Value_FromBool( True ) );
+	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 ) );
+	
+	/* Run the mesher */
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	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 );
+	
+	/* Build the swarm */
+	Build( swarm, 0, False );
+	Initialise( swarm, 0, False );
+	
+	if( rank == procToWatch ) {
+		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( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+StGermain Framework revision 3585. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+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.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+StGermain Framework revision 3585. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+
+Starting timestep 1:
+
+Starting timestep 2:
+
+Comparing the 23197 local Particles between old and new swarms:
+	Passed: swarms are identical.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,10 @@
+StGermain Framework revision 3585. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+Calculated attractor point is at (0.333333,0.333333,0.333333):
+
+Starting timestep 1:
+
+Starting timestep 2:
+
+Comparing the 9571 local Particles between old and new swarms:
+	Passed: swarms are identical.

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,361 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3634 2006-06-13 09:51:29Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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;
+};
+
+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;
+	Topology*			nTopology;
+	ElementLayout*			eLayout;
+	NodeLayout*			nLayout;
+	MeshDecomp*			decomp;
+	MeshLayout*			layout;
+	ExtensionManager_Register*	extensionMgr_Register;
+	Mesh*				mesh;
+	ElementCellLayout*		elementCellLayout;
+	RandomParticleLayout*		randomParticleLayout;
+	Swarm*				swarm;
+	Stream*				stream;
+	Index				timeStep;
+	BlockGeometry*			blockGeom;
+	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;
+	
+	/* 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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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, True );
+	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, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( numProcessors ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 33 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 33 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 33 ) );
+	Dictionary_Add( dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool( True ) );
+	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( 1.0f ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	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 ) );
+	
+	/* Run the mesher */
+	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, CommWorld, eLayout, nLayout );
+	layout = MeshLayout_New( "Meshlayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* 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 );
+	
+	/* +++ BUILD PHASE +++ */
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	/* Build the swarm */
+	Build( swarm, 0, False );
+
+	/* +++ INITIALISE PHASE +++ */
+
+	Initialise( mesh, 0, False );
+	Initialise( swarm, 0, False );
+	
+	blockGeom = (BlockGeometry*)eLayout->geometry;
+	for ( dim_I=0; dim_I < 3; dim_I++ ) {
+		attractorPoint[dim_I] = ( blockGeom->max[dim_I] - blockGeom->min[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 );
+	Build( newSwarm, 0, False );
+	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( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_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];
+			}
+		}
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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;
+	DiscretisationContext* 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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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 = DiscretisationContext_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 );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvection.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvection.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvection.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** 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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/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[] ) {
+	DiscretisationContext*          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;
+	
+	/* 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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	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 );
+	/* For plugins to read */
+	Dictionary_Add( dictionary, "procToWatch", Dictionary_Entry_Value_FromUnsignedInt( procToWatch ) );
+	
+/* Construction phase -------------------------------------------------------------------------------------------*/
+	
+	/* Create the Context */
+	context = DiscretisationContext_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 );
+	PluginsManager_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 */ );
+	PluginsManager_ConstructPlugins( 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 );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+
+void SaveSwarms( void* context ) {
+	
+	Swarm_Register_SaveAllRegisteredSwarms( 
+		Swarm_Register_GetSwarm_Register(), context );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionBouncer.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionBouncer.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionBouncer.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,2178 @@
+StGermain Framework revision 3556. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1444 @@
+StGermain Framework revision 3556. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,738 @@
+StGermain Framework revision 3556. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,752 @@
+StGermain Framework revision 3556. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1074 @@
+StGermain Framework revision 3570. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,402 @@
+StGermain Framework revision 3556. Copyright (C) 2003-2005 VPAC.
+Watching rank: 2
+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:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinner.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinner.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinner.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,120 @@
+<?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">500</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,69 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+WithinShapeParticleLayout (ptr): 0x8062748:
+	SpaceFillerParticleLayout (ptr): 0x8062748:
+		GlobalParticleLayout (ptr): 0x8062748
+		ParticleLayout (ptr): 0x8062748
+		Stg_Class (ptr): 0x8062748
+			sizeOfSelf: 148
+			_deleteSelf: Yes
+			type: WithinShapeParticleLayout
+			_delete (func ptr): 0xb7f3ae9f
+			_print (func ptr): 0xb7f3aec8
+			_copy (func ptr): 0xb7f3af42
+			_setInitialCounts (func ptr): 0xb7f2be93
+			_initialiseParticles (func ptr): 0xb7f3b169
+			coordSystem: GlobalCoordSystem
+			weightsInitialisedAtStartup : False
+			_initialiseParticle (func ptr): 0xb7f33e1e
+			totalInitialParticles: 10
+			averageInitialParticlesPerCell: 1.25
+		self->dim = 3
+	Stg_Component (ptr): 0x8062508
+	Stg_Object (ptr): 0x8062508
+		Stg_Class (ptr): 0x8062508
+			sizeOfSelf: 224
+			_deleteSelf: Yes
+			type: Sphere
+			_delete (func ptr): 0xb7eb4e5d
+			_print (func ptr): 0xb7eb4e86
+			_copy (func ptr): 0xb7eb4eb6
+		name: testSphere
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7eb4f13
+		_construct (func ptr): 0xb7eb4fb8
+		_build (func ptr): 0xb7eb5026
+		_initialise (func ptr): 0xb7eb5056
+		_execute (func ptr): 0xb7eb5086
+		_destroy (func ptr): 0xb7eb50b6
+		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): (0x8062508)
+	self->_isCoordInside = (ptr)0xb7eb50e6
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+		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      7): (0.47269, 0.49191, 0.48593)
+	Local Cell   2:
+		part. InCell   0 (local index      3): (0.52942, 0.49963, 0.48059)
+		part. InCell   1 (local index      4): (0.50827, 0.48257, 0.46768)
+		part. InCell   2 (local index      9): (0.52713, 0.48972, 0.51108)
+	Local Cell   3:
+	Local Cell   4:
+	Local Cell   5:
+		part. InCell   0 (local index      1): (0.49976, 0.50269, 0.49487)
+		part. InCell   1 (local index      8): (0.46072, 0.52487, 0.49155)
+	Local Cell   6:
+		part. InCell   0 (local index      0): (    0.5,     0.5,     0.5)
+		part. InCell   1 (local index      6): (0.53909, 0.52707, 0.51328)
+	Local Cell   7:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,60 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0
+WithinShapeParticleLayout (ptr): 0x8062708:
+	SpaceFillerParticleLayout (ptr): 0x8062708:
+		GlobalParticleLayout (ptr): 0x8062708
+		ParticleLayout (ptr): 0x8062708
+		Stg_Class (ptr): 0x8062708
+			sizeOfSelf: 148
+			_deleteSelf: Yes
+			type: WithinShapeParticleLayout
+			_delete (func ptr): 0xb7f63e9f
+			_print (func ptr): 0xb7f63ec8
+			_copy (func ptr): 0xb7f63f42
+			_setInitialCounts (func ptr): 0xb7f54e93
+			_initialiseParticles (func ptr): 0xb7f64169
+			coordSystem: GlobalCoordSystem
+			weightsInitialisedAtStartup : False
+			_initialiseParticle (func ptr): 0xb7f5ce1e
+			totalInitialParticles: 10
+			averageInitialParticlesPerCell: 1.25
+		self->dim = 3
+	Stg_Component (ptr): 0x8062458
+	Stg_Object (ptr): 0x8062458
+		Stg_Class (ptr): 0x8062458
+			sizeOfSelf: 224
+			_deleteSelf: Yes
+			type: Sphere
+			_delete (func ptr): 0xb7edde5d
+			_print (func ptr): 0xb7edde86
+			_copy (func ptr): 0xb7eddeb6
+		name: testSphere
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7eddf13
+		_construct (func ptr): 0xb7eddfb8
+		_build (func ptr): 0xb7ede026
+		_initialise (func ptr): 0xb7ede056
+		_execute (func ptr): 0xb7ede086
+		_destroy (func ptr): 0xb7ede0b6
+		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): (0x8062458)
+	self->_isCoordInside = (ptr)0xb7ede0e6
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+	Local Cell   1:
+		part. InCell   0 (local index      1): (0.47058, 0.49744, 0.52234)
+		part. InCell   1 (local index      2): (0.49191, 0.48135, 0.53531)
+		part. InCell   2 (local index      3): (0.47269, 0.49191, 0.48593)
+	Local Cell   2:
+	Local Cell   3:
+		part. InCell   0 (local index      0): (0.49976, 0.50269, 0.49487)
+		part. InCell   1 (local index      4): (0.46072, 0.52487, 0.49155)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,60 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Watching rank: 1
+WithinShapeParticleLayout (ptr): 0x80626e8:
+	SpaceFillerParticleLayout (ptr): 0x80626e8:
+		GlobalParticleLayout (ptr): 0x80626e8
+		ParticleLayout (ptr): 0x80626e8
+		Stg_Class (ptr): 0x80626e8
+			sizeOfSelf: 148
+			_deleteSelf: Yes
+			type: WithinShapeParticleLayout
+			_delete (func ptr): 0xb7f87e9f
+			_print (func ptr): 0xb7f87ec8
+			_copy (func ptr): 0xb7f87f42
+			_setInitialCounts (func ptr): 0xb7f78e93
+			_initialiseParticles (func ptr): 0xb7f88169
+			coordSystem: GlobalCoordSystem
+			weightsInitialisedAtStartup : False
+			_initialiseParticle (func ptr): 0xb7f80e1e
+			totalInitialParticles: 10
+			averageInitialParticlesPerCell: 1.25
+		self->dim = 3
+	Stg_Component (ptr): 0x8062438
+	Stg_Object (ptr): 0x8062438
+		Stg_Class (ptr): 0x8062438
+			sizeOfSelf: 224
+			_deleteSelf: Yes
+			type: Sphere
+			_delete (func ptr): 0xb7f01e5d
+			_print (func ptr): 0xb7f01e86
+			_copy (func ptr): 0xb7f01eb6
+		name: testSphere
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f01f13
+		_construct (func ptr): 0xb7f01fb8
+		_build (func ptr): 0xb7f02026
+		_initialise (func ptr): 0xb7f02056
+		_execute (func ptr): 0xb7f02086
+		_destroy (func ptr): 0xb7f020b6
+		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): (0x8062438)
+	self->_isCoordInside = (ptr)0xb7f020e6
+Printing coords of all local particles, cell-by-cell:
+	Local Cell   0:
+		part. InCell   0 (local index      1): (0.52942, 0.49963, 0.48059)
+		part. InCell   1 (local index      2): (0.50827, 0.48257, 0.46768)
+		part. InCell   2 (local index      4): (0.52713, 0.48972, 0.51108)
+	Local Cell   1:
+	Local Cell   2:
+		part. InCell   0 (local index      0): (    0.5,     0.5,     0.5)
+		part. InCell   1 (local index      3): (0.53909, 0.52707, 0.51328)
+	Local Cell   3:

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/Swarm/Swarm.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct _Node {
+	Coord				coord;
+};
+
+struct _Element {
+	Coord				coord;
+};
+
+struct _Particle {
+	__GlobalParticle
+};
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         numProcessors;
+	int                         procToWatch;
+	Dictionary*                 dictionary;
+	Topology*                   nTopology;
+	ElementLayout*              eLayout;
+	NodeLayout*                 nLayout;
+	MeshDecomp*                 decomp;
+	MeshLayout*                 layout;
+	ExtensionManager_Register*  extensionMgr_Register;
+	Mesh*                       mesh;
+	WithinShapeParticleLayout*        particleLayout;
+	ElementCellLayout*          elementCellLayout;
+	Swarm*                      swarm;
+	Stream*                     stream;
+	Dimension_Index             dim;
+	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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	DiscretisationSwarm_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, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( numProcessors ) );
+	Dictionary_Add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 2 ) );
+	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( 1.0f ) );
+	Dictionary_Add( dictionary, "maxY", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 1.0f ) );
+	Dictionary_Add( dictionary, "dim", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	Dictionary_Add( dictionary, "averageInitialParticlesPerCell", Dictionary_Entry_Value_FromUnsignedInt( 20 ) );
+	
+	
+	/* Run the mesher */
+	dim       = Dictionary_GetUnsignedInt( dictionary, "dim" );
+
+	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 );
+	layout    = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	
+	/* Init mesh */
+	extensionMgr_Register = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", layout, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+	
+	/* Configure the element-cell-layout */
+	elementCellLayout = ElementCellLayout_New( "elementCellLayout", mesh );
+	
+	/* Build the mesh */
+	Build( mesh, 0, False );
+	Initialise( mesh, 0, False );
+	
+	centre[I_AXIS] = centre[J_AXIS] = centre[K_AXIS] = 0.5;
+	shape = (Stg_Shape*)Sphere_New( "testSphere", dim, centre, 0, 0, 0, 0.05 );
+	
+	/* Configure the gauss-particle-layout */
+	particleLayout = WithinShapeParticleLayout_New( "withinShapeParticleLayout", dim, 10, shape );
+	
+	/* Configure the swarm */
+	swarm = Swarm_New(  "testSwarm", elementCellLayout, particleLayout, dim, sizeof(Particle),
+		extensionMgr_Register, NULL, CommWorld );
+	
+	/* Build the swarm */
+	Build( swarm, 0, False );
+	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( layout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainDiscretisationUtils
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,600 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->mesh, data, False );
+	}
+}
+
+
+IndexSet* _AllElementsVC_GetSet( void* variableCondition ) {
+	AllElementsVC*				self = (AllElementsVC*)variableCondition;
+	IndexSet*				set = IndexSet_New( self->mesh->layout->decomp->elementDomainCount );
+	
+	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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,196 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_AllElementsVC_h__
+#define __Discretisation_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,
+						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 /* __Discretisation_Utils_AllElementsVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">AllElementsVC</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,601 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->mesh, data, False );
+	}
+}
+
+
+IndexSet* _AllNodesVC_GetSet( void* variableCondition ) {
+	AllNodesVC*		self = (AllNodesVC*)variableCondition;
+	IndexSet*		set = IndexSet_New(self->mesh->layout->decomp->nodeDomainCount);
+	
+	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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,196 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_AllNodesVC_h__
+#define __Discretisation_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,
+						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 /* __Discretisation_Utils_AllNodesVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">AllNodesVC</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,298 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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 ) );
+	self->nDims = Dictionary_GetUnsignedInt( dict, "dims" );
+	assert( self->nDims > 0 );
+
+	/* 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 );
+}
+
+
+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;
+	Coord*		meshCrds;
+	Coord*		cellCrds;
+	unsigned	e_i;
+
+	assert( self );
+	assert( self->mesh );
+	/* TODO: remaining asserts */
+
+	meshCrds = self->mesh->nodeCoord;
+	cellCrds = self->cellMesh->nodeCoord;
+
+	/* Center the cell mesh's node coordinates in the cell mesh's elements. We assume identical
+	   ordering. */
+	for( e_i = 0; e_i < self->cellMesh->elementLocalCount; e_i++ ) {
+		unsigned	nElNodes = self->cellMesh->elementNodeCountTbl[e_i];
+		unsigned*	elNodes = self->cellMesh->elementNodeTbl[e_i];
+		double		fac = 1.0 / (double)nElNodes;
+		unsigned	d_i;
+
+		memset( meshCrds[e_i], 0, sizeof(Coord) );
+		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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Utils_CellRemesher_h__
+#define __StGermain_Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">CellRemesher</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,801 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->_mesh, data, False );
+	}
+}
+
+IndexSet* _CornerVC_GetSet(void* variableCondition)
+{
+	CornerVC*   self = (CornerVC*)variableCondition;
+	IndexSet    *set = NULL;
+	HexaMD*     hexaMD = (HexaMD*)self->_mesh->layout->decomp;
+	Stream*     warningStr = Journal_Register( Error_Type, self->type );
+	
+
+	switch (self->_corner) {
+		case CornerVC_Corner_BottomLeftFront:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBottomLeftFrontSet(self->_mesh);
+			}
+			break;
+			
+		case CornerVC_Corner_BottomRightFront:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBottomRightFrontSet(self->_mesh);
+			}	
+			break;
+			
+		case CornerVC_Corner_TopLeftFront:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalTopLeftFrontSet(self->_mesh);
+			}	
+			break;
+			
+		case CornerVC_Corner_TopRightFront:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalTopRightFrontSet(self->_mesh);
+			}	
+			break;
+			
+		case CornerVC_Corner_BottomLeftBack:
+			set = RegularMeshUtils_CreateGlobalBottomLeftBackSet(self->_mesh);
+			break;
+			
+		case CornerVC_Corner_BottomRightBack:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBottomRightBackSet(self->_mesh);
+			}
+			break;
+			
+		case CornerVC_Corner_TopLeftBack:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalTopLeftBackSet(self->_mesh);
+			}	
+			break;
+			
+		case CornerVC_Corner_TopRightBack:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);
+			}
+			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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,198 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 __Discretisation_Utils_CornerVC_h__
+#define __Discretisation_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,
+							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 /* __Discretisation_Utils_CornerVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+<?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="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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Context.c 2454 2004-12-21 04:50:42Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+                                                                                                                                    
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+                                                                                                                                    
+#include "types.h"
+#include "FieldVariable.h"
+#include "FieldVariable_Register.h"
+#include "DiscretisationContext.h"
+                                                                                                                                    
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type DiscretisationContext_Type = "DiscretisationContext";
+
+DiscretisationContext* DiscretisationContext_New( 
+		Name                                        name,
+		double                                      start,
+		double                                      stop,
+		MPI_Comm                                    communicator,
+		Dictionary*                                 dictionary )
+{
+		return _DiscretisationContext_New(
+			sizeof(DiscretisationContext),
+			DiscretisationContext_Type,
+			_DiscretisationContext_Delete,
+			_DiscretisationContext_Print,
+			NULL,
+			NULL,
+			_AbstractContext_Construct,
+			_AbstractContext_Build,
+			_AbstractContext_Initialise,
+			_AbstractContext_Execute,
+			_AbstractContext_Destroy,
+			name,
+			True,
+			_DiscretisationContext_SetDt,
+			start,
+			stop,
+			MPI_COMM_WORLD,
+			dictionary );
+}
+
+DiscretisationContext* _DiscretisationContext_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 )
+{
+	DiscretisationContext* self;
+	
+	/* Allocate memory */
+	self = (DiscretisationContext*)_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 ){
+		_DiscretisationContext_Init( self );
+		
+	}
+	
+	return self;
+}
+
+
+void _DiscretisationContext_Init( DiscretisationContext* self ) {
+	Dictionary_Entry_Value*   feVarsList = NULL;
+	FieldVariable*            fieldVar = NULL;
+
+	
+	self->isConstructed = True;
+	self->fieldVariable_Register = FieldVariable_Register_New();
+	self->dim = Dictionary_GetUnsignedInt_WithDefault( self->dictionary, "dim", 2 );
+
+	/* Case insensitive search */
+	feVarsList = Dictionary_Get( self->dictionary, "fieldVariablesToCheckpoint" );
+	if ( NULL == feVarsList ) {
+		feVarsList = Dictionary_Get( self->dictionary, "FieldVariablesToCheckpoint" );
+	}	
+
+	if (feVarsList != NULL ) {
+		/* Dump the requested subset of feVars */
+		Index                    listLength = Dictionary_Entry_Value_GetCount( feVarsList );
+		Index                    var_I = 0;
+		Dictionary_Entry_Value*  feVarDictValue = NULL;
+	
+		/* Initially set all in register to False since they were created
+		   as true by default */
+		for ( var_I = 0; var_I < self->fieldVariable_Register->objects->count; var_I++ ) {
+			fieldVar = FieldVariable_Register_GetByIndex( self->fieldVariable_Register, var_I );
+			fieldVar->isCheckpointedAndReloaded = False;
+		}	
+	
+		
+		for ( var_I = 0; var_I < listLength; var_I++ ) {
+			feVarDictValue = Dictionary_Entry_Value_GetElement( feVarsList, var_I );
+			fieldVar = FieldVariable_Register_GetByName( self->fieldVariable_Register,
+				Dictionary_Entry_Value_AsString( feVarDictValue ) );
+				
+			if ( NULL == fieldVar ) {
+				Stream* errorStr = Journal_Register( Error_Type, self->type );
+				Journal_Printf( errorStr, "WARNING - in %s: requested feVariable to "
+					"save \"%s\" doesn't exist. Skipping.\n",
+					__func__, Dictionary_Entry_Value_AsString( feVarDictValue ) );
+				continue;	
+			}
+			else {
+				fieldVar->isCheckpointedAndReloaded = True;
+			}
+		}
+	}
+	
+	Stg_ObjectList_ClassAppend( self->register_Register, (void*)self->fieldVariable_Register, "FieldVariable_Register" );
+}
+
+
+/* Virtual Functions -------------------------------------------------------------------------------------------------------------*/
+
+void _DiscretisationContext_Delete( void* context ) {
+	DiscretisationContext* self = (DiscretisationContext*)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 _DiscretisationContext_Print( void* context, Stream* stream ) {
+	DiscretisationContext* self = (DiscretisationContext*)context;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "DiscretisationContext (ptr): %p\n", self );
+	
+	/* Print parent */
+	_AbstractContext_Print( self, stream );
+
+	Journal_Printf( (void*) stream, "\tfieldVariables (ptr): %p\n", self->fieldVariable_Register );
+	Print( self->fieldVariable_Register, stream );
+}
+
+
+void _DiscretisationContext_SetDt( void* context, double dt ) {
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_DiscretisationContext_h__
+#define __Discretisation_Utils_DiscretisationContext_h__
+	
+	/* Textual name of this class */
+	extern const Type DiscretisationContext_Type;
+	
+	#define __DiscretisationContext \
+		/* General info */ \
+		__AbstractContext \
+		\
+		/* Virtual info */ \
+		\
+		/* DiscretisationContext info */ \
+		FieldVariable_Register*             fieldVariable_Register; \
+		Dimension_Index	                    dim;						\
+		
+	struct DiscretisationContext { __DiscretisationContext };
+	
+	DiscretisationContext* DiscretisationContext_New( 
+		Name                                        name,
+		double                                      start,
+		double                                      stop,
+		MPI_Comm                                    communicator,
+		Dictionary*                                 dictionary );
+	
+	/** Creation implementation / Virtual constructor */
+	DiscretisationContext* _DiscretisationContext_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 						_DiscretisationContext_Init( DiscretisationContext* self );
+
+	/* Virtual Functions ------------------------------------------------------------------------------------------------*/
+	
+	/* Stg_Class_Delete implementation */
+	void						_DiscretisationContext_Delete( void* context );
+	
+	/* Print implementation */
+	void						_DiscretisationContext_Print( void* context, Stream* stream );
+	
+	void _DiscretisationContext_SetDt( void* context, double dt ) ;
+
+#endif /* __DiscretisationContext_h__*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,672 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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);
+}
+
+DofLayout* DofLayout_New( Name name, Variable_Register* variableRegister, Index numItemsInLayout )
+{
+	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);
+}
+
+
+void DofLayout_Init(DofLayout* self, Name name, Variable_Register* variableRegister, Index numItemsInLayout )
+{
+	/* 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);
+}
+
+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 )
+{
+	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 );
+	}
+	
+	return self;
+}
+
+
+void _DofLayout_Init(void* dofLayout, Variable_Register* variableRegister, Index numItemsInLayout, Variable_Index baseVariableCount, Variable** baseVariableArray )
+{
+	DofLayout*	self = (DofLayout*)dofLayout;
+	
+	self->isConstructed = True;
+	self->_variableRegister = variableRegister;
+	
+	self->_numItemsInLayout = numItemsInLayout;
+	self->_variableEnabledSets = NULL;
+	self->_totalVarCount = 0;
+	self->_varIndicesMapping = NULL;
+	
+	self->dofCounts = NULL;
+
+	/* Adds each variable in this list as a base degree of freedom to each item in DofLayout */
+	DofLayout_AddAllFromVariableArray( self, baseVariableCount, 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;
+	Name                    countName         = NULL;
+	void*                   variableRegister  = NULL;
+	void*                   pointerRegister   = NULL;
+	int*                    count             = NULL;
+	Dictionary_Entry_Value* list;
+	Variable_Index          baseVariableCount = 0;
+	Variable**              baseVariableList  = NULL;
+
+	// Get component's dictionary setup //
+	assert( cf->componentDict );
+	thisComponentDict = Dictionary_GetDictionary( cf->componentDict, self->name );
+	assert( thisComponentDict );
+	
+	countName = Stg_ComponentFactory_GetString( cf, self->name, "Count", "");
+	pointerRegister = (Stg_ObjectList*)Stg_ObjectList_Get( cf->registerRegister, "Pointer_Register" );
+	assert( pointerRegister );
+
+	count = Stg_ObjectList_Get( pointerRegister, countName );
+	assert( count );
+	
+	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, *count, baseVariableCount, baseVariableList );
+
+	if (baseVariableList)
+		Memory_Free( baseVariableList );
+}
+
+void _DofLayout_Build( void* dofLayout, void* data ) {
+	DofLayout*	self = (DofLayout*)dofLayout;
+	Index		indexCount;
+	Index*		indices;
+	Index		set_I, i, pos;
+	
+	/* ensure variables are built */
+	for( i = 0; i < self->_totalVarCount; i++ )
+		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++ ) {
+		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, Processor_Index 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, Processor_Index 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 );
+	}
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,203 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_DofLayout_h__
+#define __Discretisation_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; \
+
+	/** 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		DofLayout_Init(DofLayout* self, Name name, Variable_Register* variableRegister, Index numItemsInLayout );
+	
+	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 _DofLayout_Init(void* dofLayout, Variable_Register* variableRegister, Index numItemsInLayout, Variable_Index baseVariableCount, Variable** baseVariableArray );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** 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, Processor_Index rank );
+
+	/** Saves all variables used by this dofLayout to files */
+	void DofLayout_LoadAllVariablesFromFiles( void* dofLayout, char* prefixString, Processor_Index rank );
+
+#endif /* __Discretisation_Utils_DofLayout_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+<?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="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>
+
+<!--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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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];
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_EmbeddedSurface_h__
+#define __Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,340 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "FieldVariable.h"
+#include "DiscretisationContext.h"
+#include "FieldVariable_Register.h"
+
+#include <assert.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;
+	//TODO put comment here
+	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;
+	
+	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 );
+	/* DiscretisationContext will be setting isCheckpointedAndReloaded later
+		depending on the contents of the list "FieldVariablesToCheckpoint". 
+		May want to change this later so it is set individually in each
+		FeVariable's component xml entry.
+		--PatrickSunter & KathleenHumble, 27/09/06	*/
+	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 );
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_FieldVariable_h__
+#define __Discretisation_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 /* __Discretisation_Utils_FieldVariable_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">FieldVariable</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>
+
+<!--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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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 );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_FieldVariable_Register_h__
+#define __Discretisation_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 /* __Discretisation_Utils_FieldVariable_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool DiscretisationUtils_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_Finalise_h__
+#define __Discretisation_Utils_Finalise_h__
+	
+	Bool DiscretisationUtils_Finalise( void );
+	
+#endif /* __Discretisation_Utils_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,737 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _FrictionVC_GetSet(void* variableCondition)
+{
+	FrictionVC*		self = (FrictionVC*)variableCondition;
+	IndexSet	*set = NULL;
+	HexaMD*		hexaMD = (HexaMD*)self->_mesh->layout->decomp;
+	Stream*		warningStr = Journal_Register( Error_Type, self->type );
+
+	
+	switch (self->_wall) {
+		case FrictionVC_Wall_Front:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalFrontSet(self->_mesh);
+			}
+			break;
+			
+		case FrictionVC_Wall_Back:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBackSet(self->_mesh);
+			}	
+			break;
+			
+		case FrictionVC_Wall_Top:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalTopSet(self->_mesh);
+			}	
+			break;
+			
+		case FrictionVC_Wall_Bottom:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBottomSet(self->_mesh);
+			}	
+			break;
+			
+		case FrictionVC_Wall_Left:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalLeftSet(self->_mesh);
+			}	
+			break;
+			
+		case FrictionVC_Wall_Right:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,192 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (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,
+						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 /* __Discretisation_Utils_FrictionVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+<?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="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="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>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Init.c 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "Init.h"
+#include "AllElementsVC.h"
+#include "AllNodesVC.h"
+#include "DiscretisationContext.h"
+#include "MeshCoarsener_Hexa.h"
+#include "WallVC.h"
+#include "CornerVC.h"
+#include "InnerWallVC.h"
+#include "ShapeVC.h"
+#include "FrictionVC.h"
+#include "SplitFrictionWallVC.h"
+#include "Sync.h"
+#include "DofLayout.h"
+#include "Operator.h"
+#include "FieldVariable.h"
+#include "FieldVariable_Register.h"
+#include "LinearRegression.h"
+#include "OperatorFieldVariable.h"
+#include "TimeIntegrator.h"
+#include "TimeIntegratee.h"
+#include "ShapeAdvector.h"
+#include "Remesher.h"
+#include "StripRemesher.h"
+#include "CellRemesher.h"
+
+#include <stdio.h>
+
+Bool DiscretisationUtils_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, ShapeVC_Type, ShapeVC_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", (Stg_Component_DefaultConstructorFunction*)AllElementsVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), AllNodesVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)AllNodesVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), DofLayout_Type, "0", (Stg_Component_DefaultConstructorFunction*)DofLayout_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), FieldVariable_Type, "0", (Stg_Component_DefaultConstructorFunction*)FieldVariable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), OperatorFieldVariable_Type, "0", (Stg_Component_DefaultConstructorFunction*)OperatorFieldVariable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), WallVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)WallVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CornerVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)CornerVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), InnerWallVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)InnerWallVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ShapeVC_Type, "0", _ShapeVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), FrictionVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)FrictionVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SplitFrictionWallVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)SplitFrictionWallVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Remesher_Type, "0", (Stg_Component_DefaultConstructorFunction*)_Remesher_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), StripRemesher_Type, "0", (Stg_Component_DefaultConstructorFunction*)_StripRemesher_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CellRemesher_Type, "0", (Stg_Component_DefaultConstructorFunction*)_CellRemesher_DefaultNew );
+
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), TimeIntegrator_Type,"0", _TimeIntegrator_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), TimeIntegratee_Type,"0", _TimeIntegratee_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), ShapeAdvector_Type,"0", _ShapeAdvector_DefaultNew );
+
+	RegisterParent( DiscretisationContext_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( ShapeVC_Type,                  VariableCondition_Type );
+	RegisterParent( FrictionVC_Type,               VariableCondition_Type );
+	RegisterParent( SplitFrictionWallVC_Type,      VariableCondition_Type );
+	RegisterParent( DofLayout_Type,                Stg_Component_Type );
+	RegisterParent( MeshCoarsener_Hexa_Type,       Stg_Component_Type );
+	RegisterParent( Sync_Type,                     Stg_Component_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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_Init_h__
+#define __Discretisation_Utils_Init_h__
+	
+	Bool DiscretisationUtils_Init( int* argc, char** argv[] );
+	
+#endif /* __Discretisation_Utils_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,742 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _InnerWallVC_GetSet(void* variableCondition)
+{
+	InnerWallVC*		self = (InnerWallVC*)variableCondition;
+	IndexSet	*set = NULL;
+	HexaMD*		hexaMD = (HexaMD*)self->_mesh->layout->decomp;
+	Stream*		warningStr = Journal_Register( Error_Type, self->type );
+
+	
+	switch (self->_innerWall) {
+		case InnerWallVC_InnerWall_Front:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				Journal_Printf( warningStr, "Warning - in %s: Can't build a %s innerWall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "K" );
+				set = IndexSet_New(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalInnerFrontSet(self->_mesh);
+			}
+			break;
+			
+		case InnerWallVC_InnerWall_Back:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				Journal_Printf( warningStr, "Warning - in %s: Can't build a %s innerWall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "K" );
+				set = IndexSet_New(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalInnerBackSet(self->_mesh);
+			}	
+			break;
+			
+		case InnerWallVC_InnerWall_Top:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				Journal_Printf( warningStr, "Warning - in %s: Can't build a %s innerWall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "J" );
+				set = IndexSet_New(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalInnerTopSet(self->_mesh);
+			}	
+			break;
+			
+		case InnerWallVC_InnerWall_Bottom:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				Journal_Printf( warningStr, "Warning - in %s: Can't build a %s innerWall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "J" );
+				set = IndexSet_New(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalInnerBottomSet(self->_mesh);
+			}	
+			break;
+			
+		case InnerWallVC_InnerWall_Left:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				Journal_Printf( warningStr, "Warning - in %s: Can't build a %s innerWall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "I" );
+				set = IndexSet_New(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalInnerLeftSet(self->_mesh);
+			}	
+			break;
+			
+		case InnerWallVC_InnerWall_Right:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				Journal_Printf( warningStr, "Warning - in %s: Can't build a %s innerWall VC "
+					"when mesh has no elements in the %s axis. Returning an empty set.\n", __func__,
+					InnerWallVC_InnerWallEnumToStr[self->_innerWall], "I" );
+				set = IndexSet_New(hexaMD->nodeDomainCount);	
+			}
+			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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,198 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 __Discretisation_Utils_InnerWallVC_h__
+#define __Discretisation_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,
+						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 /* __Discretisation_Utils_InnerWallVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">InnerWallVC</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="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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 );
+}
+
+
+
+
+	

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_LinearRegression_h__
+#define __Discretisation_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 /* __Discretisation_Utils_LinearRegression_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+				
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3542 2006-05-01 13:02:49Z RobertTurnbull $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainDiscretisationUtils
+def_inc = StGermain/Discretisation/Utils
+
+def_srcs = \
+	AllElementsVC.c \
+	AllNodesVC.c \
+	WallVC.c \
+	InnerWallVC.c \
+	CornerVC.c \
+	ShapeVC.c \
+	FrictionVC.c \
+	SplitFrictionWallVC.c \
+	DofLayout.c \
+	RegularMeshUtils.c \
+	Operator.c \
+	FieldVariable.c \
+	FieldVariable_Register.c \
+	OperatorFieldVariable.c \
+	MeshCoarsener_Hexa.c \
+	DiscretisationContext.c \
+	LinearRegression.c \
+	TimeIntegrator.c \
+	TimeIntegratee.c \
+	ShapeAdvector.c \
+	SobolGenerator.c \
+	Sync.c \
+	SemiRegDeform.c \
+	Remesher.c \
+	StripRemesher.c \
+	CellRemesher.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	types.h \
+	AllElementsVC.h \
+	AllNodesVC.h \
+	WallVC.h \
+	InnerWallVC.h \
+	CornerVC.h \
+	ShapeVC.h \
+	FrictionVC.h \
+	SplitFrictionWallVC.h \
+	DofLayout.h \
+	RegularMeshUtils.h \
+	Operator.h \
+	FieldVariable.h \
+	FieldVariable_Register.h \
+	OperatorFieldVariable.h \
+	MeshCoarsener_Hexa.h \
+	DiscretisationContext.h \
+	LinearRegression.h \
+	TimeIntegrator.h \
+	TimeIntegratee.h \
+	ShapeAdvector.h \
+	SobolGenerator.h \
+	Sync.h \
+	SemiRegDeform.h \
+	Remesher.h \
+	StripRemesher.h \
+	CellRemesher.h \
+	Init.h \
+	Finalise.h \
+	Utils.h
+
+def_objlists = 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: MeshCoarsener_Hexa.c 2453 2004-12-21 04:49:34Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "MeshCoarsener_Hexa.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type MeshCoarsener_Hexa_Type = "MeshCoarsener_Hexa";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+MeshCoarsener_Hexa* MeshCoarsener_Hexa_DefaultNew( Name name )
+{
+	return _MeshCoarsener_Hexa_New(
+		sizeof(MeshCoarsener_Hexa), 
+		MeshCoarsener_Hexa_Type, 
+		_MeshCoarsener_Hexa_Delete, 
+		_MeshCoarsener_Hexa_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)MeshCoarsener_Hexa_DefaultNew,
+		_MeshCoarsener_Hexa_Construct,
+		_MeshCoarsener_Hexa_Build,
+		_MeshCoarsener_Hexa_Initialise,
+		_MeshCoarsener_Hexa_Execute,
+		_MeshCoarsener_Hexa_Destroy,
+		name,
+		False,
+		NULL );
+}
+
+MeshCoarsener_Hexa* MeshCoarsener_Hexa_New_Param(
+		Name						name,
+		Dictionary*					dictionary )
+{
+	return _MeshCoarsener_Hexa_New( 
+		sizeof(MeshCoarsener_Hexa), 
+		MeshCoarsener_Hexa_Type, 
+		_MeshCoarsener_Hexa_Delete, 
+		_MeshCoarsener_Hexa_Print,
+		NULL,
+		(Stg_Component_DefaultConstructorFunction*)MeshCoarsener_Hexa_DefaultNew,
+		_MeshCoarsener_Hexa_Construct,
+		_MeshCoarsener_Hexa_Build,
+		_MeshCoarsener_Hexa_Initialise,
+		_MeshCoarsener_Hexa_Execute,
+		_MeshCoarsener_Hexa_Destroy,
+		name,
+		True,
+		dictionary );
+}
+
+
+void MeshCoarsener_Hexa_Init(
+		MeshCoarsener_Hexa*				self,
+		Name						name,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = MeshCoarsener_Hexa_Type;
+	self->_sizeOfSelf = sizeof(MeshCoarsener_Hexa);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _MeshCoarsener_Hexa_Delete;
+	self->_print = _MeshCoarsener_Hexa_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = (Stg_Component_DefaultConstructorFunction*) MeshCoarsener_Hexa_DefaultNew;
+	self->_construct = _MeshCoarsener_Hexa_Construct;
+	self->_build = _MeshCoarsener_Hexa_Build;
+	self->_initialise = _MeshCoarsener_Hexa_Initialise;
+	self->_execute = _MeshCoarsener_Hexa_Execute;
+	self->_destroy = _MeshCoarsener_Hexa_Destroy;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	/* MeshCoarsener_Hexa info */
+	_MeshCoarsener_Hexa_Init( self );
+}
+
+
+MeshCoarsener_Hexa* _MeshCoarsener_Hexa_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 )
+{
+	MeshCoarsener_Hexa* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(MeshCoarsener_Hexa) );
+	self = (MeshCoarsener_Hexa*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor, _construct, _build, 
+			_initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* MeshCoarsener_Hexa info */
+	if( initFlag ){
+		_MeshCoarsener_Hexa_Init( self );
+	}
+	
+	return self;
+}
+
+void _MeshCoarsener_Hexa_Init(
+		MeshCoarsener_Hexa*				self )
+{
+	/* General and Virtual info should already be set */
+	self->isConstructed = True;
+	/* MeshCoarsener_Hexa info */
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _MeshCoarsener_Hexa_Delete( void* meshCoarsener ) {
+	MeshCoarsener_Hexa* self = (MeshCoarsener_Hexa*)meshCoarsener;
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _MeshCoarsener_Hexa_Print( void* meshCoarsener, Stream* stream ) {
+	MeshCoarsener_Hexa* self = (MeshCoarsener_Hexa*)meshCoarsener;
+	
+	/* Set the Journal for printing informations */
+	Stream* meshCoarsenerStream;
+	meshCoarsenerStream = Journal_Register( InfoStream_Type, "MeshCoarsener_HexaStream" );
+
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "MeshCoarsener_Hexa (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* MeshCoarsener_Hexa info */
+}
+
+void _MeshCoarsener_Hexa_Construct( void* meshCoarsener, Stg_ComponentFactory *cf, void* data ){
+	
+}
+	
+void _MeshCoarsener_Hexa_Build( void* meshCoarsener, void *data ){
+	
+}
+	
+void _MeshCoarsener_Hexa_Initialise( void* meshCoarsener, void *data ){
+	
+}
+	
+void _MeshCoarsener_Hexa_Execute( void* meshCoarsener, void *data ){
+	
+}
+
+void _MeshCoarsener_Hexa_Destroy( void* meshCoarsener, void *data ){
+
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void MeshCoarsener_Hexa_Coarsen( void* meshCoarsener, 
+				 void* hexaMesh, 
+				 unsigned level, 
+				 IndexMap** nodeFineToCoarse, 
+				 IndexMap** nodeCoarseToFine )
+{
+	MeshCoarsener_Hexa*	self = (MeshCoarsener_Hexa*)meshCoarsener;
+	Mesh*			mesh = (Mesh*)hexaMesh;
+	HexaMD*			decomp = (HexaMD*)mesh->layout->decomp; /* TODO: assumption; need to rectify */
+	Partition_Index		proc_I;
+	Index			idx_I;
+	Element_LocalIJK	eBase;
+	unsigned		levelMax[3];
+	Element_GlobalIJK	oldElement3DCounts;
+	Node_GlobalIJK		nodeGlobal3DCounts;
+	IJK26Topology*		elementTopology;
+	BlockGeometry*		elementGeometry;
+	HexaEL*			elementLayout;
+	IJK6Topology*		nodeTopology;
+	NodeLayout*		nodeLayout;
+	
+	/*
+	** There are a bunch of requirements for this version, here they are...
+	*/
+	
+	/* Because of potentially deforming geometry we must do this before the build phase */
+	assert( !mesh->isBuilt );
+	
+	/* If the mesh is decomposed, we must make sure each local mesh is the same size */
+	for( proc_I = 1; proc_I < decomp->procsInUse; proc_I++ ) {
+		for( idx_I = 0; idx_I < 3; idx_I++ ) {
+			assert( decomp->nodeLocal3DCounts[proc_I][idx_I] == decomp->nodeLocal3DCounts[0][idx_I] );
+		}
+	}
+	
+	/* Ensure the level is below the level maximum (maximum is where the mesh currently is) */
+	for( idx_I = 0; idx_I < 3; idx_I++ ) {
+		_MeshCoarsener_Hexa_CalcElementBaseAndLevel( self, 
+							     decomp->elementLocal3DCounts[0][idx_I], 
+							     &levelMax[idx_I], 
+							     &eBase[idx_I] );
+		assert( level <= levelMax[idx_I] );
+	}
+	
+	/* If we want level 0, just return without altering the mesh */
+	if( level == 0 ) {
+		return;
+	}
+	
+	
+	/*
+	** Perform the resize, note that this is a bad way of doing it, will change later
+	*/
+	
+	/* Calculate the new element sizes */
+	for( idx_I = 0; idx_I < 3; idx_I++ ) {
+		nodeGlobal3DCounts[idx_I] = (Node_LocalIndex)pow( 2.0, (double)(levelMax[idx_I] - level) ) * eBase[idx_I];
+		
+		if( decomp->partitionedAxis[idx_I] ) {
+			nodeGlobal3DCounts[idx_I] *= decomp->partition3DCounts[idx_I];
+		}
+		
+		nodeGlobal3DCounts[idx_I]++;
+	}
+	
+	/* Store old elements sizes for later use */
+	oldElement3DCounts[0] = decomp->elementLocal3DCounts[decomp->rank][0];
+	oldElement3DCounts[1] = decomp->elementLocal3DCounts[decomp->rank][1];
+	oldElement3DCounts[2] = decomp->elementLocal3DCounts[decomp->rank][2];
+	
+	/* Go in and change what's needed (gotta fix this crap) */
+	elementTopology = (IJK26Topology*)mesh->layout->elementLayout->topology;
+	elementTopology->size[0] = nodeGlobal3DCounts[0] - 1;
+	elementTopology->size[1] = nodeGlobal3DCounts[1] - 1;
+	elementTopology->size[2] = nodeGlobal3DCounts[2] - 1;
+	
+	elementGeometry = (BlockGeometry*)mesh->layout->elementLayout->geometry;
+	elementGeometry->size[0] = nodeGlobal3DCounts[0];
+	elementGeometry->size[1] = nodeGlobal3DCounts[1];
+	elementGeometry->size[2] = nodeGlobal3DCounts[2];
+	
+	elementLayout = (HexaEL*)mesh->layout->elementLayout;
+	elementLayout->pointSize[0] = nodeGlobal3DCounts[0];
+	elementLayout->pointSize[1] = nodeGlobal3DCounts[1];
+	elementLayout->pointSize[2] = nodeGlobal3DCounts[2];
+	elementLayout->elementSize[0] = nodeGlobal3DCounts[0] - 1;
+	elementLayout->elementSize[1] = nodeGlobal3DCounts[1] - 1;
+	elementLayout->elementSize[2] = nodeGlobal3DCounts[2] - 1;
+	elementLayout->elementCount = (nodeGlobal3DCounts[0] - 1) * (nodeGlobal3DCounts[1] - 1) * (nodeGlobal3DCounts[2] - 1);
+	
+	nodeTopology = (IJK6Topology*)mesh->layout->nodeLayout->topology;
+	nodeTopology->size[0] = nodeGlobal3DCounts[0];
+	nodeTopology->size[1] = nodeGlobal3DCounts[1];
+	nodeTopology->size[2] = nodeGlobal3DCounts[2];
+	
+	nodeLayout = mesh->layout->nodeLayout;
+	nodeLayout->nodeCount = nodeGlobal3DCounts[0] * nodeGlobal3DCounts[1] * nodeGlobal3DCounts[2];
+
+	_HexaMD_Destroy( decomp, NULL );
+	HexaMD_Init( decomp, "HexaMD",
+		     decomp->dictionary, 
+		     decomp->communicator, 
+		     (ElementLayout*)elementLayout, 
+		     nodeLayout, 
+		     decomp->numPartitionedDims );
+	
+	/* Build maps if necessary, note that the current algorithm is quite inefficient */
+	if( nodeFineToCoarse ) {
+		IndexMap*		map;
+		unsigned		factor[3];
+		Index			lNode_I, lNode_J, lNode_K;
+		Index			mappedNode_I, mappedNode_J, mappedNode_K;
+		
+		factor[0] = oldElement3DCounts[0] / decomp->elementLocal3DCounts[decomp->rank][0];
+		factor[1] = oldElement3DCounts[1] / decomp->elementLocal3DCounts[decomp->rank][1];
+		factor[2] = oldElement3DCounts[2] / decomp->elementLocal3DCounts[decomp->rank][2];
+		
+		map = IndexMap_New();
+		
+		mappedNode_K = 0;
+		for( lNode_K = 0; lNode_K < oldElement3DCounts[2] + 1; lNode_K++ ) {
+			mappedNode_J = 0;
+			for( lNode_J = 0; lNode_J < oldElement3DCounts[1] + 1; lNode_J++ ) {
+				mappedNode_I = 0;
+				for( lNode_I = 0; lNode_I < oldElement3DCounts[0] + 1; lNode_I++ ) {
+					Index	nodeIdx = lNode_K * (oldElement3DCounts[0] + 1) * (oldElement3DCounts[1] + 1) +
+							lNode_J * (oldElement3DCounts[0] + 1) +
+							lNode_I;
+					
+					if( lNode_K % factor[2] == 0 && lNode_J % factor[1] == 0 && lNode_I % factor[0] == 0 ) {
+						Index	mappedNodeIdx = mappedNode_K * (decomp->elementLocal3DCounts[decomp->rank][0] + 1) * (decomp->elementLocal3DCounts[decomp->rank][1] + 1) +
+								mappedNode_J * (decomp->elementLocal3DCounts[decomp->rank][0] + 1) +
+								mappedNode_I;
+						
+						IndexMap_Append( map, nodeIdx, mappedNodeIdx );
+						
+						mappedNode_I++;
+					}
+					else {
+						IndexMap_Append( map, nodeIdx, decomp->nodeGlobalCount );
+					}
+				}
+				
+				if( lNode_J % factor[1] == 0 ) {
+					mappedNode_J++;
+				}
+			}
+			
+			if( lNode_K % factor[2] == 0 ) {
+				mappedNode_K++;
+			}
+		}
+		
+		*nodeFineToCoarse = map;
+	}
+	
+	if( nodeCoarseToFine ) {
+		IndexMap*		map;
+		unsigned		factor[3];
+		Index			lNode_I, lNode_J, lNode_K;
+		Index			mappedNode_I, mappedNode_J, mappedNode_K;
+		
+		factor[0] = oldElement3DCounts[0] / decomp->elementLocal3DCounts[decomp->rank][0];
+		factor[1] = oldElement3DCounts[1] / decomp->elementLocal3DCounts[decomp->rank][1];
+		factor[2] = oldElement3DCounts[2] / decomp->elementLocal3DCounts[decomp->rank][2];
+		
+		map = IndexMap_New();
+		
+		mappedNode_K = 0;
+		for( lNode_K = 0; lNode_K < oldElement3DCounts[2] + 1; lNode_K++ ) {
+			mappedNode_J = 0;
+			for( lNode_J = 0; lNode_J < oldElement3DCounts[1] + 1; lNode_J++ ) {
+				mappedNode_I = 0;
+				for( lNode_I = 0; lNode_I < oldElement3DCounts[0] + 1; lNode_I++ ) {
+					Index	nodeIdx = lNode_K * (oldElement3DCounts[0] + 1) * (oldElement3DCounts[1] + 1) +
+							lNode_J * (oldElement3DCounts[0] + 1) +
+							lNode_I;
+					
+					if( lNode_K % factor[2] == 0 && lNode_J % factor[1] == 0 && lNode_I % factor[0] == 0 ) {
+						Index	mappedNodeIdx = mappedNode_K * (decomp->elementLocal3DCounts[decomp->rank][0] + 1) * (decomp->elementLocal3DCounts[decomp->rank][1] + 1) +
+								mappedNode_J * (decomp->elementLocal3DCounts[decomp->rank][0] + 1) +
+								mappedNode_I;
+						
+						IndexMap_Append( map, mappedNodeIdx, nodeIdx );
+						
+						mappedNode_I++;
+					}
+				}
+				
+				if( lNode_J % factor[1] == 0 ) {
+					mappedNode_J++;
+				}
+			}
+			
+			if( lNode_K % factor[2] == 0 ) {
+				mappedNode_K++;
+			}
+		}
+		
+		*nodeCoarseToFine = map;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _MeshCoarsener_Hexa_CalcElementBaseAndLevel( void* meshCoarsener, Element_Index size, unsigned* level, Element_Index* base ) {
+	/*MeshCoarsener_Hexa*	self = (MeshCoarsener_Hexa*)meshCoarsener;*/
+	
+	/* Calculate the level and the base */
+	*level = 0;
+	*base = size;
+	do {
+		if( ((*base) % 2) > 0 ) {
+			break;
+		}
+		else {
+			(*base) /= 2;
+		}
+		
+		(*level)++;
+	} while( 1 );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: MeshCoarsener_Hexa.h 2453 2004-12-21 04:49:34Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Mesh_MeshCoarsener_Hexa_h__
+#define __Discretisaton_Mesh_MeshCoarsener_Hexa_h__
+
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type MeshCoarsener_Hexa_Type;
+
+	/* MeshCoarsener_Hexa information */
+	#define __MeshCoarsener_Hexa \
+		/* General info */ \
+		__Stg_Component \
+		Dictionary*				dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* MeshCoarsener_Hexa info ... */ \
+		Mesh*					mesh;
+	struct _MeshCoarsener_Hexa { __MeshCoarsener_Hexa };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a MeshCoarsener_Hexa */
+	
+	MeshCoarsener_Hexa* MeshCoarsener_Hexa_DefaultNew( Name name );
+	
+	#define MeshCoarsener_Hexa_New( name ) \
+		MeshCoarsener_Hexa_New_Param( name, NULL)
+	
+	/* Create a MeshCoarsener_Hexa with all additional parameters */
+	MeshCoarsener_Hexa* MeshCoarsener_Hexa_New_Param(
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Initialise a MeshCoarsener_Hexa */
+	void MeshCoarsener_Hexa_Init(
+		MeshCoarsener_Hexa*				self,
+		Name						name,
+		Dictionary*					dictionary );
+	
+	/* Creation implementation */
+	MeshCoarsener_Hexa* _MeshCoarsener_Hexa_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 );
+	
+	/* Initialisation implementation functions */
+	void _MeshCoarsener_Hexa_Init(
+		MeshCoarsener_Hexa*				self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete meshCoarsener implementation */
+	void _MeshCoarsener_Hexa_Delete( void* meshCoarsener );
+	
+	/* Print meshCoarsener implementation */
+	void _MeshCoarsener_Hexa_Print( void* meshCoarsener, Stream* stream );
+	
+	void _MeshCoarsener_Hexa_Construct( void* meshCoarsener, Stg_ComponentFactory *cf, void* data );
+	
+	void _MeshCoarsener_Hexa_Build( void* meshCoarsener, void *data );
+	
+	void _MeshCoarsener_Hexa_Initialise( void* meshCoarsener, void *data );
+	
+	void _MeshCoarsener_Hexa_Execute( void* meshCoarsener, void *data );
+
+	void _MeshCoarsener_Hexa_Destroy( void* meshCoarsener, void *data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	void MeshCoarsener_Hexa_Coarsen( void* meshCoarsener, 
+					 void* hexaMesh, 
+					 unsigned level, 
+					 IndexMap** nodeFineToCoarse,
+					 IndexMap** nodeCoarseToFine );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	void _MeshCoarsener_Hexa_CalcElementBaseAndLevel( void*			meshCoarsener, 
+							  Element_Index		size, 
+							  unsigned*		level, 
+							  Element_Index*	base );
+	
+	
+#endif /* __Discretisaton_Mesh_MeshCoarsener_Hexa_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshCoarsener_Hexa</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>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Operator.c 3819 2006-09-28 06:03:10Z JulianGiordani $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <string.h>
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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;
+
+	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;
+		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 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 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_TensorInnerProduct( void* operator, double* operand0, double* operand1, double* result ) {
+	Operator* self = (Operator*)operator;
+	
+	Operator_FirewallBinary( self );
+
+	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] );
+	}
+}
+
+
+
+/* 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_TensorInnerProduct;
+	}
+	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 );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3871 2006-10-16 14:06:08Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#ifndef __Discretisation_Utils_Operator_h__
+#define __Discretisation_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* operatorOject, 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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <string.h>
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "FieldVariable.h"
+#include "Operator.h"
+#include "OperatorFieldVariable.h"
+#include "DiscretisationContext.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++ ) 
+		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++ ) 
+		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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_OperatorFieldVariable_h__
+#define __Discretisation_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 /* __Discretisation_Utils_OperatorFieldVariable_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">OperatorFieldVariable</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,896 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3574 2006-05-15 11:30:33Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "RegularMeshUtils.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+Index RegularMeshUtils_ascendingIJK_ToHughesNodeNumberMap[8] = { 0, 1, 3, 2, 4, 5, 7, 6 };
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Mapping functions
+*/
+
+Node_LocalIndex RegularMeshUtils_Node_Global3DToLocal1D( HexaMD* hexaMD, Index i, Index j, Index k ) {		
+	Dimension_Index        dim_I;
+	IJK                    ijk = { i, j, k };
+
+	for ( dim_I = 0; dim_I < 3; dim_I++ ) {
+		if ( ijk[dim_I] < (hexaMD)->_nodeOffsets[(hexaMD)->rank][dim_I] ||
+			ijk[dim_I]  >= ((hexaMD)->_nodeOffsets[(hexaMD)->rank][dim_I]
+				+ (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][dim_I] ) )
+		{
+			return MD_N_Invalid( hexaMD );
+		}
+	}
+	
+	return RegularMeshUtils_Node_Local3DTo1D( hexaMD,
+		i - (hexaMD)->_nodeOffsets[(hexaMD)->rank][I_AXIS],
+		j - (hexaMD)->_nodeOffsets[(hexaMD)->rank][J_AXIS],
+		k - (hexaMD)->_nodeOffsets[(hexaMD)->rank][K_AXIS] );
+}			
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Set functions
+*/
+
+/* TODO: There are more efficient ways to do the below, given me know the number of nodes in each direction */
+
+IndexSet* RegularMeshUtils_CreateGlobalTopSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ),
+			&ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ),
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[1] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalLeftSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[0] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalRightSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[2] == ( decomp->nodeGlobal3DCounts[2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[2] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerTopSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ),
+			&ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 ) 
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] -1 ) || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[0] != 0 || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] -1 ) || ijk[2] != 0 )
+			&& ( ijk[0] != 0 || ijk[2] != 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerBottomSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ),
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[1] == 0 
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] - 1 ) || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[0] != 0 || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] - 1 ) || ijk[2] != 0 )
+			&& ( ijk[0] != 0 || ijk[2] != 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerLeftSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[0] == 0 
+			&& ( ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[1] != 0 || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) || ijk[2] != 0 )
+			&& ( ijk[1] != 0 || ijk[2] != 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerRightSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 ) 
+			&& ( ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[1] != 0 || ijk[2] != ( decomp->nodeGlobal3DCounts[2] - 1 ) )
+			&& ( ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) || ijk[2] != 0 )
+			&& ( ijk[1] != 0 || ijk[2] != 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[2] == ( decomp->nodeGlobal3DCounts[2] - 1 ) 
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] - 1 ) || ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) )
+			&& ( ijk[0] != 0 || ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) )
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] - 1 ) || ijk[1] != 0 )
+			&& ( ijk[0] != 0 || ijk[1] != 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateGlobalInnerBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[2] == 0 
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] - 1 ) || ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) )
+			&& ( ijk[0] != 0 || ijk[1] != ( decomp->nodeGlobal3DCounts[1] - 1 ) )
+			&& ( ijk[0] != ( decomp->nodeGlobal3DCounts[0] - 1 ) || ijk[1] != 0 )
+			&& ( ijk[0] != 0 || ijk[1] != 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+
+IndexSet* RegularMeshUtils_CreateGlobalBottomLeftFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == 0 
+			&& ijk[1] == 0
+			&& ijk[2] == ( decomp->nodeGlobal3DCounts[2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}	
+IndexSet* RegularMeshUtils_CreateGlobalBottomRightFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 )
+			&& ijk[1] == 0
+			&& ijk[2] == (decomp->nodeGlobal3DCounts[2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+IndexSet* RegularMeshUtils_CreateGlobalTopLeftFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == 0 
+			&& ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 )
+			&& ijk[2] == ( decomp->nodeGlobal3DCounts[2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+IndexSet* RegularMeshUtils_CreateGlobalTopRightFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 )
+			&& ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 )
+			&& ijk[2] == ( decomp->nodeGlobal3DCounts[2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+IndexSet* RegularMeshUtils_CreateGlobalBottomLeftBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == 0 
+			&& ijk[1] == 0
+			&& ijk[2] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+IndexSet* RegularMeshUtils_CreateGlobalBottomRightBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 )
+			&& ijk[1] == 0
+			&& ijk[2] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+IndexSet* RegularMeshUtils_CreateGlobalTopLeftBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == 0
+			&& ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 )
+			&& ijk[2] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+IndexSet* RegularMeshUtils_CreateGlobalTopRightBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_DomainIndex	node_I;
+	Node_DomainIndex	nodeDomainCount;
+	IndexSet*		is;
+	
+	nodeDomainCount = decomp->nodeDomainCount;
+	is = IndexSet_New( nodeDomainCount );
+	for( node_I = 0; node_I < nodeDomainCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_1DTo3D( decomp, Mesh_NodeMapDomainToGlobal( mesh, node_I ), 
+			&ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 )
+			&& ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 )
+			&& ijk[2] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+
+
+IndexSet* RegularMeshUtils_CreateLocalTopSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_Local1DTo3D( decomp, node_I, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[1] == ( decomp->nodeLocal3DCounts[decomp->rank][1] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalBottomSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_Local1DTo3D( decomp, node_I, &ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[1] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalLeftSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_Local1DTo3D( decomp, node_I, &ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalRightSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_Local1DTo3D( decomp, node_I, &ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[0] == ( decomp->nodeLocal3DCounts[decomp->rank][0] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_Local1DTo3D( decomp, node_I, &ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[2] == ( decomp->nodeLocal3DCounts[decomp->rank][2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		
+		RegularMeshUtils_Node_Local1DTo3D( decomp, node_I, &ijk[0], &ijk[1], &ijk[2] );      
+		if( ijk[2] == 0 ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+/* These fellas do the same as the 'Local' set creation, but isntead of
+   using the local walls, it maps the local index to global walls.  This
+   is useful for the exchanger. */
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalTopSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		Node_GlobalIndex	node_gI;
+		
+		node_gI = decomp->nodeMapLocalToGlobal( decomp, node_I );
+		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[1] == ( decomp->nodeGlobal3DCounts[1] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalBottomSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		Node_GlobalIndex	node_gI;
+		
+		node_gI = decomp->nodeMapLocalToGlobal( decomp, node_I );
+		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[1] == ( 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalRightSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		Node_GlobalIndex	node_gI;
+		
+		node_gI = decomp->nodeMapLocalToGlobal( decomp, node_I );
+		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[0] == ( decomp->nodeGlobal3DCounts[0] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalLeftSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		Node_GlobalIndex	node_gI;
+		
+		node_gI = decomp->nodeMapLocalToGlobal( decomp, node_I );
+		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[0] == ( 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalFrontSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		Node_GlobalIndex	node_gI;
+		
+		node_gI = decomp->nodeMapLocalToGlobal( decomp, node_I );
+		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[2] == ( decomp->nodeGlobal3DCounts[2] - 1 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+IndexSet* RegularMeshUtils_CreateLocalInGlobalBackSet( void* _mesh ) {
+	Mesh*			mesh = (Mesh*)_mesh;
+	MeshLayout*		meshLayout = mesh->layout;
+	HexaMD*			decomp = (HexaMD *)meshLayout->decomp;
+	Node_LocalIndex		node_I;
+	Node_LocalIndex		nodeLocalCount;
+	IndexSet*		is;
+	
+	nodeLocalCount = decomp->nodeLocalCount;
+	is = IndexSet_New( nodeLocalCount );
+	for( node_I = 0; node_I < nodeLocalCount; node_I++ ) {
+		IJK			ijk;
+		Node_GlobalIndex	node_gI;
+		
+		node_gI = decomp->nodeMapLocalToGlobal( decomp, node_I );
+		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &ijk[0], &ijk[1], &ijk[2] );
+		if( ijk[2] == ( 0 ) ) {
+			IndexSet_Add( is, node_I );
+		}
+	}
+	
+	return is;
+}
+
+Node_DomainIndex RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex( void* _mesh, Element_DomainIndex refElement_dI, Node_DomainIndex refNode_dI ) {
+	Mesh*              mesh = (Mesh*)_mesh;
+	const Node_Index   oppositeNodesMap2D[] = { 2, 3, 0, 1 };
+	Node_Index         oppositeNodesMap3D[] = { 6, 7, 4, 5, 2, 3, 0, 1 };
+	Node_DomainIndex*  currElementNodes = NULL;
+	Node_Index         currElementNodeCount = 0;
+	Node_Index         refNode_eI = 0;
+	Node_DomainIndex   oppositeNode_dI = 0;
+	Node_Index         oppositeNode_eI = 0;
+	Stream*            errorStr = Journal_Register( Error_Type, "RegularMeshUtils" );
+
+	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 );
+
+	currElementNodes = mesh->elementNodeTbl[refElement_dI];
+	currElementNodeCount = mesh->elementNodeCountTbl[refElement_dI];
+
+	/* 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, errorStr,
+		"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 ( ((HexaEL*)mesh->layout->elementLayout)->dim == 2 ) {	
+		oppositeNode_eI = oppositeNodesMap2D[refNode_eI];
+	}
+	else {
+		oppositeNode_eI = oppositeNodesMap3D[refNode_eI];
+	}
+
+	oppositeNode_dI = currElementNodes[oppositeNode_eI];
+	return oppositeNode_dI;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,191 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3574 2006-05-15 11:30:33Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_RegularMeshUtils_h__
+#define __Discretisation_Utils_RegularMeshUtils_h__
+
+	extern Index RegularMeshUtils_ascendingIJK_ToHughesNodeNumberMap[8];
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Set functions
+	*/
+	
+	#define RegularMeshUtils_Node_1DTo3D( hexaMD, index, iPtr, jPtr, kPtr ) \
+		*(iPtr) = (index) % (hexaMD)->nodeGlobal3DCounts[0]; \
+		*(jPtr) = ((index) / (hexaMD)->nodeGlobal3DCounts[0]) % (hexaMD)->nodeGlobal3DCounts[1]; \
+		*(kPtr) = (index) / ((hexaMD)->nodeGlobal3DCounts[0] * (hexaMD)->nodeGlobal3DCounts[1])
+	
+	#define RegularMeshUtils_Node_Local1DTo3D( hexaMD, index, iPtr, jPtr, kPtr ) \
+		*(iPtr) = (index) % (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][0]; \
+		*(jPtr) = ((index) / (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][0]) % (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][1]; \
+		*(kPtr) = (index) / ((hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][0] * (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][1])
+	
+	#define RegularMeshUtils_Node_Global3DToGlobal1D( hexaMD, i, j, k ) \
+		((k) * (hexaMD)->nodeGlobal3DCounts[0] * (hexaMD)->nodeGlobal3DCounts[1] + \
+		(j) * (hexaMD)->nodeGlobal3DCounts[0] + (i))
+
+	/** This one needs to be a macro so we can do some decent error checking */
+	Node_LocalIndex RegularMeshUtils_Node_Global3DToLocal1D( HexaMD* hexaMD, Index i, Index j, Index k );
+
+	#define RegularMeshUtils_Node_Local3DTo1D( hexaMD, i, j, k ) \
+		((k) * (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][0] * (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][1] + \
+		(j) * (hexaMD)->nodeLocal3DCounts[(hexaMD)->rank][0] + (i))
+
+	#define RegularMeshUtils_Element_1DTo3D( hexaMD, index, iPtr, jPtr, kPtr ) \
+		*(iPtr) = (hexaMD)->elementGlobal3DCounts[0] ? (index) % (hexaMD)->elementGlobal3DCounts[0] : 0; \
+		*(jPtr) = (hexaMD)->elementGlobal3DCounts[1] ? ((index) / ((hexaMD)->elementGlobal3DCounts[0] ? (hexaMD)->elementGlobal3DCounts[0] : 1)) % (hexaMD)->elementGlobal3DCounts[1] : 0; \
+		*(kPtr) = (hexaMD)->elementGlobal3DCounts[2] ? (index) / (((hexaMD)->elementGlobal3DCounts[0] ? (hexaMD)->elementGlobal3DCounts[0] : 1) * ((hexaMD)->elementGlobal3DCounts[1] ? (hexaMD)->elementGlobal3DCounts[1] : 1)) : 0
+	
+	#define RegularMeshUtils_Element_3DTo1D( hexaMD, i, j, k ) \
+		((k) * ((hexaMD)->elementGlobal3DCounts[0] ? (hexaMD)->elementGlobal3DCounts[0] : 1) * ((hexaMD)->elementGlobal3DCounts[1] ? (hexaMD)->elementGlobal3DCounts[1] : 1) + \
+		(j) * ((hexaMD)->elementGlobal3DCounts[0] ? (hexaMD)->elementGlobal3DCounts[0] : 1) + (i))
+	
+	#define RegularMeshUtils_Element_Local3DTo1D( hexaMD, i, j, k ) \
+		((k) * \
+		((hexaMD)->elementLocal3DCounts[(hexaMD)->rank][0] ? (hexaMD)->elementLocal3DCounts[(hexaMD)->rank][0] : 0) * \
+		((hexaMD)->elementLocal3DCounts[(hexaMD)->rank][1] ? (hexaMD)->elementLocal3DCounts[(hexaMD)->rank][1] : 0) + \
+		(j) * \
+		((hexaMD)->elementLocal3DCounts[(hexaMD)->rank][0] ? (hexaMD)->elementLocal3DCounts[(hexaMD)->rank][0] : 0) + \
+		(i))
+	
+	/** 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_CreateLocalTopSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the bottom of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalBottomSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the left of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalLeftSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the right of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalRightSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the front of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalFrontSet( void* _mesh );
+	
+	/** Create a new set, based on node indices, of nodes on the back of the local regular mesh */
+	IndexSet* RegularMeshUtils_CreateLocalBackSet( 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 );
+	
+	/** Calculates the node domain ID of the node diagonally opposite a reference node in a given element */ 
+	Node_DomainIndex RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex( 
+		void* _mesh, Element_DomainIndex element_dI, Node_DomainIndex refNode_dI );
+
+#endif /* __Discretisation_Utils_RegularMeshUtils_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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. */
+	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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Utils_Remesher_h__
+#define __StGermain_Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Remesher</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,582 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "Sync.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 ) {
+	/* General and Virtual info should already be set */
+	
+	/* SemiRegDeform info */
+	self->grm.mesh = NULL;
+	self->nStrips = 0;
+	self->beginInds = NULL;
+	self->endInds = NULL;
+	self->conDims = NULL;
+	self->sync = NULL;
+	self->nRemotes = 0;
+	self->remotes = NULL;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _SemiRegDeform_Delete( void* srd ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	
+	/* Delete the class itself */
+	_SemiRegDeform_FreeInternal( 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_SyncInit( 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_FreeInternal( self );
+	RegMesh_Generalise( mesh, &self->grm );
+}
+
+
+void SemiRegDeform_AddStrip( void* srd, unsigned begin, unsigned end ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	unsigned short	conDim;
+	IJK		inds[2];
+	Bool		store;
+	unsigned	s_i;
+
+	assert( self->grm.mesh );
+	assert( !self->isInitialised );
+
+
+	/*
+	** Ensure the specified strip has not already been added.
+	*/
+
+	for( s_i = 0; s_i < self->nStrips; s_i++ ) {
+		if( self->beginInds[s_i] == begin && self->endInds[s_i] == end ) {
+			assert( 0 );
+		}
+	}
+
+
+	/*
+	** Ensure the specified strip is one dimensionally valid.
+	*/
+
+	{
+		Bool		found;
+		unsigned	d_i;
+
+		GRM_Lift( &self->grm, begin, inds[0] );
+		GRM_Lift( &self->grm, end, inds[1] );
+
+		/* Find the one dimension that is not in-line. */
+		found = False;
+		for( d_i = 0; d_i < self->grm.nDims; 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;
+
+			GRM_Project( &self->grm, cur, &gInd );
+			if( Mesh_NodeMapGlobalToLocal( self->grm.mesh, gInd ) < self->grm.mesh->nodeLocalCount ) {
+				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++;
+}
+
+
+void _SemiRegDeform_SyncInit( void* srd ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+	unsigned	nGlobals;
+	unsigned	nLocals;
+	unsigned*	locals;
+	unsigned	nRequired;
+	unsigned*	required;
+	unsigned	loc_i, strip_i;
+
+	assert( self );
+
+
+	/*
+	** Setup the synchronisation component.
+	*/
+
+	self->sync = Sync_New( "SemiRegDeform" );
+
+	/* How many globals do we have? */
+	nGlobals = self->grm.mesh->nodeGlobalCount;
+
+	/* Build the set of local nodes. */
+	nLocals = self->grm.mesh->nodeLocalCount;
+	locals = Memory_Alloc_Array( unsigned, nLocals, "SemiRegDeform" );
+	for( loc_i = 0; loc_i < nLocals; loc_i++ ) {
+		locals[loc_i] = Mesh_NodeMapLocalToGlobal( self->grm.mesh, loc_i );
+	}
+
+	/* Build required indices. */
+	nRequired = 0;
+	required = Memory_Alloc_Array( unsigned, self->nStrips * 2, "SemiRegDeform" );
+	for( strip_i = 0; strip_i < self->nStrips; strip_i++ ) {
+		if( Mesh_NodeMapGlobalToLocal( self->grm.mesh, self->beginInds[strip_i] ) >= 
+		    self->grm.mesh->nodeLocalCount )
+		{
+			required[nRequired++] = self->beginInds[strip_i];
+		}
+
+		if( Mesh_NodeMapGlobalToLocal( self->grm.mesh, self->endInds[strip_i] ) >= 
+		    self->grm.mesh->nodeLocalCount )
+		{
+			required[nRequired++] = self->endInds[strip_i];
+		}
+	}
+	required = Memory_Realloc_Array( required, unsigned, nRequired );
+
+	/* Negotiate sources. */
+	Sync_Negotiate( self->sync, 
+			nGlobals, 
+			locals, nLocals, 
+			NULL, 0, 
+			required, nRequired, 
+			self->grm.mesh->layout->decomp->communicator );
+
+	/* Free arrays. */
+	FreeArray( locals );
+	FreeArray( required );
+
+	/* Allocate for sources. */
+	self->nRemotes = self->sync->netSource;
+	self->remotes = Memory_Alloc_Array( Coord, self->nRemotes, "SemiRegDeform" );
+
+	/* Initialise transfer. */
+	Sync_SetSplitArrays( self->sync, 
+			     sizeof(Coord), 
+			     sizeof(Coord), self->grm.mesh->nodeCoord, 
+			     sizeof(Coord), self->remotes );
+}
+
+
+#define GET_VAL( ind )						\
+	(((ind) < self->grm.mesh->nodeLocalCount) ? self->grm.mesh->nodeCoord[ind] : \
+	 self->remotes[ind - self->grm.mesh->nodeLocalCount])
+
+
+void SemiRegDeform_Deform( void* srd ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+
+	assert( self );
+
+
+	/*
+	** Actually deform the specified strips.
+	*/
+
+	/* Import remote values. */
+	Sync_SendRecv( self->sync );
+
+	/* Interpolate each strip. */
+	{
+		unsigned*	begin;
+		unsigned*	end;
+		unsigned	strip_i;
+
+		/* Allocate for the dimensions. */
+		begin = Memory_Alloc_Array( unsigned, self->grm.nDims, "SemiRegDeform" );
+		end = Memory_Alloc_Array( unsigned, self->grm.nDims, "SemiRegDeform" );
+
+		for( strip_i = 0; strip_i < self->nStrips; strip_i++ ) {
+			unsigned	len;
+			unsigned	conDim;
+			double		first, step;
+			unsigned	node_i;
+
+			/* Extract the basics. */
+			GRM_Lift( &self->grm, self->beginInds[strip_i], begin );
+			GRM_Lift( &self->grm, self->endInds[strip_i], end );
+			conDim = self->conDims[strip_i];
+			assert( (len = end[conDim] - begin[conDim] + 1) > 1 );
+			first = GET_VAL( Sync_MapGlobal( self->sync, self->beginInds[strip_i] ) )[conDim];
+			step = GET_VAL( Sync_MapGlobal( self->sync, self->endInds[strip_i] ) )[conDim];
+			step = (step - first) / (len - 1);
+
+			/* Loop and interpolate. */
+			for( node_i = 1; node_i < len - 1; node_i++ ) {
+				unsigned	ind;
+
+				begin[conDim]++;
+				GRM_Project( &self->grm, begin, &ind );
+				if( Sync_MapGlobal( self->sync, ind ) != (unsigned)-1 ) {
+					GET_VAL( Sync_MapGlobal( self->sync, ind ) )[conDim] = 
+						first + (double)node_i * step;
+				}
+			}
+		}
+		FreeArray( begin );
+		FreeArray( end );
+	}
+}
+
+
+void RegMesh_Generalise( Mesh* mesh, GRM* grm ) {
+	HexaMD*		decomp;
+	unsigned	d_i;
+
+	assert( mesh );
+	assert( mesh->layout );
+	assert( mesh->layout->decomp );
+
+	decomp = (HexaMD*)mesh->layout->decomp;
+
+	assert( decomp->type == HexaMD_Type );
+	assert( grm );
+
+
+	/*
+	** Remove any dependance on dimension, storing necessary maps and information in the GRM
+	** (Generalised Regular Mesh) structure.
+	*/
+
+	/* Calculate the number of topological dimensions and their mapping. */
+	for( grm->nDims = 0, d_i = 0; d_i < 3; d_i++ ) {
+		if( decomp->nodeGlobal3DCounts[d_i] > 1 ) {
+			grm->nNodes[grm->nDims] = decomp->nodeGlobal3DCounts[d_i];
+			grm->nDims++;
+		}
+	}
+
+	/* Calculate the basis. */
+	grm->basis[0] = 1;
+	for( d_i = 1; d_i < grm->nDims; d_i++ ) {
+		grm->basis[d_i] = grm->basis[d_i - 1] * grm->nNodes[d_i - 1];
+	}
+
+	/* Store the mesh. */
+	grm->mesh = mesh;
+}
+
+
+void GRM_Lift( GRM* grm, unsigned ind, unsigned* dimInds ) {
+	unsigned	rem;
+	unsigned	d_i;
+
+	assert( grm );
+	assert( grm->nDims <= 3 );
+	assert( dimInds );
+
+
+	/*
+	** Take a one dimensional array index and lift it into a regular mesh topological
+	** space.
+	*/
+
+	rem = ind;
+	for( d_i = grm->nDims; d_i > 0; d_i-- ) {
+		unsigned short	dimInd = d_i - 1;
+		div_t		divRes;
+
+		divRes = div( rem, grm->basis[dimInd] );
+		dimInds[dimInd] = divRes.quot;
+		rem = divRes.rem;
+
+		/* Ensure this is a valid lifting. */
+		assert( dimInds[dimInd] < grm->nNodes[dimInd] );
+	}
+}
+
+
+void GRM_Project( GRM* grm, unsigned* dimInds, unsigned* ind ) {
+	unsigned short	d_i;
+
+	assert( grm );
+	assert( grm->nDims > 0 && grm->nDims <= 3 );
+	assert( dimInds );
+	assert( ind );
+
+
+	/*
+	** Project an n-dimensional set of topological indices into a one-dimensional, unique space.
+	*/
+
+	*ind = 0;
+	for( d_i = 0; d_i < grm->nDims; d_i++ ) {
+		assert( dimInds[d_i] < grm->nNodes[d_i] );
+		*ind += dimInds[d_i] * grm->basis[d_i];
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _SemiRegDeform_FreeInternal( void* srd ) {
+	SemiRegDeform*	self = (SemiRegDeform*)srd;
+
+	KillArray( self->beginInds );
+	KillArray( self->endInds );
+	KillArray( self->conDims );
+	KillArray( self->remotes );
+	if( self->sync ) {
+		Stg_Class_Delete( self->sync );
+		self->sync = NULL;
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**
+** Assumptions:
+**
+** Invariants:
+**
+** Comments:
+**
+** $Id: SemiRegDeform.h 2225 1970-01-02 13:48:23Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_SemiRegDeform_h__
+#define __Discretisation_Utils_SemiRegDeform_h__
+	
+
+	/* A support structure for this class. */
+	typedef struct {
+	      Mesh*		mesh;
+	      unsigned short	nDims;
+	      unsigned		nNodes[3];
+	      unsigned		basis[3];
+	} GRM;
+
+	/* 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 ... */ \
+		GRM					grm; \
+		unsigned				nStrips; \
+		unsigned*				beginInds; \
+		unsigned*				endInds; \
+		unsigned*				conDims; \
+		\
+		Sync*					sync; \
+		unsigned				nRemotes; \
+		Coord*					remotes;
+
+	struct SemiRegDeform { __SemiRegDeform };
+	
+	
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a SemiRegDeform */
+	SemiRegDeform* SemiRegDeform_DefaultNew( Name name );
+	
+	SemiRegDeform* SemiRegDeform_New( Name name );
+	
+	/* Creation implementation */
+	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 );
+	
+	
+	/* Initialise a SemiRegDeform */
+	void SemiRegDeform_Init( SemiRegDeform* self, Name name );
+	
+	/* Initialisation implementation functions */
+	void _SemiRegDeform_Init( SemiRegDeform* self );
+	
+	
+	/*-----------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete implementation */
+	void _SemiRegDeform_Delete( void* srd );
+	
+	/* Print implementation */
+	void _SemiRegDeform_Print( void* srd, Stream* stream );
+	
+	/* Construct implementation */
+	void _SemiRegDeform_Construct( void* srd, Stg_ComponentFactory* cf, void* data );
+	
+	/* Build implementation */
+	void _SemiRegDeform_Build( void* srd, void* data );
+	
+	/* Component implementation */
+	void _SemiRegDeform_Initialise( void* srd, void* data );
+	
+	/* Execute implementation */
+	void _SemiRegDeform_Execute( void* srd, void* data );
+	
+	/* Destroy implementation */
+	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_SyncInit( void* srd );
+
+	void _SemiRegDeform_FreeInternal( void* srd );
+
+	void RegMesh_Generalise( Mesh* mesh, GRM* grm );
+
+	void GRM_Lift( GRM* grm, unsigned ind, unsigned* dimInds );
+
+	void GRM_Project( GRM* grm, unsigned* dimInds, unsigned* ind );
+	
+	
+#endif /* __Discretisation_Utils_SemiRegDeform_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">SemiRegDeform</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>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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, &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 ) {
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_ShapeAdvector_h__
+#define __Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ShapeAdvector</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>
+
+<!--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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,515 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ShapeVC.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <Base/Base.h>
+#include <Discretisation/Geometry/Geometry.h>
+#include <Discretisation/Shape/Shape.h>
+#include <Discretisation/Mesh/Mesh.h>
+
+#include "types.h"
+#include "ShapeVC.h"
+
+#include <assert.h>
+#include <string.h>
+
+const Type ShapeVC_Type = "ShapeVC";
+const Name defaultShapeVCName = "defaultShapeVCName";
+
+/*-----------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+VariableCondition* ShapeVC_Factory(
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*                                 dictionary,
+		void*                                       data )
+{
+	return (VariableCondition*) 
+		ShapeVC_New( defaultShapeVCName, NULL, variable_Register, conFunc_Register, dictionary, (Mesh*)data );
+}
+
+ShapeVC* ShapeVC_New(
+		Name                                        name,
+		Name                                        _dictionaryEntryName, 
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*	                                dictionary,
+		void*                                       _mesh )
+{
+	ShapeVC* self = (ShapeVC*) _ShapeVC_DefaultNew( name );
+
+	_VariableCondition_Init( self, variable_Register, conFunc_Register, dictionary );
+	_ShapeVC_Init( self, _dictionaryEntryName, _mesh );
+
+	return self;
+}
+
+ShapeVC* _ShapeVC_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,
+		Name                                        name  )
+{
+	ShapeVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(ShapeVC));
+	self = (ShapeVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,	
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		False,
+		_buildSelf, 
+		_printConcise,	
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		NULL, 
+		NULL,
+		NULL );
+	
+	/* Virtual info */
+	
+	return self;
+}
+
+
+void _ShapeVC_Init(
+		void*                                       variableCondition, 
+		Name                                        _dictionaryEntryName, 
+		void*                                       _mesh )
+{
+	ShapeVC*			self = (ShapeVC*) 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 _ShapeVC_Delete(void* variableCondition) {
+	ShapeVC*	self = (ShapeVC*)variableCondition;
+	
+	if ( self->_entryTbl ) 
+		Memory_Free(self->_entryTbl);
+
+	if ( self->shapeName )
+		Memory_Free( self->shapeName );
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _ShapeVC_Print(void* variableCondition, Stream* stream) {
+	ShapeVC*                self = (ShapeVC*)variableCondition;
+	ShapeVC_Entry_Index     entry_I;
+	Index                   array_I;
+	
+	/* General info */
+	Journal_Printf( stream, "ShapeVC (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* _ShapeVC_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	ShapeVC*        self           = (ShapeVC*)variableCondition;
+	ShapeVC*        newShapeVC;
+	PtrMap*         map            = ptrMap;
+	Bool            ownMap         = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newShapeVC = (ShapeVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newShapeVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newShapeVC->_shape = self->_shape;
+	newShapeVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newShapeVC->_mesh = (Mesh*)Stg_Class_Copy( self->_mesh, NULL, deep, nameExt, map );
+		
+		if( (newShapeVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newShapeVC->_entryTbl = Memory_Alloc_Array( ShapeVC_Entry, newShapeVC->_entryCount, "ShapeVC->_entryTbl");
+			memcpy( newShapeVC->_entryTbl, self->_entryTbl, sizeof(ShapeVC_Entry) * newShapeVC->_entryCount );
+			PtrMap_Append( map, newShapeVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newShapeVC->_mesh = self->_mesh;
+		newShapeVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newShapeVC;
+}
+	
+/****************** Stg_Component Virtual Functions ******************/
+void* _ShapeVC_DefaultNew( Name name ) {
+	return (void*) _ShapeVC_New(
+		sizeof(ShapeVC), 
+		ShapeVC_Type, 
+		_ShapeVC_Delete, 
+		_ShapeVC_Print, 
+		_ShapeVC_Copy,
+		_ShapeVC_DefaultNew,
+		_ShapeVC_Construct,	
+		_ShapeVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		_ShapeVC_BuildSelf, 
+		_ShapeVC_PrintConcise,
+		_ShapeVC_ReadDictionary,
+		_ShapeVC_GetSet, 
+		_ShapeVC_GetVariableCount, 
+		_ShapeVC_GetVariableIndex, 
+		_ShapeVC_GetValueIndex, 
+		_ShapeVC_GetValueCount, 
+		_ShapeVC_GetValue,
+		name );
+}
+
+void _ShapeVC_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* data ) {
+}
+
+void _ShapeVC_Build(  void* variableCondition, void* data ) {
+	ShapeVC*			self = (ShapeVC*)variableCondition;
+
+	_ShapeVC_BuildSelf( self, data );
+	_VariableCondition_Build( self, data );
+}
+	
+/****************** VariableCondition Virtual Functions ******************/
+void _ShapeVC_BuildSelf(  void* variableCondition, void* data /* for build phase */ ) {
+	ShapeVC*         self    = (ShapeVC*)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 ShapeVC.\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 _ShapeVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	ShapeVC* self = (ShapeVC*) variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, Shape: %s '%s'", self->type, self->_shape->type, self->_shape->name );
+}
+
+void _ShapeVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	ShapeVC*                  self = (ShapeVC*)variableCondition;
+	Dictionary_Entry_Value*   vcDictVal;
+	Dictionary_Entry_Value    _vcDictVal;
+	Dictionary_Entry_Value*   varsVal;
+	ShapeVC_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( ShapeVC_Entry, self->_entryCount, "ShapeVC->_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 shapeVC \"%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, "ShapeVC->_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* _ShapeVC_GetSet(void* variableCondition) {
+	ShapeVC*		self = (ShapeVC*)variableCondition;
+
+	Stg_Component_Initialise( self->_mesh, NULL, False );
+
+	return Mesh_CreateIndexSetFromShape( self->_mesh, self->_shape );
+}
+
+VariableCondition_VariableIndex _ShapeVC_GetVariableCount(void* variableCondition, Index globalIndex) {
+	ShapeVC*	self = (ShapeVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+Variable_Index _ShapeVC_GetVariableIndex(void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex) {
+	ShapeVC*        self          = (ShapeVC*)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 _ShapeVC_GetValueIndex(
+		void*                                       variableCondition, 
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex )
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _ShapeVC_GetValueCount(void* variableCondition) {
+	ShapeVC*	self = (ShapeVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _ShapeVC_GetValue(void* variableCondition, VariableCondition_ValueIndex valIndex) {
+	ShapeVC*	self = (ShapeVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,149 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: ShapeVC.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_ShapeVC_h__
+#define __Discretisation_Utils_ShapeVC_h__
+	
+	extern const Type ShapeVC_Type;
+	
+	#define __ShapeVC_Entry \
+		Name                                        varName; \
+		VariableCondition_Value                     value; \
+	
+	typedef struct { __ShapeVC_Entry } ShapeVC_Entry;
+	
+	#define __ShapeVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name                                        _dictionaryEntryName; \
+		ShapeVC_Entry_Index                         _entryCount;          \
+		ShapeVC_Entry*                              _entryTbl;            \
+		Mesh*                                       _mesh;                \
+		Stg_Shape*                                  _shape;               \
+		Name                                        shapeName;
+
+	struct ShapeVC { __ShapeVC };
+	
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition* ShapeVC_Factory(
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*                                 dictionary,
+		void*                                       data );
+	
+
+	ShapeVC* ShapeVC_New(
+		Name                                        name,
+		Name                                        _dictionaryEntryName, 
+		Variable_Register*                          variable_Register, 
+		ConditionFunction_Register*                 conFunc_Register, 
+		Dictionary*	                                dictionary,
+		void*                                       _mesh );
+	
+	ShapeVC* _ShapeVC_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,
+		Name                                        name );
+	
+	void _ShapeVC_Init(
+		void*                                       shapeVC, 
+		Name                                        _dictionaryEntryName, 
+		void*                                       _mesh );
+	
+	/* Stg_Class Virtual Functions */
+	void _ShapeVC_Delete( void* shapeVC );
+	void _ShapeVC_Print( void* shapeVC, Stream* stream );
+	void* _ShapeVC_Copy( void* shapeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	#define ShapeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define ShapeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	/* Stg_Component Virtual Functions */
+	void* _ShapeVC_DefaultNew( Name name );
+	void _ShapeVC_Build(  void* shapeVC, void* data );
+	void _ShapeVC_Construct( void* shapeVC, Stg_ComponentFactory* cf, void* data );
+	
+	/* VariableCondition Virtual Functions */
+	void _ShapeVC_BuildSelf( void* shapeVC, void* data );
+	void _ShapeVC_PrintConcise( void* variableCondition, Stream* stream );
+	void _ShapeVC_ReadDictionary( void* variableCondition, void* dictionary );
+	IndexSet* _ShapeVC_GetSet( void* variableCondition );
+	VariableCondition_VariableIndex	_ShapeVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	Variable_Index _ShapeVC_GetVariableIndex(
+		void*                                       variableCondition,
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex );
+						
+	VariableCondition_ValueIndex _ShapeVC_GetValueIndex(
+		void*                                       variableCondition, 
+		Index                                       globalIndex, 
+		VariableCondition_VariableIndex             varIndex );
+						
+	VariableCondition_ValueIndex _ShapeVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value	_ShapeVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	
+#endif

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">ShapeVC</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "SobolGenerator.h"
+#include "DiscretisationContext.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 ] );
+
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_SobolGenerator_h__
+#define __Discretisation_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 /* __Discretisation_Utils_SobolGenerator_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,737 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _SplitFrictionWallVC_GetSet(void* variableCondition)
+{
+	SplitFrictionWallVC*		self = (SplitFrictionWallVC*)variableCondition;
+	IndexSet	*set = NULL;
+	HexaMD*		hexaMD = (HexaMD*)self->_mesh->layout->decomp;
+	Stream*		warningStr = Journal_Register( Error_Type, self->type );
+
+	
+	switch (self->_wall) {
+		case SplitFrictionWallVC_Wall_Front:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalFrontSet(self->_mesh);
+			}
+			break;
+			
+		case SplitFrictionWallVC_Wall_Back:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBackSet(self->_mesh);
+			}	
+			break;
+			
+		case SplitFrictionWallVC_Wall_Top:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalTopSet(self->_mesh);
+			}	
+			break;
+			
+		case SplitFrictionWallVC_Wall_Bottom:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBottomSet(self->_mesh);
+			}	
+			break;
+			
+		case SplitFrictionWallVC_Wall_Left:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalLeftSet(self->_mesh);
+			}	
+			break;
+			
+		case SplitFrictionWallVC_Wall_Right:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,192 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (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,
+						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 /* __Discretisation_Utils_SplitFrictionWallVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">SplitFrictionWallVC</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="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>
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,342 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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 < self->srd->grm.nDims; 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;
+
+	if( dim < srd->grm.nDims ) {
+		if( dim != deformDim ) {
+			for( n_i = 0; n_i < srd->grm.nNodes[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] = srd->grm.nNodes[dim] - 1;
+			_StripRemesher_BuildStrips( srd, dim + 1, deformDim, 
+						    ijkLow, ijkUpp );
+		}
+	}
+	else {
+		unsigned	low, upp;
+
+		GRM_Project( &srd->grm, ijkLow, &low );
+		GRM_Project( &srd->grm, ijkUpp, &upp );
+		SemiRegDeform_AddStrip( srd, low, upp );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_Discretisation_Utils_StripRemesher_h__
+#define __StGermain_Discretisation_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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">StripRemesher</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1374 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 2453 2004-12-21 04:49:34Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "types.h"
+#include "Sync.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type Sync_Type = "Sync";
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+void* Sync_DefaultNew( Name name ) {
+	return _Sync_New( sizeof(Sync), 
+			  Sync_Type, 
+			  _Sync_Delete, 
+			  _Sync_Print,
+			  NULL,
+			  Sync_DefaultNew,
+			  _Sync_Construct,
+			  _Sync_Build,
+			  _Sync_Initialise,
+			  _Sync_Execute,
+			  _Sync_Destroy,
+			  name,
+			  False,
+			  NULL );
+}
+
+
+Sync* Sync_New_Param( Dictionary* dictionary, Name name ) {
+	return _Sync_New( sizeof(Sync), 
+			  Sync_Type, 
+			  _Sync_Delete, 
+			  _Sync_Print,
+			  NULL,
+			  Sync_DefaultNew,
+			  _Sync_Construct,
+			  _Sync_Build,
+			  _Sync_Initialise,
+			  _Sync_Execute,
+			  _Sync_Destroy,
+			  name,
+			  True,
+			  dictionary );
+}
+
+
+void Sync_Init( Sync* self,
+		Dictionary* dictionary, Name name )
+{
+	/* General info */
+	self->type = Sync_Type;
+	self->_sizeOfSelf = sizeof(Sync);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _Sync_Delete;
+	self->_print = _Sync_Print;
+	self->_copy = NULL;
+	self->_defaultConstructor = Sync_DefaultNew;
+	self->_construct = _Sync_Construct;
+	self->_build = _Sync_Build;
+	self->_initialise = _Sync_Initialise;
+	self->_execute = _Sync_Execute;
+	self->_destroy = _Sync_Destroy;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	
+	/* Sync info */
+	_Sync_Init( self );
+}
+
+
+Sync* _Sync_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 )
+{
+	Sync* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Sync) );
+	self = (Sync*)_Stg_Component_New( 
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy, 
+		_defaultConstructor, 
+		_construct, 
+		_build, 
+		_initialise, 
+		_execute, 
+		_destroy, 
+		name, 
+		NON_GLOBAL );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* Sync info */
+	if( initFlag ){
+		_Sync_Init( self );
+	}
+	
+	return self;
+}
+
+
+void _Sync_Init( Sync* self ) {
+	/* General and Virtual info should already be set */
+	self->isConstructed = True;
+	/* Sync info */
+	
+	self->comm = MPI_COMM_WORLD;
+	self->nProcs = 0;
+	self->rank = 0;
+	
+	self->select = _Sync_Select_MinimizeComms;
+
+	self->nGlobal = 0;
+	self->nLocal = 0;
+	self->local = NULL;
+	self->nShared = 0;
+	self->shared = NULL;
+	self->nShadow = 0;
+	self->shadow = NULL;
+	self->nDomain = 0;
+	self->domain = NULL;
+
+	self->globalMap = NULL;
+	
+	self->netSource = 0;
+	self->nSource = NULL;
+	self->source = NULL;
+	
+	self->netSink = 0;
+	self->nSink = NULL;
+	self->sink = NULL;
+	
+	self->sourceDisps = NULL;
+	self->sourceSizes = NULL;
+	self->sourceOffs = NULL;
+	self->sourceArray = NULL;
+	self->sinkDisps = NULL;
+	self->sinkSizes = NULL;
+	self->sinkOffs = NULL;
+	self->sinkArray = NULL;
+
+	self->itemSize = 0;
+	self->arrayType = Sync_ArrayType_None;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Sync_Delete( void* sync ) {
+	Sync* self = (Sync*)sync;
+
+	_Sync_Free( self );
+
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _Sync_Print( void* sync, Stream* stream ) {
+	Sync* self = (Sync*)sync;
+	
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Sync (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* Sync info */
+}
+
+
+void _Sync_Construct( void* sync, Stg_ComponentFactory *cf, void* data ){
+}
+
+	
+void _Sync_Build( void* sync, void *data ){
+}
+
+	
+void _Sync_Initialise( void* sync, void *data ) {
+}
+
+	
+void _Sync_Execute( void* sync, void *data ){
+}
+
+
+void _Sync_Destroy( void* sync, void *data ){
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Sync_Negotiate( void* sync, 
+		     unsigned nGlobal, 
+		     unsigned* local, unsigned nLocal, 
+		     unsigned* shared, unsigned nShared, 
+		     unsigned* shadow, unsigned nShadow, 
+		     MPI_Comm comm )
+{
+	Sync*		self = (Sync*)sync;
+	unsigned*	remNFound;
+	unsigned**	remFound;
+	unsigned	proc_i;
+
+	assert( sync );
+	assert( nGlobal );
+	assert( !nLocal || local );
+	assert( !nShared || shared );
+	assert( !nShadow || shadow );
+
+
+	/*
+	** Check for existing allocated arrays and free them.
+	*/
+
+	_Sync_Free( self );
+
+
+	/*
+	** Before anything else, store the parameters and build the global map.
+	*/
+
+	self->nGlobal = nGlobal;
+	self->nLocal = nLocal;
+	self->nShared = nShared;
+	self->nShadow = nShadow;
+	self->nDomain = nLocal + nShadow;
+	if( self->nDomain ) {
+		self->domain = Memory_Alloc_Array( unsigned, self->nDomain, "Sync" );
+	}
+	if( nLocal ) {
+		self->local = self->domain;
+		memcpy( self->local, local, sizeof(unsigned) * nLocal );
+	}
+	if( nShadow ) {
+		self->shadow = self->domain + nLocal;
+		memcpy( self->shadow, shadow, sizeof(unsigned) * nShadow );
+	}
+	if( nShared ) {
+		self->shared = Memory_Alloc_Array( unsigned, nShared, "Sync" );
+		memcpy( self->shared, shared, sizeof(unsigned) * nShared );
+	}
+
+	/* And build the global map. */
+	_Sync_BuildGlobalMap( self );
+
+
+	/*
+	** Collect basic MPI information.
+	*/
+
+	self->comm = comm;
+	CHK_MPI( MPI_Comm_rank( comm, &self->rank ) );
+	CHK_MPI( MPI_Comm_size( comm, &self->nProcs ) );
+
+	if( self->nProcs == 1 ) {
+		self->nSource = Memory_Alloc_Array( unsigned, 1, "Sync" );
+		self->nSink = Memory_Alloc_Array( unsigned, 1, "Sync" );
+		self->nSource[0] = 0;
+		self->nSink[0] = 0;
+		return;
+	}
+
+
+	/*
+	** For each other proc build a set of local that correspond to remotes they will send here.  There will
+	** probably be mainly empty sets.  Send back to respective procs.
+	*/
+
+	{
+		unsigned*	remNReq;
+		unsigned**	remReq;
+		unsigned*	nFound;
+		unsigned**	found;
+		IndexSet*	globalSet;
+
+		/* Send our required to all others and receive from all others. */
+		MPI_ArrayAllgather( nShadow, sizeof(unsigned), shadow, &remNReq, (void***)&remReq, comm );
+
+		/* Prepare to locate remote requireds. */
+		nFound = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		found = Memory_Alloc_Array( unsigned*, self->nProcs, "Sync" );
+		globalSet = IndexSet_New( nGlobal );
+
+		/* Begin searching... */
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			unsigned	remReq_i;
+
+			if( proc_i == self->rank ) {
+				nFound[proc_i] = 0;
+				found[proc_i] = NULL;
+				continue;
+			}
+
+			IndexSet_RemoveAll( globalSet );
+
+			for( remReq_i = 0; remReq_i < remNReq[proc_i]; remReq_i++ ) {
+				unsigned	loc_i;
+
+				for( loc_i = 0; loc_i < nLocal; loc_i++ ) {
+					if( local[loc_i] == remReq[proc_i][remReq_i] ) {
+						IndexSet_Add( globalSet, remReq[proc_i][remReq_i] );
+						break;
+					}
+				}
+			}
+
+			IndexSet_GetMembers( globalSet, &nFound[proc_i], &found[proc_i] );
+		}
+
+		/* Release some memory. */
+		FreeArray( remNReq );
+		FreeArray( remReq );
+		Stg_Class_Delete( globalSet );
+
+		/* Send back all the ones we found and receive from all others all our requireds they found. */
+		MPI_Array2DAlltoall( nFound, sizeof(unsigned), (void**)found, &remNFound, (void***)&remFound, comm );
+
+		/* Release some memory. */
+		FreeArray( nFound );
+		FreeArray2D( self->nProcs, found );
+	}
+
+
+	/*
+	** Execute an algorithm (potentially user supplied) to determine where the requested nodes will
+	** come from.
+	*/
+
+	self->select( self, remNFound, remFound );
+
+	/* We can now free up some more memory. */
+	FreeArray( remNFound );
+	FreeArray( remFound );
+
+
+	/*
+	** 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.
+	*/
+
+	/* Allocate for the sinks. */
+	self->nSink = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+	
+	CHK_MPI( MPI_Alltoall( self->nSource, 1, MPI_UNSIGNED, 
+			       self->nSink, 1, MPI_UNSIGNED, comm ) );
+	MPI_Array2DAlltoall( self->nSource, sizeof(unsigned), (void**)self->source, 
+			     &self->nSink, (void***)&self->sink, comm );
+
+
+	/*
+	** Calculate net values for source and sink.
+	*/
+
+	self->netSource = 0;
+	self->netSink = 0;
+	for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+		self->netSource += self->nSource[proc_i];
+		self->netSink += self->nSink[proc_i];
+	}
+
+
+	/*
+	** Complete the mappings, ie. map sink and source arrays from global indices to domain indices.
+	*/
+
+	{
+		unsigned	snk_i, src_i;
+
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			for( snk_i = 0; snk_i < self->nSink[proc_i]; snk_i++ ) {
+				self->sink[proc_i][snk_i] = self->globalMap[self->sink[proc_i][snk_i]];
+			}
+			for( src_i = 0; src_i < self->nSource[proc_i]; src_i++ ) {
+				self->source[proc_i][src_i] = self->globalMap[self->source[proc_i][src_i]];
+			}
+		}
+	}
+}
+
+
+unsigned Sync_GetNGlobal( void* sync ) {
+	assert( sync );
+	return ((Sync*)sync)->nGlobal;
+}
+
+
+unsigned Sync_GetNLocal( void* sync ) {
+	assert( sync );
+	return ((Sync*)sync)->nLocal;
+}
+
+
+unsigned Sync_GetNShadow( void* sync ) {
+	assert( sync );
+	return ((Sync*)sync)->nShadow;
+}
+
+
+unsigned Sync_GetNDomain( void* sync ) {
+	assert( sync );
+	return ((Sync*)sync)->nDomain;
+}
+
+
+unsigned Sync_MapLocal( void* sync, unsigned lInd ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+	assert( !self->nLocal || self->local );
+	assert( lInd < self->nLocal );
+
+	return self->local[lInd];
+}
+
+
+unsigned Sync_MapShadow( void* sync, unsigned sInd ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+	assert( !self->nShadow || self->shadow );
+	assert( sInd < self->nShadow );
+
+	return self->shadow[sInd];
+}
+
+
+unsigned Sync_MapDomain( void* sync, unsigned dInd ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+	assert( !self->nDomain || self->domain );
+	assert( dInd < self->nDomain );
+
+	return self->domain[dInd];
+}
+
+
+unsigned Sync_MapGlobal( void* sync, unsigned gInd ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+	assert( self->globalMap );
+	assert( gInd < self->nGlobal );
+
+	return self->globalMap[gInd];
+}
+
+
+Bool Sync_IsLocal( void* sync, unsigned gInd ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+	assert( self->globalMap );
+	assert( gInd < self->nGlobal );
+
+	return (self->globalMap[gInd] < self->nLocal) ? True : False;
+}
+
+
+Bool Sync_IsShadow( void* sync, unsigned gInd ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+	assert( self->globalMap );
+	assert( gInd < self->nGlobal );
+
+	return (self->globalMap[gInd] >= self->nLocal && 
+		self->globalMap[gInd] < self->nDomain) ? True : False;
+}
+
+
+void Sync_SetDomainArray( void* sync, 
+			  size_t itemSize, size_t stride, void* array )
+{
+	Sync*		self = (Sync*)sync;
+	unsigned	proc_i;
+
+	assert( self );
+	assert( itemSize );
+	assert( stride );
+	assert( array );
+
+
+	/* If needed, empty the current array content. */
+	KillArray( self->sourceOffs );
+	KillArray( self->sourceDisps );
+	KillArray( self->sourceSizes );
+	KillArray( self->sinkOffs );
+	KillArray( self->sinkDisps );
+	KillArray( self->sinkSizes );
+	KillArray( self->sourceArray );
+	KillArray( self->sinkArray );
+
+
+	/*
+	** Build a displacement list from the local array we will get when sending such that we can pack values into
+	** a contiguous array.  While we're at it, construct an array of sizes, proc wise.
+	*/
+
+	if( self->netSource > 0 ) {
+		unsigned*	srcOffs;
+		unsigned*	srcSizes;
+		unsigned*	srcDisps;
+		unsigned	srcInd;
+
+		/* Alloc memory. */
+		srcDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		srcSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		srcOffs = Memory_Alloc_Array( unsigned, self->netSource, "Sync" );
+
+		srcInd = 0;
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			unsigned	src_i;
+
+			srcSizes[proc_i] = 0;
+			for( src_i = 0; src_i < self->nSource[proc_i]; src_i++ ) {
+				/* Calc the diplacement. */
+				srcOffs[srcInd] = self->source[proc_i][src_i] * stride;
+
+				/* Add to the size. */
+				srcSizes[proc_i] += itemSize;
+
+				srcInd++;
+			}
+		}
+
+		/* Calc the displacements. */
+		srcDisps[0] = 0;
+		for( proc_i = 1; proc_i < self->nProcs; proc_i++ ) {
+			srcDisps[proc_i] = srcDisps[proc_i - 1] + srcSizes[proc_i - 1];
+		}
+
+		/* Store arrays. */
+		self->sourceOffs = srcOffs;
+		self->sourceDisps = srcDisps;
+		self->sourceSizes = srcSizes;
+	}
+	else {
+		self->sourceOffs = NULL;
+		self->sourceDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		self->sourceSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		memset( self->sourceDisps, 0, sizeof(unsigned) * self->nProcs );
+		memset( self->sourceSizes, 0, sizeof(unsigned) * self->nProcs );
+	}
+
+
+	/*
+	** Do the same for the sink items.
+	*/
+
+	if( self->netSink > 0 ) {
+		unsigned*	snkOffs;
+		unsigned*	snkSizes;
+		unsigned*	snkDisps;
+		unsigned	snkInd;
+
+		/* Alloc memory. */
+		snkDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		snkSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		snkOffs = Memory_Alloc_Array( unsigned, self->netSink, "Sync" );
+
+		snkInd = 0;
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			unsigned	snk_i;
+
+			snkSizes[proc_i] = 0;
+			for( snk_i = 0; snk_i < self->nSink[proc_i]; snk_i++ ) {
+				/* Calc the diplacement. */
+				snkOffs[snkInd] = self->sink[proc_i][snk_i] * stride;
+
+				/* Set the size. */
+				snkSizes[proc_i] += itemSize;
+
+				snkInd++;
+			}
+		}
+
+		/* Calc the displacements. */
+		snkDisps[0] = 0;
+		for( proc_i = 1; proc_i < self->nProcs; proc_i++ ) {
+			snkDisps[proc_i] = snkDisps[proc_i - 1] + snkSizes[proc_i - 1];
+		}
+
+		/* Store arrays. */
+		self->sinkOffs = snkOffs;
+		self->sinkDisps = snkDisps;
+		self->sinkSizes = snkSizes;
+	}
+	else {
+		self->sinkOffs = NULL;
+		self->sinkDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		self->sinkSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		memset( self->sinkSizes, 0, sizeof(unsigned) * self->nProcs );
+		memset( self->sinkDisps, 0, sizeof(unsigned) * self->nProcs );
+	}
+
+
+	/*
+	** Allocate source and sink arrays so we can compile values into contiguous chunks.
+	*/
+
+	self->sourceArray = self->netSource ? Memory_Alloc_Array( unsigned char, self->netSource * itemSize, "Sync" ) : NULL;
+	self->sinkArray = self->netSink ? Memory_Alloc_Array( unsigned char, self->netSink * itemSize, "Sync" ) : NULL;
+
+
+	/*
+	** Fill in any remaing values.
+	*/
+
+	self->itemSize = itemSize;
+	self->arrayType = Sync_ArrayType_Domain;
+	self->arrayInfo.array = array;
+}
+
+
+void Sync_SetSplitArrays( void* sync, 
+			  size_t itemSize, 
+			  size_t srcStride, void* srcArray, 
+			  size_t snkStride, void* snkArray )
+{
+	Sync*		self = (Sync*)sync;
+	unsigned	proc_i;
+
+	assert( self );
+	assert( itemSize );
+	assert( srcStride );
+	assert( srcArray );
+	assert( snkStride );
+	assert( snkArray );
+
+	/* If needed, empty the current array content. */
+	KillArray( self->sourceOffs );
+	KillArray( self->sourceDisps );
+	KillArray( self->sourceSizes );
+	KillArray( self->sinkOffs );
+	KillArray( self->sinkDisps );
+	KillArray( self->sinkSizes );
+	KillArray( self->sourceArray );
+	KillArray( self->sinkArray );
+
+
+	/*
+	** Build a displacement list from the local array we will get when sending such that we can pack values into
+	** a contiguous array.  While we're at it, construct an array of sizes, proc wise.
+	*/
+
+	if( self->netSource > 0 ) {
+		unsigned*	srcOffs;
+		unsigned*	srcSizes;
+		unsigned*	srcDisps;
+		unsigned	srcInd;
+
+		/* Alloc memory. */
+		srcDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		srcSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		srcOffs = Memory_Alloc_Array( unsigned, self->netSource, "Sync" );
+
+		srcInd = 0;
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			unsigned	src_i;
+
+			srcSizes[proc_i] = 0;
+			for( src_i = 0; src_i < self->nSource[proc_i]; src_i++ ) {
+				/* Calc the diplacement. */
+				srcOffs[srcInd] = self->source[proc_i][src_i] * srcStride;
+
+				/* Add to the size. */
+				srcSizes[proc_i] += itemSize;
+
+				srcInd++;
+			}
+		}
+
+		/* Calc the displacements. */
+		srcDisps[0] = 0;
+		for( proc_i = 1; proc_i < self->nProcs; proc_i++ ) {
+			srcDisps[proc_i] = srcDisps[proc_i - 1] + srcSizes[proc_i - 1];
+		}
+
+		/* Store arrays. */
+		self->sourceOffs = srcOffs;
+		self->sourceDisps = srcDisps;
+		self->sourceSizes = srcSizes;
+	}
+	else {
+		self->sourceOffs = NULL;
+		self->sourceDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		self->sourceSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		memset( self->sourceDisps, 0, sizeof(unsigned) * self->nProcs );
+		memset( self->sourceSizes, 0, sizeof(unsigned) * self->nProcs );
+	}
+
+
+	/*
+	** Do the same for the sink items.
+	*/
+
+	if( self->netSink > 0 ) {
+		unsigned*	snkOffs;
+		unsigned*	snkSizes;
+		unsigned*	snkDisps;
+		unsigned	snkInd;
+
+		/* Alloc memory. */
+		snkDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		snkSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		snkOffs = Memory_Alloc_Array( unsigned, self->netSink, "Sync" );
+
+		snkInd = 0;
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			unsigned	snk_i;
+
+			snkSizes[proc_i] = 0;
+			for( snk_i = 0; snk_i < self->nSink[proc_i]; snk_i++ ) {
+				/* Calc the diplacement. */
+				snkOffs[snkInd] = self->sink[proc_i][snk_i] * snkStride;
+
+				/* Set the size. */
+				snkSizes[proc_i] += itemSize;
+
+				snkInd++;
+			}
+		}
+
+		/* Calc the displacements. */
+		snkDisps[0] = 0;
+		for( proc_i = 1; proc_i < self->nProcs; proc_i++ ) {
+			snkDisps[proc_i] = snkDisps[proc_i - 1] + snkSizes[proc_i - 1];
+		}
+
+		/* Store arrays. */
+		self->sinkOffs = snkOffs;
+		self->sinkDisps = snkDisps;
+		self->sinkSizes = snkSizes;
+	}
+	else {
+		self->sinkOffs = NULL;
+		self->sinkDisps = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		self->sinkSizes = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+		memset( self->sinkSizes, 0, sizeof(unsigned) * self->nProcs );
+		memset( self->sinkDisps, 0, sizeof(unsigned) * self->nProcs );
+	}
+
+
+	/*
+	** Allocate source and sink arrays so we can compile values into contiguous chunks.
+	*/
+
+	self->sourceArray = self->netSource ? Memory_Alloc_Array( unsigned char, self->netSource * itemSize, "Sync" ) : NULL;
+	self->sinkArray = self->netSink ? Memory_Alloc_Array( unsigned char, self->netSink * itemSize, "Sync" ) : NULL;
+
+
+	/*
+	** Fill in any remaing values.
+	*/
+
+	self->itemSize = itemSize;
+	self->arrayType = Sync_ArrayType_Split;
+	self->arrayInfo.splitArray.srcArray = srcArray;
+	self->arrayInfo.splitArray.snkArray = snkArray;
+}
+
+
+void Sync_SendRecv( void* sync ) {
+	Sync*		self = (Sync*)sync;
+	unsigned	snk_i, src_i;
+
+	assert( self );
+	assert( self->arrayType != Sync_ArrayType_None );
+
+	/*
+	** Pack from the local array into a contiguous array.
+	*/
+
+	if( self->netSink > 0 ) {
+		void*	array;
+
+		/* Select the array to use. */
+		array = (self->arrayType == Sync_ArrayType_Domain) ? self->arrayInfo.array : self->arrayInfo.splitArray.srcArray;
+		assert( array );
+		
+		/* Pack the values. */
+		for( snk_i = 0; snk_i < self->netSink; snk_i++ ) {
+			memcpy( 
+				(void*)((ArithPointer)self->sinkArray + (ArithPointer)(snk_i * self->itemSize)), 
+				(void*)((ArithPointer)array + (ArithPointer)self->sinkOffs[snk_i]), 
+				self->itemSize );
+		}
+	}
+
+
+	/*
+	** Execute the sync system.
+	*/
+
+	MPI_Alltoallv( self->sinkArray, (int*)self->sinkSizes, (int*)self->sinkDisps, MPI_BYTE, 
+		       self->sourceArray, (int*)self->sourceSizes, (int*)self->sourceDisps, MPI_BYTE, 
+		       self->comm );
+
+
+	/*
+	** Unpack the received values.
+	*/
+
+	{
+		unsigned	offs;
+		void*		array;
+
+		/* Select an array and offset accordingly. */
+		if( self->arrayType == Sync_ArrayType_Domain ) {
+			array = self->arrayInfo.array;
+			offs = 0;
+		}
+		else {
+			array = self->arrayInfo.splitArray.snkArray;
+			offs = self->nLocal * self->itemSize;
+		}
+
+		for( src_i = 0; src_i < self->netSource; src_i++ ) {
+			memcpy( 
+				(void*)((ArithPointer)array + (ArithPointer)self->sourceOffs[src_i] - (ArithPointer)offs), 
+				(void*)((ArithPointer)self->sourceArray + (ArithPointer)(src_i * self->itemSize)),
+				self->itemSize );
+		}
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Private Functions
+*/
+
+void _Sync_Free( void* sync ) {
+	Sync*	self = (Sync*)sync;
+
+	assert( self );
+
+	/*
+	** Kill any arrays that were allocated by Sync functions.
+	*/
+
+	KillArray( self->domain );
+	self->local = NULL;
+	self->shadow = NULL;
+
+	KillArray( self->globalMap );
+
+	KillArray( self->nSource );
+	KillArray2D( self->nProcs, self->source );
+
+	KillArray( self->nSink );
+	KillArray( self->sink );
+
+	KillArray( self->sourceDisps );
+	KillArray( self->sourceSizes );
+	KillArray( self->sourceOffs );
+	KillArray( self->sourceArray );
+	KillArray( self->sinkDisps );
+	KillArray( self->sinkSizes );
+	KillArray( self->sinkOffs );
+	KillArray( self->sinkArray );
+}
+
+
+void _Sync_Select_MinimizeComms( void* sync, 
+				 unsigned* nFound, unsigned** found )
+{
+	Sync*		self = (Sync*)sync;
+	unsigned*	nUniques;
+	unsigned**	uniques;
+	IndexSet*	globalSet;
+	unsigned	mostUniques;
+	unsigned	proc_i;
+
+	Bool _Sync_IsUnique( Sync* self, unsigned found );
+
+	assert( self );
+	assert( nFound );
+	assert( found );
+
+
+	/*
+	** Set up the source arrays.
+	*/
+	
+	self->nSource = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+	self->source = Memory_Alloc_Array( unsigned*, self->nProcs, "Sync" );
+	for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+		self->nSource[proc_i] = 0;
+		self->source[proc_i] = NULL;
+	}
+	
+	
+	/*
+	** Select source procs from which to retrieve required nodes such that communications are minimized.
+	*/
+	
+	nUniques = Memory_Alloc_Array( unsigned, self->nProcs, "Sync" );
+	uniques = Memory_Alloc_Array( unsigned*, self->nProcs, "Sync" );
+	for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+		uniques[proc_i] = NULL;
+	}
+	
+	globalSet = IndexSet_New( self->nGlobal );
+	
+	do {
+		/* Loop over procs and find unique nodes per proc. ie. the most nodes not already covered by
+		   an existing source. */
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+			unsigned	fnd_i;
+			
+			/* If there are no founds for this proc or we've already sourced it, then skip. */
+			if( nFound[proc_i] == 0 || self->nSource[proc_i] > 0 ) {
+				nUniques[proc_i] = 0;
+				continue;
+			}
+			
+			IndexSet_RemoveAll( globalSet );
+			
+			for( fnd_i = 0; fnd_i < nFound[proc_i]; fnd_i++ ) {
+				if( _Sync_IsUnique( sync, found[proc_i][fnd_i] ) ) {
+					IndexSet_Add( globalSet, found[proc_i][fnd_i] );
+				}
+			}
+			
+			IndexSet_GetMembers( globalSet, &nUniques[proc_i], &uniques[proc_i] );
+		}
+
+		/* Determine which proc has the most uniques and store. */
+		{
+			unsigned	mostProc = 0;
+			
+			mostUniques = 0;
+			for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+				if( nUniques[proc_i] > mostUniques ) {
+					mostUniques = nUniques[proc_i];
+					mostProc = proc_i;
+				}
+			}
+			
+			/* Store result. */
+			if( mostUniques ) {
+				self->nSource[mostProc] = mostUniques;
+				self->source[mostProc] = uniques[mostProc];
+				uniques[mostProc] = NULL;
+			}
+		}
+		
+		/* Clobber the allocated 'uniques' arrays. */
+		for( proc_i = 0; proc_i < self->nProcs; proc_i++ )
+			FreeArray( uniques[proc_i] );
+	}
+	while( mostUniques );
+
+	/* Get rid of all the resources. */
+	FreeArray( nUniques );
+	FreeArray( uniques );
+	Stg_Class_Delete( globalSet );
+}
+
+
+Bool _Sync_IsUnique( Sync* self, unsigned found ) {
+	unsigned	proc_i;
+	
+	for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+		unsigned	src_i;
+		
+		for( src_i = 0; src_i < self->nSource[proc_i]; src_i++ ) {
+			if( self->source[proc_i][src_i] == found ) {
+				return False;
+			}
+		}
+	}
+	
+	return True;
+}
+
+
+void _Sync_BuildGlobalMap( void* sync ) {
+	Sync*		self = (Sync*)sync;
+	unsigned	glo_i, dom_i;
+
+	assert( self );
+	assert( !self->globalMap );
+	assert( self->nGlobal );
+
+
+	/*
+	** Construct a map from global space to domain space.
+	*/
+
+	self->globalMap = Memory_Alloc_Array( unsigned, self->nGlobal, "Sync" );
+	for( glo_i = 0; glo_i < self->nGlobal; glo_i++ ) {
+		self->globalMap[glo_i] = (unsigned)-1;
+	}
+
+	for( dom_i = 0; dom_i < self->nDomain; dom_i++ ) {
+		self->globalMap[self->domain[dom_i]] = dom_i;
+	}
+}
+
+
+void _Sync_MapAll( void* sync ) {
+	Sync*		self = (Sync*)sync;
+	unsigned	proc_i, snk_i, src_i;
+
+	assert( self );
+	assert( self->globalMap );
+	assert( !self->nLocal || self->local );
+
+
+	/*
+	** Map the global indices stored in the sink array to local indices.
+	*/
+
+	/* Ensure the global map is built. */
+	for( proc_i = 0; proc_i < self->nProcs; proc_i++ ) {
+		for( snk_i = 0; snk_i < self->nSink[proc_i]; snk_i++ ) {
+			self->sink[proc_i][snk_i] = self->globalMap[self->sink[proc_i][snk_i]];
+		}
+		for( src_i = 0; src_i < self->nSource[proc_i]; src_i++ ) {
+			self->source[proc_i][src_i] = self->globalMap[self->source[proc_i][src_i]];
+		}
+	}
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** MPI Helper Functions.
+*/
+
+void MPI_ArrayGather1D( unsigned size, size_t itemSize, void* array, 
+			unsigned** dstSizes, void** dstArray, 
+			unsigned root, MPI_Comm comm )
+{
+   	int	nProcs;
+	int	rank;
+	
+
+	/* Get basic MPI info. */
+	CHK_MPI( MPI_Comm_size( comm, &nProcs ) );
+	CHK_MPI( MPI_Comm_rank( comm, &rank ) );
+	
+	
+	/*
+	** Send a 1D array of arbitrary length to root process in supplied communicator.  This means we also
+	** need to receive arrays of arbitrary length from all others.  As the array from this proc is already stored
+	** elsewhere we will remove it from the received array, setting its length to zero.
+	*/
+	
+	{
+		unsigned*	tmpSizes = NULL;
+		void*		tmpArray1D = NULL;
+		unsigned*	disps = NULL;
+		unsigned	proc_i;
+		
+		/* Receive size/s. */
+		*dstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		CHK_MPI( MPI_Gather( &size, 1, MPI_UNSIGNED, *dstSizes, 1, MPI_UNSIGNED, root, comm ) );
+		
+		/* Factor in 'itemSize'. */
+		tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		for( proc_i = 0; proc_i < nProcs; proc_i++ ) {
+			tmpSizes[proc_i] = (*dstSizes)[proc_i] * itemSize;
+		}
+		
+		/* Allocate space for the coming arrays and build a displacement list. */
+		{
+			unsigned	netSize;
+		
+			disps = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		
+			disps[0] = 0;
+			netSize = tmpSizes[0];
+			for( proc_i = 1; proc_i < nProcs; proc_i++ ) {
+				disps[proc_i] = disps[proc_i - 1] + tmpSizes[proc_i - 1];
+				netSize += tmpSizes[proc_i];
+			}
+		
+			if( netSize ) {
+				tmpArray1D = Memory_Alloc_Array_Bytes_Unnamed( sizeof(byte_t), netSize, "unknown" );
+			}
+			else {
+				tmpArray1D = NULL;
+			}
+		}
+
+		/* Send/receive array/s. */
+		CHK_MPI( MPI_Gatherv( array, size * itemSize, MPI_BYTE, 
+				      tmpArray1D, (int*)tmpSizes, (int*)disps, MPI_BYTE, 
+				      root, comm ) );
+		
+		/* Free the displacements and temp-sizes. */
+		Memory_Free( disps );
+		Memory_Free( tmpSizes );
+		
+		/* Store the 1D array. */
+		*dstArray = tmpArray1D;
+	}
+}
+
+
+void MPI_ArrayAllgather( unsigned		size, 
+					size_t		itemSize, 
+					void*		array, 
+					unsigned**	dstSizes, 
+					void***		dstArray, 
+					MPI_Comm		comm )
+{
+	int	nProcs;
+	int	rank;
+	
+	
+/*
+	Journal_Firewall( itemSize > 0 && comm, "Corrupt arguments to MPI_ArrayAllgather.\n" );
+*/
+	
+	
+	/* Get basic MPI info. */
+	CHK_MPI( MPI_Comm_size( comm, &nProcs ) );
+	CHK_MPI( MPI_Comm_rank( comm, &rank ) );
+	
+	
+	/*
+	** Send a 1D array of arbitrary length to all other processes in the supplied communicator.  This means we also
+	** need to receive arrays of arbitrary length from all others.  As the array from this proc is already stored
+	** elsewhere we will remove it from the received array, setting its length to zero.
+	*/
+	
+	{
+		unsigned*	tmpSizes;
+		void*	tmpArray1D;
+		unsigned*	disps;
+		unsigned	proc_i;
+		
+		/* Send/receive size/s. */
+		*dstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		CHK_MPI( MPI_Allgather( &size, 1, MPI_UNSIGNED, *dstSizes, 1, MPI_UNSIGNED, comm ) );
+		
+		/* Factor in 'itemSize'. */
+		tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		for( proc_i = 0; proc_i < nProcs; proc_i++ ) {
+			tmpSizes[proc_i] = (*dstSizes)[proc_i] * itemSize;
+		}
+		
+		/* Allocate space for the coming arrays and build a displacement list. */
+		{
+			unsigned	netSize;
+			
+			disps = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+			
+			disps[0] = 0;
+			netSize = tmpSizes[0];
+			for( proc_i = 1; proc_i < nProcs; proc_i++ ) {
+				disps[proc_i] = disps[proc_i - 1] + tmpSizes[proc_i - 1];
+				netSize += tmpSizes[proc_i];
+			}
+			
+			if( netSize ) {
+				tmpArray1D = Memory_Alloc_Array_Bytes_Unnamed( sizeof(byte_t), netSize, "unknown" );
+			}
+			else {
+				tmpArray1D = NULL;
+			}
+		}
+		
+		/* Send/receive array/s. */
+		CHK_MPI( MPI_Allgatherv( array, 
+							size * itemSize, 
+							MPI_BYTE, 
+							tmpArray1D, 
+							(int*)tmpSizes, 
+							(int*)disps, 
+							MPI_BYTE, 
+							comm ) );
+		
+		/* Free the displacements and temp-sizes. */
+		Memory_Free( disps );
+		Memory_Free( tmpSizes );
+		
+		/* Unpack the 1D array into the 2D destination. */
+		Array_1DTo2D( nProcs, *dstSizes, tmpArray1D, dstArray, sizeof(unsigned) );
+		
+		/* Free resources. */
+		if( tmpArray1D ) {
+			Memory_Free( tmpArray1D );
+		}
+	}
+}
+
+
+void MPI_Array2DAlltoall( unsigned*	sizes, 
+					 size_t		itemSize, 
+					 void**		array, 
+					 unsigned**	dstSizes, 
+					 void***		dstArray, 
+					 MPI_Comm		comm )
+{
+	int	nProcs;
+	int	rank;
+	
+	
+/*
+	Journal_Firewall( itemSize > 0 && comm, "Corrupt arguments to MPI_ArrayAllgather.\n" );
+*/
+	
+	
+	/* Get basic MPI info. */
+	CHK_MPI( MPI_Comm_size( comm, &nProcs ) );
+	CHK_MPI( MPI_Comm_rank( comm, &rank ) );
+	
+	
+	/*
+	** Blah, blah, sick of comments.
+	*/
+	
+	{
+		unsigned*	tmpDstSizes;
+		unsigned*	tmpDstArray1D;
+		unsigned*	dstDisps;
+		unsigned	proc_i;
+		
+		/* Send/receive sizes. */
+		*dstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		CHK_MPI( MPI_Alltoall( sizes, 1, MPI_UNSIGNED, *dstSizes, 1, MPI_UNSIGNED, comm ) );
+
+		/* Copy sizes into a new array and modify to include 'itemSize'. */
+		tmpDstSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+		
+		for( proc_i = 0; proc_i < nProcs; proc_i++ ) {
+			tmpDstSizes[proc_i] = (*dstSizes)[proc_i] * itemSize;
+		}
+		
+		/* Allocate space for the coming arrays and build a displacement list. */
+		{
+			unsigned	netSize;
+			
+			dstDisps = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+			
+			dstDisps[0] = 0;
+			netSize = tmpDstSizes[0];
+			for( proc_i = 1; proc_i < nProcs; proc_i++ ) {
+				dstDisps[proc_i] = dstDisps[proc_i - 1] + tmpDstSizes[proc_i - 1];
+				netSize += tmpDstSizes[proc_i];
+			}
+			
+			if( netSize ) {
+				tmpDstArray1D = Memory_Alloc_Array_Bytes_Unnamed( sizeof(byte_t), netSize, "unknown" );
+			}
+			else {
+				tmpDstArray1D = NULL;
+			}
+		}
+		
+		/* Pack the supplied 2D array into a 1D array and send/receive. */
+		{
+			unsigned*	tmpSizes;
+			void*	tmpSrcArray1D;
+			unsigned*	disps;
+			
+			Array_2DTo1D( nProcs, sizes, array, &tmpSrcArray1D, sizeof(unsigned), &disps );
+			
+			/* Generate a temporary set of sizes to include 'itemSize'. Modify 'dists' while we're at it. */
+			tmpSizes = Memory_Alloc_Array_Unnamed( unsigned, nProcs );
+			for( proc_i = 0; proc_i < nProcs; proc_i++ ) {
+				disps[proc_i] *= itemSize;
+				tmpSizes[proc_i] = sizes[proc_i] * itemSize;
+			}
+			
+			/* Send/recv. */
+			CHK_MPI( MPI_Alltoallv( 
+				tmpSrcArray1D, 
+				(int*)tmpSizes, 
+				(int*)disps, 
+				MPI_BYTE, 
+				tmpDstArray1D, 
+				(int*)tmpDstSizes, 
+				(int*)dstDisps, 
+				MPI_BYTE, 
+				comm ) );
+			
+			/* Free memory. */
+			Memory_Free( tmpSizes );
+			Memory_Free( disps );
+			Memory_Free( dstDisps );
+			Memory_Free( tmpDstSizes );
+			
+			if( tmpSrcArray1D ) {
+				Memory_Free( tmpSrcArray1D );
+			}
+		}
+		
+		/* Unpack the 1D array into the 2D destination. */
+		Array_1DTo2D( nProcs, *dstSizes, tmpDstArray1D, dstArray, sizeof(unsigned) );
+		
+		/* Free resources. */
+		if( tmpDstArray1D ) {
+			Memory_Free( tmpDstArray1D );
+		}
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Sync.h 2453 2004-12-21 04:49:34Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisaton_Utils_Sync_h__
+#define __Discretisaton_Utils_Sync_h__
+
+
+	/* Useful typedefs. */
+	typedef unsigned char	byte_t;
+	typedef enum {
+		Sync_ArrayType_Domain, 
+		Sync_ArrayType_Split, 
+		Sync_ArrayType_None
+	} Sync_ArrayType;
+
+	extern const Type Sync_Type;
+
+	/* Virtual function types */
+	typedef void (Sync_Select)( void* sync, 
+				    unsigned* nFound, unsigned** found );
+	
+	/* Textual name of this class */
+
+	/* Sync information */
+	#define __Sync \
+		/* General info */ \
+		__Stg_Component \
+		Dictionary*				dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* Sync info ... */ \
+		MPI_Comm				comm; \
+		int					nProcs; \
+		int					rank; \
+		\
+		Sync_Select*				select; \
+		\
+		unsigned				nGlobal; \
+		unsigned				nLocal; \
+		unsigned*				local; \
+		unsigned				nShared; \
+		unsigned*				shared; \
+		unsigned				nShadow; \
+		unsigned*				shadow; \
+		unsigned				nDomain; \
+		unsigned*				domain; \
+		\
+		unsigned*		    		globalMap; \
+		\
+		unsigned				netSource; \
+		unsigned*				nSource; \
+		unsigned**				source; \
+		unsigned				netSink; \
+		unsigned*				nSink; \
+		unsigned**				sink; \
+		\
+		unsigned*				sourceDisps; \
+		unsigned*				sourceSizes; \
+		unsigned*				sourceOffs; \
+		void*					sourceArray; \
+		unsigned*				sinkDisps; \
+		unsigned*				sinkSizes; \
+		unsigned*				sinkOffs; \
+		void*					sinkArray; \
+		\
+		size_t					itemSize; \
+		Sync_ArrayType				arrayType; \
+		union { \
+		      void*				array; \
+		      struct { \
+			    void*			srcArray; \
+			    void*			snkArray; \
+		      } splitArray; \
+		} arrayInfo; 
+
+	struct Sync { __Sync };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/* Create a Sync */
+	
+	void* Sync_DefaultNew( Name name );
+	
+	#define Sync_New( name ) \
+		Sync_New_Param( NULL, name )
+	
+	/* Create a Sync with all additional parameters */
+	Sync* Sync_New_Param(
+		Dictionary*	dictionary,
+		Name		name );
+	
+	/* Initialise a Sync */
+	void Sync_Init(	Sync*		self, 
+			Dictionary*	dictionary, 
+			Name		name );
+	
+	/* Creation implementation */
+	Sync* _Sync_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 );
+	
+	/* Initialisation implementation functions */
+	void _Sync_Init( Sync* self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/* Stg_Class_Delete sync implementation */
+	void _Sync_Delete( void* sync );
+	
+	/* Print sync implementation */
+	void _Sync_Print( void* sync, Stream* stream );
+	
+	void _Sync_Construct( void* sync, Stg_ComponentFactory *cf, void* data );
+	
+	void _Sync_Build( void* sync, void *data );
+	
+	void _Sync_Initialise( void* sync, void *data );
+	
+	void _Sync_Execute( void* sync, void *data );
+
+	void _Sync_Destroy( void* sync, void *data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	void Sync_Negotiate( void* sync, 
+			     unsigned nGlobal, 
+			     unsigned* local, unsigned nLocal, 
+			     unsigned* shared, unsigned nShared, 
+			     unsigned* shadow, unsigned nShadow, 
+			     MPI_Comm comm );
+
+	void Sync_SetDomainArray( void* sync, 
+				  size_t itemSize, size_t stride, void* array );
+
+	void Sync_SetSplitArrays( void* sync, 
+				  size_t itemSize, 
+				  size_t srcStride, void* srcArray, 
+				  size_t snkStride, void* snkArray );
+
+	unsigned Sync_GetNGlobal( void* sync );
+
+	unsigned Sync_GetNLocal( void* sync );
+
+	unsigned Sync_GetNShadow( void* sync );
+
+	unsigned Sync_GetNDomain( void* sync );
+
+	unsigned Sync_MapLocal( void* sync, unsigned lInd );
+
+	unsigned Sync_MapRemote( void* sync, unsigned rInd );
+
+	unsigned Sync_MapDomain( void* sync, unsigned dInd );
+
+	unsigned Sync_MapGlobal( void* sync, unsigned gInd );
+
+	Bool Sync_IsLocal( void* sync, unsigned gInd );
+
+	Bool Sync_IsRemote( void* sync, unsigned gInd );
+
+	void Sync_SendRecv( void* sync );
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	void _Sync_Free( void* sync );
+	
+	void _Sync_Select_MinimizeComms( void* sync, unsigned* nFound, unsigned** found );
+
+	void _Sync_MapAll( void* sync );
+
+	void _Sync_BuildGlobalMap( void* sync );
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** MPI Helper Functions.
+	*/
+
+	#define CHK_MPI( mpiFunc ) \
+		if( mpiFunc != MPI_SUCCESS ) \
+			fprintf( stderr, "Warning: MPI function returned failure...\n" )
+
+	void MPI_ArrayGather1D( unsigned size, size_t itemSize, void* array, 
+				unsigned** dstSizes, void** dstArray, 
+				unsigned root, MPI_Comm comm );
+
+	void MPI_ArrayAllgather( unsigned size, size_t itemSize, void* array, 
+				 unsigned** dstSizes, void*** dstArray, 
+				 MPI_Comm comm );
+
+	void MPI_Array2DAlltoall( unsigned* sizes, size_t itemSize, void** array, 
+				  unsigned** dstSizes, void*** dstArray, 
+				  MPI_Comm comm );
+	
+#endif /* __Discretisaton_Utils_Sync_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">Sync</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>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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 );
+
+	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 );
+	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 );
+}
+
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_TimeIntegratee_h__
+#define __Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">TimeIntegratee</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">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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,675 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian 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 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+			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;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Utils_TimeIntegrator_h__
+#define __Discretisation_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 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">TimeIntegrator</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">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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Utils.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Utils.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Utils.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	External header file to this library.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Utils.h 3542 2006-05-01 13:02:49Z RobertTurnbull $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_h__
+#define __Discretisation_Utils_h__
+	
+	#include "types.h"
+	#include "RegularMeshUtils.h"
+	#include "AllElementsVC.h"
+	#include "AllNodesVC.h"
+	#include "WallVC.h"
+	#include "CornerVC.h"
+	#include "InnerWallVC.h"
+	#include "ShapeVC.h"
+	#include "FrictionVC.h"
+	#include "SplitFrictionWallVC.h"
+	#include "DofLayout.h"
+	#include "Operator.h"
+	#include "FieldVariable_Register.h"
+	#include "FieldVariable.h"
+	#include "OperatorFieldVariable.h"
+	#include "MeshCoarsener_Hexa.h"
+	#include "DiscretisationContext.h"
+	#include "LinearRegression.h"
+	#include "SobolGenerator.h"
+	#include "Remesher.h"
+	#include "StripRemesher.h"
+	
+	#include "TimeIntegratee.h"
+	#include "TimeIntegrator.h"
+	#include "ShapeAdvector.h"
+
+	#include "Sync.h"
+	#include "SemiRegDeform.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Discretisation_Utils_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,742 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/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,
+		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,
+		_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;
+	
+	_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,
+		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, 
+		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 ) {
+		Build( self->_mesh, data, False );
+	}
+}
+
+
+IndexSet* _WallVC_GetSet(void* variableCondition)
+{
+	WallVC*		self = (WallVC*)variableCondition;
+	IndexSet	*set = NULL;
+	HexaMD*		hexaMD = (HexaMD*)self->_mesh->layout->decomp;
+	Stream*		warningStr = Journal_Register( Error_Type, self->type );
+
+	
+	switch (self->_wall) {
+		case WallVC_Wall_Front:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalFrontSet(self->_mesh);
+			}
+			break;
+			
+		case WallVC_Wall_Back:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[K_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBackSet(self->_mesh);
+			}	
+			break;
+			
+		case WallVC_Wall_Top:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalTopSet(self->_mesh);
+			}	
+			break;
+			
+		case WallVC_Wall_Bottom:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[J_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalBottomSet(self->_mesh);
+			}	
+			break;
+			
+		case WallVC_Wall_Left:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			else {
+				set = RegularMeshUtils_CreateGlobalLeftSet(self->_mesh);
+			}	
+			break;
+			
+		case WallVC_Wall_Right:
+			if ( 1 == hexaMD->nodeGlobal3DCounts[I_AXIS] ) {
+				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(hexaMD->nodeDomainCount);	
+			}
+			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
+*/

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,198 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: WallVC.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_WallVC_h__
+#define __Discretisation_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,
+						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 /* __Discretisation_Utils_WallVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">WallVC</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="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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationMesh ${RPATH_LFLAGS}
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,165 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3888 2006-11-06 11:27:18Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Utils_types_h__
+#define __Discretisation_Utils_types_h__
+	
+	/* Classes */
+	typedef struct _AllElementsVC			AllElementsVC;
+	typedef struct _AllNodesVC			AllNodesVC;
+	typedef struct _WallVC				WallVC;
+	typedef struct _InnerWallVC			InnerWallVC;
+	typedef struct _CornerVC			CornerVC;
+	typedef struct ShapeVC				ShapeVC;
+	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 DiscretisationContext		DiscretisationContext;
+	typedef struct LinearRegression     	LinearRegression;
+	typedef struct Sync				Sync;
+	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					ShapeVC_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 /* __Discretisation_Utils_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,91 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3821 2006-10-03 05:26:46Z KathleenHumble $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+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 \
+	testMeshCoarsener_Hexa.c \
+	testSync.c \
+	testSobolGenerator.c \
+	testSemiRegDeform.c \
+	testTimeIntegration.c \
+	testCornerVC.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 \
+	testMeshCoarsener_Hexa.0of1.sh \
+	testMeshCoarsener_Hexa.0of2.sh \
+	testMeshCoarsener_Hexa.1of2.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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/allVC.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/allVC.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/allVC.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/compositeVC.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/compositeVC.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/compositeVC.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/cornerVC.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/cornerVC.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/cornerVC.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/wallVC.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/wallVC.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/wallVC.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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>

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisationUtils -lStGermainDiscretisationMesh -lStGermainDiscretisationShape -lStGermainDiscretisationGeometry -lStGermainBase ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,218 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	Topology*       nTopology;
+	ElementLayout*	eLayout;
+	NodeLayout*	nLayout;
+	MeshDecomp*	decomp;
+	MeshLayout*	layout;
+	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"};
+	
+	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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/allVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+	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(4));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool(True));
+	
+	extensionMgr_Register = ExtensionManager_Register_New();
+	
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	mesh = Mesh_New( "Mesh", layout, 0, 0, extensionMgr_Register, dictionary );
+	
+	/* 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, decomp->nodeLocalCount, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &decomp->nodeLocalCount, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, decomp->nodeLocalCount*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &decomp->nodeLocalCount, (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 );
+	Build( vc, 0, False );
+		
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*decomp->nodeLocalCount);
+	memset(array[6], 0, sizeof(double)*decomp->nodeLocalCount*5);
+	VariableCondition_Apply(vc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		printf("Testing for %s\n", vcKey);
+		Print(vc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2lf", j, array[j][0]);
+			for (k = 1; k < decomp->nodeLocalCount; k++)
+				printf(", %.2lf", array[j][k]);
+		}
+		printf("\nvar[6]: %.2lf", array[6][0]);
+		for (j = 1; j < decomp->nodeLocalCount*5; j++)
+			printf(", %.2lf", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < decomp->nodeLocalCount; k++)
+				printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < decomp->nodeLocalCount; 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(layout);
+	Stg_Class_Delete(decomp);
+	Stg_Class_Delete(nLayout);
+	Stg_Class_Delete(eLayout);
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,223 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	Topology*       nTopology;
+	ElementLayout*	eLayout;
+	NodeLayout*	nLayout;
+	MeshDecomp*	decomp;
+	MeshLayout*	layout;
+	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"};
+	
+	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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/compositeVC.xml", dictionary);
+	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(3));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(3));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(3));
+	
+	extensionMgr_Register = ExtensionManager_Register_New();
+	
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	mesh = Mesh_New( "Mesh", layout, 0, 0, extensionMgr_Register, dictionary );
+	
+	/* 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, &decomp->nodeLocalCount, (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, &decomp->nodeLocalCount, (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 );
+	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)
+	{
+		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(layout);
+	Stg_Class_Delete(decomp);
+	Stg_Class_Delete(nLayout);
+	Stg_Class_Delete(eLayout);
+	Stg_Class_Delete(nTopology);
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,448 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	itemCount: 6
+	itemTbl (ptr): 0x806de98
+		itemTbl[0] (ptr): 0x806b9d8
+		itemTbl[1] (ptr): 0x806c508
+		itemTbl[2] (ptr): 0x806c998
+		itemTbl[3] (ptr): 0x806ccf8
+		itemTbl[4] (ptr): 0x806d278
+		itemTbl[5] (ptr): 0x80634b0
+	iOwnTbl (ptr): 0x8060748
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7ebef88
+		_print (func ptr): 0xb7ebf057
+		_copy (func ptr): 0xb7ebf244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ebe81d
+	_construct (func ptr): 0xb7ebede9
+	_build (func ptr): 0xb7ebf615
+	_initialise (func ptr): 0xb7ebcde2
+	_execute (func ptr): 0xb7ebcea6
+	_destroy (func ptr): 0xb7ebced6
+	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): 0xb7ebf783
+	_getVariableCount (func ptr): 0xb7ebf88a
+	_getVariableIndex (func ptr): 0xb7ebfa1e
+	_getValueIndex (func ptr): 0xb7ebfbda
+	_getValueCount (func ptr): 0xb7ebfde4
+	_getValue (func ptr): 0xb7ebfe58
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x8063960
+	indexCount: 28
+	indexTbl (ptr): 0x8063b40
+		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]: 11
+		indexTbl[11]: 13
+		indexTbl[12]: 14
+		indexTbl[13]: 15
+		indexTbl[14]: 16
+		indexTbl[15]: 17
+		indexTbl[16]: 19
+		indexTbl[17]: 21
+		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): 0x8063bc0
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 1
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 3
+		vcVarCountTbl[18]: 1
+		vcVarCountTbl[19]: 4
+		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): 0x8063c40
+		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[3][0]:
+			varIndex: 6
+			valIndex: 3
+		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: 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[7][0]:
+			varIndex: 6
+			valIndex: 10
+		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: 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: 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[12][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[13][3]:
+			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: 7
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[18][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[19][3]:
+			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: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		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: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 9
+		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: 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
+	valueCount: 14
+	valueTbl (ptr): 0x8063f58
+		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): 0x806c868
+				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): 0x806e018
+				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, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 2.00, 2.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 2.00, 2.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 2.00, 2.00, 2.00, 30.00, 2.00, 30.00, 2.00, 30.00
+var[4]: 3.00, 3.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 3.00, 3.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 3.00, 3.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 3.00, 3.00, 3.00, 30.00, 3.00, 30.00, 3.00, 30.00
+var[5]: 1.00, 1.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 1.00, 1.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 1.00, 1.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 1.00, 1.00, 1.00, 30.00, 1.00, 30.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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  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  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 XXX 007 XXX 007 XXX 007 011 011 XXX 007 XXX 007 XXX 007 011 011 XXX 007 XXX 007 XXX 007 011 011 000 007 000 007 000 007 
+012 012 XXX 008 XXX 008 XXX 008 012 012 XXX 008 XXX 008 XXX 008 012 012 XXX 008 XXX 008 XXX 008 012 012 001 008 001 008 001 008 
+013 013 XXX 009 XXX 009 XXX 009 013 013 XXX 009 XXX 009 XXX 009 013 013 XXX 009 XXX 009 XXX 009 013 013 002 009 002 009 002 009 
+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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,359 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	itemCount: 6
+	itemTbl (ptr): 0x806de98
+		itemTbl[0] (ptr): 0x806b9d8
+		itemTbl[1] (ptr): 0x806c550
+		itemTbl[2] (ptr): 0x806c990
+		itemTbl[3] (ptr): 0x806ccf0
+		itemTbl[4] (ptr): 0x806d050
+		itemTbl[5] (ptr): 0x806d4c0
+	iOwnTbl (ptr): 0x806dd10
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7e3bf88
+		_print (func ptr): 0xb7e3c057
+		_copy (func ptr): 0xb7e3c244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7e3b81d
+	_construct (func ptr): 0xb7e3bde9
+	_build (func ptr): 0xb7e3c615
+	_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: 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): 0xb7e3c783
+	_getVariableCount (func ptr): 0xb7e3c88a
+	_getVariableIndex (func ptr): 0xb7e3ca1e
+	_getValueIndex (func ptr): 0xb7e3cbda
+	_getValueCount (func ptr): 0xb7e3cde4
+	_getValue (func ptr): 0xb7e3ce58
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806da00
+	indexCount: 24
+	indexTbl (ptr): 0x8063970
+		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]: 14
+		indexTbl[11]: 15
+		indexTbl[12]: 16
+		indexTbl[13]: 17
+		indexTbl[14]: 22
+		indexTbl[15]: 23
+		indexTbl[16]: 24
+		indexTbl[17]: 25
+		indexTbl[18]: 26
+		indexTbl[19]: 27
+		indexTbl[20]: 28
+		indexTbl[21]: 29
+		indexTbl[22]: 30
+		indexTbl[23]: 31
+	vcVarCountTbl (ptr): 0x80639e0
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 1
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 1
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 1
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 1
+		vcVarCountTbl[11]: 1
+		vcVarCountTbl[12]: 3
+		vcVarCountTbl[13]: 3
+		vcVarCountTbl[14]: 1
+		vcVarCountTbl[15]: 1
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 3
+		vcVarCountTbl[18]: 3
+		vcVarCountTbl[19]: 3
+		vcVarCountTbl[20]: 3
+		vcVarCountTbl[21]: 3
+		vcVarCountTbl[22]: 4
+		vcVarCountTbl[23]: 4
+	vcTbl (ptr): 0x8063a50
+		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[3][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 6
+			valIndex: 10
+		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: 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: 6
+			valIndex: 10
+		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: 3
+			valIndex: 11
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 12
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 13
+		vcTbl[18][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[18][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[18][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[20][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[20][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[20][2]:
+			varIndex: 5
+			valIndex: 2
+		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[22][3]:
+			varIndex: 6
+			valIndex: 10
+		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): 0x8063c80
+		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): 0x806de00
+				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): 0x806d390
+				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, 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, 2.00, 2.00, 2.00, 2.00, 2.00, 2.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, 3.00, 3.00, 3.00, 3.00, 3.00, 3.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, 1.00, 1.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, 5.00, 6.00, 7.00, 8.00, 9.00, 5.00, 6.00, 7.00, 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  False False False False False False True  True  False False False False False False True  True  False False False False False False 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  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  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 XXX XXX XXX XXX XXX XXX 011 011 XXX XXX XXX XXX XXX XXX 011 011 XXX XXX XXX XXX XXX XXX 011 011 000 000 000 000 000 000 
+012 012 XXX XXX XXX XXX XXX XXX 012 012 XXX XXX XXX XXX XXX XXX 012 012 XXX XXX XXX XXX XXX XXX 012 012 001 001 001 001 001 001 
+013 013 XXX XXX XXX XXX XXX XXX 013 013 XXX XXX XXX XXX XXX XXX 013 013 XXX XXX XXX XXX XXX XXX 013 013 002 002 002 002 002 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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,448 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+CompositeVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	itemCount: 6
+	itemTbl (ptr): 0x806de98
+		itemTbl[0] (ptr): 0x806b9d8
+		itemTbl[1] (ptr): 0x806c508
+		itemTbl[2] (ptr): 0x806c998
+		itemTbl[3] (ptr): 0x806ccf8
+		itemTbl[4] (ptr): 0x806d278
+		itemTbl[5] (ptr): 0x8063490
+	iOwnTbl (ptr): 0x806e378
+		iOwnTbl[0]: True
+		iOwnTbl[1]: True
+		iOwnTbl[2]: True
+		iOwnTbl[3]: True
+		iOwnTbl[4]: True
+		iOwnTbl[5]: True
+	_size: 8
+	_delta: 8
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 204
+		_deleteSelf: Yes
+		type: CompositeVC
+		_delete (func ptr): 0xb7e72f88
+		_print (func ptr): 0xb7e73057
+		_copy (func ptr): 0xb7e73244
+	name: CompositeVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7e7281d
+	_construct (func ptr): 0xb7e72de9
+	_build (func ptr): 0xb7e73615
+	_initialise (func ptr): 0xb7e70de2
+	_execute (func ptr): 0xb7e70ea6
+	_destroy (func ptr): 0xb7e70ed6
+	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): 0xb7e73783
+	_getVariableCount (func ptr): 0xb7e7388a
+	_getVariableIndex (func ptr): 0xb7e73a1e
+	_getValueIndex (func ptr): 0xb7e73bda
+	_getValueCount (func ptr): 0xb7e73de4
+	_getValue (func ptr): 0xb7e73e58
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x8063980
+	indexCount: 28
+	indexTbl (ptr): 0x8063b60
+		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]: 11
+		indexTbl[11]: 13
+		indexTbl[12]: 14
+		indexTbl[13]: 15
+		indexTbl[14]: 16
+		indexTbl[15]: 17
+		indexTbl[16]: 19
+		indexTbl[17]: 21
+		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): 0x8063be0
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 1
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 1
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 1
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 3
+		vcVarCountTbl[9]: 3
+		vcVarCountTbl[10]: 3
+		vcVarCountTbl[11]: 3
+		vcVarCountTbl[12]: 1
+		vcVarCountTbl[13]: 4
+		vcVarCountTbl[14]: 3
+		vcVarCountTbl[15]: 3
+		vcVarCountTbl[16]: 3
+		vcVarCountTbl[17]: 3
+		vcVarCountTbl[18]: 1
+		vcVarCountTbl[19]: 4
+		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): 0x8063c60
+		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[3][0]:
+			varIndex: 6
+			valIndex: 3
+		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: 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[7][0]:
+			varIndex: 6
+			valIndex: 10
+		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: 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: 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[12][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[13][3]:
+			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: 7
+		vcTbl[16][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[16][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[17][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[17][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[17][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[18][0]:
+			varIndex: 6
+			valIndex: 10
+		vcTbl[19][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[19][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[19][2]:
+			varIndex: 5
+			valIndex: 9
+		vcTbl[19][3]:
+			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: 0
+		vcTbl[22][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[22][2]:
+			varIndex: 5
+			valIndex: 2
+		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: 0
+		vcTbl[24][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[24][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[25][0]:
+			varIndex: 3
+			valIndex: 7
+		vcTbl[25][1]:
+			varIndex: 4
+			valIndex: 8
+		vcTbl[25][2]:
+			varIndex: 5
+			valIndex: 9
+		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: 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
+	valueCount: 14
+	valueTbl (ptr): 0x8063f78
+		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): 0x806c868
+				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): 0x806e068
+				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, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 2.00, 2.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 2.00, 2.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 2.00, 2.00, 2.00, 30.00, 2.00, 30.00, 2.00, 30.00
+var[4]: 3.00, 3.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 3.00, 3.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 3.00, 3.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 3.00, 3.00, 3.00, 30.00, 3.00, 30.00, 3.00, 30.00
+var[5]: 1.00, 1.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 1.00, 1.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 1.00, 1.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 1.00, 1.00, 1.00, 30.00, 1.00, 30.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, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 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  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  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 XXX 007 XXX 007 XXX 007 011 011 XXX 007 XXX 007 XXX 007 011 011 XXX 007 XXX 007 XXX 007 011 011 000 007 000 007 000 007 
+012 012 XXX 008 XXX 008 XXX 008 012 012 XXX 008 XXX 008 XXX 008 012 012 XXX 008 XXX 008 XXX 008 012 012 001 008 001 008 001 008 
+013 013 XXX 009 XXX 009 XXX 009 013 013 XXX 009 XXX 009 XXX 009 013 013 XXX 009 XXX 009 XXX 009 013 013 002 009 002 009 002 009 
+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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,236 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	Topology*       nTopology;
+	ElementLayout*	eLayout;
+	NodeLayout*	nLayout;
+	MeshDecomp*	decomp;
+	MeshLayout*	layout;
+	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"};
+	
+	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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	io_handler = XML_IO_Handler_New();
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/wallVC.xml", dictionary);
+	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(4));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool(True));
+
+	extensionMgr_Register = ExtensionManager_Register_New();
+	
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	mesh = Mesh_New( "Mesh", layout, 0, 0, extensionMgr_Register, dictionary );
+	
+	/* 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, decomp->nodeLocalCount, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &decomp->nodeLocalCount, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, decomp->nodeLocalCount*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &decomp->nodeLocalCount, (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 );
+		Build( vc, 0, False );
+		CompositeVC_Add(cvc, vc, True);
+	}
+	
+	Build( cvc, 0, False );
+	
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*decomp->nodeLocalCount);
+	memset(array[6], 0, sizeof(double)*decomp->nodeLocalCount*5);
+	VariableCondition_Apply(cvc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		Print(cvc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2lf", j, array[j][0]);
+			for (k = 1; k < decomp->nodeLocalCount; k++)
+				printf(", %.2lf", array[j][k]);
+		}
+		printf("\nvar[7]: %.2lf", array[6][0]);
+		for (j = 1; j < decomp->nodeLocalCount*5; j++)
+			printf(", %.2lf", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < decomp->nodeLocalCount; k++)
+				printf("%s ", VariableCondition_IsCondition(cvc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < decomp->nodeLocalCount; 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(layout);
+	Stg_Class_Delete(decomp);
+	Stg_Class_Delete(nLayout);
+	Stg_Class_Delete(eLayout);
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,848 @@
+StGermain Framework revision 3819. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x8065288
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d18
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8071088
+		_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): 0x8062718
+VariableCondition (ptr): 0x8065288
+Stg_Component (ptr): 0x8065288
+Stg_Object (ptr): 0x8065288
+	Stg_Class (ptr): 0x8065288
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070eb8
+	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): 0x8071088
+		_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): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070fa0
+	indexCount: 1
+	indexTbl (ptr): 0x8068370
+		indexTbl[0]: 25
+	vcVarCountTbl (ptr): 0x8066ee0
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x806c4b0
+		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): 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, 2.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, 3.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, 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False 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 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX 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 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d4b
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8071088
+		_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): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x80709d8
+	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): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d61
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8071088
+		_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): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 1
+	indexTbl (ptr): 0x8068370
+		indexTbl[0]: 31
+	vcVarCountTbl (ptr): 0x80683a0
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x80708f0
+		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): 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, 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, 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, 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False 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  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX 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 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d78
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x80705e8
+		_entryTbl[0]:
+			varName (ptr): 0x8067598
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 1
+	valueTbl (ptr): 0x8063a50
+		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): 0x806c500
+		_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): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 1
+	indexTbl (ptr): 0x8068370
+		indexTbl[0]: 1
+	vcVarCountTbl (ptr): 0x8066ee0
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x80704d8
+		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): 0x8071088
+		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, 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
+var[4]: 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
+var[5]: 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
+var[6]: 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False 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 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049da9
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806b308
+		_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): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8071088
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 4
+	valueTbl (ptr): 0x8070c98
+		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): 0x8070dc8
+		_entryTbl[0]:
+			varName (ptr): 0x80682c8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062718
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7f0bbed
+		_print (func ptr): 0xb7f0bc33
+		_copy (func ptr): 0xb7f0c228
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0ae38
+	_construct (func ptr): 0xb7f0c43d
+	_build (func ptr): 0xb7f0c3fb
+	_initialise (func ptr): 0xb7e0a502
+	_execute (func ptr): 0xb7e0a5c9
+	_destroy (func ptr): 0xb7e0a5f9
+	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): 0xb7f0c48c
+	_getVariableCount (func ptr): 0xb7f0caaf
+	_getVariableIndex (func ptr): 0xb7f0cac6
+	_getValueIndex (func ptr): 0xb7f0cba1
+	_getValueCount (func ptr): 0xb7f0cba9
+	_getValue (func ptr): 0xb7f0cbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 1
+	indexTbl (ptr): 0x8068370
+		indexTbl[0]: 7
+	vcVarCountTbl (ptr): 0x80683a0
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x8063a50
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x8068f40
+		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, 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False 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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,848 @@
+StGermain Framework revision 3819. Copyright (C) 2003-2005 VPAC.
+Testing for CornerVC_BottomLeftFront
+CornerVC (ptr): 0x80652b0
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d18
+		_dictionaryEntryName: CornerVC_BottomLeftFront
+	_corner: BottomLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8071088
+		_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): 0x8062710
+VariableCondition (ptr): 0x80652b0
+Stg_Component (ptr): 0x80652b0
+Stg_Object (ptr): 0x80652b0
+	Stg_Class (ptr): 0x80652b0
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_BottomLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070eb8
+	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): 0x8071088
+		_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): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_BottomRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070fa0
+	indexCount: 1
+	indexTbl (ptr): 0x80683a0
+		indexTbl[0]: 25
+	vcVarCountTbl (ptr): 0x8068370
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x806c4b0
+		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): 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, 2.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, 3.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, 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False 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 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX 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 
+
+Testing for CornerVC_TopLeftFront
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d4b
+		_dictionaryEntryName: CornerVC_TopLeftFront
+	_corner: TopLeftFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8071088
+		_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): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_TopLeftFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x80709d8
+	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): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d61
+		_dictionaryEntryName: CornerVC_TopRightFront
+	_corner: TopRightFront
+	_entryCount: 3
+	_entryTbl (ptr): 0x8071088
+		_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): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_TopRightFrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 1
+	indexTbl (ptr): 0x80683a0
+		indexTbl[0]: 31
+	vcVarCountTbl (ptr): 0x8068a60
+		vcVarCountTbl[0]: 3
+	vcTbl (ptr): 0x80708f0
+		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): 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, 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, 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, 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False 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  
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX 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 
+
+Testing for CornerVC_BottomLeftBack
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049d78
+		_dictionaryEntryName: CornerVC_BottomLeftBack
+	_corner: BottomLeftBack
+	_entryCount: 1
+	_entryTbl (ptr): 0x80705e8
+		_entryTbl[0]:
+			varName (ptr): 0x8067598
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_BottomLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 1
+	valueTbl (ptr): 0x8063a78
+		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): 0x806c500
+		_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): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_BottomRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 1
+	indexTbl (ptr): 0x80683a0
+		indexTbl[0]: 1
+	vcVarCountTbl (ptr): 0x8068370
+		vcVarCountTbl[0]: 4
+	vcTbl (ptr): 0x80704d8
+		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): 0x8071088
+		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, 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
+var[4]: 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
+var[5]: 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
+var[6]: 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False 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 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 
+
+Testing for CornerVC_TopLeftBack
+CornerVC (ptr): 0x806b1c8
+	dictionary (ptr): 0x805e990
+	_dictionaryEntryName (ptr): 0x8049da9
+		_dictionaryEntryName: CornerVC_TopLeftBack
+	_corner: TopLeftBack
+	_entryCount: 4
+	_entryTbl (ptr): 0x806b308
+		_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): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_TopLeftBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8071088
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 4
+	valueTbl (ptr): 0x8070c98
+		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): 0x8070dc8
+		_entryTbl[0]:
+			varName (ptr): 0x80682c8
+				varName: temp
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+	_mesh (ptr): 0x8062710
+VariableCondition (ptr): 0x806b1c8
+Stg_Component (ptr): 0x806b1c8
+Stg_Object (ptr): 0x806b1c8
+	Stg_Class (ptr): 0x806b1c8
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: CornerVC
+		_delete (func ptr): 0xb7eebbed
+		_print (func ptr): 0xb7eebc33
+		_copy (func ptr): 0xb7eec228
+	name: CornerVC_TopRightBackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7eeae38
+	_construct (func ptr): 0xb7eec43d
+	_build (func ptr): 0xb7eec3fb
+	_initialise (func ptr): 0xb7dea502
+	_execute (func ptr): 0xb7dea5c9
+	_destroy (func ptr): 0xb7dea5f9
+	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): 0xb7eec48c
+	_getVariableCount (func ptr): 0xb7eecaaf
+	_getVariableIndex (func ptr): 0xb7eecac6
+	_getValueIndex (func ptr): 0xb7eecba1
+	_getValueCount (func ptr): 0xb7eecba9
+	_getValue (func ptr): 0xb7eecbc0
+	variable_Register (ptr): 0x8071040
+	conFunc_Register (ptr): 0x805b658
+	_set (ptr): 0x8070c98
+	indexCount: 1
+	indexTbl (ptr): 0x80683a0
+		indexTbl[0]: 7
+	vcVarCountTbl (ptr): 0x8068a60
+		vcVarCountTbl[0]: 1
+	vcTbl (ptr): 0x8063a78
+		vcTbl[0][0]:
+			varIndex: 6
+			valIndex: 0
+	valueCount: 1
+	valueTbl (ptr): 0x8068f40
+		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, 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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False 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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,243 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm                    CommWorld;
+	int                         rank;
+	int                         procCount;
+	int                         procToWatch;
+	Stream*                     stream;
+	
+	Dictionary*                 dictionary;
+	XML_IO_Handler*             io_handler;
+	
+	Topology*                   nTopology;
+	ElementLayout*              eLayout;
+	NodeLayout*                 nLayout;
+	MeshDecomp*                 decomp;
+	MeshLayout*                 layout;
+	Mesh*                       mesh;
+	
+	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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/cornerVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+	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(4));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool(True));
+
+	extensionMgr_Register = ExtensionManager_Register_New();	
+	
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	mesh = Mesh_New( "Mesh", layout, 0, 0, extensionMgr_Register, dictionary );
+	
+	/* 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, 
+										decomp->nodeLocalCount, 
+										"array[i]" );
+		
+		var[i] =   Variable_NewScalar(  varName[i], 
+										Variable_DataType_Double, 
+										&decomp->nodeLocalCount, 
+										(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);
+		Build( vc, 0, False );
+		for (j = 0; j < 7; j++) {
+			memset(array[j], 0, sizeof(double)* decomp->nodeLocalCount );
+		}
+		VariableCondition_Apply(vc, NULL);
+		
+		if (rank == procToWatch)
+		{
+			printf("Testing for %s\n", vcKey[i]);
+			Print(vc, stream);
+			printf("\n");
+			for (j = 0; j < 7; j++)
+			{
+				printf("\nvar[%u]: %.2lf", j, array[j][0]);
+				for (k = 1; k < decomp->nodeLocalCount; k++)
+					printf(", %.2lf", array[j][k]);
+			}
+
+			printf("\n\n");
+			
+			for (j = 0; j < 6; j++)
+			{
+				for (k = 0; k < decomp->nodeLocalCount; k++)
+					printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+				printf("\n");
+			}
+			printf("\n");
+			
+			for (j = 0; j < 6; j++)
+			{
+				for (k = 0; k < decomp->nodeLocalCount; 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(layout);
+	Stg_Class_Delete(decomp);
+	Stg_Class_Delete(nLayout);
+	Stg_Class_Delete(eLayout);
+	Stg_Class_Delete(nTopology);
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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, (void**)&dummyPtr, 0 );
+			Variable_Register_Add(variableRegister, var[i]);
+		}
+
+		/* Simple test */
+		dof = DofLayout_New( "dofLayout", variableRegister, 27 );
+		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 );
+
+		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]);
+	}
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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, 
+				(void**)&(varArrays[var_I]), variableRegister );
+			Build( var[var_I], 0, False );	
+			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 );
+		for (ii = 0; ii < arraySize; ii++) {
+			for (var_I = 0; var_I < 6; var_I++) {
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+			}
+		}	
+		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] );
+		}
+	}
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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, 
+				(void**)&(varArrays[var_I]), variableRegister );
+			Build( var[var_I], 0, False );	
+			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 );
+		for (ii = 0; ii < arraySize; ii++)
+			for (var_I = 0; var_I < 6; var_I++)
+				DofLayout_AddDof_ByVarName(dof, varName[var_I], ii);
+
+		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 );
+		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);
+
+		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 );
+		destDof = DofLayout_New( "dofLayout3", variableRegister, arraySize );
+		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);
+			}	
+		}		
+
+		Build(dof, NULL, False);
+		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] );
+		}
+	}
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testEmbeddedSurface.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testEmbeddedSurface.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testEmbeddedSurface.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testEmbeddedSurface.c 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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, "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);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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"
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3884 2006-10-26 05:26:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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 );
+	}	
+
+	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);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshCoarsener_Hexa " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshCoarsener_Hexa " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshCoarsener_Hexa " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1729 @@
+StGermain Framework revision 0. 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 #: 8, Diagonal Node #: 49, (49) 
+Element #: 0, Current Node #: 7, Diagonal Node #: 50, (50) 
+Element #: 0, Current Node #: 49, Diagonal Node #: 8, (8) 
+Element #: 0, Current Node #: 50, Diagonal Node #: 7, (7) 
+Element #: 0, Current Node #: 57, Diagonal Node #: 0, (0) 
+Element #: 0, Current Node #: 56, Diagonal Node #: 1, (1) 
+Element #: 1, Current Node #: 1, Diagonal Node #: 58, (58) 
+Element #: 1, Current Node #: 2, Diagonal Node #: 57, (57) 
+Element #: 1, Current Node #: 9, Diagonal Node #: 50, (50) 
+Element #: 1, Current Node #: 8, Diagonal Node #: 51, (51) 
+Element #: 1, Current Node #: 50, Diagonal Node #: 9, (9) 
+Element #: 1, Current Node #: 51, Diagonal Node #: 8, (8) 
+Element #: 1, Current Node #: 58, Diagonal Node #: 1, (1) 
+Element #: 1, Current Node #: 57, Diagonal Node #: 2, (2) 
+Element #: 2, Current Node #: 2, Diagonal Node #: 59, (59) 
+Element #: 2, Current Node #: 3, Diagonal Node #: 58, (58) 
+Element #: 2, Current Node #: 10, Diagonal Node #: 51, (51) 
+Element #: 2, Current Node #: 9, Diagonal Node #: 52, (52) 
+Element #: 2, Current Node #: 51, Diagonal Node #: 10, (10) 
+Element #: 2, Current Node #: 52, Diagonal Node #: 9, (9) 
+Element #: 2, Current Node #: 59, Diagonal Node #: 2, (2) 
+Element #: 2, Current Node #: 58, Diagonal Node #: 3, (3) 
+Element #: 3, Current Node #: 3, Diagonal Node #: 60, (60) 
+Element #: 3, Current Node #: 4, Diagonal Node #: 59, (59) 
+Element #: 3, Current Node #: 11, Diagonal Node #: 52, (52) 
+Element #: 3, Current Node #: 10, Diagonal Node #: 53, (53) 
+Element #: 3, Current Node #: 52, Diagonal Node #: 11, (11) 
+Element #: 3, Current Node #: 53, Diagonal Node #: 10, (10) 
+Element #: 3, Current Node #: 60, Diagonal Node #: 3, (3) 
+Element #: 3, Current Node #: 59, Diagonal Node #: 4, (4) 
+Element #: 4, Current Node #: 4, Diagonal Node #: 61, (61) 
+Element #: 4, Current Node #: 5, Diagonal Node #: 60, (60) 
+Element #: 4, Current Node #: 12, Diagonal Node #: 53, (53) 
+Element #: 4, Current Node #: 11, Diagonal Node #: 54, (54) 
+Element #: 4, Current Node #: 53, Diagonal Node #: 12, (12) 
+Element #: 4, Current Node #: 54, Diagonal Node #: 11, (11) 
+Element #: 4, Current Node #: 61, Diagonal Node #: 4, (4) 
+Element #: 4, Current Node #: 60, Diagonal Node #: 5, (5) 
+Element #: 5, Current Node #: 5, Diagonal Node #: 62, (62) 
+Element #: 5, Current Node #: 6, Diagonal Node #: 61, (61) 
+Element #: 5, Current Node #: 13, Diagonal Node #: 54, (54) 
+Element #: 5, Current Node #: 12, Diagonal Node #: 55, (55) 
+Element #: 5, Current Node #: 54, Diagonal Node #: 13, (13) 
+Element #: 5, Current Node #: 55, Diagonal Node #: 12, (12) 
+Element #: 5, Current Node #: 62, Diagonal Node #: 5, (5) 
+Element #: 5, Current Node #: 61, Diagonal Node #: 6, (6) 
+Element #: 6, Current Node #: 7, Diagonal Node #: 64, (64) 
+Element #: 6, Current Node #: 8, Diagonal Node #: 63, (63) 
+Element #: 6, Current Node #: 15, Diagonal Node #: 56, (56) 
+Element #: 6, Current Node #: 14, Diagonal Node #: 57, (57) 
+Element #: 6, Current Node #: 56, Diagonal Node #: 15, (15) 
+Element #: 6, Current Node #: 57, Diagonal Node #: 14, (14) 
+Element #: 6, Current Node #: 64, Diagonal Node #: 7, (7) 
+Element #: 6, Current Node #: 63, Diagonal Node #: 8, (8) 
+Element #: 7, Current Node #: 8, Diagonal Node #: 65, (65) 
+Element #: 7, Current Node #: 9, Diagonal Node #: 64, (64) 
+Element #: 7, Current Node #: 16, Diagonal Node #: 57, (57) 
+Element #: 7, Current Node #: 15, Diagonal Node #: 58, (58) 
+Element #: 7, Current Node #: 57, Diagonal Node #: 16, (16) 
+Element #: 7, Current Node #: 58, Diagonal Node #: 15, (15) 
+Element #: 7, Current Node #: 65, Diagonal Node #: 8, (8) 
+Element #: 7, Current Node #: 64, Diagonal Node #: 9, (9) 
+Element #: 8, Current Node #: 9, Diagonal Node #: 66, (66) 
+Element #: 8, Current Node #: 10, Diagonal Node #: 65, (65) 
+Element #: 8, Current Node #: 17, Diagonal Node #: 58, (58) 
+Element #: 8, Current Node #: 16, Diagonal Node #: 59, (59) 
+Element #: 8, Current Node #: 58, Diagonal Node #: 17, (17) 
+Element #: 8, Current Node #: 59, Diagonal Node #: 16, (16) 
+Element #: 8, Current Node #: 66, Diagonal Node #: 9, (9) 
+Element #: 8, Current Node #: 65, Diagonal Node #: 10, (10) 
+Element #: 9, Current Node #: 10, Diagonal Node #: 67, (67) 
+Element #: 9, Current Node #: 11, Diagonal Node #: 66, (66) 
+Element #: 9, Current Node #: 18, Diagonal Node #: 59, (59) 
+Element #: 9, Current Node #: 17, Diagonal Node #: 60, (60) 
+Element #: 9, Current Node #: 59, Diagonal Node #: 18, (18) 
+Element #: 9, Current Node #: 60, Diagonal Node #: 17, (17) 
+Element #: 9, Current Node #: 67, Diagonal Node #: 10, (10) 
+Element #: 9, Current Node #: 66, Diagonal Node #: 11, (11) 
+Element #: 10, Current Node #: 11, Diagonal Node #: 68, (68) 
+Element #: 10, Current Node #: 12, Diagonal Node #: 67, (67) 
+Element #: 10, Current Node #: 19, Diagonal Node #: 60, (60) 
+Element #: 10, Current Node #: 18, Diagonal Node #: 61, (61) 
+Element #: 10, Current Node #: 60, Diagonal Node #: 19, (19) 
+Element #: 10, Current Node #: 61, Diagonal Node #: 18, (18) 
+Element #: 10, Current Node #: 68, Diagonal Node #: 11, (11) 
+Element #: 10, Current Node #: 67, Diagonal Node #: 12, (12) 
+Element #: 11, Current Node #: 12, Diagonal Node #: 69, (69) 
+Element #: 11, Current Node #: 13, Diagonal Node #: 68, (68) 
+Element #: 11, Current Node #: 20, Diagonal Node #: 61, (61) 
+Element #: 11, Current Node #: 19, Diagonal Node #: 62, (62) 
+Element #: 11, Current Node #: 61, Diagonal Node #: 20, (20) 
+Element #: 11, Current Node #: 62, Diagonal Node #: 19, (19) 
+Element #: 11, Current Node #: 69, Diagonal Node #: 12, (12) 
+Element #: 11, Current Node #: 68, Diagonal Node #: 13, (13) 
+Element #: 12, Current Node #: 14, Diagonal Node #: 71, (71) 
+Element #: 12, Current Node #: 15, Diagonal Node #: 70, (70) 
+Element #: 12, Current Node #: 22, Diagonal Node #: 63, (63) 
+Element #: 12, Current Node #: 21, Diagonal Node #: 64, (64) 
+Element #: 12, Current Node #: 63, Diagonal Node #: 22, (22) 
+Element #: 12, Current Node #: 64, Diagonal Node #: 21, (21) 
+Element #: 12, Current Node #: 71, Diagonal Node #: 14, (14) 
+Element #: 12, Current Node #: 70, Diagonal Node #: 15, (15) 
+Element #: 13, Current Node #: 15, Diagonal Node #: 72, (72) 
+Element #: 13, Current Node #: 16, Diagonal Node #: 71, (71) 
+Element #: 13, Current Node #: 23, Diagonal Node #: 64, (64) 
+Element #: 13, Current Node #: 22, Diagonal Node #: 65, (65) 
+Element #: 13, Current Node #: 64, Diagonal Node #: 23, (23) 
+Element #: 13, Current Node #: 65, Diagonal Node #: 22, (22) 
+Element #: 13, Current Node #: 72, Diagonal Node #: 15, (15) 
+Element #: 13, Current Node #: 71, Diagonal Node #: 16, (16) 
+Element #: 14, Current Node #: 16, Diagonal Node #: 73, (73) 
+Element #: 14, Current Node #: 17, Diagonal Node #: 72, (72) 
+Element #: 14, Current Node #: 24, Diagonal Node #: 65, (65) 
+Element #: 14, Current Node #: 23, Diagonal Node #: 66, (66) 
+Element #: 14, Current Node #: 65, Diagonal Node #: 24, (24) 
+Element #: 14, Current Node #: 66, Diagonal Node #: 23, (23) 
+Element #: 14, Current Node #: 73, Diagonal Node #: 16, (16) 
+Element #: 14, Current Node #: 72, Diagonal Node #: 17, (17) 
+Element #: 15, Current Node #: 17, Diagonal Node #: 74, (74) 
+Element #: 15, Current Node #: 18, Diagonal Node #: 73, (73) 
+Element #: 15, Current Node #: 25, Diagonal Node #: 66, (66) 
+Element #: 15, Current Node #: 24, Diagonal Node #: 67, (67) 
+Element #: 15, Current Node #: 66, Diagonal Node #: 25, (25) 
+Element #: 15, Current Node #: 67, Diagonal Node #: 24, (24) 
+Element #: 15, Current Node #: 74, Diagonal Node #: 17, (17) 
+Element #: 15, Current Node #: 73, Diagonal Node #: 18, (18) 
+Element #: 16, Current Node #: 18, Diagonal Node #: 75, (75) 
+Element #: 16, Current Node #: 19, Diagonal Node #: 74, (74) 
+Element #: 16, Current Node #: 26, Diagonal Node #: 67, (67) 
+Element #: 16, Current Node #: 25, Diagonal Node #: 68, (68) 
+Element #: 16, Current Node #: 67, Diagonal Node #: 26, (26) 
+Element #: 16, Current Node #: 68, Diagonal Node #: 25, (25) 
+Element #: 16, Current Node #: 75, Diagonal Node #: 18, (18) 
+Element #: 16, Current Node #: 74, Diagonal Node #: 19, (19) 
+Element #: 17, Current Node #: 19, Diagonal Node #: 76, (76) 
+Element #: 17, Current Node #: 20, Diagonal Node #: 75, (75) 
+Element #: 17, Current Node #: 27, Diagonal Node #: 68, (68) 
+Element #: 17, Current Node #: 26, Diagonal Node #: 69, (69) 
+Element #: 17, Current Node #: 68, Diagonal Node #: 27, (27) 
+Element #: 17, Current Node #: 69, Diagonal Node #: 26, (26) 
+Element #: 17, Current Node #: 76, Diagonal Node #: 19, (19) 
+Element #: 17, Current Node #: 75, Diagonal Node #: 20, (20) 
+Element #: 18, Current Node #: 21, Diagonal Node #: 78, (78) 
+Element #: 18, Current Node #: 22, Diagonal Node #: 77, (77) 
+Element #: 18, Current Node #: 29, Diagonal Node #: 70, (70) 
+Element #: 18, Current Node #: 28, Diagonal Node #: 71, (71) 
+Element #: 18, Current Node #: 70, Diagonal Node #: 29, (29) 
+Element #: 18, Current Node #: 71, Diagonal Node #: 28, (28) 
+Element #: 18, Current Node #: 78, Diagonal Node #: 21, (21) 
+Element #: 18, Current Node #: 77, Diagonal Node #: 22, (22) 
+Element #: 19, Current Node #: 22, Diagonal Node #: 79, (79) 
+Element #: 19, Current Node #: 23, Diagonal Node #: 78, (78) 
+Element #: 19, Current Node #: 30, Diagonal Node #: 71, (71) 
+Element #: 19, Current Node #: 29, Diagonal Node #: 72, (72) 
+Element #: 19, Current Node #: 71, Diagonal Node #: 30, (30) 
+Element #: 19, Current Node #: 72, Diagonal Node #: 29, (29) 
+Element #: 19, Current Node #: 79, Diagonal Node #: 22, (22) 
+Element #: 19, Current Node #: 78, Diagonal Node #: 23, (23) 
+Element #: 20, Current Node #: 23, Diagonal Node #: 80, (80) 
+Element #: 20, Current Node #: 24, Diagonal Node #: 79, (79) 
+Element #: 20, Current Node #: 31, Diagonal Node #: 72, (72) 
+Element #: 20, Current Node #: 30, Diagonal Node #: 73, (73) 
+Element #: 20, Current Node #: 72, Diagonal Node #: 31, (31) 
+Element #: 20, Current Node #: 73, Diagonal Node #: 30, (30) 
+Element #: 20, Current Node #: 80, Diagonal Node #: 23, (23) 
+Element #: 20, Current Node #: 79, Diagonal Node #: 24, (24) 
+Element #: 21, Current Node #: 24, Diagonal Node #: 81, (81) 
+Element #: 21, Current Node #: 25, Diagonal Node #: 80, (80) 
+Element #: 21, Current Node #: 32, Diagonal Node #: 73, (73) 
+Element #: 21, Current Node #: 31, Diagonal Node #: 74, (74) 
+Element #: 21, Current Node #: 73, Diagonal Node #: 32, (32) 
+Element #: 21, Current Node #: 74, Diagonal Node #: 31, (31) 
+Element #: 21, Current Node #: 81, Diagonal Node #: 24, (24) 
+Element #: 21, Current Node #: 80, Diagonal Node #: 25, (25) 
+Element #: 22, Current Node #: 25, Diagonal Node #: 82, (82) 
+Element #: 22, Current Node #: 26, Diagonal Node #: 81, (81) 
+Element #: 22, Current Node #: 33, Diagonal Node #: 74, (74) 
+Element #: 22, Current Node #: 32, Diagonal Node #: 75, (75) 
+Element #: 22, Current Node #: 74, Diagonal Node #: 33, (33) 
+Element #: 22, Current Node #: 75, Diagonal Node #: 32, (32) 
+Element #: 22, Current Node #: 82, Diagonal Node #: 25, (25) 
+Element #: 22, Current Node #: 81, Diagonal Node #: 26, (26) 
+Element #: 23, Current Node #: 26, Diagonal Node #: 83, (83) 
+Element #: 23, Current Node #: 27, Diagonal Node #: 82, (82) 
+Element #: 23, Current Node #: 34, Diagonal Node #: 75, (75) 
+Element #: 23, Current Node #: 33, Diagonal Node #: 76, (76) 
+Element #: 23, Current Node #: 75, Diagonal Node #: 34, (34) 
+Element #: 23, Current Node #: 76, Diagonal Node #: 33, (33) 
+Element #: 23, Current Node #: 83, Diagonal Node #: 26, (26) 
+Element #: 23, Current Node #: 82, Diagonal Node #: 27, (27) 
+Element #: 24, Current Node #: 28, Diagonal Node #: 85, (85) 
+Element #: 24, Current Node #: 29, Diagonal Node #: 84, (84) 
+Element #: 24, Current Node #: 36, Diagonal Node #: 77, (77) 
+Element #: 24, Current Node #: 35, Diagonal Node #: 78, (78) 
+Element #: 24, Current Node #: 77, Diagonal Node #: 36, (36) 
+Element #: 24, Current Node #: 78, Diagonal Node #: 35, (35) 
+Element #: 24, Current Node #: 85, Diagonal Node #: 28, (28) 
+Element #: 24, Current Node #: 84, Diagonal Node #: 29, (29) 
+Element #: 25, Current Node #: 29, Diagonal Node #: 86, (86) 
+Element #: 25, Current Node #: 30, Diagonal Node #: 85, (85) 
+Element #: 25, Current Node #: 37, Diagonal Node #: 78, (78) 
+Element #: 25, Current Node #: 36, Diagonal Node #: 79, (79) 
+Element #: 25, Current Node #: 78, Diagonal Node #: 37, (37) 
+Element #: 25, Current Node #: 79, Diagonal Node #: 36, (36) 
+Element #: 25, Current Node #: 86, Diagonal Node #: 29, (29) 
+Element #: 25, Current Node #: 85, Diagonal Node #: 30, (30) 
+Element #: 26, Current Node #: 30, Diagonal Node #: 87, (87) 
+Element #: 26, Current Node #: 31, Diagonal Node #: 86, (86) 
+Element #: 26, Current Node #: 38, Diagonal Node #: 79, (79) 
+Element #: 26, Current Node #: 37, Diagonal Node #: 80, (80) 
+Element #: 26, Current Node #: 79, Diagonal Node #: 38, (38) 
+Element #: 26, Current Node #: 80, Diagonal Node #: 37, (37) 
+Element #: 26, Current Node #: 87, Diagonal Node #: 30, (30) 
+Element #: 26, Current Node #: 86, Diagonal Node #: 31, (31) 
+Element #: 27, Current Node #: 31, Diagonal Node #: 88, (88) 
+Element #: 27, Current Node #: 32, Diagonal Node #: 87, (87) 
+Element #: 27, Current Node #: 39, Diagonal Node #: 80, (80) 
+Element #: 27, Current Node #: 38, Diagonal Node #: 81, (81) 
+Element #: 27, Current Node #: 80, Diagonal Node #: 39, (39) 
+Element #: 27, Current Node #: 81, Diagonal Node #: 38, (38) 
+Element #: 27, Current Node #: 88, Diagonal Node #: 31, (31) 
+Element #: 27, Current Node #: 87, Diagonal Node #: 32, (32) 
+Element #: 28, Current Node #: 32, Diagonal Node #: 89, (89) 
+Element #: 28, Current Node #: 33, Diagonal Node #: 88, (88) 
+Element #: 28, Current Node #: 40, Diagonal Node #: 81, (81) 
+Element #: 28, Current Node #: 39, Diagonal Node #: 82, (82) 
+Element #: 28, Current Node #: 81, Diagonal Node #: 40, (40) 
+Element #: 28, Current Node #: 82, Diagonal Node #: 39, (39) 
+Element #: 28, Current Node #: 89, Diagonal Node #: 32, (32) 
+Element #: 28, Current Node #: 88, Diagonal Node #: 33, (33) 
+Element #: 29, Current Node #: 33, Diagonal Node #: 90, (90) 
+Element #: 29, Current Node #: 34, Diagonal Node #: 89, (89) 
+Element #: 29, Current Node #: 41, Diagonal Node #: 82, (82) 
+Element #: 29, Current Node #: 40, Diagonal Node #: 83, (83) 
+Element #: 29, Current Node #: 82, Diagonal Node #: 41, (41) 
+Element #: 29, Current Node #: 83, Diagonal Node #: 40, (40) 
+Element #: 29, Current Node #: 90, Diagonal Node #: 33, (33) 
+Element #: 29, Current Node #: 89, Diagonal Node #: 34, (34) 
+Element #: 30, Current Node #: 35, Diagonal Node #: 92, (92) 
+Element #: 30, Current Node #: 36, Diagonal Node #: 91, (91) 
+Element #: 30, Current Node #: 43, Diagonal Node #: 84, (84) 
+Element #: 30, Current Node #: 42, Diagonal Node #: 85, (85) 
+Element #: 30, Current Node #: 84, Diagonal Node #: 43, (43) 
+Element #: 30, Current Node #: 85, Diagonal Node #: 42, (42) 
+Element #: 30, Current Node #: 92, Diagonal Node #: 35, (35) 
+Element #: 30, Current Node #: 91, Diagonal Node #: 36, (36) 
+Element #: 31, Current Node #: 36, Diagonal Node #: 93, (93) 
+Element #: 31, Current Node #: 37, Diagonal Node #: 92, (92) 
+Element #: 31, Current Node #: 44, Diagonal Node #: 85, (85) 
+Element #: 31, Current Node #: 43, Diagonal Node #: 86, (86) 
+Element #: 31, Current Node #: 85, Diagonal Node #: 44, (44) 
+Element #: 31, Current Node #: 86, Diagonal Node #: 43, (43) 
+Element #: 31, Current Node #: 93, Diagonal Node #: 36, (36) 
+Element #: 31, Current Node #: 92, Diagonal Node #: 37, (37) 
+Element #: 32, Current Node #: 37, Diagonal Node #: 94, (94) 
+Element #: 32, Current Node #: 38, Diagonal Node #: 93, (93) 
+Element #: 32, Current Node #: 45, Diagonal Node #: 86, (86) 
+Element #: 32, Current Node #: 44, Diagonal Node #: 87, (87) 
+Element #: 32, Current Node #: 86, Diagonal Node #: 45, (45) 
+Element #: 32, Current Node #: 87, Diagonal Node #: 44, (44) 
+Element #: 32, Current Node #: 94, Diagonal Node #: 37, (37) 
+Element #: 32, Current Node #: 93, Diagonal Node #: 38, (38) 
+Element #: 33, Current Node #: 38, Diagonal Node #: 95, (95) 
+Element #: 33, Current Node #: 39, Diagonal Node #: 94, (94) 
+Element #: 33, Current Node #: 46, Diagonal Node #: 87, (87) 
+Element #: 33, Current Node #: 45, Diagonal Node #: 88, (88) 
+Element #: 33, Current Node #: 87, Diagonal Node #: 46, (46) 
+Element #: 33, Current Node #: 88, Diagonal Node #: 45, (45) 
+Element #: 33, Current Node #: 95, Diagonal Node #: 38, (38) 
+Element #: 33, Current Node #: 94, Diagonal Node #: 39, (39) 
+Element #: 34, Current Node #: 39, Diagonal Node #: 96, (96) 
+Element #: 34, Current Node #: 40, Diagonal Node #: 95, (95) 
+Element #: 34, Current Node #: 47, Diagonal Node #: 88, (88) 
+Element #: 34, Current Node #: 46, Diagonal Node #: 89, (89) 
+Element #: 34, Current Node #: 88, Diagonal Node #: 47, (47) 
+Element #: 34, Current Node #: 89, Diagonal Node #: 46, (46) 
+Element #: 34, Current Node #: 96, Diagonal Node #: 39, (39) 
+Element #: 34, Current Node #: 95, Diagonal Node #: 40, (40) 
+Element #: 35, Current Node #: 40, Diagonal Node #: 97, (97) 
+Element #: 35, Current Node #: 41, Diagonal Node #: 96, (96) 
+Element #: 35, Current Node #: 48, Diagonal Node #: 89, (89) 
+Element #: 35, Current Node #: 47, Diagonal Node #: 90, (90) 
+Element #: 35, Current Node #: 89, Diagonal Node #: 48, (48) 
+Element #: 35, Current Node #: 90, Diagonal Node #: 47, (47) 
+Element #: 35, Current Node #: 97, Diagonal Node #: 40, (40) 
+Element #: 35, Current Node #: 96, Diagonal Node #: 41, (41) 
+Element #: 36, Current Node #: 49, Diagonal Node #: 106, (106) 
+Element #: 36, Current Node #: 50, Diagonal Node #: 105, (105) 
+Element #: 36, Current Node #: 57, Diagonal Node #: 98, (98) 
+Element #: 36, Current Node #: 56, Diagonal Node #: 99, (99) 
+Element #: 36, Current Node #: 98, Diagonal Node #: 57, (57) 
+Element #: 36, Current Node #: 99, Diagonal Node #: 56, (56) 
+Element #: 36, Current Node #: 106, Diagonal Node #: 49, (49) 
+Element #: 36, Current Node #: 105, Diagonal Node #: 50, (50) 
+Element #: 37, Current Node #: 50, Diagonal Node #: 107, (107) 
+Element #: 37, Current Node #: 51, Diagonal Node #: 106, (106) 
+Element #: 37, Current Node #: 58, Diagonal Node #: 99, (99) 
+Element #: 37, Current Node #: 57, Diagonal Node #: 100, (100) 
+Element #: 37, Current Node #: 99, Diagonal Node #: 58, (58) 
+Element #: 37, Current Node #: 100, Diagonal Node #: 57, (57) 
+Element #: 37, Current Node #: 107, Diagonal Node #: 50, (50) 
+Element #: 37, Current Node #: 106, Diagonal Node #: 51, (51) 
+Element #: 38, Current Node #: 51, Diagonal Node #: 108, (108) 
+Element #: 38, Current Node #: 52, Diagonal Node #: 107, (107) 
+Element #: 38, Current Node #: 59, Diagonal Node #: 100, (100) 
+Element #: 38, Current Node #: 58, Diagonal Node #: 101, (101) 
+Element #: 38, Current Node #: 100, Diagonal Node #: 59, (59) 
+Element #: 38, Current Node #: 101, Diagonal Node #: 58, (58) 
+Element #: 38, Current Node #: 108, Diagonal Node #: 51, (51) 
+Element #: 38, Current Node #: 107, Diagonal Node #: 52, (52) 
+Element #: 39, Current Node #: 52, Diagonal Node #: 109, (109) 
+Element #: 39, Current Node #: 53, Diagonal Node #: 108, (108) 
+Element #: 39, Current Node #: 60, Diagonal Node #: 101, (101) 
+Element #: 39, Current Node #: 59, Diagonal Node #: 102, (102) 
+Element #: 39, Current Node #: 101, Diagonal Node #: 60, (60) 
+Element #: 39, Current Node #: 102, Diagonal Node #: 59, (59) 
+Element #: 39, Current Node #: 109, Diagonal Node #: 52, (52) 
+Element #: 39, Current Node #: 108, Diagonal Node #: 53, (53) 
+Element #: 40, Current Node #: 53, Diagonal Node #: 110, (110) 
+Element #: 40, Current Node #: 54, Diagonal Node #: 109, (109) 
+Element #: 40, Current Node #: 61, Diagonal Node #: 102, (102) 
+Element #: 40, Current Node #: 60, Diagonal Node #: 103, (103) 
+Element #: 40, Current Node #: 102, Diagonal Node #: 61, (61) 
+Element #: 40, Current Node #: 103, Diagonal Node #: 60, (60) 
+Element #: 40, Current Node #: 110, Diagonal Node #: 53, (53) 
+Element #: 40, Current Node #: 109, Diagonal Node #: 54, (54) 
+Element #: 41, Current Node #: 54, Diagonal Node #: 111, (111) 
+Element #: 41, Current Node #: 55, Diagonal Node #: 110, (110) 
+Element #: 41, Current Node #: 62, Diagonal Node #: 103, (103) 
+Element #: 41, Current Node #: 61, Diagonal Node #: 104, (104) 
+Element #: 41, Current Node #: 103, Diagonal Node #: 62, (62) 
+Element #: 41, Current Node #: 104, Diagonal Node #: 61, (61) 
+Element #: 41, Current Node #: 111, Diagonal Node #: 54, (54) 
+Element #: 41, Current Node #: 110, Diagonal Node #: 55, (55) 
+Element #: 42, Current Node #: 56, Diagonal Node #: 113, (113) 
+Element #: 42, Current Node #: 57, Diagonal Node #: 112, (112) 
+Element #: 42, Current Node #: 64, Diagonal Node #: 105, (105) 
+Element #: 42, Current Node #: 63, Diagonal Node #: 106, (106) 
+Element #: 42, Current Node #: 105, Diagonal Node #: 64, (64) 
+Element #: 42, Current Node #: 106, Diagonal Node #: 63, (63) 
+Element #: 42, Current Node #: 113, Diagonal Node #: 56, (56) 
+Element #: 42, Current Node #: 112, Diagonal Node #: 57, (57) 
+Element #: 43, Current Node #: 57, Diagonal Node #: 114, (114) 
+Element #: 43, Current Node #: 58, Diagonal Node #: 113, (113) 
+Element #: 43, Current Node #: 65, Diagonal Node #: 106, (106) 
+Element #: 43, Current Node #: 64, Diagonal Node #: 107, (107) 
+Element #: 43, Current Node #: 106, Diagonal Node #: 65, (65) 
+Element #: 43, Current Node #: 107, Diagonal Node #: 64, (64) 
+Element #: 43, Current Node #: 114, Diagonal Node #: 57, (57) 
+Element #: 43, Current Node #: 113, Diagonal Node #: 58, (58) 
+Element #: 44, Current Node #: 58, Diagonal Node #: 115, (115) 
+Element #: 44, Current Node #: 59, Diagonal Node #: 114, (114) 
+Element #: 44, Current Node #: 66, Diagonal Node #: 107, (107) 
+Element #: 44, Current Node #: 65, Diagonal Node #: 108, (108) 
+Element #: 44, Current Node #: 107, Diagonal Node #: 66, (66) 
+Element #: 44, Current Node #: 108, Diagonal Node #: 65, (65) 
+Element #: 44, Current Node #: 115, Diagonal Node #: 58, (58) 
+Element #: 44, Current Node #: 114, Diagonal Node #: 59, (59) 
+Element #: 45, Current Node #: 59, Diagonal Node #: 116, (116) 
+Element #: 45, Current Node #: 60, Diagonal Node #: 115, (115) 
+Element #: 45, Current Node #: 67, Diagonal Node #: 108, (108) 
+Element #: 45, Current Node #: 66, Diagonal Node #: 109, (109) 
+Element #: 45, Current Node #: 108, Diagonal Node #: 67, (67) 
+Element #: 45, Current Node #: 109, Diagonal Node #: 66, (66) 
+Element #: 45, Current Node #: 116, Diagonal Node #: 59, (59) 
+Element #: 45, Current Node #: 115, Diagonal Node #: 60, (60) 
+Element #: 46, Current Node #: 60, Diagonal Node #: 117, (117) 
+Element #: 46, Current Node #: 61, Diagonal Node #: 116, (116) 
+Element #: 46, Current Node #: 68, Diagonal Node #: 109, (109) 
+Element #: 46, Current Node #: 67, Diagonal Node #: 110, (110) 
+Element #: 46, Current Node #: 109, Diagonal Node #: 68, (68) 
+Element #: 46, Current Node #: 110, Diagonal Node #: 67, (67) 
+Element #: 46, Current Node #: 117, Diagonal Node #: 60, (60) 
+Element #: 46, Current Node #: 116, Diagonal Node #: 61, (61) 
+Element #: 47, Current Node #: 61, Diagonal Node #: 118, (118) 
+Element #: 47, Current Node #: 62, Diagonal Node #: 117, (117) 
+Element #: 47, Current Node #: 69, Diagonal Node #: 110, (110) 
+Element #: 47, Current Node #: 68, Diagonal Node #: 111, (111) 
+Element #: 47, Current Node #: 110, Diagonal Node #: 69, (69) 
+Element #: 47, Current Node #: 111, Diagonal Node #: 68, (68) 
+Element #: 47, Current Node #: 118, Diagonal Node #: 61, (61) 
+Element #: 47, Current Node #: 117, Diagonal Node #: 62, (62) 
+Element #: 48, Current Node #: 63, Diagonal Node #: 120, (120) 
+Element #: 48, Current Node #: 64, Diagonal Node #: 119, (119) 
+Element #: 48, Current Node #: 71, Diagonal Node #: 112, (112) 
+Element #: 48, Current Node #: 70, Diagonal Node #: 113, (113) 
+Element #: 48, Current Node #: 112, Diagonal Node #: 71, (71) 
+Element #: 48, Current Node #: 113, Diagonal Node #: 70, (70) 
+Element #: 48, Current Node #: 120, Diagonal Node #: 63, (63) 
+Element #: 48, Current Node #: 119, Diagonal Node #: 64, (64) 
+Element #: 49, Current Node #: 64, Diagonal Node #: 121, (121) 
+Element #: 49, Current Node #: 65, Diagonal Node #: 120, (120) 
+Element #: 49, Current Node #: 72, Diagonal Node #: 113, (113) 
+Element #: 49, Current Node #: 71, Diagonal Node #: 114, (114) 
+Element #: 49, Current Node #: 113, Diagonal Node #: 72, (72) 
+Element #: 49, Current Node #: 114, Diagonal Node #: 71, (71) 
+Element #: 49, Current Node #: 121, Diagonal Node #: 64, (64) 
+Element #: 49, Current Node #: 120, Diagonal Node #: 65, (65) 
+Element #: 50, Current Node #: 65, Diagonal Node #: 122, (122) 
+Element #: 50, Current Node #: 66, Diagonal Node #: 121, (121) 
+Element #: 50, Current Node #: 73, Diagonal Node #: 114, (114) 
+Element #: 50, Current Node #: 72, Diagonal Node #: 115, (115) 
+Element #: 50, Current Node #: 114, Diagonal Node #: 73, (73) 
+Element #: 50, Current Node #: 115, Diagonal Node #: 72, (72) 
+Element #: 50, Current Node #: 122, Diagonal Node #: 65, (65) 
+Element #: 50, Current Node #: 121, Diagonal Node #: 66, (66) 
+Element #: 51, Current Node #: 66, Diagonal Node #: 123, (123) 
+Element #: 51, Current Node #: 67, Diagonal Node #: 122, (122) 
+Element #: 51, Current Node #: 74, Diagonal Node #: 115, (115) 
+Element #: 51, Current Node #: 73, Diagonal Node #: 116, (116) 
+Element #: 51, Current Node #: 115, Diagonal Node #: 74, (74) 
+Element #: 51, Current Node #: 116, Diagonal Node #: 73, (73) 
+Element #: 51, Current Node #: 123, Diagonal Node #: 66, (66) 
+Element #: 51, Current Node #: 122, Diagonal Node #: 67, (67) 
+Element #: 52, Current Node #: 67, Diagonal Node #: 124, (124) 
+Element #: 52, Current Node #: 68, Diagonal Node #: 123, (123) 
+Element #: 52, Current Node #: 75, Diagonal Node #: 116, (116) 
+Element #: 52, Current Node #: 74, Diagonal Node #: 117, (117) 
+Element #: 52, Current Node #: 116, Diagonal Node #: 75, (75) 
+Element #: 52, Current Node #: 117, Diagonal Node #: 74, (74) 
+Element #: 52, Current Node #: 124, Diagonal Node #: 67, (67) 
+Element #: 52, Current Node #: 123, Diagonal Node #: 68, (68) 
+Element #: 53, Current Node #: 68, Diagonal Node #: 125, (125) 
+Element #: 53, Current Node #: 69, Diagonal Node #: 124, (124) 
+Element #: 53, Current Node #: 76, Diagonal Node #: 117, (117) 
+Element #: 53, Current Node #: 75, Diagonal Node #: 118, (118) 
+Element #: 53, Current Node #: 117, Diagonal Node #: 76, (76) 
+Element #: 53, Current Node #: 118, Diagonal Node #: 75, (75) 
+Element #: 53, Current Node #: 125, Diagonal Node #: 68, (68) 
+Element #: 53, Current Node #: 124, Diagonal Node #: 69, (69) 
+Element #: 54, Current Node #: 70, Diagonal Node #: 127, (127) 
+Element #: 54, Current Node #: 71, Diagonal Node #: 126, (126) 
+Element #: 54, Current Node #: 78, Diagonal Node #: 119, (119) 
+Element #: 54, Current Node #: 77, Diagonal Node #: 120, (120) 
+Element #: 54, Current Node #: 119, Diagonal Node #: 78, (78) 
+Element #: 54, Current Node #: 120, Diagonal Node #: 77, (77) 
+Element #: 54, Current Node #: 127, Diagonal Node #: 70, (70) 
+Element #: 54, Current Node #: 126, Diagonal Node #: 71, (71) 
+Element #: 55, Current Node #: 71, Diagonal Node #: 128, (128) 
+Element #: 55, Current Node #: 72, Diagonal Node #: 127, (127) 
+Element #: 55, Current Node #: 79, Diagonal Node #: 120, (120) 
+Element #: 55, Current Node #: 78, Diagonal Node #: 121, (121) 
+Element #: 55, Current Node #: 120, Diagonal Node #: 79, (79) 
+Element #: 55, Current Node #: 121, Diagonal Node #: 78, (78) 
+Element #: 55, Current Node #: 128, Diagonal Node #: 71, (71) 
+Element #: 55, Current Node #: 127, Diagonal Node #: 72, (72) 
+Element #: 56, Current Node #: 72, Diagonal Node #: 129, (129) 
+Element #: 56, Current Node #: 73, Diagonal Node #: 128, (128) 
+Element #: 56, Current Node #: 80, Diagonal Node #: 121, (121) 
+Element #: 56, Current Node #: 79, Diagonal Node #: 122, (122) 
+Element #: 56, Current Node #: 121, Diagonal Node #: 80, (80) 
+Element #: 56, Current Node #: 122, Diagonal Node #: 79, (79) 
+Element #: 56, Current Node #: 129, Diagonal Node #: 72, (72) 
+Element #: 56, Current Node #: 128, Diagonal Node #: 73, (73) 
+Element #: 57, Current Node #: 73, Diagonal Node #: 130, (130) 
+Element #: 57, Current Node #: 74, Diagonal Node #: 129, (129) 
+Element #: 57, Current Node #: 81, Diagonal Node #: 122, (122) 
+Element #: 57, Current Node #: 80, Diagonal Node #: 123, (123) 
+Element #: 57, Current Node #: 122, Diagonal Node #: 81, (81) 
+Element #: 57, Current Node #: 123, Diagonal Node #: 80, (80) 
+Element #: 57, Current Node #: 130, Diagonal Node #: 73, (73) 
+Element #: 57, Current Node #: 129, Diagonal Node #: 74, (74) 
+Element #: 58, Current Node #: 74, Diagonal Node #: 131, (131) 
+Element #: 58, Current Node #: 75, Diagonal Node #: 130, (130) 
+Element #: 58, Current Node #: 82, Diagonal Node #: 123, (123) 
+Element #: 58, Current Node #: 81, Diagonal Node #: 124, (124) 
+Element #: 58, Current Node #: 123, Diagonal Node #: 82, (82) 
+Element #: 58, Current Node #: 124, Diagonal Node #: 81, (81) 
+Element #: 58, Current Node #: 131, Diagonal Node #: 74, (74) 
+Element #: 58, Current Node #: 130, Diagonal Node #: 75, (75) 
+Element #: 59, Current Node #: 75, Diagonal Node #: 132, (132) 
+Element #: 59, Current Node #: 76, Diagonal Node #: 131, (131) 
+Element #: 59, Current Node #: 83, Diagonal Node #: 124, (124) 
+Element #: 59, Current Node #: 82, Diagonal Node #: 125, (125) 
+Element #: 59, Current Node #: 124, Diagonal Node #: 83, (83) 
+Element #: 59, Current Node #: 125, Diagonal Node #: 82, (82) 
+Element #: 59, Current Node #: 132, Diagonal Node #: 75, (75) 
+Element #: 59, Current Node #: 131, Diagonal Node #: 76, (76) 
+Element #: 60, Current Node #: 77, Diagonal Node #: 134, (134) 
+Element #: 60, Current Node #: 78, Diagonal Node #: 133, (133) 
+Element #: 60, Current Node #: 85, Diagonal Node #: 126, (126) 
+Element #: 60, Current Node #: 84, Diagonal Node #: 127, (127) 
+Element #: 60, Current Node #: 126, Diagonal Node #: 85, (85) 
+Element #: 60, Current Node #: 127, Diagonal Node #: 84, (84) 
+Element #: 60, Current Node #: 134, Diagonal Node #: 77, (77) 
+Element #: 60, Current Node #: 133, Diagonal Node #: 78, (78) 
+Element #: 61, Current Node #: 78, Diagonal Node #: 135, (135) 
+Element #: 61, Current Node #: 79, Diagonal Node #: 134, (134) 
+Element #: 61, Current Node #: 86, Diagonal Node #: 127, (127) 
+Element #: 61, Current Node #: 85, Diagonal Node #: 128, (128) 
+Element #: 61, Current Node #: 127, Diagonal Node #: 86, (86) 
+Element #: 61, Current Node #: 128, Diagonal Node #: 85, (85) 
+Element #: 61, Current Node #: 135, Diagonal Node #: 78, (78) 
+Element #: 61, Current Node #: 134, Diagonal Node #: 79, (79) 
+Element #: 62, Current Node #: 79, Diagonal Node #: 136, (136) 
+Element #: 62, Current Node #: 80, Diagonal Node #: 135, (135) 
+Element #: 62, Current Node #: 87, Diagonal Node #: 128, (128) 
+Element #: 62, Current Node #: 86, Diagonal Node #: 129, (129) 
+Element #: 62, Current Node #: 128, Diagonal Node #: 87, (87) 
+Element #: 62, Current Node #: 129, Diagonal Node #: 86, (86) 
+Element #: 62, Current Node #: 136, Diagonal Node #: 79, (79) 
+Element #: 62, Current Node #: 135, Diagonal Node #: 80, (80) 
+Element #: 63, Current Node #: 80, Diagonal Node #: 137, (137) 
+Element #: 63, Current Node #: 81, Diagonal Node #: 136, (136) 
+Element #: 63, Current Node #: 88, Diagonal Node #: 129, (129) 
+Element #: 63, Current Node #: 87, Diagonal Node #: 130, (130) 
+Element #: 63, Current Node #: 129, Diagonal Node #: 88, (88) 
+Element #: 63, Current Node #: 130, Diagonal Node #: 87, (87) 
+Element #: 63, Current Node #: 137, Diagonal Node #: 80, (80) 
+Element #: 63, Current Node #: 136, Diagonal Node #: 81, (81) 
+Element #: 64, Current Node #: 81, Diagonal Node #: 138, (138) 
+Element #: 64, Current Node #: 82, Diagonal Node #: 137, (137) 
+Element #: 64, Current Node #: 89, Diagonal Node #: 130, (130) 
+Element #: 64, Current Node #: 88, Diagonal Node #: 131, (131) 
+Element #: 64, Current Node #: 130, Diagonal Node #: 89, (89) 
+Element #: 64, Current Node #: 131, Diagonal Node #: 88, (88) 
+Element #: 64, Current Node #: 138, Diagonal Node #: 81, (81) 
+Element #: 64, Current Node #: 137, Diagonal Node #: 82, (82) 
+Element #: 65, Current Node #: 82, Diagonal Node #: 139, (139) 
+Element #: 65, Current Node #: 83, Diagonal Node #: 138, (138) 
+Element #: 65, Current Node #: 90, Diagonal Node #: 131, (131) 
+Element #: 65, Current Node #: 89, Diagonal Node #: 132, (132) 
+Element #: 65, Current Node #: 131, Diagonal Node #: 90, (90) 
+Element #: 65, Current Node #: 132, Diagonal Node #: 89, (89) 
+Element #: 65, Current Node #: 139, Diagonal Node #: 82, (82) 
+Element #: 65, Current Node #: 138, Diagonal Node #: 83, (83) 
+Element #: 66, Current Node #: 84, Diagonal Node #: 141, (141) 
+Element #: 66, Current Node #: 85, Diagonal Node #: 140, (140) 
+Element #: 66, Current Node #: 92, Diagonal Node #: 133, (133) 
+Element #: 66, Current Node #: 91, Diagonal Node #: 134, (134) 
+Element #: 66, Current Node #: 133, Diagonal Node #: 92, (92) 
+Element #: 66, Current Node #: 134, Diagonal Node #: 91, (91) 
+Element #: 66, Current Node #: 141, Diagonal Node #: 84, (84) 
+Element #: 66, Current Node #: 140, Diagonal Node #: 85, (85) 
+Element #: 67, Current Node #: 85, Diagonal Node #: 142, (142) 
+Element #: 67, Current Node #: 86, Diagonal Node #: 141, (141) 
+Element #: 67, Current Node #: 93, Diagonal Node #: 134, (134) 
+Element #: 67, Current Node #: 92, Diagonal Node #: 135, (135) 
+Element #: 67, Current Node #: 134, Diagonal Node #: 93, (93) 
+Element #: 67, Current Node #: 135, Diagonal Node #: 92, (92) 
+Element #: 67, Current Node #: 142, Diagonal Node #: 85, (85) 
+Element #: 67, Current Node #: 141, Diagonal Node #: 86, (86) 
+Element #: 68, Current Node #: 86, Diagonal Node #: 143, (143) 
+Element #: 68, Current Node #: 87, Diagonal Node #: 142, (142) 
+Element #: 68, Current Node #: 94, Diagonal Node #: 135, (135) 
+Element #: 68, Current Node #: 93, Diagonal Node #: 136, (136) 
+Element #: 68, Current Node #: 135, Diagonal Node #: 94, (94) 
+Element #: 68, Current Node #: 136, Diagonal Node #: 93, (93) 
+Element #: 68, Current Node #: 143, Diagonal Node #: 86, (86) 
+Element #: 68, Current Node #: 142, Diagonal Node #: 87, (87) 
+Element #: 69, Current Node #: 87, Diagonal Node #: 144, (144) 
+Element #: 69, Current Node #: 88, Diagonal Node #: 143, (143) 
+Element #: 69, Current Node #: 95, Diagonal Node #: 136, (136) 
+Element #: 69, Current Node #: 94, Diagonal Node #: 137, (137) 
+Element #: 69, Current Node #: 136, Diagonal Node #: 95, (95) 
+Element #: 69, Current Node #: 137, Diagonal Node #: 94, (94) 
+Element #: 69, Current Node #: 144, Diagonal Node #: 87, (87) 
+Element #: 69, Current Node #: 143, Diagonal Node #: 88, (88) 
+Element #: 70, Current Node #: 88, Diagonal Node #: 145, (145) 
+Element #: 70, Current Node #: 89, Diagonal Node #: 144, (144) 
+Element #: 70, Current Node #: 96, Diagonal Node #: 137, (137) 
+Element #: 70, Current Node #: 95, Diagonal Node #: 138, (138) 
+Element #: 70, Current Node #: 137, Diagonal Node #: 96, (96) 
+Element #: 70, Current Node #: 138, Diagonal Node #: 95, (95) 
+Element #: 70, Current Node #: 145, Diagonal Node #: 88, (88) 
+Element #: 70, Current Node #: 144, Diagonal Node #: 89, (89) 
+Element #: 71, Current Node #: 89, Diagonal Node #: 146, (146) 
+Element #: 71, Current Node #: 90, Diagonal Node #: 145, (145) 
+Element #: 71, Current Node #: 97, Diagonal Node #: 138, (138) 
+Element #: 71, Current Node #: 96, Diagonal Node #: 139, (139) 
+Element #: 71, Current Node #: 138, Diagonal Node #: 97, (97) 
+Element #: 71, Current Node #: 139, Diagonal Node #: 96, (96) 
+Element #: 71, Current Node #: 146, Diagonal Node #: 89, (89) 
+Element #: 71, Current Node #: 145, Diagonal Node #: 90, (90) 
+Element #: 72, Current Node #: 98, Diagonal Node #: 155, (155) 
+Element #: 72, Current Node #: 99, Diagonal Node #: 154, (154) 
+Element #: 72, Current Node #: 106, Diagonal Node #: 147, (147) 
+Element #: 72, Current Node #: 105, Diagonal Node #: 148, (148) 
+Element #: 72, Current Node #: 147, Diagonal Node #: 106, (106) 
+Element #: 72, Current Node #: 148, Diagonal Node #: 105, (105) 
+Element #: 72, Current Node #: 155, Diagonal Node #: 98, (98) 
+Element #: 72, Current Node #: 154, Diagonal Node #: 99, (99) 
+Element #: 73, Current Node #: 99, Diagonal Node #: 156, (156) 
+Element #: 73, Current Node #: 100, Diagonal Node #: 155, (155) 
+Element #: 73, Current Node #: 107, Diagonal Node #: 148, (148) 
+Element #: 73, Current Node #: 106, Diagonal Node #: 149, (149) 
+Element #: 73, Current Node #: 148, Diagonal Node #: 107, (107) 
+Element #: 73, Current Node #: 149, Diagonal Node #: 106, (106) 
+Element #: 73, Current Node #: 156, Diagonal Node #: 99, (99) 
+Element #: 73, Current Node #: 155, Diagonal Node #: 100, (100) 
+Element #: 74, Current Node #: 100, Diagonal Node #: 157, (157) 
+Element #: 74, Current Node #: 101, Diagonal Node #: 156, (156) 
+Element #: 74, Current Node #: 108, Diagonal Node #: 149, (149) 
+Element #: 74, Current Node #: 107, Diagonal Node #: 150, (150) 
+Element #: 74, Current Node #: 149, Diagonal Node #: 108, (108) 
+Element #: 74, Current Node #: 150, Diagonal Node #: 107, (107) 
+Element #: 74, Current Node #: 157, Diagonal Node #: 100, (100) 
+Element #: 74, Current Node #: 156, Diagonal Node #: 101, (101) 
+Element #: 75, Current Node #: 101, Diagonal Node #: 158, (158) 
+Element #: 75, Current Node #: 102, Diagonal Node #: 157, (157) 
+Element #: 75, Current Node #: 109, Diagonal Node #: 150, (150) 
+Element #: 75, Current Node #: 108, Diagonal Node #: 151, (151) 
+Element #: 75, Current Node #: 150, Diagonal Node #: 109, (109) 
+Element #: 75, Current Node #: 151, Diagonal Node #: 108, (108) 
+Element #: 75, Current Node #: 158, Diagonal Node #: 101, (101) 
+Element #: 75, Current Node #: 157, Diagonal Node #: 102, (102) 
+Element #: 76, Current Node #: 102, Diagonal Node #: 159, (159) 
+Element #: 76, Current Node #: 103, Diagonal Node #: 158, (158) 
+Element #: 76, Current Node #: 110, Diagonal Node #: 151, (151) 
+Element #: 76, Current Node #: 109, Diagonal Node #: 152, (152) 
+Element #: 76, Current Node #: 151, Diagonal Node #: 110, (110) 
+Element #: 76, Current Node #: 152, Diagonal Node #: 109, (109) 
+Element #: 76, Current Node #: 159, Diagonal Node #: 102, (102) 
+Element #: 76, Current Node #: 158, Diagonal Node #: 103, (103) 
+Element #: 77, Current Node #: 103, Diagonal Node #: 160, (160) 
+Element #: 77, Current Node #: 104, Diagonal Node #: 159, (159) 
+Element #: 77, Current Node #: 111, Diagonal Node #: 152, (152) 
+Element #: 77, Current Node #: 110, Diagonal Node #: 153, (153) 
+Element #: 77, Current Node #: 152, Diagonal Node #: 111, (111) 
+Element #: 77, Current Node #: 153, Diagonal Node #: 110, (110) 
+Element #: 77, Current Node #: 160, Diagonal Node #: 103, (103) 
+Element #: 77, Current Node #: 159, Diagonal Node #: 104, (104) 
+Element #: 78, Current Node #: 105, Diagonal Node #: 162, (162) 
+Element #: 78, Current Node #: 106, Diagonal Node #: 161, (161) 
+Element #: 78, Current Node #: 113, Diagonal Node #: 154, (154) 
+Element #: 78, Current Node #: 112, Diagonal Node #: 155, (155) 
+Element #: 78, Current Node #: 154, Diagonal Node #: 113, (113) 
+Element #: 78, Current Node #: 155, Diagonal Node #: 112, (112) 
+Element #: 78, Current Node #: 162, Diagonal Node #: 105, (105) 
+Element #: 78, Current Node #: 161, Diagonal Node #: 106, (106) 
+Element #: 79, Current Node #: 106, Diagonal Node #: 163, (163) 
+Element #: 79, Current Node #: 107, Diagonal Node #: 162, (162) 
+Element #: 79, Current Node #: 114, Diagonal Node #: 155, (155) 
+Element #: 79, Current Node #: 113, Diagonal Node #: 156, (156) 
+Element #: 79, Current Node #: 155, Diagonal Node #: 114, (114) 
+Element #: 79, Current Node #: 156, Diagonal Node #: 113, (113) 
+Element #: 79, Current Node #: 163, Diagonal Node #: 106, (106) 
+Element #: 79, Current Node #: 162, Diagonal Node #: 107, (107) 
+Element #: 80, Current Node #: 107, Diagonal Node #: 164, (164) 
+Element #: 80, Current Node #: 108, Diagonal Node #: 163, (163) 
+Element #: 80, Current Node #: 115, Diagonal Node #: 156, (156) 
+Element #: 80, Current Node #: 114, Diagonal Node #: 157, (157) 
+Element #: 80, Current Node #: 156, Diagonal Node #: 115, (115) 
+Element #: 80, Current Node #: 157, Diagonal Node #: 114, (114) 
+Element #: 80, Current Node #: 164, Diagonal Node #: 107, (107) 
+Element #: 80, Current Node #: 163, Diagonal Node #: 108, (108) 
+Element #: 81, Current Node #: 108, Diagonal Node #: 165, (165) 
+Element #: 81, Current Node #: 109, Diagonal Node #: 164, (164) 
+Element #: 81, Current Node #: 116, Diagonal Node #: 157, (157) 
+Element #: 81, Current Node #: 115, Diagonal Node #: 158, (158) 
+Element #: 81, Current Node #: 157, Diagonal Node #: 116, (116) 
+Element #: 81, Current Node #: 158, Diagonal Node #: 115, (115) 
+Element #: 81, Current Node #: 165, Diagonal Node #: 108, (108) 
+Element #: 81, Current Node #: 164, Diagonal Node #: 109, (109) 
+Element #: 82, Current Node #: 109, Diagonal Node #: 166, (166) 
+Element #: 82, Current Node #: 110, Diagonal Node #: 165, (165) 
+Element #: 82, Current Node #: 117, Diagonal Node #: 158, (158) 
+Element #: 82, Current Node #: 116, Diagonal Node #: 159, (159) 
+Element #: 82, Current Node #: 158, Diagonal Node #: 117, (117) 
+Element #: 82, Current Node #: 159, Diagonal Node #: 116, (116) 
+Element #: 82, Current Node #: 166, Diagonal Node #: 109, (109) 
+Element #: 82, Current Node #: 165, Diagonal Node #: 110, (110) 
+Element #: 83, Current Node #: 110, Diagonal Node #: 167, (167) 
+Element #: 83, Current Node #: 111, Diagonal Node #: 166, (166) 
+Element #: 83, Current Node #: 118, Diagonal Node #: 159, (159) 
+Element #: 83, Current Node #: 117, Diagonal Node #: 160, (160) 
+Element #: 83, Current Node #: 159, Diagonal Node #: 118, (118) 
+Element #: 83, Current Node #: 160, Diagonal Node #: 117, (117) 
+Element #: 83, Current Node #: 167, Diagonal Node #: 110, (110) 
+Element #: 83, Current Node #: 166, Diagonal Node #: 111, (111) 
+Element #: 84, Current Node #: 112, Diagonal Node #: 169, (169) 
+Element #: 84, Current Node #: 113, Diagonal Node #: 168, (168) 
+Element #: 84, Current Node #: 120, Diagonal Node #: 161, (161) 
+Element #: 84, Current Node #: 119, Diagonal Node #: 162, (162) 
+Element #: 84, Current Node #: 161, Diagonal Node #: 120, (120) 
+Element #: 84, Current Node #: 162, Diagonal Node #: 119, (119) 
+Element #: 84, Current Node #: 169, Diagonal Node #: 112, (112) 
+Element #: 84, Current Node #: 168, Diagonal Node #: 113, (113) 
+Element #: 85, Current Node #: 113, Diagonal Node #: 170, (170) 
+Element #: 85, Current Node #: 114, Diagonal Node #: 169, (169) 
+Element #: 85, Current Node #: 121, Diagonal Node #: 162, (162) 
+Element #: 85, Current Node #: 120, Diagonal Node #: 163, (163) 
+Element #: 85, Current Node #: 162, Diagonal Node #: 121, (121) 
+Element #: 85, Current Node #: 163, Diagonal Node #: 120, (120) 
+Element #: 85, Current Node #: 170, Diagonal Node #: 113, (113) 
+Element #: 85, Current Node #: 169, Diagonal Node #: 114, (114) 
+Element #: 86, Current Node #: 114, Diagonal Node #: 171, (171) 
+Element #: 86, Current Node #: 115, Diagonal Node #: 170, (170) 
+Element #: 86, Current Node #: 122, Diagonal Node #: 163, (163) 
+Element #: 86, Current Node #: 121, Diagonal Node #: 164, (164) 
+Element #: 86, Current Node #: 163, Diagonal Node #: 122, (122) 
+Element #: 86, Current Node #: 164, Diagonal Node #: 121, (121) 
+Element #: 86, Current Node #: 171, Diagonal Node #: 114, (114) 
+Element #: 86, Current Node #: 170, Diagonal Node #: 115, (115) 
+Element #: 87, Current Node #: 115, Diagonal Node #: 172, (172) 
+Element #: 87, Current Node #: 116, Diagonal Node #: 171, (171) 
+Element #: 87, Current Node #: 123, Diagonal Node #: 164, (164) 
+Element #: 87, Current Node #: 122, Diagonal Node #: 165, (165) 
+Element #: 87, Current Node #: 164, Diagonal Node #: 123, (123) 
+Element #: 87, Current Node #: 165, Diagonal Node #: 122, (122) 
+Element #: 87, Current Node #: 172, Diagonal Node #: 115, (115) 
+Element #: 87, Current Node #: 171, Diagonal Node #: 116, (116) 
+Element #: 88, Current Node #: 116, Diagonal Node #: 173, (173) 
+Element #: 88, Current Node #: 117, Diagonal Node #: 172, (172) 
+Element #: 88, Current Node #: 124, Diagonal Node #: 165, (165) 
+Element #: 88, Current Node #: 123, Diagonal Node #: 166, (166) 
+Element #: 88, Current Node #: 165, Diagonal Node #: 124, (124) 
+Element #: 88, Current Node #: 166, Diagonal Node #: 123, (123) 
+Element #: 88, Current Node #: 173, Diagonal Node #: 116, (116) 
+Element #: 88, Current Node #: 172, Diagonal Node #: 117, (117) 
+Element #: 89, Current Node #: 117, Diagonal Node #: 174, (174) 
+Element #: 89, Current Node #: 118, Diagonal Node #: 173, (173) 
+Element #: 89, Current Node #: 125, Diagonal Node #: 166, (166) 
+Element #: 89, Current Node #: 124, Diagonal Node #: 167, (167) 
+Element #: 89, Current Node #: 166, Diagonal Node #: 125, (125) 
+Element #: 89, Current Node #: 167, Diagonal Node #: 124, (124) 
+Element #: 89, Current Node #: 174, Diagonal Node #: 117, (117) 
+Element #: 89, Current Node #: 173, Diagonal Node #: 118, (118) 
+Element #: 90, Current Node #: 119, Diagonal Node #: 176, (176) 
+Element #: 90, Current Node #: 120, Diagonal Node #: 175, (175) 
+Element #: 90, Current Node #: 127, Diagonal Node #: 168, (168) 
+Element #: 90, Current Node #: 126, Diagonal Node #: 169, (169) 
+Element #: 90, Current Node #: 168, Diagonal Node #: 127, (127) 
+Element #: 90, Current Node #: 169, Diagonal Node #: 126, (126) 
+Element #: 90, Current Node #: 176, Diagonal Node #: 119, (119) 
+Element #: 90, Current Node #: 175, Diagonal Node #: 120, (120) 
+Element #: 91, Current Node #: 120, Diagonal Node #: 177, (177) 
+Element #: 91, Current Node #: 121, Diagonal Node #: 176, (176) 
+Element #: 91, Current Node #: 128, Diagonal Node #: 169, (169) 
+Element #: 91, Current Node #: 127, Diagonal Node #: 170, (170) 
+Element #: 91, Current Node #: 169, Diagonal Node #: 128, (128) 
+Element #: 91, Current Node #: 170, Diagonal Node #: 127, (127) 
+Element #: 91, Current Node #: 177, Diagonal Node #: 120, (120) 
+Element #: 91, Current Node #: 176, Diagonal Node #: 121, (121) 
+Element #: 92, Current Node #: 121, Diagonal Node #: 178, (178) 
+Element #: 92, Current Node #: 122, Diagonal Node #: 177, (177) 
+Element #: 92, Current Node #: 129, Diagonal Node #: 170, (170) 
+Element #: 92, Current Node #: 128, Diagonal Node #: 171, (171) 
+Element #: 92, Current Node #: 170, Diagonal Node #: 129, (129) 
+Element #: 92, Current Node #: 171, Diagonal Node #: 128, (128) 
+Element #: 92, Current Node #: 178, Diagonal Node #: 121, (121) 
+Element #: 92, Current Node #: 177, Diagonal Node #: 122, (122) 
+Element #: 93, Current Node #: 122, Diagonal Node #: 179, (179) 
+Element #: 93, Current Node #: 123, Diagonal Node #: 178, (178) 
+Element #: 93, Current Node #: 130, Diagonal Node #: 171, (171) 
+Element #: 93, Current Node #: 129, Diagonal Node #: 172, (172) 
+Element #: 93, Current Node #: 171, Diagonal Node #: 130, (130) 
+Element #: 93, Current Node #: 172, Diagonal Node #: 129, (129) 
+Element #: 93, Current Node #: 179, Diagonal Node #: 122, (122) 
+Element #: 93, Current Node #: 178, Diagonal Node #: 123, (123) 
+Element #: 94, Current Node #: 123, Diagonal Node #: 180, (180) 
+Element #: 94, Current Node #: 124, Diagonal Node #: 179, (179) 
+Element #: 94, Current Node #: 131, Diagonal Node #: 172, (172) 
+Element #: 94, Current Node #: 130, Diagonal Node #: 173, (173) 
+Element #: 94, Current Node #: 172, Diagonal Node #: 131, (131) 
+Element #: 94, Current Node #: 173, Diagonal Node #: 130, (130) 
+Element #: 94, Current Node #: 180, Diagonal Node #: 123, (123) 
+Element #: 94, Current Node #: 179, Diagonal Node #: 124, (124) 
+Element #: 95, Current Node #: 124, Diagonal Node #: 181, (181) 
+Element #: 95, Current Node #: 125, Diagonal Node #: 180, (180) 
+Element #: 95, Current Node #: 132, Diagonal Node #: 173, (173) 
+Element #: 95, Current Node #: 131, Diagonal Node #: 174, (174) 
+Element #: 95, Current Node #: 173, Diagonal Node #: 132, (132) 
+Element #: 95, Current Node #: 174, Diagonal Node #: 131, (131) 
+Element #: 95, Current Node #: 181, Diagonal Node #: 124, (124) 
+Element #: 95, Current Node #: 180, Diagonal Node #: 125, (125) 
+Element #: 96, Current Node #: 126, Diagonal Node #: 183, (183) 
+Element #: 96, Current Node #: 127, Diagonal Node #: 182, (182) 
+Element #: 96, Current Node #: 134, Diagonal Node #: 175, (175) 
+Element #: 96, Current Node #: 133, Diagonal Node #: 176, (176) 
+Element #: 96, Current Node #: 175, Diagonal Node #: 134, (134) 
+Element #: 96, Current Node #: 176, Diagonal Node #: 133, (133) 
+Element #: 96, Current Node #: 183, Diagonal Node #: 126, (126) 
+Element #: 96, Current Node #: 182, Diagonal Node #: 127, (127) 
+Element #: 97, Current Node #: 127, Diagonal Node #: 184, (184) 
+Element #: 97, Current Node #: 128, Diagonal Node #: 183, (183) 
+Element #: 97, Current Node #: 135, Diagonal Node #: 176, (176) 
+Element #: 97, Current Node #: 134, Diagonal Node #: 177, (177) 
+Element #: 97, Current Node #: 176, Diagonal Node #: 135, (135) 
+Element #: 97, Current Node #: 177, Diagonal Node #: 134, (134) 
+Element #: 97, Current Node #: 184, Diagonal Node #: 127, (127) 
+Element #: 97, Current Node #: 183, Diagonal Node #: 128, (128) 
+Element #: 98, Current Node #: 128, Diagonal Node #: 185, (185) 
+Element #: 98, Current Node #: 129, Diagonal Node #: 184, (184) 
+Element #: 98, Current Node #: 136, Diagonal Node #: 177, (177) 
+Element #: 98, Current Node #: 135, Diagonal Node #: 178, (178) 
+Element #: 98, Current Node #: 177, Diagonal Node #: 136, (136) 
+Element #: 98, Current Node #: 178, Diagonal Node #: 135, (135) 
+Element #: 98, Current Node #: 185, Diagonal Node #: 128, (128) 
+Element #: 98, Current Node #: 184, Diagonal Node #: 129, (129) 
+Element #: 99, Current Node #: 129, Diagonal Node #: 186, (186) 
+Element #: 99, Current Node #: 130, Diagonal Node #: 185, (185) 
+Element #: 99, Current Node #: 137, Diagonal Node #: 178, (178) 
+Element #: 99, Current Node #: 136, Diagonal Node #: 179, (179) 
+Element #: 99, Current Node #: 178, Diagonal Node #: 137, (137) 
+Element #: 99, Current Node #: 179, Diagonal Node #: 136, (136) 
+Element #: 99, Current Node #: 186, Diagonal Node #: 129, (129) 
+Element #: 99, Current Node #: 185, Diagonal Node #: 130, (130) 
+Element #: 100, Current Node #: 130, Diagonal Node #: 187, (187) 
+Element #: 100, Current Node #: 131, Diagonal Node #: 186, (186) 
+Element #: 100, Current Node #: 138, Diagonal Node #: 179, (179) 
+Element #: 100, Current Node #: 137, Diagonal Node #: 180, (180) 
+Element #: 100, Current Node #: 179, Diagonal Node #: 138, (138) 
+Element #: 100, Current Node #: 180, Diagonal Node #: 137, (137) 
+Element #: 100, Current Node #: 187, Diagonal Node #: 130, (130) 
+Element #: 100, Current Node #: 186, Diagonal Node #: 131, (131) 
+Element #: 101, Current Node #: 131, Diagonal Node #: 188, (188) 
+Element #: 101, Current Node #: 132, Diagonal Node #: 187, (187) 
+Element #: 101, Current Node #: 139, Diagonal Node #: 180, (180) 
+Element #: 101, Current Node #: 138, Diagonal Node #: 181, (181) 
+Element #: 101, Current Node #: 180, Diagonal Node #: 139, (139) 
+Element #: 101, Current Node #: 181, Diagonal Node #: 138, (138) 
+Element #: 101, Current Node #: 188, Diagonal Node #: 131, (131) 
+Element #: 101, Current Node #: 187, Diagonal Node #: 132, (132) 
+Element #: 102, Current Node #: 133, Diagonal Node #: 190, (190) 
+Element #: 102, Current Node #: 134, Diagonal Node #: 189, (189) 
+Element #: 102, Current Node #: 141, Diagonal Node #: 182, (182) 
+Element #: 102, Current Node #: 140, Diagonal Node #: 183, (183) 
+Element #: 102, Current Node #: 182, Diagonal Node #: 141, (141) 
+Element #: 102, Current Node #: 183, Diagonal Node #: 140, (140) 
+Element #: 102, Current Node #: 190, Diagonal Node #: 133, (133) 
+Element #: 102, Current Node #: 189, Diagonal Node #: 134, (134) 
+Element #: 103, Current Node #: 134, Diagonal Node #: 191, (191) 
+Element #: 103, Current Node #: 135, Diagonal Node #: 190, (190) 
+Element #: 103, Current Node #: 142, Diagonal Node #: 183, (183) 
+Element #: 103, Current Node #: 141, Diagonal Node #: 184, (184) 
+Element #: 103, Current Node #: 183, Diagonal Node #: 142, (142) 
+Element #: 103, Current Node #: 184, Diagonal Node #: 141, (141) 
+Element #: 103, Current Node #: 191, Diagonal Node #: 134, (134) 
+Element #: 103, Current Node #: 190, Diagonal Node #: 135, (135) 
+Element #: 104, Current Node #: 135, Diagonal Node #: 192, (192) 
+Element #: 104, Current Node #: 136, Diagonal Node #: 191, (191) 
+Element #: 104, Current Node #: 143, Diagonal Node #: 184, (184) 
+Element #: 104, Current Node #: 142, Diagonal Node #: 185, (185) 
+Element #: 104, Current Node #: 184, Diagonal Node #: 143, (143) 
+Element #: 104, Current Node #: 185, Diagonal Node #: 142, (142) 
+Element #: 104, Current Node #: 192, Diagonal Node #: 135, (135) 
+Element #: 104, Current Node #: 191, Diagonal Node #: 136, (136) 
+Element #: 105, Current Node #: 136, Diagonal Node #: 193, (193) 
+Element #: 105, Current Node #: 137, Diagonal Node #: 192, (192) 
+Element #: 105, Current Node #: 144, Diagonal Node #: 185, (185) 
+Element #: 105, Current Node #: 143, Diagonal Node #: 186, (186) 
+Element #: 105, Current Node #: 185, Diagonal Node #: 144, (144) 
+Element #: 105, Current Node #: 186, Diagonal Node #: 143, (143) 
+Element #: 105, Current Node #: 193, Diagonal Node #: 136, (136) 
+Element #: 105, Current Node #: 192, Diagonal Node #: 137, (137) 
+Element #: 106, Current Node #: 137, Diagonal Node #: 194, (194) 
+Element #: 106, Current Node #: 138, Diagonal Node #: 193, (193) 
+Element #: 106, Current Node #: 145, Diagonal Node #: 186, (186) 
+Element #: 106, Current Node #: 144, Diagonal Node #: 187, (187) 
+Element #: 106, Current Node #: 186, Diagonal Node #: 145, (145) 
+Element #: 106, Current Node #: 187, Diagonal Node #: 144, (144) 
+Element #: 106, Current Node #: 194, Diagonal Node #: 137, (137) 
+Element #: 106, Current Node #: 193, Diagonal Node #: 138, (138) 
+Element #: 107, Current Node #: 138, Diagonal Node #: 195, (195) 
+Element #: 107, Current Node #: 139, Diagonal Node #: 194, (194) 
+Element #: 107, Current Node #: 146, Diagonal Node #: 187, (187) 
+Element #: 107, Current Node #: 145, Diagonal Node #: 188, (188) 
+Element #: 107, Current Node #: 187, Diagonal Node #: 146, (146) 
+Element #: 107, Current Node #: 188, Diagonal Node #: 145, (145) 
+Element #: 107, Current Node #: 195, Diagonal Node #: 138, (138) 
+Element #: 107, Current Node #: 194, Diagonal Node #: 139, (139) 
+Element #: 108, Current Node #: 147, Diagonal Node #: 204, (204) 
+Element #: 108, Current Node #: 148, Diagonal Node #: 203, (203) 
+Element #: 108, Current Node #: 155, Diagonal Node #: 196, (196) 
+Element #: 108, Current Node #: 154, Diagonal Node #: 197, (197) 
+Element #: 108, Current Node #: 196, Diagonal Node #: 155, (155) 
+Element #: 108, Current Node #: 197, Diagonal Node #: 154, (154) 
+Element #: 108, Current Node #: 204, Diagonal Node #: 147, (147) 
+Element #: 108, Current Node #: 203, Diagonal Node #: 148, (148) 
+Element #: 109, Current Node #: 148, Diagonal Node #: 205, (205) 
+Element #: 109, Current Node #: 149, Diagonal Node #: 204, (204) 
+Element #: 109, Current Node #: 156, Diagonal Node #: 197, (197) 
+Element #: 109, Current Node #: 155, Diagonal Node #: 198, (198) 
+Element #: 109, Current Node #: 197, Diagonal Node #: 156, (156) 
+Element #: 109, Current Node #: 198, Diagonal Node #: 155, (155) 
+Element #: 109, Current Node #: 205, Diagonal Node #: 148, (148) 
+Element #: 109, Current Node #: 204, Diagonal Node #: 149, (149) 
+Element #: 110, Current Node #: 149, Diagonal Node #: 206, (206) 
+Element #: 110, Current Node #: 150, Diagonal Node #: 205, (205) 
+Element #: 110, Current Node #: 157, Diagonal Node #: 198, (198) 
+Element #: 110, Current Node #: 156, Diagonal Node #: 199, (199) 
+Element #: 110, Current Node #: 198, Diagonal Node #: 157, (157) 
+Element #: 110, Current Node #: 199, Diagonal Node #: 156, (156) 
+Element #: 110, Current Node #: 206, Diagonal Node #: 149, (149) 
+Element #: 110, Current Node #: 205, Diagonal Node #: 150, (150) 
+Element #: 111, Current Node #: 150, Diagonal Node #: 207, (207) 
+Element #: 111, Current Node #: 151, Diagonal Node #: 206, (206) 
+Element #: 111, Current Node #: 158, Diagonal Node #: 199, (199) 
+Element #: 111, Current Node #: 157, Diagonal Node #: 200, (200) 
+Element #: 111, Current Node #: 199, Diagonal Node #: 158, (158) 
+Element #: 111, Current Node #: 200, Diagonal Node #: 157, (157) 
+Element #: 111, Current Node #: 207, Diagonal Node #: 150, (150) 
+Element #: 111, Current Node #: 206, Diagonal Node #: 151, (151) 
+Element #: 112, Current Node #: 151, Diagonal Node #: 208, (208) 
+Element #: 112, Current Node #: 152, Diagonal Node #: 207, (207) 
+Element #: 112, Current Node #: 159, Diagonal Node #: 200, (200) 
+Element #: 112, Current Node #: 158, Diagonal Node #: 201, (201) 
+Element #: 112, Current Node #: 200, Diagonal Node #: 159, (159) 
+Element #: 112, Current Node #: 201, Diagonal Node #: 158, (158) 
+Element #: 112, Current Node #: 208, Diagonal Node #: 151, (151) 
+Element #: 112, Current Node #: 207, Diagonal Node #: 152, (152) 
+Element #: 113, Current Node #: 152, Diagonal Node #: 209, (209) 
+Element #: 113, Current Node #: 153, Diagonal Node #: 208, (208) 
+Element #: 113, Current Node #: 160, Diagonal Node #: 201, (201) 
+Element #: 113, Current Node #: 159, Diagonal Node #: 202, (202) 
+Element #: 113, Current Node #: 201, Diagonal Node #: 160, (160) 
+Element #: 113, Current Node #: 202, Diagonal Node #: 159, (159) 
+Element #: 113, Current Node #: 209, Diagonal Node #: 152, (152) 
+Element #: 113, Current Node #: 208, Diagonal Node #: 153, (153) 
+Element #: 114, Current Node #: 154, Diagonal Node #: 211, (211) 
+Element #: 114, Current Node #: 155, Diagonal Node #: 210, (210) 
+Element #: 114, Current Node #: 162, Diagonal Node #: 203, (203) 
+Element #: 114, Current Node #: 161, Diagonal Node #: 204, (204) 
+Element #: 114, Current Node #: 203, Diagonal Node #: 162, (162) 
+Element #: 114, Current Node #: 204, Diagonal Node #: 161, (161) 
+Element #: 114, Current Node #: 211, Diagonal Node #: 154, (154) 
+Element #: 114, Current Node #: 210, Diagonal Node #: 155, (155) 
+Element #: 115, Current Node #: 155, Diagonal Node #: 212, (212) 
+Element #: 115, Current Node #: 156, Diagonal Node #: 211, (211) 
+Element #: 115, Current Node #: 163, Diagonal Node #: 204, (204) 
+Element #: 115, Current Node #: 162, Diagonal Node #: 205, (205) 
+Element #: 115, Current Node #: 204, Diagonal Node #: 163, (163) 
+Element #: 115, Current Node #: 205, Diagonal Node #: 162, (162) 
+Element #: 115, Current Node #: 212, Diagonal Node #: 155, (155) 
+Element #: 115, Current Node #: 211, Diagonal Node #: 156, (156) 
+Element #: 116, Current Node #: 156, Diagonal Node #: 213, (213) 
+Element #: 116, Current Node #: 157, Diagonal Node #: 212, (212) 
+Element #: 116, Current Node #: 164, Diagonal Node #: 205, (205) 
+Element #: 116, Current Node #: 163, Diagonal Node #: 206, (206) 
+Element #: 116, Current Node #: 205, Diagonal Node #: 164, (164) 
+Element #: 116, Current Node #: 206, Diagonal Node #: 163, (163) 
+Element #: 116, Current Node #: 213, Diagonal Node #: 156, (156) 
+Element #: 116, Current Node #: 212, Diagonal Node #: 157, (157) 
+Element #: 117, Current Node #: 157, Diagonal Node #: 214, (214) 
+Element #: 117, Current Node #: 158, Diagonal Node #: 213, (213) 
+Element #: 117, Current Node #: 165, Diagonal Node #: 206, (206) 
+Element #: 117, Current Node #: 164, Diagonal Node #: 207, (207) 
+Element #: 117, Current Node #: 206, Diagonal Node #: 165, (165) 
+Element #: 117, Current Node #: 207, Diagonal Node #: 164, (164) 
+Element #: 117, Current Node #: 214, Diagonal Node #: 157, (157) 
+Element #: 117, Current Node #: 213, Diagonal Node #: 158, (158) 
+Element #: 118, Current Node #: 158, Diagonal Node #: 215, (215) 
+Element #: 118, Current Node #: 159, Diagonal Node #: 214, (214) 
+Element #: 118, Current Node #: 166, Diagonal Node #: 207, (207) 
+Element #: 118, Current Node #: 165, Diagonal Node #: 208, (208) 
+Element #: 118, Current Node #: 207, Diagonal Node #: 166, (166) 
+Element #: 118, Current Node #: 208, Diagonal Node #: 165, (165) 
+Element #: 118, Current Node #: 215, Diagonal Node #: 158, (158) 
+Element #: 118, Current Node #: 214, Diagonal Node #: 159, (159) 
+Element #: 119, Current Node #: 159, Diagonal Node #: 216, (216) 
+Element #: 119, Current Node #: 160, Diagonal Node #: 215, (215) 
+Element #: 119, Current Node #: 167, Diagonal Node #: 208, (208) 
+Element #: 119, Current Node #: 166, Diagonal Node #: 209, (209) 
+Element #: 119, Current Node #: 208, Diagonal Node #: 167, (167) 
+Element #: 119, Current Node #: 209, Diagonal Node #: 166, (166) 
+Element #: 119, Current Node #: 216, Diagonal Node #: 159, (159) 
+Element #: 119, Current Node #: 215, Diagonal Node #: 160, (160) 
+Element #: 120, Current Node #: 161, Diagonal Node #: 218, (218) 
+Element #: 120, Current Node #: 162, Diagonal Node #: 217, (217) 
+Element #: 120, Current Node #: 169, Diagonal Node #: 210, (210) 
+Element #: 120, Current Node #: 168, Diagonal Node #: 211, (211) 
+Element #: 120, Current Node #: 210, Diagonal Node #: 169, (169) 
+Element #: 120, Current Node #: 211, Diagonal Node #: 168, (168) 
+Element #: 120, Current Node #: 218, Diagonal Node #: 161, (161) 
+Element #: 120, Current Node #: 217, Diagonal Node #: 162, (162) 
+Element #: 121, Current Node #: 162, Diagonal Node #: 219, (219) 
+Element #: 121, Current Node #: 163, Diagonal Node #: 218, (218) 
+Element #: 121, Current Node #: 170, Diagonal Node #: 211, (211) 
+Element #: 121, Current Node #: 169, Diagonal Node #: 212, (212) 
+Element #: 121, Current Node #: 211, Diagonal Node #: 170, (170) 
+Element #: 121, Current Node #: 212, Diagonal Node #: 169, (169) 
+Element #: 121, Current Node #: 219, Diagonal Node #: 162, (162) 
+Element #: 121, Current Node #: 218, Diagonal Node #: 163, (163) 
+Element #: 122, Current Node #: 163, Diagonal Node #: 220, (220) 
+Element #: 122, Current Node #: 164, Diagonal Node #: 219, (219) 
+Element #: 122, Current Node #: 171, Diagonal Node #: 212, (212) 
+Element #: 122, Current Node #: 170, Diagonal Node #: 213, (213) 
+Element #: 122, Current Node #: 212, Diagonal Node #: 171, (171) 
+Element #: 122, Current Node #: 213, Diagonal Node #: 170, (170) 
+Element #: 122, Current Node #: 220, Diagonal Node #: 163, (163) 
+Element #: 122, Current Node #: 219, Diagonal Node #: 164, (164) 
+Element #: 123, Current Node #: 164, Diagonal Node #: 221, (221) 
+Element #: 123, Current Node #: 165, Diagonal Node #: 220, (220) 
+Element #: 123, Current Node #: 172, Diagonal Node #: 213, (213) 
+Element #: 123, Current Node #: 171, Diagonal Node #: 214, (214) 
+Element #: 123, Current Node #: 213, Diagonal Node #: 172, (172) 
+Element #: 123, Current Node #: 214, Diagonal Node #: 171, (171) 
+Element #: 123, Current Node #: 221, Diagonal Node #: 164, (164) 
+Element #: 123, Current Node #: 220, Diagonal Node #: 165, (165) 
+Element #: 124, Current Node #: 165, Diagonal Node #: 222, (222) 
+Element #: 124, Current Node #: 166, Diagonal Node #: 221, (221) 
+Element #: 124, Current Node #: 173, Diagonal Node #: 214, (214) 
+Element #: 124, Current Node #: 172, Diagonal Node #: 215, (215) 
+Element #: 124, Current Node #: 214, Diagonal Node #: 173, (173) 
+Element #: 124, Current Node #: 215, Diagonal Node #: 172, (172) 
+Element #: 124, Current Node #: 222, Diagonal Node #: 165, (165) 
+Element #: 124, Current Node #: 221, Diagonal Node #: 166, (166) 
+Element #: 125, Current Node #: 166, Diagonal Node #: 223, (223) 
+Element #: 125, Current Node #: 167, Diagonal Node #: 222, (222) 
+Element #: 125, Current Node #: 174, Diagonal Node #: 215, (215) 
+Element #: 125, Current Node #: 173, Diagonal Node #: 216, (216) 
+Element #: 125, Current Node #: 215, Diagonal Node #: 174, (174) 
+Element #: 125, Current Node #: 216, Diagonal Node #: 173, (173) 
+Element #: 125, Current Node #: 223, Diagonal Node #: 166, (166) 
+Element #: 125, Current Node #: 222, Diagonal Node #: 167, (167) 
+Element #: 126, Current Node #: 168, Diagonal Node #: 225, (225) 
+Element #: 126, Current Node #: 169, Diagonal Node #: 224, (224) 
+Element #: 126, Current Node #: 176, Diagonal Node #: 217, (217) 
+Element #: 126, Current Node #: 175, Diagonal Node #: 218, (218) 
+Element #: 126, Current Node #: 217, Diagonal Node #: 176, (176) 
+Element #: 126, Current Node #: 218, Diagonal Node #: 175, (175) 
+Element #: 126, Current Node #: 225, Diagonal Node #: 168, (168) 
+Element #: 126, Current Node #: 224, Diagonal Node #: 169, (169) 
+Element #: 127, Current Node #: 169, Diagonal Node #: 226, (226) 
+Element #: 127, Current Node #: 170, Diagonal Node #: 225, (225) 
+Element #: 127, Current Node #: 177, Diagonal Node #: 218, (218) 
+Element #: 127, Current Node #: 176, Diagonal Node #: 219, (219) 
+Element #: 127, Current Node #: 218, Diagonal Node #: 177, (177) 
+Element #: 127, Current Node #: 219, Diagonal Node #: 176, (176) 
+Element #: 127, Current Node #: 226, Diagonal Node #: 169, (169) 
+Element #: 127, Current Node #: 225, Diagonal Node #: 170, (170) 
+Element #: 128, Current Node #: 170, Diagonal Node #: 227, (227) 
+Element #: 128, Current Node #: 171, Diagonal Node #: 226, (226) 
+Element #: 128, Current Node #: 178, Diagonal Node #: 219, (219) 
+Element #: 128, Current Node #: 177, Diagonal Node #: 220, (220) 
+Element #: 128, Current Node #: 219, Diagonal Node #: 178, (178) 
+Element #: 128, Current Node #: 220, Diagonal Node #: 177, (177) 
+Element #: 128, Current Node #: 227, Diagonal Node #: 170, (170) 
+Element #: 128, Current Node #: 226, Diagonal Node #: 171, (171) 
+Element #: 129, Current Node #: 171, Diagonal Node #: 228, (228) 
+Element #: 129, Current Node #: 172, Diagonal Node #: 227, (227) 
+Element #: 129, Current Node #: 179, Diagonal Node #: 220, (220) 
+Element #: 129, Current Node #: 178, Diagonal Node #: 221, (221) 
+Element #: 129, Current Node #: 220, Diagonal Node #: 179, (179) 
+Element #: 129, Current Node #: 221, Diagonal Node #: 178, (178) 
+Element #: 129, Current Node #: 228, Diagonal Node #: 171, (171) 
+Element #: 129, Current Node #: 227, Diagonal Node #: 172, (172) 
+Element #: 130, Current Node #: 172, Diagonal Node #: 229, (229) 
+Element #: 130, Current Node #: 173, Diagonal Node #: 228, (228) 
+Element #: 130, Current Node #: 180, Diagonal Node #: 221, (221) 
+Element #: 130, Current Node #: 179, Diagonal Node #: 222, (222) 
+Element #: 130, Current Node #: 221, Diagonal Node #: 180, (180) 
+Element #: 130, Current Node #: 222, Diagonal Node #: 179, (179) 
+Element #: 130, Current Node #: 229, Diagonal Node #: 172, (172) 
+Element #: 130, Current Node #: 228, Diagonal Node #: 173, (173) 
+Element #: 131, Current Node #: 173, Diagonal Node #: 230, (230) 
+Element #: 131, Current Node #: 174, Diagonal Node #: 229, (229) 
+Element #: 131, Current Node #: 181, Diagonal Node #: 222, (222) 
+Element #: 131, Current Node #: 180, Diagonal Node #: 223, (223) 
+Element #: 131, Current Node #: 222, Diagonal Node #: 181, (181) 
+Element #: 131, Current Node #: 223, Diagonal Node #: 180, (180) 
+Element #: 131, Current Node #: 230, Diagonal Node #: 173, (173) 
+Element #: 131, Current Node #: 229, Diagonal Node #: 174, (174) 
+Element #: 132, Current Node #: 175, Diagonal Node #: 232, (232) 
+Element #: 132, Current Node #: 176, Diagonal Node #: 231, (231) 
+Element #: 132, Current Node #: 183, Diagonal Node #: 224, (224) 
+Element #: 132, Current Node #: 182, Diagonal Node #: 225, (225) 
+Element #: 132, Current Node #: 224, Diagonal Node #: 183, (183) 
+Element #: 132, Current Node #: 225, Diagonal Node #: 182, (182) 
+Element #: 132, Current Node #: 232, Diagonal Node #: 175, (175) 
+Element #: 132, Current Node #: 231, Diagonal Node #: 176, (176) 
+Element #: 133, Current Node #: 176, Diagonal Node #: 233, (233) 
+Element #: 133, Current Node #: 177, Diagonal Node #: 232, (232) 
+Element #: 133, Current Node #: 184, Diagonal Node #: 225, (225) 
+Element #: 133, Current Node #: 183, Diagonal Node #: 226, (226) 
+Element #: 133, Current Node #: 225, Diagonal Node #: 184, (184) 
+Element #: 133, Current Node #: 226, Diagonal Node #: 183, (183) 
+Element #: 133, Current Node #: 233, Diagonal Node #: 176, (176) 
+Element #: 133, Current Node #: 232, Diagonal Node #: 177, (177) 
+Element #: 134, Current Node #: 177, Diagonal Node #: 234, (234) 
+Element #: 134, Current Node #: 178, Diagonal Node #: 233, (233) 
+Element #: 134, Current Node #: 185, Diagonal Node #: 226, (226) 
+Element #: 134, Current Node #: 184, Diagonal Node #: 227, (227) 
+Element #: 134, Current Node #: 226, Diagonal Node #: 185, (185) 
+Element #: 134, Current Node #: 227, Diagonal Node #: 184, (184) 
+Element #: 134, Current Node #: 234, Diagonal Node #: 177, (177) 
+Element #: 134, Current Node #: 233, Diagonal Node #: 178, (178) 
+Element #: 135, Current Node #: 178, Diagonal Node #: 235, (235) 
+Element #: 135, Current Node #: 179, Diagonal Node #: 234, (234) 
+Element #: 135, Current Node #: 186, Diagonal Node #: 227, (227) 
+Element #: 135, Current Node #: 185, Diagonal Node #: 228, (228) 
+Element #: 135, Current Node #: 227, Diagonal Node #: 186, (186) 
+Element #: 135, Current Node #: 228, Diagonal Node #: 185, (185) 
+Element #: 135, Current Node #: 235, Diagonal Node #: 178, (178) 
+Element #: 135, Current Node #: 234, Diagonal Node #: 179, (179) 
+Element #: 136, Current Node #: 179, Diagonal Node #: 236, (236) 
+Element #: 136, Current Node #: 180, Diagonal Node #: 235, (235) 
+Element #: 136, Current Node #: 187, Diagonal Node #: 228, (228) 
+Element #: 136, Current Node #: 186, Diagonal Node #: 229, (229) 
+Element #: 136, Current Node #: 228, Diagonal Node #: 187, (187) 
+Element #: 136, Current Node #: 229, Diagonal Node #: 186, (186) 
+Element #: 136, Current Node #: 236, Diagonal Node #: 179, (179) 
+Element #: 136, Current Node #: 235, Diagonal Node #: 180, (180) 
+Element #: 137, Current Node #: 180, Diagonal Node #: 237, (237) 
+Element #: 137, Current Node #: 181, Diagonal Node #: 236, (236) 
+Element #: 137, Current Node #: 188, Diagonal Node #: 229, (229) 
+Element #: 137, Current Node #: 187, Diagonal Node #: 230, (230) 
+Element #: 137, Current Node #: 229, Diagonal Node #: 188, (188) 
+Element #: 137, Current Node #: 230, Diagonal Node #: 187, (187) 
+Element #: 137, Current Node #: 237, Diagonal Node #: 180, (180) 
+Element #: 137, Current Node #: 236, Diagonal Node #: 181, (181) 
+Element #: 138, Current Node #: 182, Diagonal Node #: 239, (239) 
+Element #: 138, Current Node #: 183, Diagonal Node #: 238, (238) 
+Element #: 138, Current Node #: 190, Diagonal Node #: 231, (231) 
+Element #: 138, Current Node #: 189, Diagonal Node #: 232, (232) 
+Element #: 138, Current Node #: 231, Diagonal Node #: 190, (190) 
+Element #: 138, Current Node #: 232, Diagonal Node #: 189, (189) 
+Element #: 138, Current Node #: 239, Diagonal Node #: 182, (182) 
+Element #: 138, Current Node #: 238, Diagonal Node #: 183, (183) 
+Element #: 139, Current Node #: 183, Diagonal Node #: 240, (240) 
+Element #: 139, Current Node #: 184, Diagonal Node #: 239, (239) 
+Element #: 139, Current Node #: 191, Diagonal Node #: 232, (232) 
+Element #: 139, Current Node #: 190, Diagonal Node #: 233, (233) 
+Element #: 139, Current Node #: 232, Diagonal Node #: 191, (191) 
+Element #: 139, Current Node #: 233, Diagonal Node #: 190, (190) 
+Element #: 139, Current Node #: 240, Diagonal Node #: 183, (183) 
+Element #: 139, Current Node #: 239, Diagonal Node #: 184, (184) 
+Element #: 140, Current Node #: 184, Diagonal Node #: 241, (241) 
+Element #: 140, Current Node #: 185, Diagonal Node #: 240, (240) 
+Element #: 140, Current Node #: 192, Diagonal Node #: 233, (233) 
+Element #: 140, Current Node #: 191, Diagonal Node #: 234, (234) 
+Element #: 140, Current Node #: 233, Diagonal Node #: 192, (192) 
+Element #: 140, Current Node #: 234, Diagonal Node #: 191, (191) 
+Element #: 140, Current Node #: 241, Diagonal Node #: 184, (184) 
+Element #: 140, Current Node #: 240, Diagonal Node #: 185, (185) 
+Element #: 141, Current Node #: 185, Diagonal Node #: 242, (242) 
+Element #: 141, Current Node #: 186, Diagonal Node #: 241, (241) 
+Element #: 141, Current Node #: 193, Diagonal Node #: 234, (234) 
+Element #: 141, Current Node #: 192, Diagonal Node #: 235, (235) 
+Element #: 141, Current Node #: 234, Diagonal Node #: 193, (193) 
+Element #: 141, Current Node #: 235, Diagonal Node #: 192, (192) 
+Element #: 141, Current Node #: 242, Diagonal Node #: 185, (185) 
+Element #: 141, Current Node #: 241, Diagonal Node #: 186, (186) 
+Element #: 142, Current Node #: 186, Diagonal Node #: 243, (243) 
+Element #: 142, Current Node #: 187, Diagonal Node #: 242, (242) 
+Element #: 142, Current Node #: 194, Diagonal Node #: 235, (235) 
+Element #: 142, Current Node #: 193, Diagonal Node #: 236, (236) 
+Element #: 142, Current Node #: 235, Diagonal Node #: 194, (194) 
+Element #: 142, Current Node #: 236, Diagonal Node #: 193, (193) 
+Element #: 142, Current Node #: 243, Diagonal Node #: 186, (186) 
+Element #: 142, Current Node #: 242, Diagonal Node #: 187, (187) 
+Element #: 143, Current Node #: 187, Diagonal Node #: 244, (244) 
+Element #: 143, Current Node #: 188, Diagonal Node #: 243, (243) 
+Element #: 143, Current Node #: 195, Diagonal Node #: 236, (236) 
+Element #: 143, Current Node #: 194, Diagonal Node #: 237, (237) 
+Element #: 143, Current Node #: 236, Diagonal Node #: 195, (195) 
+Element #: 143, Current Node #: 237, Diagonal Node #: 194, (194) 
+Element #: 143, Current Node #: 244, Diagonal Node #: 187, (187) 
+Element #: 143, Current Node #: 243, Diagonal Node #: 188, (188) 
+Element #: 144, Current Node #: 196, Diagonal Node #: 253, (253) 
+Element #: 144, Current Node #: 197, Diagonal Node #: 252, (252) 
+Element #: 144, Current Node #: 204, Diagonal Node #: 245, (245) 
+Element #: 144, Current Node #: 203, Diagonal Node #: 246, (246) 
+Element #: 144, Current Node #: 245, Diagonal Node #: 204, (204) 
+Element #: 144, Current Node #: 246, Diagonal Node #: 203, (203) 
+Element #: 144, Current Node #: 253, Diagonal Node #: 196, (196) 
+Element #: 144, Current Node #: 252, Diagonal Node #: 197, (197) 
+Element #: 145, Current Node #: 197, Diagonal Node #: 254, (254) 
+Element #: 145, Current Node #: 198, Diagonal Node #: 253, (253) 
+Element #: 145, Current Node #: 205, Diagonal Node #: 246, (246) 
+Element #: 145, Current Node #: 204, Diagonal Node #: 247, (247) 
+Element #: 145, Current Node #: 246, Diagonal Node #: 205, (205) 
+Element #: 145, Current Node #: 247, Diagonal Node #: 204, (204) 
+Element #: 145, Current Node #: 254, Diagonal Node #: 197, (197) 
+Element #: 145, Current Node #: 253, Diagonal Node #: 198, (198) 
+Element #: 146, Current Node #: 198, Diagonal Node #: 255, (255) 
+Element #: 146, Current Node #: 199, Diagonal Node #: 254, (254) 
+Element #: 146, Current Node #: 206, Diagonal Node #: 247, (247) 
+Element #: 146, Current Node #: 205, Diagonal Node #: 248, (248) 
+Element #: 146, Current Node #: 247, Diagonal Node #: 206, (206) 
+Element #: 146, Current Node #: 248, Diagonal Node #: 205, (205) 
+Element #: 146, Current Node #: 255, Diagonal Node #: 198, (198) 
+Element #: 146, Current Node #: 254, Diagonal Node #: 199, (199) 
+Element #: 147, Current Node #: 199, Diagonal Node #: 256, (256) 
+Element #: 147, Current Node #: 200, Diagonal Node #: 255, (255) 
+Element #: 147, Current Node #: 207, Diagonal Node #: 248, (248) 
+Element #: 147, Current Node #: 206, Diagonal Node #: 249, (249) 
+Element #: 147, Current Node #: 248, Diagonal Node #: 207, (207) 
+Element #: 147, Current Node #: 249, Diagonal Node #: 206, (206) 
+Element #: 147, Current Node #: 256, Diagonal Node #: 199, (199) 
+Element #: 147, Current Node #: 255, Diagonal Node #: 200, (200) 
+Element #: 148, Current Node #: 200, Diagonal Node #: 257, (257) 
+Element #: 148, Current Node #: 201, Diagonal Node #: 256, (256) 
+Element #: 148, Current Node #: 208, Diagonal Node #: 249, (249) 
+Element #: 148, Current Node #: 207, Diagonal Node #: 250, (250) 
+Element #: 148, Current Node #: 249, Diagonal Node #: 208, (208) 
+Element #: 148, Current Node #: 250, Diagonal Node #: 207, (207) 
+Element #: 148, Current Node #: 257, Diagonal Node #: 200, (200) 
+Element #: 148, Current Node #: 256, Diagonal Node #: 201, (201) 
+Element #: 149, Current Node #: 201, Diagonal Node #: 258, (258) 
+Element #: 149, Current Node #: 202, Diagonal Node #: 257, (257) 
+Element #: 149, Current Node #: 209, Diagonal Node #: 250, (250) 
+Element #: 149, Current Node #: 208, Diagonal Node #: 251, (251) 
+Element #: 149, Current Node #: 250, Diagonal Node #: 209, (209) 
+Element #: 149, Current Node #: 251, Diagonal Node #: 208, (208) 
+Element #: 149, Current Node #: 258, Diagonal Node #: 201, (201) 
+Element #: 149, Current Node #: 257, Diagonal Node #: 202, (202) 
+Element #: 150, Current Node #: 203, Diagonal Node #: 260, (260) 
+Element #: 150, Current Node #: 204, Diagonal Node #: 259, (259) 
+Element #: 150, Current Node #: 211, Diagonal Node #: 252, (252) 
+Element #: 150, Current Node #: 210, Diagonal Node #: 253, (253) 
+Element #: 150, Current Node #: 252, Diagonal Node #: 211, (211) 
+Element #: 150, Current Node #: 253, Diagonal Node #: 210, (210) 
+Element #: 150, Current Node #: 260, Diagonal Node #: 203, (203) 
+Element #: 150, Current Node #: 259, Diagonal Node #: 204, (204) 
+Element #: 151, Current Node #: 204, Diagonal Node #: 261, (261) 
+Element #: 151, Current Node #: 205, Diagonal Node #: 260, (260) 
+Element #: 151, Current Node #: 212, Diagonal Node #: 253, (253) 
+Element #: 151, Current Node #: 211, Diagonal Node #: 254, (254) 
+Element #: 151, Current Node #: 253, Diagonal Node #: 212, (212) 
+Element #: 151, Current Node #: 254, Diagonal Node #: 211, (211) 
+Element #: 151, Current Node #: 261, Diagonal Node #: 204, (204) 
+Element #: 151, Current Node #: 260, Diagonal Node #: 205, (205) 
+Element #: 152, Current Node #: 205, Diagonal Node #: 262, (262) 
+Element #: 152, Current Node #: 206, Diagonal Node #: 261, (261) 
+Element #: 152, Current Node #: 213, Diagonal Node #: 254, (254) 
+Element #: 152, Current Node #: 212, Diagonal Node #: 255, (255) 
+Element #: 152, Current Node #: 254, Diagonal Node #: 213, (213) 
+Element #: 152, Current Node #: 255, Diagonal Node #: 212, (212) 
+Element #: 152, Current Node #: 262, Diagonal Node #: 205, (205) 
+Element #: 152, Current Node #: 261, Diagonal Node #: 206, (206) 
+Element #: 153, Current Node #: 206, Diagonal Node #: 263, (263) 
+Element #: 153, Current Node #: 207, Diagonal Node #: 262, (262) 
+Element #: 153, Current Node #: 214, Diagonal Node #: 255, (255) 
+Element #: 153, Current Node #: 213, Diagonal Node #: 256, (256) 
+Element #: 153, Current Node #: 255, Diagonal Node #: 214, (214) 
+Element #: 153, Current Node #: 256, Diagonal Node #: 213, (213) 
+Element #: 153, Current Node #: 263, Diagonal Node #: 206, (206) 
+Element #: 153, Current Node #: 262, Diagonal Node #: 207, (207) 
+Element #: 154, Current Node #: 207, Diagonal Node #: 264, (264) 
+Element #: 154, Current Node #: 208, Diagonal Node #: 263, (263) 
+Element #: 154, Current Node #: 215, Diagonal Node #: 256, (256) 
+Element #: 154, Current Node #: 214, Diagonal Node #: 257, (257) 
+Element #: 154, Current Node #: 256, Diagonal Node #: 215, (215) 
+Element #: 154, Current Node #: 257, Diagonal Node #: 214, (214) 
+Element #: 154, Current Node #: 264, Diagonal Node #: 207, (207) 
+Element #: 154, Current Node #: 263, Diagonal Node #: 208, (208) 
+Element #: 155, Current Node #: 208, Diagonal Node #: 265, (265) 
+Element #: 155, Current Node #: 209, Diagonal Node #: 264, (264) 
+Element #: 155, Current Node #: 216, Diagonal Node #: 257, (257) 
+Element #: 155, Current Node #: 215, Diagonal Node #: 258, (258) 
+Element #: 155, Current Node #: 257, Diagonal Node #: 216, (216) 
+Element #: 155, Current Node #: 258, Diagonal Node #: 215, (215) 
+Element #: 155, Current Node #: 265, Diagonal Node #: 208, (208) 
+Element #: 155, Current Node #: 264, Diagonal Node #: 209, (209) 
+Element #: 156, Current Node #: 210, Diagonal Node #: 267, (267) 
+Element #: 156, Current Node #: 211, Diagonal Node #: 266, (266) 
+Element #: 156, Current Node #: 218, Diagonal Node #: 259, (259) 
+Element #: 156, Current Node #: 217, Diagonal Node #: 260, (260) 
+Element #: 156, Current Node #: 259, Diagonal Node #: 218, (218) 
+Element #: 156, Current Node #: 260, Diagonal Node #: 217, (217) 
+Element #: 156, Current Node #: 267, Diagonal Node #: 210, (210) 
+Element #: 156, Current Node #: 266, Diagonal Node #: 211, (211) 
+Element #: 157, Current Node #: 211, Diagonal Node #: 268, (268) 
+Element #: 157, Current Node #: 212, Diagonal Node #: 267, (267) 
+Element #: 157, Current Node #: 219, Diagonal Node #: 260, (260) 
+Element #: 157, Current Node #: 218, Diagonal Node #: 261, (261) 
+Element #: 157, Current Node #: 260, Diagonal Node #: 219, (219) 
+Element #: 157, Current Node #: 261, Diagonal Node #: 218, (218) 
+Element #: 157, Current Node #: 268, Diagonal Node #: 211, (211) 
+Element #: 157, Current Node #: 267, Diagonal Node #: 212, (212) 
+Element #: 158, Current Node #: 212, Diagonal Node #: 269, (269) 
+Element #: 158, Current Node #: 213, Diagonal Node #: 268, (268) 
+Element #: 158, Current Node #: 220, Diagonal Node #: 261, (261) 
+Element #: 158, Current Node #: 219, Diagonal Node #: 262, (262) 
+Element #: 158, Current Node #: 261, Diagonal Node #: 220, (220) 
+Element #: 158, Current Node #: 262, Diagonal Node #: 219, (219) 
+Element #: 158, Current Node #: 269, Diagonal Node #: 212, (212) 
+Element #: 158, Current Node #: 268, Diagonal Node #: 213, (213) 
+Element #: 159, Current Node #: 213, Diagonal Node #: 270, (270) 
+Element #: 159, Current Node #: 214, Diagonal Node #: 269, (269) 
+Element #: 159, Current Node #: 221, Diagonal Node #: 262, (262) 
+Element #: 159, Current Node #: 220, Diagonal Node #: 263, (263) 
+Element #: 159, Current Node #: 262, Diagonal Node #: 221, (221) 
+Element #: 159, Current Node #: 263, Diagonal Node #: 220, (220) 
+Element #: 159, Current Node #: 270, Diagonal Node #: 213, (213) 
+Element #: 159, Current Node #: 269, Diagonal Node #: 214, (214) 
+Element #: 160, Current Node #: 214, Diagonal Node #: 271, (271) 
+Element #: 160, Current Node #: 215, Diagonal Node #: 270, (270) 
+Element #: 160, Current Node #: 222, Diagonal Node #: 263, (263) 
+Element #: 160, Current Node #: 221, Diagonal Node #: 264, (264) 
+Element #: 160, Current Node #: 263, Diagonal Node #: 222, (222) 
+Element #: 160, Current Node #: 264, Diagonal Node #: 221, (221) 
+Element #: 160, Current Node #: 271, Diagonal Node #: 214, (214) 
+Element #: 160, Current Node #: 270, Diagonal Node #: 215, (215) 
+Element #: 161, Current Node #: 215, Diagonal Node #: 272, (272) 
+Element #: 161, Current Node #: 216, Diagonal Node #: 271, (271) 
+Element #: 161, Current Node #: 223, Diagonal Node #: 264, (264) 
+Element #: 161, Current Node #: 222, Diagonal Node #: 265, (265) 
+Element #: 161, Current Node #: 264, Diagonal Node #: 223, (223) 
+Element #: 161, Current Node #: 265, Diagonal Node #: 222, (222) 
+Element #: 161, Current Node #: 272, Diagonal Node #: 215, (215) 
+Element #: 161, Current Node #: 271, Diagonal Node #: 216, (216) 
+Element #: 162, Current Node #: 217, Diagonal Node #: 274, (274) 
+Element #: 162, Current Node #: 218, Diagonal Node #: 273, (273) 
+Element #: 162, Current Node #: 225, Diagonal Node #: 266, (266) 
+Element #: 162, Current Node #: 224, Diagonal Node #: 267, (267) 
+Element #: 162, Current Node #: 266, Diagonal Node #: 225, (225) 
+Element #: 162, Current Node #: 267, Diagonal Node #: 224, (224) 
+Element #: 162, Current Node #: 274, Diagonal Node #: 217, (217) 
+Element #: 162, Current Node #: 273, Diagonal Node #: 218, (218) 
+Element #: 163, Current Node #: 218, Diagonal Node #: 275, (275) 
+Element #: 163, Current Node #: 219, Diagonal Node #: 274, (274) 
+Element #: 163, Current Node #: 226, Diagonal Node #: 267, (267) 
+Element #: 163, Current Node #: 225, Diagonal Node #: 268, (268) 
+Element #: 163, Current Node #: 267, Diagonal Node #: 226, (226) 
+Element #: 163, Current Node #: 268, Diagonal Node #: 225, (225) 
+Element #: 163, Current Node #: 275, Diagonal Node #: 218, (218) 
+Element #: 163, Current Node #: 274, Diagonal Node #: 219, (219) 
+Element #: 164, Current Node #: 219, Diagonal Node #: 276, (276) 
+Element #: 164, Current Node #: 220, Diagonal Node #: 275, (275) 
+Element #: 164, Current Node #: 227, Diagonal Node #: 268, (268) 
+Element #: 164, Current Node #: 226, Diagonal Node #: 269, (269) 
+Element #: 164, Current Node #: 268, Diagonal Node #: 227, (227) 
+Element #: 164, Current Node #: 269, Diagonal Node #: 226, (226) 
+Element #: 164, Current Node #: 276, Diagonal Node #: 219, (219) 
+Element #: 164, Current Node #: 275, Diagonal Node #: 220, (220) 
+Element #: 165, Current Node #: 220, Diagonal Node #: 277, (277) 
+Element #: 165, Current Node #: 221, Diagonal Node #: 276, (276) 
+Element #: 165, Current Node #: 228, Diagonal Node #: 269, (269) 
+Element #: 165, Current Node #: 227, Diagonal Node #: 270, (270) 
+Element #: 165, Current Node #: 269, Diagonal Node #: 228, (228) 
+Element #: 165, Current Node #: 270, Diagonal Node #: 227, (227) 
+Element #: 165, Current Node #: 277, Diagonal Node #: 220, (220) 
+Element #: 165, Current Node #: 276, Diagonal Node #: 221, (221) 
+Element #: 166, Current Node #: 221, Diagonal Node #: 278, (278) 
+Element #: 166, Current Node #: 222, Diagonal Node #: 277, (277) 
+Element #: 166, Current Node #: 229, Diagonal Node #: 270, (270) 
+Element #: 166, Current Node #: 228, Diagonal Node #: 271, (271) 
+Element #: 166, Current Node #: 270, Diagonal Node #: 229, (229) 
+Element #: 166, Current Node #: 271, Diagonal Node #: 228, (228) 
+Element #: 166, Current Node #: 278, Diagonal Node #: 221, (221) 
+Element #: 166, Current Node #: 277, Diagonal Node #: 222, (222) 
+Element #: 167, Current Node #: 222, Diagonal Node #: 279, (279) 
+Element #: 167, Current Node #: 223, Diagonal Node #: 278, (278) 
+Element #: 167, Current Node #: 230, Diagonal Node #: 271, (271) 
+Element #: 167, Current Node #: 229, Diagonal Node #: 272, (272) 
+Element #: 167, Current Node #: 271, Diagonal Node #: 230, (230) 
+Element #: 167, Current Node #: 272, Diagonal Node #: 229, (229) 
+Element #: 167, Current Node #: 279, Diagonal Node #: 222, (222) 
+Element #: 167, Current Node #: 278, Diagonal Node #: 223, (223) 
+Element #: 168, Current Node #: 224, Diagonal Node #: 281, (281) 
+Element #: 168, Current Node #: 225, Diagonal Node #: 280, (280) 
+Element #: 168, Current Node #: 232, Diagonal Node #: 273, (273) 
+Element #: 168, Current Node #: 231, Diagonal Node #: 274, (274) 
+Element #: 168, Current Node #: 273, Diagonal Node #: 232, (232) 
+Element #: 168, Current Node #: 274, Diagonal Node #: 231, (231) 
+Element #: 168, Current Node #: 281, Diagonal Node #: 224, (224) 
+Element #: 168, Current Node #: 280, Diagonal Node #: 225, (225) 
+Element #: 169, Current Node #: 225, Diagonal Node #: 282, (282) 
+Element #: 169, Current Node #: 226, Diagonal Node #: 281, (281) 
+Element #: 169, Current Node #: 233, Diagonal Node #: 274, (274) 
+Element #: 169, Current Node #: 232, Diagonal Node #: 275, (275) 
+Element #: 169, Current Node #: 274, Diagonal Node #: 233, (233) 
+Element #: 169, Current Node #: 275, Diagonal Node #: 232, (232) 
+Element #: 169, Current Node #: 282, Diagonal Node #: 225, (225) 
+Element #: 169, Current Node #: 281, Diagonal Node #: 226, (226) 
+Element #: 170, Current Node #: 226, Diagonal Node #: 283, (283) 
+Element #: 170, Current Node #: 227, Diagonal Node #: 282, (282) 
+Element #: 170, Current Node #: 234, Diagonal Node #: 275, (275) 
+Element #: 170, Current Node #: 233, Diagonal Node #: 276, (276) 
+Element #: 170, Current Node #: 275, Diagonal Node #: 234, (234) 
+Element #: 170, Current Node #: 276, Diagonal Node #: 233, (233) 
+Element #: 170, Current Node #: 283, Diagonal Node #: 226, (226) 
+Element #: 170, Current Node #: 282, Diagonal Node #: 227, (227) 
+Element #: 171, Current Node #: 227, Diagonal Node #: 284, (284) 
+Element #: 171, Current Node #: 228, Diagonal Node #: 283, (283) 
+Element #: 171, Current Node #: 235, Diagonal Node #: 276, (276) 
+Element #: 171, Current Node #: 234, Diagonal Node #: 277, (277) 
+Element #: 171, Current Node #: 276, Diagonal Node #: 235, (235) 
+Element #: 171, Current Node #: 277, Diagonal Node #: 234, (234) 
+Element #: 171, Current Node #: 284, Diagonal Node #: 227, (227) 
+Element #: 171, Current Node #: 283, Diagonal Node #: 228, (228) 
+Element #: 172, Current Node #: 228, Diagonal Node #: 285, (285) 
+Element #: 172, Current Node #: 229, Diagonal Node #: 284, (284) 
+Element #: 172, Current Node #: 236, Diagonal Node #: 277, (277) 
+Element #: 172, Current Node #: 235, Diagonal Node #: 278, (278) 
+Element #: 172, Current Node #: 277, Diagonal Node #: 236, (236) 
+Element #: 172, Current Node #: 278, Diagonal Node #: 235, (235) 
+Element #: 172, Current Node #: 285, Diagonal Node #: 228, (228) 
+Element #: 172, Current Node #: 284, Diagonal Node #: 229, (229) 
+Element #: 173, Current Node #: 229, Diagonal Node #: 286, (286) 
+Element #: 173, Current Node #: 230, Diagonal Node #: 285, (285) 
+Element #: 173, Current Node #: 237, Diagonal Node #: 278, (278) 
+Element #: 173, Current Node #: 236, Diagonal Node #: 279, (279) 
+Element #: 173, Current Node #: 278, Diagonal Node #: 237, (237) 
+Element #: 173, Current Node #: 279, Diagonal Node #: 236, (236) 
+Element #: 173, Current Node #: 286, Diagonal Node #: 229, (229) 
+Element #: 173, Current Node #: 285, Diagonal Node #: 230, (230) 
+Element #: 174, Current Node #: 231, Diagonal Node #: 288, (288) 
+Element #: 174, Current Node #: 232, Diagonal Node #: 287, (287) 
+Element #: 174, Current Node #: 239, Diagonal Node #: 280, (280) 
+Element #: 174, Current Node #: 238, Diagonal Node #: 281, (281) 
+Element #: 174, Current Node #: 280, Diagonal Node #: 239, (239) 
+Element #: 174, Current Node #: 281, Diagonal Node #: 238, (238) 
+Element #: 174, Current Node #: 288, Diagonal Node #: 231, (231) 
+Element #: 174, Current Node #: 287, Diagonal Node #: 232, (232) 
+Element #: 175, Current Node #: 232, Diagonal Node #: 289, (289) 
+Element #: 175, Current Node #: 233, Diagonal Node #: 288, (288) 
+Element #: 175, Current Node #: 240, Diagonal Node #: 281, (281) 
+Element #: 175, Current Node #: 239, Diagonal Node #: 282, (282) 
+Element #: 175, Current Node #: 281, Diagonal Node #: 240, (240) 
+Element #: 175, Current Node #: 282, Diagonal Node #: 239, (239) 
+Element #: 175, Current Node #: 289, Diagonal Node #: 232, (232) 
+Element #: 175, Current Node #: 288, Diagonal Node #: 233, (233) 
+Element #: 176, Current Node #: 233, Diagonal Node #: 290, (290) 
+Element #: 176, Current Node #: 234, Diagonal Node #: 289, (289) 
+Element #: 176, Current Node #: 241, Diagonal Node #: 282, (282) 
+Element #: 176, Current Node #: 240, Diagonal Node #: 283, (283) 
+Element #: 176, Current Node #: 282, Diagonal Node #: 241, (241) 
+Element #: 176, Current Node #: 283, Diagonal Node #: 240, (240) 
+Element #: 176, Current Node #: 290, Diagonal Node #: 233, (233) 
+Element #: 176, Current Node #: 289, Diagonal Node #: 234, (234) 
+Element #: 177, Current Node #: 234, Diagonal Node #: 291, (291) 
+Element #: 177, Current Node #: 235, Diagonal Node #: 290, (290) 
+Element #: 177, Current Node #: 242, Diagonal Node #: 283, (283) 
+Element #: 177, Current Node #: 241, Diagonal Node #: 284, (284) 
+Element #: 177, Current Node #: 283, Diagonal Node #: 242, (242) 
+Element #: 177, Current Node #: 284, Diagonal Node #: 241, (241) 
+Element #: 177, Current Node #: 291, Diagonal Node #: 234, (234) 
+Element #: 177, Current Node #: 290, Diagonal Node #: 235, (235) 
+Element #: 178, Current Node #: 235, Diagonal Node #: 292, (292) 
+Element #: 178, Current Node #: 236, Diagonal Node #: 291, (291) 
+Element #: 178, Current Node #: 243, Diagonal Node #: 284, (284) 
+Element #: 178, Current Node #: 242, Diagonal Node #: 285, (285) 
+Element #: 178, Current Node #: 284, Diagonal Node #: 243, (243) 
+Element #: 178, Current Node #: 285, Diagonal Node #: 242, (242) 
+Element #: 178, Current Node #: 292, Diagonal Node #: 235, (235) 
+Element #: 178, Current Node #: 291, Diagonal Node #: 236, (236) 
+Element #: 179, Current Node #: 236, Diagonal Node #: 293, (293) 
+Element #: 179, Current Node #: 237, Diagonal Node #: 292, (292) 
+Element #: 179, Current Node #: 244, Diagonal Node #: 285, (285) 
+Element #: 179, Current Node #: 243, Diagonal Node #: 286, (286) 
+Element #: 179, Current Node #: 285, Diagonal Node #: 244, (244) 
+Element #: 179, Current Node #: 286, Diagonal Node #: 243, (243) 
+Element #: 179, Current Node #: 293, Diagonal Node #: 236, (236) 
+Element #: 179, Current Node #: 292, Diagonal Node #: 237, (237) 
+Element #: 180, Current Node #: 245, Diagonal Node #: 302, (302) 
+Element #: 180, Current Node #: 246, Diagonal Node #: 301, (301) 
+Element #: 180, Current Node #: 253, Diagonal Node #: 294, (294) 
+Element #: 180, Current Node #: 252, Diagonal Node #: 295, (295) 
+Element #: 180, Current Node #: 294, Diagonal Node #: 253, (253) 
+Element #: 180, Current Node #: 295, Diagonal Node #: 252, (252) 
+Element #: 180, Current Node #: 302, Diagonal Node #: 245, (245) 
+Element #: 180, Current Node #: 301, Diagonal Node #: 246, (246) 
+Element #: 181, Current Node #: 246, Diagonal Node #: 303, (303) 
+Element #: 181, Current Node #: 247, Diagonal Node #: 302, (302) 
+Element #: 181, Current Node #: 254, Diagonal Node #: 295, (295) 
+Element #: 181, Current Node #: 253, Diagonal Node #: 296, (296) 
+Element #: 181, Current Node #: 295, Diagonal Node #: 254, (254) 
+Element #: 181, Current Node #: 296, Diagonal Node #: 253, (253) 
+Element #: 181, Current Node #: 303, Diagonal Node #: 246, (246) 
+Element #: 181, Current Node #: 302, Diagonal Node #: 247, (247) 
+Element #: 182, Current Node #: 247, Diagonal Node #: 304, (304) 
+Element #: 182, Current Node #: 248, Diagonal Node #: 303, (303) 
+Element #: 182, Current Node #: 255, Diagonal Node #: 296, (296) 
+Element #: 182, Current Node #: 254, Diagonal Node #: 297, (297) 
+Element #: 182, Current Node #: 296, Diagonal Node #: 255, (255) 
+Element #: 182, Current Node #: 297, Diagonal Node #: 254, (254) 
+Element #: 182, Current Node #: 304, Diagonal Node #: 247, (247) 
+Element #: 182, Current Node #: 303, Diagonal Node #: 248, (248) 
+Element #: 183, Current Node #: 248, Diagonal Node #: 305, (305) 
+Element #: 183, Current Node #: 249, Diagonal Node #: 304, (304) 
+Element #: 183, Current Node #: 256, Diagonal Node #: 297, (297) 
+Element #: 183, Current Node #: 255, Diagonal Node #: 298, (298) 
+Element #: 183, Current Node #: 297, Diagonal Node #: 256, (256) 
+Element #: 183, Current Node #: 298, Diagonal Node #: 255, (255) 
+Element #: 183, Current Node #: 305, Diagonal Node #: 248, (248) 
+Element #: 183, Current Node #: 304, Diagonal Node #: 249, (249) 
+Element #: 184, Current Node #: 249, Diagonal Node #: 306, (306) 
+Element #: 184, Current Node #: 250, Diagonal Node #: 305, (305) 
+Element #: 184, Current Node #: 257, Diagonal Node #: 298, (298) 
+Element #: 184, Current Node #: 256, Diagonal Node #: 299, (299) 
+Element #: 184, Current Node #: 298, Diagonal Node #: 257, (257) 
+Element #: 184, Current Node #: 299, Diagonal Node #: 256, (256) 
+Element #: 184, Current Node #: 306, Diagonal Node #: 249, (249) 
+Element #: 184, Current Node #: 305, Diagonal Node #: 250, (250) 
+Element #: 185, Current Node #: 250, Diagonal Node #: 307, (307) 
+Element #: 185, Current Node #: 251, Diagonal Node #: 306, (306) 
+Element #: 185, Current Node #: 258, Diagonal Node #: 299, (299) 
+Element #: 185, Current Node #: 257, Diagonal Node #: 300, (300) 
+Element #: 185, Current Node #: 299, Diagonal Node #: 258, (258) 
+Element #: 185, Current Node #: 300, Diagonal Node #: 257, (257) 
+Element #: 185, Current Node #: 307, Diagonal Node #: 250, (250) 
+Element #: 185, Current Node #: 306, Diagonal Node #: 251, (251) 
+Element #: 186, Current Node #: 252, Diagonal Node #: 309, (309) 
+Element #: 186, Current Node #: 253, Diagonal Node #: 308, (308) 
+Element #: 186, Current Node #: 260, Diagonal Node #: 301, (301) 
+Element #: 186, Current Node #: 259, Diagonal Node #: 302, (302) 
+Element #: 186, Current Node #: 301, Diagonal Node #: 260, (260) 
+Element #: 186, Current Node #: 302, Diagonal Node #: 259, (259) 
+Element #: 186, Current Node #: 309, Diagonal Node #: 252, (252) 
+Element #: 186, Current Node #: 308, Diagonal Node #: 253, (253) 
+Element #: 187, Current Node #: 253, Diagonal Node #: 310, (310) 
+Element #: 187, Current Node #: 254, Diagonal Node #: 309, (309) 
+Element #: 187, Current Node #: 261, Diagonal Node #: 302, (302) 
+Element #: 187, Current Node #: 260, Diagonal Node #: 303, (303) 
+Element #: 187, Current Node #: 302, Diagonal Node #: 261, (261) 
+Element #: 187, Current Node #: 303, Diagonal Node #: 260, (260) 
+Element #: 187, Current Node #: 310, Diagonal Node #: 253, (253) 
+Element #: 187, Current Node #: 309, Diagonal Node #: 254, (254) 
+Element #: 188, Current Node #: 254, Diagonal Node #: 311, (311) 
+Element #: 188, Current Node #: 255, Diagonal Node #: 310, (310) 
+Element #: 188, Current Node #: 262, Diagonal Node #: 303, (303) 
+Element #: 188, Current Node #: 261, Diagonal Node #: 304, (304) 
+Element #: 188, Current Node #: 303, Diagonal Node #: 262, (262) 
+Element #: 188, Current Node #: 304, Diagonal Node #: 261, (261) 
+Element #: 188, Current Node #: 311, Diagonal Node #: 254, (254) 
+Element #: 188, Current Node #: 310, Diagonal Node #: 255, (255) 
+Element #: 189, Current Node #: 255, Diagonal Node #: 312, (312) 
+Element #: 189, Current Node #: 256, Diagonal Node #: 311, (311) 
+Element #: 189, Current Node #: 263, Diagonal Node #: 304, (304) 
+Element #: 189, Current Node #: 262, Diagonal Node #: 305, (305) 
+Element #: 189, Current Node #: 304, Diagonal Node #: 263, (263) 
+Element #: 189, Current Node #: 305, Diagonal Node #: 262, (262) 
+Element #: 189, Current Node #: 312, Diagonal Node #: 255, (255) 
+Element #: 189, Current Node #: 311, Diagonal Node #: 256, (256) 
+Element #: 190, Current Node #: 256, Diagonal Node #: 313, (313) 
+Element #: 190, Current Node #: 257, Diagonal Node #: 312, (312) 
+Element #: 190, Current Node #: 264, Diagonal Node #: 305, (305) 
+Element #: 190, Current Node #: 263, Diagonal Node #: 306, (306) 
+Element #: 190, Current Node #: 305, Diagonal Node #: 264, (264) 
+Element #: 190, Current Node #: 306, Diagonal Node #: 263, (263) 
+Element #: 190, Current Node #: 313, Diagonal Node #: 256, (256) 
+Element #: 190, Current Node #: 312, Diagonal Node #: 257, (257) 
+Element #: 191, Current Node #: 257, Diagonal Node #: 314, (314) 
+Element #: 191, Current Node #: 258, Diagonal Node #: 313, (313) 
+Element #: 191, Current Node #: 265, Diagonal Node #: 306, (306) 
+Element #: 191, Current Node #: 264, Diagonal Node #: 307, (307) 
+Element #: 191, Current Node #: 306, Diagonal Node #: 265, (265) 
+Element #: 191, Current Node #: 307, Diagonal Node #: 264, (264) 
+Element #: 191, Current Node #: 314, Diagonal Node #: 257, (257) 
+Element #: 191, Current Node #: 313, Diagonal Node #: 258, (258) 
+Element #: 192, Current Node #: 259, Diagonal Node #: 316, (316) 
+Element #: 192, Current Node #: 260, Diagonal Node #: 315, (315) 
+Element #: 192, Current Node #: 267, Diagonal Node #: 308, (308) 
+Element #: 192, Current Node #: 266, Diagonal Node #: 309, (309) 
+Element #: 192, Current Node #: 308, Diagonal Node #: 267, (267) 
+Element #: 192, Current Node #: 309, Diagonal Node #: 266, (266) 
+Element #: 192, Current Node #: 316, Diagonal Node #: 259, (259) 
+Element #: 192, Current Node #: 315, Diagonal Node #: 260, (260) 
+Element #: 193, Current Node #: 260, Diagonal Node #: 317, (317) 
+Element #: 193, Current Node #: 261, Diagonal Node #: 316, (316) 
+Element #: 193, Current Node #: 268, Diagonal Node #: 309, (309) 
+Element #: 193, Current Node #: 267, Diagonal Node #: 310, (310) 
+Element #: 193, Current Node #: 309, Diagonal Node #: 268, (268) 
+Element #: 193, Current Node #: 310, Diagonal Node #: 267, (267) 
+Element #: 193, Current Node #: 317, Diagonal Node #: 260, (260) 
+Element #: 193, Current Node #: 316, Diagonal Node #: 261, (261) 
+Element #: 194, Current Node #: 261, Diagonal Node #: 318, (318) 
+Element #: 194, Current Node #: 262, Diagonal Node #: 317, (317) 
+Element #: 194, Current Node #: 269, Diagonal Node #: 310, (310) 
+Element #: 194, Current Node #: 268, Diagonal Node #: 311, (311) 
+Element #: 194, Current Node #: 310, Diagonal Node #: 269, (269) 
+Element #: 194, Current Node #: 311, Diagonal Node #: 268, (268) 
+Element #: 194, Current Node #: 318, Diagonal Node #: 261, (261) 
+Element #: 194, Current Node #: 317, Diagonal Node #: 262, (262) 
+Element #: 195, Current Node #: 262, Diagonal Node #: 319, (319) 
+Element #: 195, Current Node #: 263, Diagonal Node #: 318, (318) 
+Element #: 195, Current Node #: 270, Diagonal Node #: 311, (311) 
+Element #: 195, Current Node #: 269, Diagonal Node #: 312, (312) 
+Element #: 195, Current Node #: 311, Diagonal Node #: 270, (270) 
+Element #: 195, Current Node #: 312, Diagonal Node #: 269, (269) 
+Element #: 195, Current Node #: 319, Diagonal Node #: 262, (262) 
+Element #: 195, Current Node #: 318, Diagonal Node #: 263, (263) 
+Element #: 196, Current Node #: 263, Diagonal Node #: 320, (320) 
+Element #: 196, Current Node #: 264, Diagonal Node #: 319, (319) 
+Element #: 196, Current Node #: 271, Diagonal Node #: 312, (312) 
+Element #: 196, Current Node #: 270, Diagonal Node #: 313, (313) 
+Element #: 196, Current Node #: 312, Diagonal Node #: 271, (271) 
+Element #: 196, Current Node #: 313, Diagonal Node #: 270, (270) 
+Element #: 196, Current Node #: 320, Diagonal Node #: 263, (263) 
+Element #: 196, Current Node #: 319, Diagonal Node #: 264, (264) 
+Element #: 197, Current Node #: 264, Diagonal Node #: 321, (321) 
+Element #: 197, Current Node #: 265, Diagonal Node #: 320, (320) 
+Element #: 197, Current Node #: 272, Diagonal Node #: 313, (313) 
+Element #: 197, Current Node #: 271, Diagonal Node #: 314, (314) 
+Element #: 197, Current Node #: 313, Diagonal Node #: 272, (272) 
+Element #: 197, Current Node #: 314, Diagonal Node #: 271, (271) 
+Element #: 197, Current Node #: 321, Diagonal Node #: 264, (264) 
+Element #: 197, Current Node #: 320, Diagonal Node #: 265, (265) 
+Element #: 198, Current Node #: 266, Diagonal Node #: 323, (323) 
+Element #: 198, Current Node #: 267, Diagonal Node #: 322, (322) 
+Element #: 198, Current Node #: 274, Diagonal Node #: 315, (315) 
+Element #: 198, Current Node #: 273, Diagonal Node #: 316, (316) 
+Element #: 198, Current Node #: 315, Diagonal Node #: 274, (274) 
+Element #: 198, Current Node #: 316, Diagonal Node #: 273, (273) 
+Element #: 198, Current Node #: 323, Diagonal Node #: 266, (266) 
+Element #: 198, Current Node #: 322, Diagonal Node #: 267, (267) 
+Element #: 199, Current Node #: 267, Diagonal Node #: 324, (324) 
+Element #: 199, Current Node #: 268, Diagonal Node #: 323, (323) 
+Element #: 199, Current Node #: 275, Diagonal Node #: 316, (316) 
+Element #: 199, Current Node #: 274, Diagonal Node #: 317, (317) 
+Element #: 199, Current Node #: 316, Diagonal Node #: 275, (275) 
+Element #: 199, Current Node #: 317, Diagonal Node #: 274, (274) 
+Element #: 199, Current Node #: 324, Diagonal Node #: 267, (267) 
+Element #: 199, Current Node #: 323, Diagonal Node #: 268, (268) 
+Element #: 200, Current Node #: 268, Diagonal Node #: 325, (325) 
+Element #: 200, Current Node #: 269, Diagonal Node #: 324, (324) 
+Element #: 200, Current Node #: 276, Diagonal Node #: 317, (317) 
+Element #: 200, Current Node #: 275, Diagonal Node #: 318, (318) 
+Element #: 200, Current Node #: 317, Diagonal Node #: 276, (276) 
+Element #: 200, Current Node #: 318, Diagonal Node #: 275, (275) 
+Element #: 200, Current Node #: 325, Diagonal Node #: 268, (268) 
+Element #: 200, Current Node #: 324, Diagonal Node #: 269, (269) 
+Element #: 201, Current Node #: 269, Diagonal Node #: 326, (326) 
+Element #: 201, Current Node #: 270, Diagonal Node #: 325, (325) 
+Element #: 201, Current Node #: 277, Diagonal Node #: 318, (318) 
+Element #: 201, Current Node #: 276, Diagonal Node #: 319, (319) 
+Element #: 201, Current Node #: 318, Diagonal Node #: 277, (277) 
+Element #: 201, Current Node #: 319, Diagonal Node #: 276, (276) 
+Element #: 201, Current Node #: 326, Diagonal Node #: 269, (269) 
+Element #: 201, Current Node #: 325, Diagonal Node #: 270, (270) 
+Element #: 202, Current Node #: 270, Diagonal Node #: 327, (327) 
+Element #: 202, Current Node #: 271, Diagonal Node #: 326, (326) 
+Element #: 202, Current Node #: 278, Diagonal Node #: 319, (319) 
+Element #: 202, Current Node #: 277, Diagonal Node #: 320, (320) 
+Element #: 202, Current Node #: 319, Diagonal Node #: 278, (278) 
+Element #: 202, Current Node #: 320, Diagonal Node #: 277, (277) 
+Element #: 202, Current Node #: 327, Diagonal Node #: 270, (270) 
+Element #: 202, Current Node #: 326, Diagonal Node #: 271, (271) 
+Element #: 203, Current Node #: 271, Diagonal Node #: 328, (328) 
+Element #: 203, Current Node #: 272, Diagonal Node #: 327, (327) 
+Element #: 203, Current Node #: 279, Diagonal Node #: 320, (320) 
+Element #: 203, Current Node #: 278, Diagonal Node #: 321, (321) 
+Element #: 203, Current Node #: 320, Diagonal Node #: 279, (279) 
+Element #: 203, Current Node #: 321, Diagonal Node #: 278, (278) 
+Element #: 203, Current Node #: 328, Diagonal Node #: 271, (271) 
+Element #: 203, Current Node #: 327, Diagonal Node #: 272, (272) 
+Element #: 204, Current Node #: 273, Diagonal Node #: 330, (330) 
+Element #: 204, Current Node #: 274, Diagonal Node #: 329, (329) 
+Element #: 204, Current Node #: 281, Diagonal Node #: 322, (322) 
+Element #: 204, Current Node #: 280, Diagonal Node #: 323, (323) 
+Element #: 204, Current Node #: 322, Diagonal Node #: 281, (281) 
+Element #: 204, Current Node #: 323, Diagonal Node #: 280, (280) 
+Element #: 204, Current Node #: 330, Diagonal Node #: 273, (273) 
+Element #: 204, Current Node #: 329, Diagonal Node #: 274, (274) 
+Element #: 205, Current Node #: 274, Diagonal Node #: 331, (331) 
+Element #: 205, Current Node #: 275, Diagonal Node #: 330, (330) 
+Element #: 205, Current Node #: 282, Diagonal Node #: 323, (323) 
+Element #: 205, Current Node #: 281, Diagonal Node #: 324, (324) 
+Element #: 205, Current Node #: 323, Diagonal Node #: 282, (282) 
+Element #: 205, Current Node #: 324, Diagonal Node #: 281, (281) 
+Element #: 205, Current Node #: 331, Diagonal Node #: 274, (274) 
+Element #: 205, Current Node #: 330, Diagonal Node #: 275, (275) 
+Element #: 206, Current Node #: 275, Diagonal Node #: 332, (332) 
+Element #: 206, Current Node #: 276, Diagonal Node #: 331, (331) 
+Element #: 206, Current Node #: 283, Diagonal Node #: 324, (324) 
+Element #: 206, Current Node #: 282, Diagonal Node #: 325, (325) 
+Element #: 206, Current Node #: 324, Diagonal Node #: 283, (283) 
+Element #: 206, Current Node #: 325, Diagonal Node #: 282, (282) 
+Element #: 206, Current Node #: 332, Diagonal Node #: 275, (275) 
+Element #: 206, Current Node #: 331, Diagonal Node #: 276, (276) 
+Element #: 207, Current Node #: 276, Diagonal Node #: 333, (333) 
+Element #: 207, Current Node #: 277, Diagonal Node #: 332, (332) 
+Element #: 207, Current Node #: 284, Diagonal Node #: 325, (325) 
+Element #: 207, Current Node #: 283, Diagonal Node #: 326, (326) 
+Element #: 207, Current Node #: 325, Diagonal Node #: 284, (284) 
+Element #: 207, Current Node #: 326, Diagonal Node #: 283, (283) 
+Element #: 207, Current Node #: 333, Diagonal Node #: 276, (276) 
+Element #: 207, Current Node #: 332, Diagonal Node #: 277, (277) 
+Element #: 208, Current Node #: 277, Diagonal Node #: 334, (334) 
+Element #: 208, Current Node #: 278, Diagonal Node #: 333, (333) 
+Element #: 208, Current Node #: 285, Diagonal Node #: 326, (326) 
+Element #: 208, Current Node #: 284, Diagonal Node #: 327, (327) 
+Element #: 208, Current Node #: 326, Diagonal Node #: 285, (285) 
+Element #: 208, Current Node #: 327, Diagonal Node #: 284, (284) 
+Element #: 208, Current Node #: 334, Diagonal Node #: 277, (277) 
+Element #: 208, Current Node #: 333, Diagonal Node #: 278, (278) 
+Element #: 209, Current Node #: 278, Diagonal Node #: 335, (335) 
+Element #: 209, Current Node #: 279, Diagonal Node #: 334, (334) 
+Element #: 209, Current Node #: 286, Diagonal Node #: 327, (327) 
+Element #: 209, Current Node #: 285, Diagonal Node #: 328, (328) 
+Element #: 209, Current Node #: 327, Diagonal Node #: 286, (286) 
+Element #: 209, Current Node #: 328, Diagonal Node #: 285, (285) 
+Element #: 209, Current Node #: 335, Diagonal Node #: 278, (278) 
+Element #: 209, Current Node #: 334, Diagonal Node #: 279, (279) 
+Element #: 210, Current Node #: 280, Diagonal Node #: 337, (337) 
+Element #: 210, Current Node #: 281, Diagonal Node #: 336, (336) 
+Element #: 210, Current Node #: 288, Diagonal Node #: 329, (329) 
+Element #: 210, Current Node #: 287, Diagonal Node #: 330, (330) 
+Element #: 210, Current Node #: 329, Diagonal Node #: 288, (288) 
+Element #: 210, Current Node #: 330, Diagonal Node #: 287, (287) 
+Element #: 210, Current Node #: 337, Diagonal Node #: 280, (280) 
+Element #: 210, Current Node #: 336, Diagonal Node #: 281, (281) 
+Element #: 211, Current Node #: 281, Diagonal Node #: 338, (338) 
+Element #: 211, Current Node #: 282, Diagonal Node #: 337, (337) 
+Element #: 211, Current Node #: 289, Diagonal Node #: 330, (330) 
+Element #: 211, Current Node #: 288, Diagonal Node #: 331, (331) 
+Element #: 211, Current Node #: 330, Diagonal Node #: 289, (289) 
+Element #: 211, Current Node #: 331, Diagonal Node #: 288, (288) 
+Element #: 211, Current Node #: 338, Diagonal Node #: 281, (281) 
+Element #: 211, Current Node #: 337, Diagonal Node #: 282, (282) 
+Element #: 212, Current Node #: 282, Diagonal Node #: 339, (339) 
+Element #: 212, Current Node #: 283, Diagonal Node #: 338, (338) 
+Element #: 212, Current Node #: 290, Diagonal Node #: 331, (331) 
+Element #: 212, Current Node #: 289, Diagonal Node #: 332, (332) 
+Element #: 212, Current Node #: 331, Diagonal Node #: 290, (290) 
+Element #: 212, Current Node #: 332, Diagonal Node #: 289, (289) 
+Element #: 212, Current Node #: 339, Diagonal Node #: 282, (282) 
+Element #: 212, Current Node #: 338, Diagonal Node #: 283, (283) 
+Element #: 213, Current Node #: 283, Diagonal Node #: 340, (340) 
+Element #: 213, Current Node #: 284, Diagonal Node #: 339, (339) 
+Element #: 213, Current Node #: 291, Diagonal Node #: 332, (332) 
+Element #: 213, Current Node #: 290, Diagonal Node #: 333, (333) 
+Element #: 213, Current Node #: 332, Diagonal Node #: 291, (291) 
+Element #: 213, Current Node #: 333, Diagonal Node #: 290, (290) 
+Element #: 213, Current Node #: 340, Diagonal Node #: 283, (283) 
+Element #: 213, Current Node #: 339, Diagonal Node #: 284, (284) 
+Element #: 214, Current Node #: 284, Diagonal Node #: 341, (341) 
+Element #: 214, Current Node #: 285, Diagonal Node #: 340, (340) 
+Element #: 214, Current Node #: 292, Diagonal Node #: 333, (333) 
+Element #: 214, Current Node #: 291, Diagonal Node #: 334, (334) 
+Element #: 214, Current Node #: 333, Diagonal Node #: 292, (292) 
+Element #: 214, Current Node #: 334, Diagonal Node #: 291, (291) 
+Element #: 214, Current Node #: 341, Diagonal Node #: 284, (284) 
+Element #: 214, Current Node #: 340, Diagonal Node #: 285, (285) 
+Element #: 215, Current Node #: 285, Diagonal Node #: 342, (342) 
+Element #: 215, Current Node #: 286, Diagonal Node #: 341, (341) 
+Element #: 215, Current Node #: 293, Diagonal Node #: 334, (334) 
+Element #: 215, Current Node #: 292, Diagonal Node #: 335, (335) 
+Element #: 215, Current Node #: 334, Diagonal Node #: 293, (293) 
+Element #: 215, Current Node #: 335, Diagonal Node #: 292, (292) 
+Element #: 215, Current Node #: 342, Diagonal Node #: 285, (285) 
+Element #: 215, Current Node #: 341, Diagonal Node #: 286, (286) 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1153 @@
+StGermain Framework revision 0. 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 #: 5, Diagonal Node #: 28, (49) 
+Element #: 0, Current Node #: 4, Diagonal Node #: 29, (50) 
+Element #: 0, Current Node #: 28, Diagonal Node #: 5, (8) 
+Element #: 0, Current Node #: 29, Diagonal Node #: 4, (7) 
+Element #: 0, Current Node #: 33, Diagonal Node #: 0, (0) 
+Element #: 0, Current Node #: 32, Diagonal Node #: 1, (1) 
+Element #: 1, Current Node #: 1, Diagonal Node #: 34, (58) 
+Element #: 1, Current Node #: 2, Diagonal Node #: 33, (57) 
+Element #: 1, Current Node #: 6, Diagonal Node #: 29, (50) 
+Element #: 1, Current Node #: 5, Diagonal Node #: 30, (51) 
+Element #: 1, Current Node #: 29, Diagonal Node #: 6, (9) 
+Element #: 1, Current Node #: 30, Diagonal Node #: 5, (8) 
+Element #: 1, Current Node #: 34, Diagonal Node #: 1, (1) 
+Element #: 1, Current Node #: 33, Diagonal Node #: 2, (2) 
+Element #: 2, Current Node #: 2, Diagonal Node #: 35, (59) 
+Element #: 2, Current Node #: 3, Diagonal Node #: 34, (58) 
+Element #: 2, Current Node #: 7, Diagonal Node #: 30, (51) 
+Element #: 2, Current Node #: 6, Diagonal Node #: 31, (52) 
+Element #: 2, Current Node #: 30, Diagonal Node #: 7, (10) 
+Element #: 2, Current Node #: 31, Diagonal Node #: 6, (9) 
+Element #: 2, Current Node #: 35, Diagonal Node #: 2, (2) 
+Element #: 2, Current Node #: 34, Diagonal Node #: 3, (3) 
+Element #: 3, Current Node #: 4, Diagonal Node #: 37, (64) 
+Element #: 3, Current Node #: 5, Diagonal Node #: 36, (63) 
+Element #: 3, Current Node #: 9, Diagonal Node #: 32, (56) 
+Element #: 3, Current Node #: 8, Diagonal Node #: 33, (57) 
+Element #: 3, Current Node #: 32, Diagonal Node #: 9, (15) 
+Element #: 3, Current Node #: 33, Diagonal Node #: 8, (14) 
+Element #: 3, Current Node #: 37, Diagonal Node #: 4, (7) 
+Element #: 3, Current Node #: 36, Diagonal Node #: 5, (8) 
+Element #: 4, Current Node #: 5, Diagonal Node #: 38, (65) 
+Element #: 4, Current Node #: 6, Diagonal Node #: 37, (64) 
+Element #: 4, Current Node #: 10, Diagonal Node #: 33, (57) 
+Element #: 4, Current Node #: 9, Diagonal Node #: 34, (58) 
+Element #: 4, Current Node #: 33, Diagonal Node #: 10, (16) 
+Element #: 4, Current Node #: 34, Diagonal Node #: 9, (15) 
+Element #: 4, Current Node #: 38, Diagonal Node #: 5, (8) 
+Element #: 4, Current Node #: 37, Diagonal Node #: 6, (9) 
+Element #: 5, Current Node #: 6, Diagonal Node #: 39, (66) 
+Element #: 5, Current Node #: 7, Diagonal Node #: 38, (65) 
+Element #: 5, Current Node #: 11, Diagonal Node #: 34, (58) 
+Element #: 5, Current Node #: 10, Diagonal Node #: 35, (59) 
+Element #: 5, Current Node #: 34, Diagonal Node #: 11, (17) 
+Element #: 5, Current Node #: 35, Diagonal Node #: 10, (16) 
+Element #: 5, Current Node #: 39, Diagonal Node #: 6, (9) 
+Element #: 5, Current Node #: 38, Diagonal Node #: 7, (10) 
+Element #: 6, Current Node #: 8, Diagonal Node #: 41, (71) 
+Element #: 6, Current Node #: 9, Diagonal Node #: 40, (70) 
+Element #: 6, Current Node #: 13, Diagonal Node #: 36, (63) 
+Element #: 6, Current Node #: 12, Diagonal Node #: 37, (64) 
+Element #: 6, Current Node #: 36, Diagonal Node #: 13, (22) 
+Element #: 6, Current Node #: 37, Diagonal Node #: 12, (21) 
+Element #: 6, Current Node #: 41, Diagonal Node #: 8, (14) 
+Element #: 6, Current Node #: 40, Diagonal Node #: 9, (15) 
+Element #: 7, Current Node #: 9, Diagonal Node #: 42, (72) 
+Element #: 7, Current Node #: 10, Diagonal Node #: 41, (71) 
+Element #: 7, Current Node #: 14, Diagonal Node #: 37, (64) 
+Element #: 7, Current Node #: 13, Diagonal Node #: 38, (65) 
+Element #: 7, Current Node #: 37, Diagonal Node #: 14, (23) 
+Element #: 7, Current Node #: 38, Diagonal Node #: 13, (22) 
+Element #: 7, Current Node #: 42, Diagonal Node #: 9, (15) 
+Element #: 7, Current Node #: 41, Diagonal Node #: 10, (16) 
+Element #: 8, Current Node #: 10, Diagonal Node #: 43, (73) 
+Element #: 8, Current Node #: 11, Diagonal Node #: 42, (72) 
+Element #: 8, Current Node #: 15, Diagonal Node #: 38, (65) 
+Element #: 8, Current Node #: 14, Diagonal Node #: 39, (66) 
+Element #: 8, Current Node #: 38, Diagonal Node #: 15, (24) 
+Element #: 8, Current Node #: 39, Diagonal Node #: 14, (23) 
+Element #: 8, Current Node #: 43, Diagonal Node #: 10, (16) 
+Element #: 8, Current Node #: 42, Diagonal Node #: 11, (17) 
+Element #: 9, Current Node #: 12, Diagonal Node #: 45, (78) 
+Element #: 9, Current Node #: 13, Diagonal Node #: 44, (77) 
+Element #: 9, Current Node #: 17, Diagonal Node #: 40, (70) 
+Element #: 9, Current Node #: 16, Diagonal Node #: 41, (71) 
+Element #: 9, Current Node #: 40, Diagonal Node #: 17, (29) 
+Element #: 9, Current Node #: 41, Diagonal Node #: 16, (28) 
+Element #: 9, Current Node #: 45, Diagonal Node #: 12, (21) 
+Element #: 9, Current Node #: 44, Diagonal Node #: 13, (22) 
+Element #: 10, Current Node #: 13, Diagonal Node #: 46, (79) 
+Element #: 10, Current Node #: 14, Diagonal Node #: 45, (78) 
+Element #: 10, Current Node #: 18, Diagonal Node #: 41, (71) 
+Element #: 10, Current Node #: 17, Diagonal Node #: 42, (72) 
+Element #: 10, Current Node #: 41, Diagonal Node #: 18, (30) 
+Element #: 10, Current Node #: 42, Diagonal Node #: 17, (29) 
+Element #: 10, Current Node #: 46, Diagonal Node #: 13, (22) 
+Element #: 10, Current Node #: 45, Diagonal Node #: 14, (23) 
+Element #: 11, Current Node #: 14, Diagonal Node #: 47, (80) 
+Element #: 11, Current Node #: 15, Diagonal Node #: 46, (79) 
+Element #: 11, Current Node #: 19, Diagonal Node #: 42, (72) 
+Element #: 11, Current Node #: 18, Diagonal Node #: 43, (73) 
+Element #: 11, Current Node #: 42, Diagonal Node #: 19, (31) 
+Element #: 11, Current Node #: 43, Diagonal Node #: 18, (30) 
+Element #: 11, Current Node #: 47, Diagonal Node #: 14, (23) 
+Element #: 11, Current Node #: 46, Diagonal Node #: 15, (24) 
+Element #: 12, Current Node #: 16, Diagonal Node #: 49, (85) 
+Element #: 12, Current Node #: 17, Diagonal Node #: 48, (84) 
+Element #: 12, Current Node #: 21, Diagonal Node #: 44, (77) 
+Element #: 12, Current Node #: 20, Diagonal Node #: 45, (78) 
+Element #: 12, Current Node #: 44, Diagonal Node #: 21, (36) 
+Element #: 12, Current Node #: 45, Diagonal Node #: 20, (35) 
+Element #: 12, Current Node #: 49, Diagonal Node #: 16, (28) 
+Element #: 12, Current Node #: 48, Diagonal Node #: 17, (29) 
+Element #: 13, Current Node #: 17, Diagonal Node #: 50, (86) 
+Element #: 13, Current Node #: 18, Diagonal Node #: 49, (85) 
+Element #: 13, Current Node #: 22, Diagonal Node #: 45, (78) 
+Element #: 13, Current Node #: 21, Diagonal Node #: 46, (79) 
+Element #: 13, Current Node #: 45, Diagonal Node #: 22, (37) 
+Element #: 13, Current Node #: 46, Diagonal Node #: 21, (36) 
+Element #: 13, Current Node #: 50, Diagonal Node #: 17, (29) 
+Element #: 13, Current Node #: 49, Diagonal Node #: 18, (30) 
+Element #: 14, Current Node #: 18, Diagonal Node #: 51, (87) 
+Element #: 14, Current Node #: 19, Diagonal Node #: 50, (86) 
+Element #: 14, Current Node #: 23, Diagonal Node #: 46, (79) 
+Element #: 14, Current Node #: 22, Diagonal Node #: 47, (80) 
+Element #: 14, Current Node #: 46, Diagonal Node #: 23, (38) 
+Element #: 14, Current Node #: 47, Diagonal Node #: 22, (37) 
+Element #: 14, Current Node #: 51, Diagonal Node #: 18, (30) 
+Element #: 14, Current Node #: 50, Diagonal Node #: 19, (31) 
+Element #: 15, Current Node #: 20, Diagonal Node #: 53, (92) 
+Element #: 15, Current Node #: 21, Diagonal Node #: 52, (91) 
+Element #: 15, Current Node #: 25, Diagonal Node #: 48, (84) 
+Element #: 15, Current Node #: 24, Diagonal Node #: 49, (85) 
+Element #: 15, Current Node #: 48, Diagonal Node #: 25, (43) 
+Element #: 15, Current Node #: 49, Diagonal Node #: 24, (42) 
+Element #: 15, Current Node #: 53, Diagonal Node #: 20, (35) 
+Element #: 15, Current Node #: 52, Diagonal Node #: 21, (36) 
+Element #: 16, Current Node #: 21, Diagonal Node #: 54, (93) 
+Element #: 16, Current Node #: 22, Diagonal Node #: 53, (92) 
+Element #: 16, Current Node #: 26, Diagonal Node #: 49, (85) 
+Element #: 16, Current Node #: 25, Diagonal Node #: 50, (86) 
+Element #: 16, Current Node #: 49, Diagonal Node #: 26, (44) 
+Element #: 16, Current Node #: 50, Diagonal Node #: 25, (43) 
+Element #: 16, Current Node #: 54, Diagonal Node #: 21, (36) 
+Element #: 16, Current Node #: 53, Diagonal Node #: 22, (37) 
+Element #: 17, Current Node #: 22, Diagonal Node #: 55, (94) 
+Element #: 17, Current Node #: 23, Diagonal Node #: 54, (93) 
+Element #: 17, Current Node #: 27, Diagonal Node #: 50, (86) 
+Element #: 17, Current Node #: 26, Diagonal Node #: 51, (87) 
+Element #: 17, Current Node #: 50, Diagonal Node #: 27, (45) 
+Element #: 17, Current Node #: 51, Diagonal Node #: 26, (44) 
+Element #: 17, Current Node #: 55, Diagonal Node #: 22, (37) 
+Element #: 17, Current Node #: 54, Diagonal Node #: 23, (38) 
+Element #: 18, Current Node #: 28, Diagonal Node #: 61, (106) 
+Element #: 18, Current Node #: 29, Diagonal Node #: 60, (105) 
+Element #: 18, Current Node #: 33, Diagonal Node #: 56, (98) 
+Element #: 18, Current Node #: 32, Diagonal Node #: 57, (99) 
+Element #: 18, Current Node #: 56, Diagonal Node #: 33, (57) 
+Element #: 18, Current Node #: 57, Diagonal Node #: 32, (56) 
+Element #: 18, Current Node #: 61, Diagonal Node #: 28, (49) 
+Element #: 18, Current Node #: 60, Diagonal Node #: 29, (50) 
+Element #: 19, Current Node #: 29, Diagonal Node #: 62, (107) 
+Element #: 19, Current Node #: 30, Diagonal Node #: 61, (106) 
+Element #: 19, Current Node #: 34, Diagonal Node #: 57, (99) 
+Element #: 19, Current Node #: 33, Diagonal Node #: 58, (100) 
+Element #: 19, Current Node #: 57, Diagonal Node #: 34, (58) 
+Element #: 19, Current Node #: 58, Diagonal Node #: 33, (57) 
+Element #: 19, Current Node #: 62, Diagonal Node #: 29, (50) 
+Element #: 19, Current Node #: 61, Diagonal Node #: 30, (51) 
+Element #: 20, Current Node #: 30, Diagonal Node #: 63, (108) 
+Element #: 20, Current Node #: 31, Diagonal Node #: 62, (107) 
+Element #: 20, Current Node #: 35, Diagonal Node #: 58, (100) 
+Element #: 20, Current Node #: 34, Diagonal Node #: 59, (101) 
+Element #: 20, Current Node #: 58, Diagonal Node #: 35, (59) 
+Element #: 20, Current Node #: 59, Diagonal Node #: 34, (58) 
+Element #: 20, Current Node #: 63, Diagonal Node #: 30, (51) 
+Element #: 20, Current Node #: 62, Diagonal Node #: 31, (52) 
+Element #: 21, Current Node #: 32, Diagonal Node #: 65, (113) 
+Element #: 21, Current Node #: 33, Diagonal Node #: 64, (112) 
+Element #: 21, Current Node #: 37, Diagonal Node #: 60, (105) 
+Element #: 21, Current Node #: 36, Diagonal Node #: 61, (106) 
+Element #: 21, Current Node #: 60, Diagonal Node #: 37, (64) 
+Element #: 21, Current Node #: 61, Diagonal Node #: 36, (63) 
+Element #: 21, Current Node #: 65, Diagonal Node #: 32, (56) 
+Element #: 21, Current Node #: 64, Diagonal Node #: 33, (57) 
+Element #: 22, Current Node #: 33, Diagonal Node #: 66, (114) 
+Element #: 22, Current Node #: 34, Diagonal Node #: 65, (113) 
+Element #: 22, Current Node #: 38, Diagonal Node #: 61, (106) 
+Element #: 22, Current Node #: 37, Diagonal Node #: 62, (107) 
+Element #: 22, Current Node #: 61, Diagonal Node #: 38, (65) 
+Element #: 22, Current Node #: 62, Diagonal Node #: 37, (64) 
+Element #: 22, Current Node #: 66, Diagonal Node #: 33, (57) 
+Element #: 22, Current Node #: 65, Diagonal Node #: 34, (58) 
+Element #: 23, Current Node #: 34, Diagonal Node #: 67, (115) 
+Element #: 23, Current Node #: 35, Diagonal Node #: 66, (114) 
+Element #: 23, Current Node #: 39, Diagonal Node #: 62, (107) 
+Element #: 23, Current Node #: 38, Diagonal Node #: 63, (108) 
+Element #: 23, Current Node #: 62, Diagonal Node #: 39, (66) 
+Element #: 23, Current Node #: 63, Diagonal Node #: 38, (65) 
+Element #: 23, Current Node #: 67, Diagonal Node #: 34, (58) 
+Element #: 23, Current Node #: 66, Diagonal Node #: 35, (59) 
+Element #: 24, Current Node #: 36, Diagonal Node #: 69, (120) 
+Element #: 24, Current Node #: 37, Diagonal Node #: 68, (119) 
+Element #: 24, Current Node #: 41, Diagonal Node #: 64, (112) 
+Element #: 24, Current Node #: 40, Diagonal Node #: 65, (113) 
+Element #: 24, Current Node #: 64, Diagonal Node #: 41, (71) 
+Element #: 24, Current Node #: 65, Diagonal Node #: 40, (70) 
+Element #: 24, Current Node #: 69, Diagonal Node #: 36, (63) 
+Element #: 24, Current Node #: 68, Diagonal Node #: 37, (64) 
+Element #: 25, Current Node #: 37, Diagonal Node #: 70, (121) 
+Element #: 25, Current Node #: 38, Diagonal Node #: 69, (120) 
+Element #: 25, Current Node #: 42, Diagonal Node #: 65, (113) 
+Element #: 25, Current Node #: 41, Diagonal Node #: 66, (114) 
+Element #: 25, Current Node #: 65, Diagonal Node #: 42, (72) 
+Element #: 25, Current Node #: 66, Diagonal Node #: 41, (71) 
+Element #: 25, Current Node #: 70, Diagonal Node #: 37, (64) 
+Element #: 25, Current Node #: 69, Diagonal Node #: 38, (65) 
+Element #: 26, Current Node #: 38, Diagonal Node #: 71, (122) 
+Element #: 26, Current Node #: 39, Diagonal Node #: 70, (121) 
+Element #: 26, Current Node #: 43, Diagonal Node #: 66, (114) 
+Element #: 26, Current Node #: 42, Diagonal Node #: 67, (115) 
+Element #: 26, Current Node #: 66, Diagonal Node #: 43, (73) 
+Element #: 26, Current Node #: 67, Diagonal Node #: 42, (72) 
+Element #: 26, Current Node #: 71, Diagonal Node #: 38, (65) 
+Element #: 26, Current Node #: 70, Diagonal Node #: 39, (66) 
+Element #: 27, Current Node #: 40, Diagonal Node #: 73, (127) 
+Element #: 27, Current Node #: 41, Diagonal Node #: 72, (126) 
+Element #: 27, Current Node #: 45, Diagonal Node #: 68, (119) 
+Element #: 27, Current Node #: 44, Diagonal Node #: 69, (120) 
+Element #: 27, Current Node #: 68, Diagonal Node #: 45, (78) 
+Element #: 27, Current Node #: 69, Diagonal Node #: 44, (77) 
+Element #: 27, Current Node #: 73, Diagonal Node #: 40, (70) 
+Element #: 27, Current Node #: 72, Diagonal Node #: 41, (71) 
+Element #: 28, Current Node #: 41, Diagonal Node #: 74, (128) 
+Element #: 28, Current Node #: 42, Diagonal Node #: 73, (127) 
+Element #: 28, Current Node #: 46, Diagonal Node #: 69, (120) 
+Element #: 28, Current Node #: 45, Diagonal Node #: 70, (121) 
+Element #: 28, Current Node #: 69, Diagonal Node #: 46, (79) 
+Element #: 28, Current Node #: 70, Diagonal Node #: 45, (78) 
+Element #: 28, Current Node #: 74, Diagonal Node #: 41, (71) 
+Element #: 28, Current Node #: 73, Diagonal Node #: 42, (72) 
+Element #: 29, Current Node #: 42, Diagonal Node #: 75, (129) 
+Element #: 29, Current Node #: 43, Diagonal Node #: 74, (128) 
+Element #: 29, Current Node #: 47, Diagonal Node #: 70, (121) 
+Element #: 29, Current Node #: 46, Diagonal Node #: 71, (122) 
+Element #: 29, Current Node #: 70, Diagonal Node #: 47, (80) 
+Element #: 29, Current Node #: 71, Diagonal Node #: 46, (79) 
+Element #: 29, Current Node #: 75, Diagonal Node #: 42, (72) 
+Element #: 29, Current Node #: 74, Diagonal Node #: 43, (73) 
+Element #: 30, Current Node #: 44, Diagonal Node #: 77, (134) 
+Element #: 30, Current Node #: 45, Diagonal Node #: 76, (133) 
+Element #: 30, Current Node #: 49, Diagonal Node #: 72, (126) 
+Element #: 30, Current Node #: 48, Diagonal Node #: 73, (127) 
+Element #: 30, Current Node #: 72, Diagonal Node #: 49, (85) 
+Element #: 30, Current Node #: 73, Diagonal Node #: 48, (84) 
+Element #: 30, Current Node #: 77, Diagonal Node #: 44, (77) 
+Element #: 30, Current Node #: 76, Diagonal Node #: 45, (78) 
+Element #: 31, Current Node #: 45, Diagonal Node #: 78, (135) 
+Element #: 31, Current Node #: 46, Diagonal Node #: 77, (134) 
+Element #: 31, Current Node #: 50, Diagonal Node #: 73, (127) 
+Element #: 31, Current Node #: 49, Diagonal Node #: 74, (128) 
+Element #: 31, Current Node #: 73, Diagonal Node #: 50, (86) 
+Element #: 31, Current Node #: 74, Diagonal Node #: 49, (85) 
+Element #: 31, Current Node #: 78, Diagonal Node #: 45, (78) 
+Element #: 31, Current Node #: 77, Diagonal Node #: 46, (79) 
+Element #: 32, Current Node #: 46, Diagonal Node #: 79, (136) 
+Element #: 32, Current Node #: 47, Diagonal Node #: 78, (135) 
+Element #: 32, Current Node #: 51, Diagonal Node #: 74, (128) 
+Element #: 32, Current Node #: 50, Diagonal Node #: 75, (129) 
+Element #: 32, Current Node #: 74, Diagonal Node #: 51, (87) 
+Element #: 32, Current Node #: 75, Diagonal Node #: 50, (86) 
+Element #: 32, Current Node #: 79, Diagonal Node #: 46, (79) 
+Element #: 32, Current Node #: 78, Diagonal Node #: 47, (80) 
+Element #: 33, Current Node #: 48, Diagonal Node #: 81, (141) 
+Element #: 33, Current Node #: 49, Diagonal Node #: 80, (140) 
+Element #: 33, Current Node #: 53, Diagonal Node #: 76, (133) 
+Element #: 33, Current Node #: 52, Diagonal Node #: 77, (134) 
+Element #: 33, Current Node #: 76, Diagonal Node #: 53, (92) 
+Element #: 33, Current Node #: 77, Diagonal Node #: 52, (91) 
+Element #: 33, Current Node #: 81, Diagonal Node #: 48, (84) 
+Element #: 33, Current Node #: 80, Diagonal Node #: 49, (85) 
+Element #: 34, Current Node #: 49, Diagonal Node #: 82, (142) 
+Element #: 34, Current Node #: 50, Diagonal Node #: 81, (141) 
+Element #: 34, Current Node #: 54, Diagonal Node #: 77, (134) 
+Element #: 34, Current Node #: 53, Diagonal Node #: 78, (135) 
+Element #: 34, Current Node #: 77, Diagonal Node #: 54, (93) 
+Element #: 34, Current Node #: 78, Diagonal Node #: 53, (92) 
+Element #: 34, Current Node #: 82, Diagonal Node #: 49, (85) 
+Element #: 34, Current Node #: 81, Diagonal Node #: 50, (86) 
+Element #: 35, Current Node #: 50, Diagonal Node #: 83, (143) 
+Element #: 35, Current Node #: 51, Diagonal Node #: 82, (142) 
+Element #: 35, Current Node #: 55, Diagonal Node #: 78, (135) 
+Element #: 35, Current Node #: 54, Diagonal Node #: 79, (136) 
+Element #: 35, Current Node #: 78, Diagonal Node #: 55, (94) 
+Element #: 35, Current Node #: 79, Diagonal Node #: 54, (93) 
+Element #: 35, Current Node #: 83, Diagonal Node #: 50, (86) 
+Element #: 35, Current Node #: 82, Diagonal Node #: 51, (87) 
+Element #: 36, Current Node #: 56, Diagonal Node #: 89, (155) 
+Element #: 36, Current Node #: 57, Diagonal Node #: 88, (154) 
+Element #: 36, Current Node #: 61, Diagonal Node #: 84, (147) 
+Element #: 36, Current Node #: 60, Diagonal Node #: 85, (148) 
+Element #: 36, Current Node #: 84, Diagonal Node #: 61, (106) 
+Element #: 36, Current Node #: 85, Diagonal Node #: 60, (105) 
+Element #: 36, Current Node #: 89, Diagonal Node #: 56, (98) 
+Element #: 36, Current Node #: 88, Diagonal Node #: 57, (99) 
+Element #: 37, Current Node #: 57, Diagonal Node #: 90, (156) 
+Element #: 37, Current Node #: 58, Diagonal Node #: 89, (155) 
+Element #: 37, Current Node #: 62, Diagonal Node #: 85, (148) 
+Element #: 37, Current Node #: 61, Diagonal Node #: 86, (149) 
+Element #: 37, Current Node #: 85, Diagonal Node #: 62, (107) 
+Element #: 37, Current Node #: 86, Diagonal Node #: 61, (106) 
+Element #: 37, Current Node #: 90, Diagonal Node #: 57, (99) 
+Element #: 37, Current Node #: 89, Diagonal Node #: 58, (100) 
+Element #: 38, Current Node #: 58, Diagonal Node #: 91, (157) 
+Element #: 38, Current Node #: 59, Diagonal Node #: 90, (156) 
+Element #: 38, Current Node #: 63, Diagonal Node #: 86, (149) 
+Element #: 38, Current Node #: 62, Diagonal Node #: 87, (150) 
+Element #: 38, Current Node #: 86, Diagonal Node #: 63, (108) 
+Element #: 38, Current Node #: 87, Diagonal Node #: 62, (107) 
+Element #: 38, Current Node #: 91, Diagonal Node #: 58, (100) 
+Element #: 38, Current Node #: 90, Diagonal Node #: 59, (101) 
+Element #: 39, Current Node #: 60, Diagonal Node #: 93, (162) 
+Element #: 39, Current Node #: 61, Diagonal Node #: 92, (161) 
+Element #: 39, Current Node #: 65, Diagonal Node #: 88, (154) 
+Element #: 39, Current Node #: 64, Diagonal Node #: 89, (155) 
+Element #: 39, Current Node #: 88, Diagonal Node #: 65, (113) 
+Element #: 39, Current Node #: 89, Diagonal Node #: 64, (112) 
+Element #: 39, Current Node #: 93, Diagonal Node #: 60, (105) 
+Element #: 39, Current Node #: 92, Diagonal Node #: 61, (106) 
+Element #: 40, Current Node #: 61, Diagonal Node #: 94, (163) 
+Element #: 40, Current Node #: 62, Diagonal Node #: 93, (162) 
+Element #: 40, Current Node #: 66, Diagonal Node #: 89, (155) 
+Element #: 40, Current Node #: 65, Diagonal Node #: 90, (156) 
+Element #: 40, Current Node #: 89, Diagonal Node #: 66, (114) 
+Element #: 40, Current Node #: 90, Diagonal Node #: 65, (113) 
+Element #: 40, Current Node #: 94, Diagonal Node #: 61, (106) 
+Element #: 40, Current Node #: 93, Diagonal Node #: 62, (107) 
+Element #: 41, Current Node #: 62, Diagonal Node #: 95, (164) 
+Element #: 41, Current Node #: 63, Diagonal Node #: 94, (163) 
+Element #: 41, Current Node #: 67, Diagonal Node #: 90, (156) 
+Element #: 41, Current Node #: 66, Diagonal Node #: 91, (157) 
+Element #: 41, Current Node #: 90, Diagonal Node #: 67, (115) 
+Element #: 41, Current Node #: 91, Diagonal Node #: 66, (114) 
+Element #: 41, Current Node #: 95, Diagonal Node #: 62, (107) 
+Element #: 41, Current Node #: 94, Diagonal Node #: 63, (108) 
+Element #: 42, Current Node #: 64, Diagonal Node #: 97, (169) 
+Element #: 42, Current Node #: 65, Diagonal Node #: 96, (168) 
+Element #: 42, Current Node #: 69, Diagonal Node #: 92, (161) 
+Element #: 42, Current Node #: 68, Diagonal Node #: 93, (162) 
+Element #: 42, Current Node #: 92, Diagonal Node #: 69, (120) 
+Element #: 42, Current Node #: 93, Diagonal Node #: 68, (119) 
+Element #: 42, Current Node #: 97, Diagonal Node #: 64, (112) 
+Element #: 42, Current Node #: 96, Diagonal Node #: 65, (113) 
+Element #: 43, Current Node #: 65, Diagonal Node #: 98, (170) 
+Element #: 43, Current Node #: 66, Diagonal Node #: 97, (169) 
+Element #: 43, Current Node #: 70, Diagonal Node #: 93, (162) 
+Element #: 43, Current Node #: 69, Diagonal Node #: 94, (163) 
+Element #: 43, Current Node #: 93, Diagonal Node #: 70, (121) 
+Element #: 43, Current Node #: 94, Diagonal Node #: 69, (120) 
+Element #: 43, Current Node #: 98, Diagonal Node #: 65, (113) 
+Element #: 43, Current Node #: 97, Diagonal Node #: 66, (114) 
+Element #: 44, Current Node #: 66, Diagonal Node #: 99, (171) 
+Element #: 44, Current Node #: 67, Diagonal Node #: 98, (170) 
+Element #: 44, Current Node #: 71, Diagonal Node #: 94, (163) 
+Element #: 44, Current Node #: 70, Diagonal Node #: 95, (164) 
+Element #: 44, Current Node #: 94, Diagonal Node #: 71, (122) 
+Element #: 44, Current Node #: 95, Diagonal Node #: 70, (121) 
+Element #: 44, Current Node #: 99, Diagonal Node #: 66, (114) 
+Element #: 44, Current Node #: 98, Diagonal Node #: 67, (115) 
+Element #: 45, Current Node #: 68, Diagonal Node #: 101, (176) 
+Element #: 45, Current Node #: 69, Diagonal Node #: 100, (175) 
+Element #: 45, Current Node #: 73, Diagonal Node #: 96, (168) 
+Element #: 45, Current Node #: 72, Diagonal Node #: 97, (169) 
+Element #: 45, Current Node #: 96, Diagonal Node #: 73, (127) 
+Element #: 45, Current Node #: 97, Diagonal Node #: 72, (126) 
+Element #: 45, Current Node #: 101, Diagonal Node #: 68, (119) 
+Element #: 45, Current Node #: 100, Diagonal Node #: 69, (120) 
+Element #: 46, Current Node #: 69, Diagonal Node #: 102, (177) 
+Element #: 46, Current Node #: 70, Diagonal Node #: 101, (176) 
+Element #: 46, Current Node #: 74, Diagonal Node #: 97, (169) 
+Element #: 46, Current Node #: 73, Diagonal Node #: 98, (170) 
+Element #: 46, Current Node #: 97, Diagonal Node #: 74, (128) 
+Element #: 46, Current Node #: 98, Diagonal Node #: 73, (127) 
+Element #: 46, Current Node #: 102, Diagonal Node #: 69, (120) 
+Element #: 46, Current Node #: 101, Diagonal Node #: 70, (121) 
+Element #: 47, Current Node #: 70, Diagonal Node #: 103, (178) 
+Element #: 47, Current Node #: 71, Diagonal Node #: 102, (177) 
+Element #: 47, Current Node #: 75, Diagonal Node #: 98, (170) 
+Element #: 47, Current Node #: 74, Diagonal Node #: 99, (171) 
+Element #: 47, Current Node #: 98, Diagonal Node #: 75, (129) 
+Element #: 47, Current Node #: 99, Diagonal Node #: 74, (128) 
+Element #: 47, Current Node #: 103, Diagonal Node #: 70, (121) 
+Element #: 47, Current Node #: 102, Diagonal Node #: 71, (122) 
+Element #: 48, Current Node #: 72, Diagonal Node #: 105, (183) 
+Element #: 48, Current Node #: 73, Diagonal Node #: 104, (182) 
+Element #: 48, Current Node #: 77, Diagonal Node #: 100, (175) 
+Element #: 48, Current Node #: 76, Diagonal Node #: 101, (176) 
+Element #: 48, Current Node #: 100, Diagonal Node #: 77, (134) 
+Element #: 48, Current Node #: 101, Diagonal Node #: 76, (133) 
+Element #: 48, Current Node #: 105, Diagonal Node #: 72, (126) 
+Element #: 48, Current Node #: 104, Diagonal Node #: 73, (127) 
+Element #: 49, Current Node #: 73, Diagonal Node #: 106, (184) 
+Element #: 49, Current Node #: 74, Diagonal Node #: 105, (183) 
+Element #: 49, Current Node #: 78, Diagonal Node #: 101, (176) 
+Element #: 49, Current Node #: 77, Diagonal Node #: 102, (177) 
+Element #: 49, Current Node #: 101, Diagonal Node #: 78, (135) 
+Element #: 49, Current Node #: 102, Diagonal Node #: 77, (134) 
+Element #: 49, Current Node #: 106, Diagonal Node #: 73, (127) 
+Element #: 49, Current Node #: 105, Diagonal Node #: 74, (128) 
+Element #: 50, Current Node #: 74, Diagonal Node #: 107, (185) 
+Element #: 50, Current Node #: 75, Diagonal Node #: 106, (184) 
+Element #: 50, Current Node #: 79, Diagonal Node #: 102, (177) 
+Element #: 50, Current Node #: 78, Diagonal Node #: 103, (178) 
+Element #: 50, Current Node #: 102, Diagonal Node #: 79, (136) 
+Element #: 50, Current Node #: 103, Diagonal Node #: 78, (135) 
+Element #: 50, Current Node #: 107, Diagonal Node #: 74, (128) 
+Element #: 50, Current Node #: 106, Diagonal Node #: 75, (129) 
+Element #: 51, Current Node #: 76, Diagonal Node #: 109, (190) 
+Element #: 51, Current Node #: 77, Diagonal Node #: 108, (189) 
+Element #: 51, Current Node #: 81, Diagonal Node #: 104, (182) 
+Element #: 51, Current Node #: 80, Diagonal Node #: 105, (183) 
+Element #: 51, Current Node #: 104, Diagonal Node #: 81, (141) 
+Element #: 51, Current Node #: 105, Diagonal Node #: 80, (140) 
+Element #: 51, Current Node #: 109, Diagonal Node #: 76, (133) 
+Element #: 51, Current Node #: 108, Diagonal Node #: 77, (134) 
+Element #: 52, Current Node #: 77, Diagonal Node #: 110, (191) 
+Element #: 52, Current Node #: 78, Diagonal Node #: 109, (190) 
+Element #: 52, Current Node #: 82, Diagonal Node #: 105, (183) 
+Element #: 52, Current Node #: 81, Diagonal Node #: 106, (184) 
+Element #: 52, Current Node #: 105, Diagonal Node #: 82, (142) 
+Element #: 52, Current Node #: 106, Diagonal Node #: 81, (141) 
+Element #: 52, Current Node #: 110, Diagonal Node #: 77, (134) 
+Element #: 52, Current Node #: 109, Diagonal Node #: 78, (135) 
+Element #: 53, Current Node #: 78, Diagonal Node #: 111, (192) 
+Element #: 53, Current Node #: 79, Diagonal Node #: 110, (191) 
+Element #: 53, Current Node #: 83, Diagonal Node #: 106, (184) 
+Element #: 53, Current Node #: 82, Diagonal Node #: 107, (185) 
+Element #: 53, Current Node #: 106, Diagonal Node #: 83, (143) 
+Element #: 53, Current Node #: 107, Diagonal Node #: 82, (142) 
+Element #: 53, Current Node #: 111, Diagonal Node #: 78, (135) 
+Element #: 53, Current Node #: 110, Diagonal Node #: 79, (136) 
+Element #: 54, Current Node #: 84, Diagonal Node #: 117, (204) 
+Element #: 54, Current Node #: 85, Diagonal Node #: 116, (203) 
+Element #: 54, Current Node #: 89, Diagonal Node #: 112, (196) 
+Element #: 54, Current Node #: 88, Diagonal Node #: 113, (197) 
+Element #: 54, Current Node #: 112, Diagonal Node #: 89, (155) 
+Element #: 54, Current Node #: 113, Diagonal Node #: 88, (154) 
+Element #: 54, Current Node #: 117, Diagonal Node #: 84, (147) 
+Element #: 54, Current Node #: 116, Diagonal Node #: 85, (148) 
+Element #: 55, Current Node #: 85, Diagonal Node #: 118, (205) 
+Element #: 55, Current Node #: 86, Diagonal Node #: 117, (204) 
+Element #: 55, Current Node #: 90, Diagonal Node #: 113, (197) 
+Element #: 55, Current Node #: 89, Diagonal Node #: 114, (198) 
+Element #: 55, Current Node #: 113, Diagonal Node #: 90, (156) 
+Element #: 55, Current Node #: 114, Diagonal Node #: 89, (155) 
+Element #: 55, Current Node #: 118, Diagonal Node #: 85, (148) 
+Element #: 55, Current Node #: 117, Diagonal Node #: 86, (149) 
+Element #: 56, Current Node #: 86, Diagonal Node #: 119, (206) 
+Element #: 56, Current Node #: 87, Diagonal Node #: 118, (205) 
+Element #: 56, Current Node #: 91, Diagonal Node #: 114, (198) 
+Element #: 56, Current Node #: 90, Diagonal Node #: 115, (199) 
+Element #: 56, Current Node #: 114, Diagonal Node #: 91, (157) 
+Element #: 56, Current Node #: 115, Diagonal Node #: 90, (156) 
+Element #: 56, Current Node #: 119, Diagonal Node #: 86, (149) 
+Element #: 56, Current Node #: 118, Diagonal Node #: 87, (150) 
+Element #: 57, Current Node #: 88, Diagonal Node #: 121, (211) 
+Element #: 57, Current Node #: 89, Diagonal Node #: 120, (210) 
+Element #: 57, Current Node #: 93, Diagonal Node #: 116, (203) 
+Element #: 57, Current Node #: 92, Diagonal Node #: 117, (204) 
+Element #: 57, Current Node #: 116, Diagonal Node #: 93, (162) 
+Element #: 57, Current Node #: 117, Diagonal Node #: 92, (161) 
+Element #: 57, Current Node #: 121, Diagonal Node #: 88, (154) 
+Element #: 57, Current Node #: 120, Diagonal Node #: 89, (155) 
+Element #: 58, Current Node #: 89, Diagonal Node #: 122, (212) 
+Element #: 58, Current Node #: 90, Diagonal Node #: 121, (211) 
+Element #: 58, Current Node #: 94, Diagonal Node #: 117, (204) 
+Element #: 58, Current Node #: 93, Diagonal Node #: 118, (205) 
+Element #: 58, Current Node #: 117, Diagonal Node #: 94, (163) 
+Element #: 58, Current Node #: 118, Diagonal Node #: 93, (162) 
+Element #: 58, Current Node #: 122, Diagonal Node #: 89, (155) 
+Element #: 58, Current Node #: 121, Diagonal Node #: 90, (156) 
+Element #: 59, Current Node #: 90, Diagonal Node #: 123, (213) 
+Element #: 59, Current Node #: 91, Diagonal Node #: 122, (212) 
+Element #: 59, Current Node #: 95, Diagonal Node #: 118, (205) 
+Element #: 59, Current Node #: 94, Diagonal Node #: 119, (206) 
+Element #: 59, Current Node #: 118, Diagonal Node #: 95, (164) 
+Element #: 59, Current Node #: 119, Diagonal Node #: 94, (163) 
+Element #: 59, Current Node #: 123, Diagonal Node #: 90, (156) 
+Element #: 59, Current Node #: 122, Diagonal Node #: 91, (157) 
+Element #: 60, Current Node #: 92, Diagonal Node #: 125, (218) 
+Element #: 60, Current Node #: 93, Diagonal Node #: 124, (217) 
+Element #: 60, Current Node #: 97, Diagonal Node #: 120, (210) 
+Element #: 60, Current Node #: 96, Diagonal Node #: 121, (211) 
+Element #: 60, Current Node #: 120, Diagonal Node #: 97, (169) 
+Element #: 60, Current Node #: 121, Diagonal Node #: 96, (168) 
+Element #: 60, Current Node #: 125, Diagonal Node #: 92, (161) 
+Element #: 60, Current Node #: 124, Diagonal Node #: 93, (162) 
+Element #: 61, Current Node #: 93, Diagonal Node #: 126, (219) 
+Element #: 61, Current Node #: 94, Diagonal Node #: 125, (218) 
+Element #: 61, Current Node #: 98, Diagonal Node #: 121, (211) 
+Element #: 61, Current Node #: 97, Diagonal Node #: 122, (212) 
+Element #: 61, Current Node #: 121, Diagonal Node #: 98, (170) 
+Element #: 61, Current Node #: 122, Diagonal Node #: 97, (169) 
+Element #: 61, Current Node #: 126, Diagonal Node #: 93, (162) 
+Element #: 61, Current Node #: 125, Diagonal Node #: 94, (163) 
+Element #: 62, Current Node #: 94, Diagonal Node #: 127, (220) 
+Element #: 62, Current Node #: 95, Diagonal Node #: 126, (219) 
+Element #: 62, Current Node #: 99, Diagonal Node #: 122, (212) 
+Element #: 62, Current Node #: 98, Diagonal Node #: 123, (213) 
+Element #: 62, Current Node #: 122, Diagonal Node #: 99, (171) 
+Element #: 62, Current Node #: 123, Diagonal Node #: 98, (170) 
+Element #: 62, Current Node #: 127, Diagonal Node #: 94, (163) 
+Element #: 62, Current Node #: 126, Diagonal Node #: 95, (164) 
+Element #: 63, Current Node #: 96, Diagonal Node #: 129, (225) 
+Element #: 63, Current Node #: 97, Diagonal Node #: 128, (224) 
+Element #: 63, Current Node #: 101, Diagonal Node #: 124, (217) 
+Element #: 63, Current Node #: 100, Diagonal Node #: 125, (218) 
+Element #: 63, Current Node #: 124, Diagonal Node #: 101, (176) 
+Element #: 63, Current Node #: 125, Diagonal Node #: 100, (175) 
+Element #: 63, Current Node #: 129, Diagonal Node #: 96, (168) 
+Element #: 63, Current Node #: 128, Diagonal Node #: 97, (169) 
+Element #: 64, Current Node #: 97, Diagonal Node #: 130, (226) 
+Element #: 64, Current Node #: 98, Diagonal Node #: 129, (225) 
+Element #: 64, Current Node #: 102, Diagonal Node #: 125, (218) 
+Element #: 64, Current Node #: 101, Diagonal Node #: 126, (219) 
+Element #: 64, Current Node #: 125, Diagonal Node #: 102, (177) 
+Element #: 64, Current Node #: 126, Diagonal Node #: 101, (176) 
+Element #: 64, Current Node #: 130, Diagonal Node #: 97, (169) 
+Element #: 64, Current Node #: 129, Diagonal Node #: 98, (170) 
+Element #: 65, Current Node #: 98, Diagonal Node #: 131, (227) 
+Element #: 65, Current Node #: 99, Diagonal Node #: 130, (226) 
+Element #: 65, Current Node #: 103, Diagonal Node #: 126, (219) 
+Element #: 65, Current Node #: 102, Diagonal Node #: 127, (220) 
+Element #: 65, Current Node #: 126, Diagonal Node #: 103, (178) 
+Element #: 65, Current Node #: 127, Diagonal Node #: 102, (177) 
+Element #: 65, Current Node #: 131, Diagonal Node #: 98, (170) 
+Element #: 65, Current Node #: 130, Diagonal Node #: 99, (171) 
+Element #: 66, Current Node #: 100, Diagonal Node #: 133, (232) 
+Element #: 66, Current Node #: 101, Diagonal Node #: 132, (231) 
+Element #: 66, Current Node #: 105, Diagonal Node #: 128, (224) 
+Element #: 66, Current Node #: 104, Diagonal Node #: 129, (225) 
+Element #: 66, Current Node #: 128, Diagonal Node #: 105, (183) 
+Element #: 66, Current Node #: 129, Diagonal Node #: 104, (182) 
+Element #: 66, Current Node #: 133, Diagonal Node #: 100, (175) 
+Element #: 66, Current Node #: 132, Diagonal Node #: 101, (176) 
+Element #: 67, Current Node #: 101, Diagonal Node #: 134, (233) 
+Element #: 67, Current Node #: 102, Diagonal Node #: 133, (232) 
+Element #: 67, Current Node #: 106, Diagonal Node #: 129, (225) 
+Element #: 67, Current Node #: 105, Diagonal Node #: 130, (226) 
+Element #: 67, Current Node #: 129, Diagonal Node #: 106, (184) 
+Element #: 67, Current Node #: 130, Diagonal Node #: 105, (183) 
+Element #: 67, Current Node #: 134, Diagonal Node #: 101, (176) 
+Element #: 67, Current Node #: 133, Diagonal Node #: 102, (177) 
+Element #: 68, Current Node #: 102, Diagonal Node #: 135, (234) 
+Element #: 68, Current Node #: 103, Diagonal Node #: 134, (233) 
+Element #: 68, Current Node #: 107, Diagonal Node #: 130, (226) 
+Element #: 68, Current Node #: 106, Diagonal Node #: 131, (227) 
+Element #: 68, Current Node #: 130, Diagonal Node #: 107, (185) 
+Element #: 68, Current Node #: 131, Diagonal Node #: 106, (184) 
+Element #: 68, Current Node #: 135, Diagonal Node #: 102, (177) 
+Element #: 68, Current Node #: 134, Diagonal Node #: 103, (178) 
+Element #: 69, Current Node #: 104, Diagonal Node #: 137, (239) 
+Element #: 69, Current Node #: 105, Diagonal Node #: 136, (238) 
+Element #: 69, Current Node #: 109, Diagonal Node #: 132, (231) 
+Element #: 69, Current Node #: 108, Diagonal Node #: 133, (232) 
+Element #: 69, Current Node #: 132, Diagonal Node #: 109, (190) 
+Element #: 69, Current Node #: 133, Diagonal Node #: 108, (189) 
+Element #: 69, Current Node #: 137, Diagonal Node #: 104, (182) 
+Element #: 69, Current Node #: 136, Diagonal Node #: 105, (183) 
+Element #: 70, Current Node #: 105, Diagonal Node #: 138, (240) 
+Element #: 70, Current Node #: 106, Diagonal Node #: 137, (239) 
+Element #: 70, Current Node #: 110, Diagonal Node #: 133, (232) 
+Element #: 70, Current Node #: 109, Diagonal Node #: 134, (233) 
+Element #: 70, Current Node #: 133, Diagonal Node #: 110, (191) 
+Element #: 70, Current Node #: 134, Diagonal Node #: 109, (190) 
+Element #: 70, Current Node #: 138, Diagonal Node #: 105, (183) 
+Element #: 70, Current Node #: 137, Diagonal Node #: 106, (184) 
+Element #: 71, Current Node #: 106, Diagonal Node #: 139, (241) 
+Element #: 71, Current Node #: 107, Diagonal Node #: 138, (240) 
+Element #: 71, Current Node #: 111, Diagonal Node #: 134, (233) 
+Element #: 71, Current Node #: 110, Diagonal Node #: 135, (234) 
+Element #: 71, Current Node #: 134, Diagonal Node #: 111, (192) 
+Element #: 71, Current Node #: 135, Diagonal Node #: 110, (191) 
+Element #: 71, Current Node #: 139, Diagonal Node #: 106, (184) 
+Element #: 71, Current Node #: 138, Diagonal Node #: 107, (185) 
+Element #: 72, Current Node #: 112, Diagonal Node #: 145, (253) 
+Element #: 72, Current Node #: 113, Diagonal Node #: 144, (252) 
+Element #: 72, Current Node #: 117, Diagonal Node #: 140, (245) 
+Element #: 72, Current Node #: 116, Diagonal Node #: 141, (246) 
+Element #: 72, Current Node #: 140, Diagonal Node #: 117, (204) 
+Element #: 72, Current Node #: 141, Diagonal Node #: 116, (203) 
+Element #: 72, Current Node #: 145, Diagonal Node #: 112, (196) 
+Element #: 72, Current Node #: 144, Diagonal Node #: 113, (197) 
+Element #: 73, Current Node #: 113, Diagonal Node #: 146, (254) 
+Element #: 73, Current Node #: 114, Diagonal Node #: 145, (253) 
+Element #: 73, Current Node #: 118, Diagonal Node #: 141, (246) 
+Element #: 73, Current Node #: 117, Diagonal Node #: 142, (247) 
+Element #: 73, Current Node #: 141, Diagonal Node #: 118, (205) 
+Element #: 73, Current Node #: 142, Diagonal Node #: 117, (204) 
+Element #: 73, Current Node #: 146, Diagonal Node #: 113, (197) 
+Element #: 73, Current Node #: 145, Diagonal Node #: 114, (198) 
+Element #: 74, Current Node #: 114, Diagonal Node #: 147, (255) 
+Element #: 74, Current Node #: 115, Diagonal Node #: 146, (254) 
+Element #: 74, Current Node #: 119, Diagonal Node #: 142, (247) 
+Element #: 74, Current Node #: 118, Diagonal Node #: 143, (248) 
+Element #: 74, Current Node #: 142, Diagonal Node #: 119, (206) 
+Element #: 74, Current Node #: 143, Diagonal Node #: 118, (205) 
+Element #: 74, Current Node #: 147, Diagonal Node #: 114, (198) 
+Element #: 74, Current Node #: 146, Diagonal Node #: 115, (199) 
+Element #: 75, Current Node #: 116, Diagonal Node #: 149, (260) 
+Element #: 75, Current Node #: 117, Diagonal Node #: 148, (259) 
+Element #: 75, Current Node #: 121, Diagonal Node #: 144, (252) 
+Element #: 75, Current Node #: 120, Diagonal Node #: 145, (253) 
+Element #: 75, Current Node #: 144, Diagonal Node #: 121, (211) 
+Element #: 75, Current Node #: 145, Diagonal Node #: 120, (210) 
+Element #: 75, Current Node #: 149, Diagonal Node #: 116, (203) 
+Element #: 75, Current Node #: 148, Diagonal Node #: 117, (204) 
+Element #: 76, Current Node #: 117, Diagonal Node #: 150, (261) 
+Element #: 76, Current Node #: 118, Diagonal Node #: 149, (260) 
+Element #: 76, Current Node #: 122, Diagonal Node #: 145, (253) 
+Element #: 76, Current Node #: 121, Diagonal Node #: 146, (254) 
+Element #: 76, Current Node #: 145, Diagonal Node #: 122, (212) 
+Element #: 76, Current Node #: 146, Diagonal Node #: 121, (211) 
+Element #: 76, Current Node #: 150, Diagonal Node #: 117, (204) 
+Element #: 76, Current Node #: 149, Diagonal Node #: 118, (205) 
+Element #: 77, Current Node #: 118, Diagonal Node #: 151, (262) 
+Element #: 77, Current Node #: 119, Diagonal Node #: 150, (261) 
+Element #: 77, Current Node #: 123, Diagonal Node #: 146, (254) 
+Element #: 77, Current Node #: 122, Diagonal Node #: 147, (255) 
+Element #: 77, Current Node #: 146, Diagonal Node #: 123, (213) 
+Element #: 77, Current Node #: 147, Diagonal Node #: 122, (212) 
+Element #: 77, Current Node #: 151, Diagonal Node #: 118, (205) 
+Element #: 77, Current Node #: 150, Diagonal Node #: 119, (206) 
+Element #: 78, Current Node #: 120, Diagonal Node #: 153, (267) 
+Element #: 78, Current Node #: 121, Diagonal Node #: 152, (266) 
+Element #: 78, Current Node #: 125, Diagonal Node #: 148, (259) 
+Element #: 78, Current Node #: 124, Diagonal Node #: 149, (260) 
+Element #: 78, Current Node #: 148, Diagonal Node #: 125, (218) 
+Element #: 78, Current Node #: 149, Diagonal Node #: 124, (217) 
+Element #: 78, Current Node #: 153, Diagonal Node #: 120, (210) 
+Element #: 78, Current Node #: 152, Diagonal Node #: 121, (211) 
+Element #: 79, Current Node #: 121, Diagonal Node #: 154, (268) 
+Element #: 79, Current Node #: 122, Diagonal Node #: 153, (267) 
+Element #: 79, Current Node #: 126, Diagonal Node #: 149, (260) 
+Element #: 79, Current Node #: 125, Diagonal Node #: 150, (261) 
+Element #: 79, Current Node #: 149, Diagonal Node #: 126, (219) 
+Element #: 79, Current Node #: 150, Diagonal Node #: 125, (218) 
+Element #: 79, Current Node #: 154, Diagonal Node #: 121, (211) 
+Element #: 79, Current Node #: 153, Diagonal Node #: 122, (212) 
+Element #: 80, Current Node #: 122, Diagonal Node #: 155, (269) 
+Element #: 80, Current Node #: 123, Diagonal Node #: 154, (268) 
+Element #: 80, Current Node #: 127, Diagonal Node #: 150, (261) 
+Element #: 80, Current Node #: 126, Diagonal Node #: 151, (262) 
+Element #: 80, Current Node #: 150, Diagonal Node #: 127, (220) 
+Element #: 80, Current Node #: 151, Diagonal Node #: 126, (219) 
+Element #: 80, Current Node #: 155, Diagonal Node #: 122, (212) 
+Element #: 80, Current Node #: 154, Diagonal Node #: 123, (213) 
+Element #: 81, Current Node #: 124, Diagonal Node #: 157, (274) 
+Element #: 81, Current Node #: 125, Diagonal Node #: 156, (273) 
+Element #: 81, Current Node #: 129, Diagonal Node #: 152, (266) 
+Element #: 81, Current Node #: 128, Diagonal Node #: 153, (267) 
+Element #: 81, Current Node #: 152, Diagonal Node #: 129, (225) 
+Element #: 81, Current Node #: 153, Diagonal Node #: 128, (224) 
+Element #: 81, Current Node #: 157, Diagonal Node #: 124, (217) 
+Element #: 81, Current Node #: 156, Diagonal Node #: 125, (218) 
+Element #: 82, Current Node #: 125, Diagonal Node #: 158, (275) 
+Element #: 82, Current Node #: 126, Diagonal Node #: 157, (274) 
+Element #: 82, Current Node #: 130, Diagonal Node #: 153, (267) 
+Element #: 82, Current Node #: 129, Diagonal Node #: 154, (268) 
+Element #: 82, Current Node #: 153, Diagonal Node #: 130, (226) 
+Element #: 82, Current Node #: 154, Diagonal Node #: 129, (225) 
+Element #: 82, Current Node #: 158, Diagonal Node #: 125, (218) 
+Element #: 82, Current Node #: 157, Diagonal Node #: 126, (219) 
+Element #: 83, Current Node #: 126, Diagonal Node #: 159, (276) 
+Element #: 83, Current Node #: 127, Diagonal Node #: 158, (275) 
+Element #: 83, Current Node #: 131, Diagonal Node #: 154, (268) 
+Element #: 83, Current Node #: 130, Diagonal Node #: 155, (269) 
+Element #: 83, Current Node #: 154, Diagonal Node #: 131, (227) 
+Element #: 83, Current Node #: 155, Diagonal Node #: 130, (226) 
+Element #: 83, Current Node #: 159, Diagonal Node #: 126, (219) 
+Element #: 83, Current Node #: 158, Diagonal Node #: 127, (220) 
+Element #: 84, Current Node #: 128, Diagonal Node #: 161, (281) 
+Element #: 84, Current Node #: 129, Diagonal Node #: 160, (280) 
+Element #: 84, Current Node #: 133, Diagonal Node #: 156, (273) 
+Element #: 84, Current Node #: 132, Diagonal Node #: 157, (274) 
+Element #: 84, Current Node #: 156, Diagonal Node #: 133, (232) 
+Element #: 84, Current Node #: 157, Diagonal Node #: 132, (231) 
+Element #: 84, Current Node #: 161, Diagonal Node #: 128, (224) 
+Element #: 84, Current Node #: 160, Diagonal Node #: 129, (225) 
+Element #: 85, Current Node #: 129, Diagonal Node #: 162, (282) 
+Element #: 85, Current Node #: 130, Diagonal Node #: 161, (281) 
+Element #: 85, Current Node #: 134, Diagonal Node #: 157, (274) 
+Element #: 85, Current Node #: 133, Diagonal Node #: 158, (275) 
+Element #: 85, Current Node #: 157, Diagonal Node #: 134, (233) 
+Element #: 85, Current Node #: 158, Diagonal Node #: 133, (232) 
+Element #: 85, Current Node #: 162, Diagonal Node #: 129, (225) 
+Element #: 85, Current Node #: 161, Diagonal Node #: 130, (226) 
+Element #: 86, Current Node #: 130, Diagonal Node #: 163, (283) 
+Element #: 86, Current Node #: 131, Diagonal Node #: 162, (282) 
+Element #: 86, Current Node #: 135, Diagonal Node #: 158, (275) 
+Element #: 86, Current Node #: 134, Diagonal Node #: 159, (276) 
+Element #: 86, Current Node #: 158, Diagonal Node #: 135, (234) 
+Element #: 86, Current Node #: 159, Diagonal Node #: 134, (233) 
+Element #: 86, Current Node #: 163, Diagonal Node #: 130, (226) 
+Element #: 86, Current Node #: 162, Diagonal Node #: 131, (227) 
+Element #: 87, Current Node #: 132, Diagonal Node #: 165, (288) 
+Element #: 87, Current Node #: 133, Diagonal Node #: 164, (287) 
+Element #: 87, Current Node #: 137, Diagonal Node #: 160, (280) 
+Element #: 87, Current Node #: 136, Diagonal Node #: 161, (281) 
+Element #: 87, Current Node #: 160, Diagonal Node #: 137, (239) 
+Element #: 87, Current Node #: 161, Diagonal Node #: 136, (238) 
+Element #: 87, Current Node #: 165, Diagonal Node #: 132, (231) 
+Element #: 87, Current Node #: 164, Diagonal Node #: 133, (232) 
+Element #: 88, Current Node #: 133, Diagonal Node #: 166, (289) 
+Element #: 88, Current Node #: 134, Diagonal Node #: 165, (288) 
+Element #: 88, Current Node #: 138, Diagonal Node #: 161, (281) 
+Element #: 88, Current Node #: 137, Diagonal Node #: 162, (282) 
+Element #: 88, Current Node #: 161, Diagonal Node #: 138, (240) 
+Element #: 88, Current Node #: 162, Diagonal Node #: 137, (239) 
+Element #: 88, Current Node #: 166, Diagonal Node #: 133, (232) 
+Element #: 88, Current Node #: 165, Diagonal Node #: 134, (233) 
+Element #: 89, Current Node #: 134, Diagonal Node #: 167, (290) 
+Element #: 89, Current Node #: 135, Diagonal Node #: 166, (289) 
+Element #: 89, Current Node #: 139, Diagonal Node #: 162, (282) 
+Element #: 89, Current Node #: 138, Diagonal Node #: 163, (283) 
+Element #: 89, Current Node #: 162, Diagonal Node #: 139, (241) 
+Element #: 89, Current Node #: 163, Diagonal Node #: 138, (240) 
+Element #: 89, Current Node #: 167, Diagonal Node #: 134, (233) 
+Element #: 89, Current Node #: 166, Diagonal Node #: 135, (234) 
+Element #: 90, Current Node #: 140, Diagonal Node #: 173, (302) 
+Element #: 90, Current Node #: 141, Diagonal Node #: 172, (301) 
+Element #: 90, Current Node #: 145, Diagonal Node #: 168, (294) 
+Element #: 90, Current Node #: 144, Diagonal Node #: 169, (295) 
+Element #: 90, Current Node #: 168, Diagonal Node #: 145, (253) 
+Element #: 90, Current Node #: 169, Diagonal Node #: 144, (252) 
+Element #: 90, Current Node #: 173, Diagonal Node #: 140, (245) 
+Element #: 90, Current Node #: 172, Diagonal Node #: 141, (246) 
+Element #: 91, Current Node #: 141, Diagonal Node #: 174, (303) 
+Element #: 91, Current Node #: 142, Diagonal Node #: 173, (302) 
+Element #: 91, Current Node #: 146, Diagonal Node #: 169, (295) 
+Element #: 91, Current Node #: 145, Diagonal Node #: 170, (296) 
+Element #: 91, Current Node #: 169, Diagonal Node #: 146, (254) 
+Element #: 91, Current Node #: 170, Diagonal Node #: 145, (253) 
+Element #: 91, Current Node #: 174, Diagonal Node #: 141, (246) 
+Element #: 91, Current Node #: 173, Diagonal Node #: 142, (247) 
+Element #: 92, Current Node #: 142, Diagonal Node #: 175, (304) 
+Element #: 92, Current Node #: 143, Diagonal Node #: 174, (303) 
+Element #: 92, Current Node #: 147, Diagonal Node #: 170, (296) 
+Element #: 92, Current Node #: 146, Diagonal Node #: 171, (297) 
+Element #: 92, Current Node #: 170, Diagonal Node #: 147, (255) 
+Element #: 92, Current Node #: 171, Diagonal Node #: 146, (254) 
+Element #: 92, Current Node #: 175, Diagonal Node #: 142, (247) 
+Element #: 92, Current Node #: 174, Diagonal Node #: 143, (248) 
+Element #: 93, Current Node #: 144, Diagonal Node #: 177, (309) 
+Element #: 93, Current Node #: 145, Diagonal Node #: 176, (308) 
+Element #: 93, Current Node #: 149, Diagonal Node #: 172, (301) 
+Element #: 93, Current Node #: 148, Diagonal Node #: 173, (302) 
+Element #: 93, Current Node #: 172, Diagonal Node #: 149, (260) 
+Element #: 93, Current Node #: 173, Diagonal Node #: 148, (259) 
+Element #: 93, Current Node #: 177, Diagonal Node #: 144, (252) 
+Element #: 93, Current Node #: 176, Diagonal Node #: 145, (253) 
+Element #: 94, Current Node #: 145, Diagonal Node #: 178, (310) 
+Element #: 94, Current Node #: 146, Diagonal Node #: 177, (309) 
+Element #: 94, Current Node #: 150, Diagonal Node #: 173, (302) 
+Element #: 94, Current Node #: 149, Diagonal Node #: 174, (303) 
+Element #: 94, Current Node #: 173, Diagonal Node #: 150, (261) 
+Element #: 94, Current Node #: 174, Diagonal Node #: 149, (260) 
+Element #: 94, Current Node #: 178, Diagonal Node #: 145, (253) 
+Element #: 94, Current Node #: 177, Diagonal Node #: 146, (254) 
+Element #: 95, Current Node #: 146, Diagonal Node #: 179, (311) 
+Element #: 95, Current Node #: 147, Diagonal Node #: 178, (310) 
+Element #: 95, Current Node #: 151, Diagonal Node #: 174, (303) 
+Element #: 95, Current Node #: 150, Diagonal Node #: 175, (304) 
+Element #: 95, Current Node #: 174, Diagonal Node #: 151, (262) 
+Element #: 95, Current Node #: 175, Diagonal Node #: 150, (261) 
+Element #: 95, Current Node #: 179, Diagonal Node #: 146, (254) 
+Element #: 95, Current Node #: 178, Diagonal Node #: 147, (255) 
+Element #: 96, Current Node #: 148, Diagonal Node #: 181, (316) 
+Element #: 96, Current Node #: 149, Diagonal Node #: 180, (315) 
+Element #: 96, Current Node #: 153, Diagonal Node #: 176, (308) 
+Element #: 96, Current Node #: 152, Diagonal Node #: 177, (309) 
+Element #: 96, Current Node #: 176, Diagonal Node #: 153, (267) 
+Element #: 96, Current Node #: 177, Diagonal Node #: 152, (266) 
+Element #: 96, Current Node #: 181, Diagonal Node #: 148, (259) 
+Element #: 96, Current Node #: 180, Diagonal Node #: 149, (260) 
+Element #: 97, Current Node #: 149, Diagonal Node #: 182, (317) 
+Element #: 97, Current Node #: 150, Diagonal Node #: 181, (316) 
+Element #: 97, Current Node #: 154, Diagonal Node #: 177, (309) 
+Element #: 97, Current Node #: 153, Diagonal Node #: 178, (310) 
+Element #: 97, Current Node #: 177, Diagonal Node #: 154, (268) 
+Element #: 97, Current Node #: 178, Diagonal Node #: 153, (267) 
+Element #: 97, Current Node #: 182, Diagonal Node #: 149, (260) 
+Element #: 97, Current Node #: 181, Diagonal Node #: 150, (261) 
+Element #: 98, Current Node #: 150, Diagonal Node #: 183, (318) 
+Element #: 98, Current Node #: 151, Diagonal Node #: 182, (317) 
+Element #: 98, Current Node #: 155, Diagonal Node #: 178, (310) 
+Element #: 98, Current Node #: 154, Diagonal Node #: 179, (311) 
+Element #: 98, Current Node #: 178, Diagonal Node #: 155, (269) 
+Element #: 98, Current Node #: 179, Diagonal Node #: 154, (268) 
+Element #: 98, Current Node #: 183, Diagonal Node #: 150, (261) 
+Element #: 98, Current Node #: 182, Diagonal Node #: 151, (262) 
+Element #: 99, Current Node #: 152, Diagonal Node #: 185, (323) 
+Element #: 99, Current Node #: 153, Diagonal Node #: 184, (322) 
+Element #: 99, Current Node #: 157, Diagonal Node #: 180, (315) 
+Element #: 99, Current Node #: 156, Diagonal Node #: 181, (316) 
+Element #: 99, Current Node #: 180, Diagonal Node #: 157, (274) 
+Element #: 99, Current Node #: 181, Diagonal Node #: 156, (273) 
+Element #: 99, Current Node #: 185, Diagonal Node #: 152, (266) 
+Element #: 99, Current Node #: 184, Diagonal Node #: 153, (267) 
+Element #: 100, Current Node #: 153, Diagonal Node #: 186, (324) 
+Element #: 100, Current Node #: 154, Diagonal Node #: 185, (323) 
+Element #: 100, Current Node #: 158, Diagonal Node #: 181, (316) 
+Element #: 100, Current Node #: 157, Diagonal Node #: 182, (317) 
+Element #: 100, Current Node #: 181, Diagonal Node #: 158, (275) 
+Element #: 100, Current Node #: 182, Diagonal Node #: 157, (274) 
+Element #: 100, Current Node #: 186, Diagonal Node #: 153, (267) 
+Element #: 100, Current Node #: 185, Diagonal Node #: 154, (268) 
+Element #: 101, Current Node #: 154, Diagonal Node #: 187, (325) 
+Element #: 101, Current Node #: 155, Diagonal Node #: 186, (324) 
+Element #: 101, Current Node #: 159, Diagonal Node #: 182, (317) 
+Element #: 101, Current Node #: 158, Diagonal Node #: 183, (318) 
+Element #: 101, Current Node #: 182, Diagonal Node #: 159, (276) 
+Element #: 101, Current Node #: 183, Diagonal Node #: 158, (275) 
+Element #: 101, Current Node #: 187, Diagonal Node #: 154, (268) 
+Element #: 101, Current Node #: 186, Diagonal Node #: 155, (269) 
+Element #: 102, Current Node #: 156, Diagonal Node #: 189, (330) 
+Element #: 102, Current Node #: 157, Diagonal Node #: 188, (329) 
+Element #: 102, Current Node #: 161, Diagonal Node #: 184, (322) 
+Element #: 102, Current Node #: 160, Diagonal Node #: 185, (323) 
+Element #: 102, Current Node #: 184, Diagonal Node #: 161, (281) 
+Element #: 102, Current Node #: 185, Diagonal Node #: 160, (280) 
+Element #: 102, Current Node #: 189, Diagonal Node #: 156, (273) 
+Element #: 102, Current Node #: 188, Diagonal Node #: 157, (274) 
+Element #: 103, Current Node #: 157, Diagonal Node #: 190, (331) 
+Element #: 103, Current Node #: 158, Diagonal Node #: 189, (330) 
+Element #: 103, Current Node #: 162, Diagonal Node #: 185, (323) 
+Element #: 103, Current Node #: 161, Diagonal Node #: 186, (324) 
+Element #: 103, Current Node #: 185, Diagonal Node #: 162, (282) 
+Element #: 103, Current Node #: 186, Diagonal Node #: 161, (281) 
+Element #: 103, Current Node #: 190, Diagonal Node #: 157, (274) 
+Element #: 103, Current Node #: 189, Diagonal Node #: 158, (275) 
+Element #: 104, Current Node #: 158, Diagonal Node #: 191, (332) 
+Element #: 104, Current Node #: 159, Diagonal Node #: 190, (331) 
+Element #: 104, Current Node #: 163, Diagonal Node #: 186, (324) 
+Element #: 104, Current Node #: 162, Diagonal Node #: 187, (325) 
+Element #: 104, Current Node #: 186, Diagonal Node #: 163, (283) 
+Element #: 104, Current Node #: 187, Diagonal Node #: 162, (282) 
+Element #: 104, Current Node #: 191, Diagonal Node #: 158, (275) 
+Element #: 104, Current Node #: 190, Diagonal Node #: 159, (276) 
+Element #: 105, Current Node #: 160, Diagonal Node #: 193, (337) 
+Element #: 105, Current Node #: 161, Diagonal Node #: 192, (336) 
+Element #: 105, Current Node #: 165, Diagonal Node #: 188, (329) 
+Element #: 105, Current Node #: 164, Diagonal Node #: 189, (330) 
+Element #: 105, Current Node #: 188, Diagonal Node #: 165, (288) 
+Element #: 105, Current Node #: 189, Diagonal Node #: 164, (287) 
+Element #: 105, Current Node #: 193, Diagonal Node #: 160, (280) 
+Element #: 105, Current Node #: 192, Diagonal Node #: 161, (281) 
+Element #: 106, Current Node #: 161, Diagonal Node #: 194, (338) 
+Element #: 106, Current Node #: 162, Diagonal Node #: 193, (337) 
+Element #: 106, Current Node #: 166, Diagonal Node #: 189, (330) 
+Element #: 106, Current Node #: 165, Diagonal Node #: 190, (331) 
+Element #: 106, Current Node #: 189, Diagonal Node #: 166, (289) 
+Element #: 106, Current Node #: 190, Diagonal Node #: 165, (288) 
+Element #: 106, Current Node #: 194, Diagonal Node #: 161, (281) 
+Element #: 106, Current Node #: 193, Diagonal Node #: 162, (282) 
+Element #: 107, Current Node #: 162, Diagonal Node #: 195, (339) 
+Element #: 107, Current Node #: 163, Diagonal Node #: 194, (338) 
+Element #: 107, Current Node #: 167, Diagonal Node #: 190, (331) 
+Element #: 107, Current Node #: 166, Diagonal Node #: 191, (332) 
+Element #: 107, Current Node #: 190, Diagonal Node #: 167, (290) 
+Element #: 107, Current Node #: 191, Diagonal Node #: 166, (289) 
+Element #: 107, Current Node #: 195, Diagonal Node #: 162, (282) 
+Element #: 107, Current Node #: 194, Diagonal Node #: 163, (283) 
+Element #: 108, Current Node #: 3, Diagonal Node #: 204, (60) 
+Element #: 108, Current Node #: 196, Diagonal Node #: 35, (59) 
+Element #: 108, Current Node #: 197, Diagonal Node #: 31, (52) 
+Element #: 108, Current Node #: 7, Diagonal Node #: 203, (53) 
+Element #: 108, Current Node #: 31, Diagonal Node #: 197, (11) 
+Element #: 108, Current Node #: 203, Diagonal Node #: 7, (10) 
+Element #: 108, Current Node #: 204, Diagonal Node #: 3, (3) 
+Element #: 108, Current Node #: 35, Diagonal Node #: 196, (4) 
+Element #: 109, Current Node #: 7, Diagonal Node #: 205, (67) 
+Element #: 109, Current Node #: 197, Diagonal Node #: 39, (66) 
+Element #: 109, Current Node #: 198, Diagonal Node #: 35, (59) 
+Element #: 109, Current Node #: 11, Diagonal Node #: 204, (60) 
+Element #: 109, Current Node #: 35, Diagonal Node #: 198, (18) 
+Element #: 109, Current Node #: 204, Diagonal Node #: 11, (17) 
+Element #: 109, Current Node #: 205, Diagonal Node #: 7, (10) 
+Element #: 109, Current Node #: 39, Diagonal Node #: 197, (11) 
+Element #: 110, Current Node #: 11, Diagonal Node #: 206, (74) 
+Element #: 110, Current Node #: 198, Diagonal Node #: 43, (73) 
+Element #: 110, Current Node #: 199, Diagonal Node #: 39, (66) 
+Element #: 110, Current Node #: 15, Diagonal Node #: 205, (67) 
+Element #: 110, Current Node #: 39, Diagonal Node #: 199, (25) 
+Element #: 110, Current Node #: 205, Diagonal Node #: 15, (24) 
+Element #: 110, Current Node #: 206, Diagonal Node #: 11, (17) 
+Element #: 110, Current Node #: 43, Diagonal Node #: 198, (18) 
+Element #: 111, Current Node #: 15, Diagonal Node #: 207, (81) 
+Element #: 111, Current Node #: 199, Diagonal Node #: 47, (80) 
+Element #: 111, Current Node #: 200, Diagonal Node #: 43, (73) 
+Element #: 111, Current Node #: 19, Diagonal Node #: 206, (74) 
+Element #: 111, Current Node #: 43, Diagonal Node #: 200, (32) 
+Element #: 111, Current Node #: 206, Diagonal Node #: 19, (31) 
+Element #: 111, Current Node #: 207, Diagonal Node #: 15, (24) 
+Element #: 111, Current Node #: 47, Diagonal Node #: 199, (25) 
+Element #: 112, Current Node #: 19, Diagonal Node #: 208, (88) 
+Element #: 112, Current Node #: 200, Diagonal Node #: 51, (87) 
+Element #: 112, Current Node #: 201, Diagonal Node #: 47, (80) 
+Element #: 112, Current Node #: 23, Diagonal Node #: 207, (81) 
+Element #: 112, Current Node #: 47, Diagonal Node #: 201, (39) 
+Element #: 112, Current Node #: 207, Diagonal Node #: 23, (38) 
+Element #: 112, Current Node #: 208, Diagonal Node #: 19, (31) 
+Element #: 112, Current Node #: 51, Diagonal Node #: 200, (32) 
+Element #: 113, Current Node #: 23, Diagonal Node #: 209, (95) 
+Element #: 113, Current Node #: 201, Diagonal Node #: 55, (94) 
+Element #: 113, Current Node #: 202, Diagonal Node #: 51, (87) 
+Element #: 113, Current Node #: 27, Diagonal Node #: 208, (88) 
+Element #: 113, Current Node #: 51, Diagonal Node #: 202, (46) 
+Element #: 113, Current Node #: 208, Diagonal Node #: 27, (45) 
+Element #: 113, Current Node #: 209, Diagonal Node #: 23, (38) 
+Element #: 113, Current Node #: 55, Diagonal Node #: 201, (39) 
+Element #: 114, Current Node #: 31, Diagonal Node #: 211, (109) 
+Element #: 114, Current Node #: 203, Diagonal Node #: 63, (108) 
+Element #: 114, Current Node #: 204, Diagonal Node #: 59, (101) 
+Element #: 114, Current Node #: 35, Diagonal Node #: 210, (102) 
+Element #: 114, Current Node #: 59, Diagonal Node #: 204, (60) 
+Element #: 114, Current Node #: 210, Diagonal Node #: 35, (59) 
+Element #: 114, Current Node #: 211, Diagonal Node #: 31, (52) 
+Element #: 114, Current Node #: 63, Diagonal Node #: 203, (53) 
+Element #: 115, Current Node #: 35, Diagonal Node #: 212, (116) 
+Element #: 115, Current Node #: 204, Diagonal Node #: 67, (115) 
+Element #: 115, Current Node #: 205, Diagonal Node #: 63, (108) 
+Element #: 115, Current Node #: 39, Diagonal Node #: 211, (109) 
+Element #: 115, Current Node #: 63, Diagonal Node #: 205, (67) 
+Element #: 115, Current Node #: 211, Diagonal Node #: 39, (66) 
+Element #: 115, Current Node #: 212, Diagonal Node #: 35, (59) 
+Element #: 115, Current Node #: 67, Diagonal Node #: 204, (60) 
+Element #: 116, Current Node #: 39, Diagonal Node #: 213, (123) 
+Element #: 116, Current Node #: 205, Diagonal Node #: 71, (122) 
+Element #: 116, Current Node #: 206, Diagonal Node #: 67, (115) 
+Element #: 116, Current Node #: 43, Diagonal Node #: 212, (116) 
+Element #: 116, Current Node #: 67, Diagonal Node #: 206, (74) 
+Element #: 116, Current Node #: 212, Diagonal Node #: 43, (73) 
+Element #: 116, Current Node #: 213, Diagonal Node #: 39, (66) 
+Element #: 116, Current Node #: 71, Diagonal Node #: 205, (67) 
+Element #: 117, Current Node #: 43, Diagonal Node #: 214, (130) 
+Element #: 117, Current Node #: 206, Diagonal Node #: 75, (129) 
+Element #: 117, Current Node #: 207, Diagonal Node #: 71, (122) 
+Element #: 117, Current Node #: 47, Diagonal Node #: 213, (123) 
+Element #: 117, Current Node #: 71, Diagonal Node #: 207, (81) 
+Element #: 117, Current Node #: 213, Diagonal Node #: 47, (80) 
+Element #: 117, Current Node #: 214, Diagonal Node #: 43, (73) 
+Element #: 117, Current Node #: 75, Diagonal Node #: 206, (74) 
+Element #: 118, Current Node #: 47, Diagonal Node #: 215, (137) 
+Element #: 118, Current Node #: 207, Diagonal Node #: 79, (136) 
+Element #: 118, Current Node #: 208, Diagonal Node #: 75, (129) 
+Element #: 118, Current Node #: 51, Diagonal Node #: 214, (130) 
+Element #: 118, Current Node #: 75, Diagonal Node #: 208, (88) 
+Element #: 118, Current Node #: 214, Diagonal Node #: 51, (87) 
+Element #: 118, Current Node #: 215, Diagonal Node #: 47, (80) 
+Element #: 118, Current Node #: 79, Diagonal Node #: 207, (81) 
+Element #: 119, Current Node #: 51, Diagonal Node #: 216, (144) 
+Element #: 119, Current Node #: 208, Diagonal Node #: 83, (143) 
+Element #: 119, Current Node #: 209, Diagonal Node #: 79, (136) 
+Element #: 119, Current Node #: 55, Diagonal Node #: 215, (137) 
+Element #: 119, Current Node #: 79, Diagonal Node #: 209, (95) 
+Element #: 119, Current Node #: 215, Diagonal Node #: 55, (94) 
+Element #: 119, Current Node #: 216, Diagonal Node #: 51, (87) 
+Element #: 119, Current Node #: 83, Diagonal Node #: 208, (88) 
+Element #: 120, Current Node #: 59, Diagonal Node #: 218, (158) 
+Element #: 120, Current Node #: 210, Diagonal Node #: 91, (157) 
+Element #: 120, Current Node #: 211, Diagonal Node #: 87, (150) 
+Element #: 120, Current Node #: 63, Diagonal Node #: 217, (151) 
+Element #: 120, Current Node #: 87, Diagonal Node #: 211, (109) 
+Element #: 120, Current Node #: 217, Diagonal Node #: 63, (108) 
+Element #: 120, Current Node #: 218, Diagonal Node #: 59, (101) 
+Element #: 120, Current Node #: 91, Diagonal Node #: 210, (102) 
+Element #: 121, Current Node #: 63, Diagonal Node #: 219, (165) 
+Element #: 121, Current Node #: 211, Diagonal Node #: 95, (164) 
+Element #: 121, Current Node #: 212, Diagonal Node #: 91, (157) 
+Element #: 121, Current Node #: 67, Diagonal Node #: 218, (158) 
+Element #: 121, Current Node #: 91, Diagonal Node #: 212, (116) 
+Element #: 121, Current Node #: 218, Diagonal Node #: 67, (115) 
+Element #: 121, Current Node #: 219, Diagonal Node #: 63, (108) 
+Element #: 121, Current Node #: 95, Diagonal Node #: 211, (109) 
+Element #: 122, Current Node #: 67, Diagonal Node #: 220, (172) 
+Element #: 122, Current Node #: 212, Diagonal Node #: 99, (171) 
+Element #: 122, Current Node #: 213, Diagonal Node #: 95, (164) 
+Element #: 122, Current Node #: 71, Diagonal Node #: 219, (165) 
+Element #: 122, Current Node #: 95, Diagonal Node #: 213, (123) 
+Element #: 122, Current Node #: 219, Diagonal Node #: 71, (122) 
+Element #: 122, Current Node #: 220, Diagonal Node #: 67, (115) 
+Element #: 122, Current Node #: 99, Diagonal Node #: 212, (116) 
+Element #: 123, Current Node #: 71, Diagonal Node #: 221, (179) 
+Element #: 123, Current Node #: 213, Diagonal Node #: 103, (178) 
+Element #: 123, Current Node #: 214, Diagonal Node #: 99, (171) 
+Element #: 123, Current Node #: 75, Diagonal Node #: 220, (172) 
+Element #: 123, Current Node #: 99, Diagonal Node #: 214, (130) 
+Element #: 123, Current Node #: 220, Diagonal Node #: 75, (129) 
+Element #: 123, Current Node #: 221, Diagonal Node #: 71, (122) 
+Element #: 123, Current Node #: 103, Diagonal Node #: 213, (123) 
+Element #: 124, Current Node #: 75, Diagonal Node #: 222, (186) 
+Element #: 124, Current Node #: 214, Diagonal Node #: 107, (185) 
+Element #: 124, Current Node #: 215, Diagonal Node #: 103, (178) 
+Element #: 124, Current Node #: 79, Diagonal Node #: 221, (179) 
+Element #: 124, Current Node #: 103, Diagonal Node #: 215, (137) 
+Element #: 124, Current Node #: 221, Diagonal Node #: 79, (136) 
+Element #: 124, Current Node #: 222, Diagonal Node #: 75, (129) 
+Element #: 124, Current Node #: 107, Diagonal Node #: 214, (130) 
+Element #: 125, Current Node #: 79, Diagonal Node #: 223, (193) 
+Element #: 125, Current Node #: 215, Diagonal Node #: 111, (192) 
+Element #: 125, Current Node #: 216, Diagonal Node #: 107, (185) 
+Element #: 125, Current Node #: 83, Diagonal Node #: 222, (186) 
+Element #: 125, Current Node #: 107, Diagonal Node #: 216, (144) 
+Element #: 125, Current Node #: 222, Diagonal Node #: 83, (143) 
+Element #: 125, Current Node #: 223, Diagonal Node #: 79, (136) 
+Element #: 125, Current Node #: 111, Diagonal Node #: 215, (137) 
+Element #: 126, Current Node #: 87, Diagonal Node #: 225, (207) 
+Element #: 126, Current Node #: 217, Diagonal Node #: 119, (206) 
+Element #: 126, Current Node #: 218, Diagonal Node #: 115, (199) 
+Element #: 126, Current Node #: 91, Diagonal Node #: 224, (200) 
+Element #: 126, Current Node #: 115, Diagonal Node #: 218, (158) 
+Element #: 126, Current Node #: 224, Diagonal Node #: 91, (157) 
+Element #: 126, Current Node #: 225, Diagonal Node #: 87, (150) 
+Element #: 126, Current Node #: 119, Diagonal Node #: 217, (151) 
+Element #: 127, Current Node #: 91, Diagonal Node #: 226, (214) 
+Element #: 127, Current Node #: 218, Diagonal Node #: 123, (213) 
+Element #: 127, Current Node #: 219, Diagonal Node #: 119, (206) 
+Element #: 127, Current Node #: 95, Diagonal Node #: 225, (207) 
+Element #: 127, Current Node #: 119, Diagonal Node #: 219, (165) 
+Element #: 127, Current Node #: 225, Diagonal Node #: 95, (164) 
+Element #: 127, Current Node #: 226, Diagonal Node #: 91, (157) 
+Element #: 127, Current Node #: 123, Diagonal Node #: 218, (158) 
+Element #: 128, Current Node #: 95, Diagonal Node #: 227, (221) 
+Element #: 128, Current Node #: 219, Diagonal Node #: 127, (220) 
+Element #: 128, Current Node #: 220, Diagonal Node #: 123, (213) 
+Element #: 128, Current Node #: 99, Diagonal Node #: 226, (214) 
+Element #: 128, Current Node #: 123, Diagonal Node #: 220, (172) 
+Element #: 128, Current Node #: 226, Diagonal Node #: 99, (171) 
+Element #: 128, Current Node #: 227, Diagonal Node #: 95, (164) 
+Element #: 128, Current Node #: 127, Diagonal Node #: 219, (165) 
+Element #: 129, Current Node #: 99, Diagonal Node #: 228, (228) 
+Element #: 129, Current Node #: 220, Diagonal Node #: 131, (227) 
+Element #: 129, Current Node #: 221, Diagonal Node #: 127, (220) 
+Element #: 129, Current Node #: 103, Diagonal Node #: 227, (221) 
+Element #: 129, Current Node #: 127, Diagonal Node #: 221, (179) 
+Element #: 129, Current Node #: 227, Diagonal Node #: 103, (178) 
+Element #: 129, Current Node #: 228, Diagonal Node #: 99, (171) 
+Element #: 129, Current Node #: 131, Diagonal Node #: 220, (172) 
+Element #: 130, Current Node #: 103, Diagonal Node #: 229, (235) 
+Element #: 130, Current Node #: 221, Diagonal Node #: 135, (234) 
+Element #: 130, Current Node #: 222, Diagonal Node #: 131, (227) 
+Element #: 130, Current Node #: 107, Diagonal Node #: 228, (228) 
+Element #: 130, Current Node #: 131, Diagonal Node #: 222, (186) 
+Element #: 130, Current Node #: 228, Diagonal Node #: 107, (185) 
+Element #: 130, Current Node #: 229, Diagonal Node #: 103, (178) 
+Element #: 130, Current Node #: 135, Diagonal Node #: 221, (179) 
+Element #: 131, Current Node #: 107, Diagonal Node #: 230, (242) 
+Element #: 131, Current Node #: 222, Diagonal Node #: 139, (241) 
+Element #: 131, Current Node #: 223, Diagonal Node #: 135, (234) 
+Element #: 131, Current Node #: 111, Diagonal Node #: 229, (235) 
+Element #: 131, Current Node #: 135, Diagonal Node #: 223, (193) 
+Element #: 131, Current Node #: 229, Diagonal Node #: 111, (192) 
+Element #: 131, Current Node #: 230, Diagonal Node #: 107, (185) 
+Element #: 131, Current Node #: 139, Diagonal Node #: 222, (186) 
+Element #: 132, Current Node #: 115, Diagonal Node #: 232, (256) 
+Element #: 132, Current Node #: 224, Diagonal Node #: 147, (255) 
+Element #: 132, Current Node #: 225, Diagonal Node #: 143, (248) 
+Element #: 132, Current Node #: 119, Diagonal Node #: 231, (249) 
+Element #: 132, Current Node #: 143, Diagonal Node #: 225, (207) 
+Element #: 132, Current Node #: 231, Diagonal Node #: 119, (206) 
+Element #: 132, Current Node #: 232, Diagonal Node #: 115, (199) 
+Element #: 132, Current Node #: 147, Diagonal Node #: 224, (200) 
+Element #: 133, Current Node #: 119, Diagonal Node #: 233, (263) 
+Element #: 133, Current Node #: 225, Diagonal Node #: 151, (262) 
+Element #: 133, Current Node #: 226, Diagonal Node #: 147, (255) 
+Element #: 133, Current Node #: 123, Diagonal Node #: 232, (256) 
+Element #: 133, Current Node #: 147, Diagonal Node #: 226, (214) 
+Element #: 133, Current Node #: 232, Diagonal Node #: 123, (213) 
+Element #: 133, Current Node #: 233, Diagonal Node #: 119, (206) 
+Element #: 133, Current Node #: 151, Diagonal Node #: 225, (207) 
+Element #: 134, Current Node #: 123, Diagonal Node #: 234, (270) 
+Element #: 134, Current Node #: 226, Diagonal Node #: 155, (269) 
+Element #: 134, Current Node #: 227, Diagonal Node #: 151, (262) 
+Element #: 134, Current Node #: 127, Diagonal Node #: 233, (263) 
+Element #: 134, Current Node #: 151, Diagonal Node #: 227, (221) 
+Element #: 134, Current Node #: 233, Diagonal Node #: 127, (220) 
+Element #: 134, Current Node #: 234, Diagonal Node #: 123, (213) 
+Element #: 134, Current Node #: 155, Diagonal Node #: 226, (214) 
+Element #: 135, Current Node #: 127, Diagonal Node #: 235, (277) 
+Element #: 135, Current Node #: 227, Diagonal Node #: 159, (276) 
+Element #: 135, Current Node #: 228, Diagonal Node #: 155, (269) 
+Element #: 135, Current Node #: 131, Diagonal Node #: 234, (270) 
+Element #: 135, Current Node #: 155, Diagonal Node #: 228, (228) 
+Element #: 135, Current Node #: 234, Diagonal Node #: 131, (227) 
+Element #: 135, Current Node #: 235, Diagonal Node #: 127, (220) 
+Element #: 135, Current Node #: 159, Diagonal Node #: 227, (221) 
+Element #: 136, Current Node #: 131, Diagonal Node #: 236, (284) 
+Element #: 136, Current Node #: 228, Diagonal Node #: 163, (283) 
+Element #: 136, Current Node #: 229, Diagonal Node #: 159, (276) 
+Element #: 136, Current Node #: 135, Diagonal Node #: 235, (277) 
+Element #: 136, Current Node #: 159, Diagonal Node #: 229, (235) 
+Element #: 136, Current Node #: 235, Diagonal Node #: 135, (234) 
+Element #: 136, Current Node #: 236, Diagonal Node #: 131, (227) 
+Element #: 136, Current Node #: 163, Diagonal Node #: 228, (228) 
+Element #: 137, Current Node #: 135, Diagonal Node #: 237, (291) 
+Element #: 137, Current Node #: 229, Diagonal Node #: 167, (290) 
+Element #: 137, Current Node #: 230, Diagonal Node #: 163, (283) 
+Element #: 137, Current Node #: 139, Diagonal Node #: 236, (284) 
+Element #: 137, Current Node #: 163, Diagonal Node #: 230, (242) 
+Element #: 137, Current Node #: 236, Diagonal Node #: 139, (241) 
+Element #: 137, Current Node #: 237, Diagonal Node #: 135, (234) 
+Element #: 137, Current Node #: 167, Diagonal Node #: 229, (235) 
+Element #: 138, Current Node #: 143, Diagonal Node #: 239, (305) 
+Element #: 138, Current Node #: 231, Diagonal Node #: 175, (304) 
+Element #: 138, Current Node #: 232, Diagonal Node #: 171, (297) 
+Element #: 138, Current Node #: 147, Diagonal Node #: 238, (298) 
+Element #: 138, Current Node #: 171, Diagonal Node #: 232, (256) 
+Element #: 138, Current Node #: 238, Diagonal Node #: 147, (255) 
+Element #: 138, Current Node #: 239, Diagonal Node #: 143, (248) 
+Element #: 138, Current Node #: 175, Diagonal Node #: 231, (249) 
+Element #: 139, Current Node #: 147, Diagonal Node #: 240, (312) 
+Element #: 139, Current Node #: 232, Diagonal Node #: 179, (311) 
+Element #: 139, Current Node #: 233, Diagonal Node #: 175, (304) 
+Element #: 139, Current Node #: 151, Diagonal Node #: 239, (305) 
+Element #: 139, Current Node #: 175, Diagonal Node #: 233, (263) 
+Element #: 139, Current Node #: 239, Diagonal Node #: 151, (262) 
+Element #: 139, Current Node #: 240, Diagonal Node #: 147, (255) 
+Element #: 139, Current Node #: 179, Diagonal Node #: 232, (256) 
+Element #: 140, Current Node #: 151, Diagonal Node #: 241, (319) 
+Element #: 140, Current Node #: 233, Diagonal Node #: 183, (318) 
+Element #: 140, Current Node #: 234, Diagonal Node #: 179, (311) 
+Element #: 140, Current Node #: 155, Diagonal Node #: 240, (312) 
+Element #: 140, Current Node #: 179, Diagonal Node #: 234, (270) 
+Element #: 140, Current Node #: 240, Diagonal Node #: 155, (269) 
+Element #: 140, Current Node #: 241, Diagonal Node #: 151, (262) 
+Element #: 140, Current Node #: 183, Diagonal Node #: 233, (263) 
+Element #: 141, Current Node #: 155, Diagonal Node #: 242, (326) 
+Element #: 141, Current Node #: 234, Diagonal Node #: 187, (325) 
+Element #: 141, Current Node #: 235, Diagonal Node #: 183, (318) 
+Element #: 141, Current Node #: 159, Diagonal Node #: 241, (319) 
+Element #: 141, Current Node #: 183, Diagonal Node #: 235, (277) 
+Element #: 141, Current Node #: 241, Diagonal Node #: 159, (276) 
+Element #: 141, Current Node #: 242, Diagonal Node #: 155, (269) 
+Element #: 141, Current Node #: 187, Diagonal Node #: 234, (270) 
+Element #: 142, Current Node #: 159, Diagonal Node #: 243, (333) 
+Element #: 142, Current Node #: 235, Diagonal Node #: 191, (332) 
+Element #: 142, Current Node #: 236, Diagonal Node #: 187, (325) 
+Element #: 142, Current Node #: 163, Diagonal Node #: 242, (326) 
+Element #: 142, Current Node #: 187, Diagonal Node #: 236, (284) 
+Element #: 142, Current Node #: 242, Diagonal Node #: 163, (283) 
+Element #: 142, Current Node #: 243, Diagonal Node #: 159, (276) 
+Element #: 142, Current Node #: 191, Diagonal Node #: 235, (277) 
+Element #: 143, Current Node #: 163, Diagonal Node #: 244, (340) 
+Element #: 143, Current Node #: 236, Diagonal Node #: 195, (339) 
+Element #: 143, Current Node #: 237, Diagonal Node #: 191, (332) 
+Element #: 143, Current Node #: 167, Diagonal Node #: 243, (333) 
+Element #: 143, Current Node #: 191, Diagonal Node #: 237, (291) 
+Element #: 143, Current Node #: 243, Diagonal Node #: 167, (290) 
+Element #: 143, Current Node #: 244, Diagonal Node #: 163, (283) 
+Element #: 143, Current Node #: 195, Diagonal Node #: 236, (284) 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1153 @@
+StGermain Framework revision 0. Copyright (C) 2003-2005 VPAC.
+Element #: 0, Current Node #: 0, Diagonal Node #: 33, (60) 
+Element #: 0, Current Node #: 1, Diagonal Node #: 32, (59) 
+Element #: 0, Current Node #: 5, Diagonal Node #: 28, (52) 
+Element #: 0, Current Node #: 4, Diagonal Node #: 29, (53) 
+Element #: 0, Current Node #: 28, Diagonal Node #: 5, (11) 
+Element #: 0, Current Node #: 29, Diagonal Node #: 4, (10) 
+Element #: 0, Current Node #: 33, Diagonal Node #: 0, (3) 
+Element #: 0, Current Node #: 32, Diagonal Node #: 1, (4) 
+Element #: 1, Current Node #: 1, Diagonal Node #: 34, (61) 
+Element #: 1, Current Node #: 2, Diagonal Node #: 33, (60) 
+Element #: 1, Current Node #: 6, Diagonal Node #: 29, (53) 
+Element #: 1, Current Node #: 5, Diagonal Node #: 30, (54) 
+Element #: 1, Current Node #: 29, Diagonal Node #: 6, (12) 
+Element #: 1, Current Node #: 30, Diagonal Node #: 5, (11) 
+Element #: 1, Current Node #: 34, Diagonal Node #: 1, (4) 
+Element #: 1, Current Node #: 33, Diagonal Node #: 2, (5) 
+Element #: 2, Current Node #: 2, Diagonal Node #: 35, (62) 
+Element #: 2, Current Node #: 3, Diagonal Node #: 34, (61) 
+Element #: 2, Current Node #: 7, Diagonal Node #: 30, (54) 
+Element #: 2, Current Node #: 6, Diagonal Node #: 31, (55) 
+Element #: 2, Current Node #: 30, Diagonal Node #: 7, (13) 
+Element #: 2, Current Node #: 31, Diagonal Node #: 6, (12) 
+Element #: 2, Current Node #: 35, Diagonal Node #: 2, (5) 
+Element #: 2, Current Node #: 34, Diagonal Node #: 3, (6) 
+Element #: 3, Current Node #: 4, Diagonal Node #: 37, (67) 
+Element #: 3, Current Node #: 5, Diagonal Node #: 36, (66) 
+Element #: 3, Current Node #: 9, Diagonal Node #: 32, (59) 
+Element #: 3, Current Node #: 8, Diagonal Node #: 33, (60) 
+Element #: 3, Current Node #: 32, Diagonal Node #: 9, (18) 
+Element #: 3, Current Node #: 33, Diagonal Node #: 8, (17) 
+Element #: 3, Current Node #: 37, Diagonal Node #: 4, (10) 
+Element #: 3, Current Node #: 36, Diagonal Node #: 5, (11) 
+Element #: 4, Current Node #: 5, Diagonal Node #: 38, (68) 
+Element #: 4, Current Node #: 6, Diagonal Node #: 37, (67) 
+Element #: 4, Current Node #: 10, Diagonal Node #: 33, (60) 
+Element #: 4, Current Node #: 9, Diagonal Node #: 34, (61) 
+Element #: 4, Current Node #: 33, Diagonal Node #: 10, (19) 
+Element #: 4, Current Node #: 34, Diagonal Node #: 9, (18) 
+Element #: 4, Current Node #: 38, Diagonal Node #: 5, (11) 
+Element #: 4, Current Node #: 37, Diagonal Node #: 6, (12) 
+Element #: 5, Current Node #: 6, Diagonal Node #: 39, (69) 
+Element #: 5, Current Node #: 7, Diagonal Node #: 38, (68) 
+Element #: 5, Current Node #: 11, Diagonal Node #: 34, (61) 
+Element #: 5, Current Node #: 10, Diagonal Node #: 35, (62) 
+Element #: 5, Current Node #: 34, Diagonal Node #: 11, (20) 
+Element #: 5, Current Node #: 35, Diagonal Node #: 10, (19) 
+Element #: 5, Current Node #: 39, Diagonal Node #: 6, (12) 
+Element #: 5, Current Node #: 38, Diagonal Node #: 7, (13) 
+Element #: 6, Current Node #: 8, Diagonal Node #: 41, (74) 
+Element #: 6, Current Node #: 9, Diagonal Node #: 40, (73) 
+Element #: 6, Current Node #: 13, Diagonal Node #: 36, (66) 
+Element #: 6, Current Node #: 12, Diagonal Node #: 37, (67) 
+Element #: 6, Current Node #: 36, Diagonal Node #: 13, (25) 
+Element #: 6, Current Node #: 37, Diagonal Node #: 12, (24) 
+Element #: 6, Current Node #: 41, Diagonal Node #: 8, (17) 
+Element #: 6, Current Node #: 40, Diagonal Node #: 9, (18) 
+Element #: 7, Current Node #: 9, Diagonal Node #: 42, (75) 
+Element #: 7, Current Node #: 10, Diagonal Node #: 41, (74) 
+Element #: 7, Current Node #: 14, Diagonal Node #: 37, (67) 
+Element #: 7, Current Node #: 13, Diagonal Node #: 38, (68) 
+Element #: 7, Current Node #: 37, Diagonal Node #: 14, (26) 
+Element #: 7, Current Node #: 38, Diagonal Node #: 13, (25) 
+Element #: 7, Current Node #: 42, Diagonal Node #: 9, (18) 
+Element #: 7, Current Node #: 41, Diagonal Node #: 10, (19) 
+Element #: 8, Current Node #: 10, Diagonal Node #: 43, (76) 
+Element #: 8, Current Node #: 11, Diagonal Node #: 42, (75) 
+Element #: 8, Current Node #: 15, Diagonal Node #: 38, (68) 
+Element #: 8, Current Node #: 14, Diagonal Node #: 39, (69) 
+Element #: 8, Current Node #: 38, Diagonal Node #: 15, (27) 
+Element #: 8, Current Node #: 39, Diagonal Node #: 14, (26) 
+Element #: 8, Current Node #: 43, Diagonal Node #: 10, (19) 
+Element #: 8, Current Node #: 42, Diagonal Node #: 11, (20) 
+Element #: 9, Current Node #: 12, Diagonal Node #: 45, (81) 
+Element #: 9, Current Node #: 13, Diagonal Node #: 44, (80) 
+Element #: 9, Current Node #: 17, Diagonal Node #: 40, (73) 
+Element #: 9, Current Node #: 16, Diagonal Node #: 41, (74) 
+Element #: 9, Current Node #: 40, Diagonal Node #: 17, (32) 
+Element #: 9, Current Node #: 41, Diagonal Node #: 16, (31) 
+Element #: 9, Current Node #: 45, Diagonal Node #: 12, (24) 
+Element #: 9, Current Node #: 44, Diagonal Node #: 13, (25) 
+Element #: 10, Current Node #: 13, Diagonal Node #: 46, (82) 
+Element #: 10, Current Node #: 14, Diagonal Node #: 45, (81) 
+Element #: 10, Current Node #: 18, Diagonal Node #: 41, (74) 
+Element #: 10, Current Node #: 17, Diagonal Node #: 42, (75) 
+Element #: 10, Current Node #: 41, Diagonal Node #: 18, (33) 
+Element #: 10, Current Node #: 42, Diagonal Node #: 17, (32) 
+Element #: 10, Current Node #: 46, Diagonal Node #: 13, (25) 
+Element #: 10, Current Node #: 45, Diagonal Node #: 14, (26) 
+Element #: 11, Current Node #: 14, Diagonal Node #: 47, (83) 
+Element #: 11, Current Node #: 15, Diagonal Node #: 46, (82) 
+Element #: 11, Current Node #: 19, Diagonal Node #: 42, (75) 
+Element #: 11, Current Node #: 18, Diagonal Node #: 43, (76) 
+Element #: 11, Current Node #: 42, Diagonal Node #: 19, (34) 
+Element #: 11, Current Node #: 43, Diagonal Node #: 18, (33) 
+Element #: 11, Current Node #: 47, Diagonal Node #: 14, (26) 
+Element #: 11, Current Node #: 46, Diagonal Node #: 15, (27) 
+Element #: 12, Current Node #: 16, Diagonal Node #: 49, (88) 
+Element #: 12, Current Node #: 17, Diagonal Node #: 48, (87) 
+Element #: 12, Current Node #: 21, Diagonal Node #: 44, (80) 
+Element #: 12, Current Node #: 20, Diagonal Node #: 45, (81) 
+Element #: 12, Current Node #: 44, Diagonal Node #: 21, (39) 
+Element #: 12, Current Node #: 45, Diagonal Node #: 20, (38) 
+Element #: 12, Current Node #: 49, Diagonal Node #: 16, (31) 
+Element #: 12, Current Node #: 48, Diagonal Node #: 17, (32) 
+Element #: 13, Current Node #: 17, Diagonal Node #: 50, (89) 
+Element #: 13, Current Node #: 18, Diagonal Node #: 49, (88) 
+Element #: 13, Current Node #: 22, Diagonal Node #: 45, (81) 
+Element #: 13, Current Node #: 21, Diagonal Node #: 46, (82) 
+Element #: 13, Current Node #: 45, Diagonal Node #: 22, (40) 
+Element #: 13, Current Node #: 46, Diagonal Node #: 21, (39) 
+Element #: 13, Current Node #: 50, Diagonal Node #: 17, (32) 
+Element #: 13, Current Node #: 49, Diagonal Node #: 18, (33) 
+Element #: 14, Current Node #: 18, Diagonal Node #: 51, (90) 
+Element #: 14, Current Node #: 19, Diagonal Node #: 50, (89) 
+Element #: 14, Current Node #: 23, Diagonal Node #: 46, (82) 
+Element #: 14, Current Node #: 22, Diagonal Node #: 47, (83) 
+Element #: 14, Current Node #: 46, Diagonal Node #: 23, (41) 
+Element #: 14, Current Node #: 47, Diagonal Node #: 22, (40) 
+Element #: 14, Current Node #: 51, Diagonal Node #: 18, (33) 
+Element #: 14, Current Node #: 50, Diagonal Node #: 19, (34) 
+Element #: 15, Current Node #: 20, Diagonal Node #: 53, (95) 
+Element #: 15, Current Node #: 21, Diagonal Node #: 52, (94) 
+Element #: 15, Current Node #: 25, Diagonal Node #: 48, (87) 
+Element #: 15, Current Node #: 24, Diagonal Node #: 49, (88) 
+Element #: 15, Current Node #: 48, Diagonal Node #: 25, (46) 
+Element #: 15, Current Node #: 49, Diagonal Node #: 24, (45) 
+Element #: 15, Current Node #: 53, Diagonal Node #: 20, (38) 
+Element #: 15, Current Node #: 52, Diagonal Node #: 21, (39) 
+Element #: 16, Current Node #: 21, Diagonal Node #: 54, (96) 
+Element #: 16, Current Node #: 22, Diagonal Node #: 53, (95) 
+Element #: 16, Current Node #: 26, Diagonal Node #: 49, (88) 
+Element #: 16, Current Node #: 25, Diagonal Node #: 50, (89) 
+Element #: 16, Current Node #: 49, Diagonal Node #: 26, (47) 
+Element #: 16, Current Node #: 50, Diagonal Node #: 25, (46) 
+Element #: 16, Current Node #: 54, Diagonal Node #: 21, (39) 
+Element #: 16, Current Node #: 53, Diagonal Node #: 22, (40) 
+Element #: 17, Current Node #: 22, Diagonal Node #: 55, (97) 
+Element #: 17, Current Node #: 23, Diagonal Node #: 54, (96) 
+Element #: 17, Current Node #: 27, Diagonal Node #: 50, (89) 
+Element #: 17, Current Node #: 26, Diagonal Node #: 51, (90) 
+Element #: 17, Current Node #: 50, Diagonal Node #: 27, (48) 
+Element #: 17, Current Node #: 51, Diagonal Node #: 26, (47) 
+Element #: 17, Current Node #: 55, Diagonal Node #: 22, (40) 
+Element #: 17, Current Node #: 54, Diagonal Node #: 23, (41) 
+Element #: 18, Current Node #: 28, Diagonal Node #: 61, (109) 
+Element #: 18, Current Node #: 29, Diagonal Node #: 60, (108) 
+Element #: 18, Current Node #: 33, Diagonal Node #: 56, (101) 
+Element #: 18, Current Node #: 32, Diagonal Node #: 57, (102) 
+Element #: 18, Current Node #: 56, Diagonal Node #: 33, (60) 
+Element #: 18, Current Node #: 57, Diagonal Node #: 32, (59) 
+Element #: 18, Current Node #: 61, Diagonal Node #: 28, (52) 
+Element #: 18, Current Node #: 60, Diagonal Node #: 29, (53) 
+Element #: 19, Current Node #: 29, Diagonal Node #: 62, (110) 
+Element #: 19, Current Node #: 30, Diagonal Node #: 61, (109) 
+Element #: 19, Current Node #: 34, Diagonal Node #: 57, (102) 
+Element #: 19, Current Node #: 33, Diagonal Node #: 58, (103) 
+Element #: 19, Current Node #: 57, Diagonal Node #: 34, (61) 
+Element #: 19, Current Node #: 58, Diagonal Node #: 33, (60) 
+Element #: 19, Current Node #: 62, Diagonal Node #: 29, (53) 
+Element #: 19, Current Node #: 61, Diagonal Node #: 30, (54) 
+Element #: 20, Current Node #: 30, Diagonal Node #: 63, (111) 
+Element #: 20, Current Node #: 31, Diagonal Node #: 62, (110) 
+Element #: 20, Current Node #: 35, Diagonal Node #: 58, (103) 
+Element #: 20, Current Node #: 34, Diagonal Node #: 59, (104) 
+Element #: 20, Current Node #: 58, Diagonal Node #: 35, (62) 
+Element #: 20, Current Node #: 59, Diagonal Node #: 34, (61) 
+Element #: 20, Current Node #: 63, Diagonal Node #: 30, (54) 
+Element #: 20, Current Node #: 62, Diagonal Node #: 31, (55) 
+Element #: 21, Current Node #: 32, Diagonal Node #: 65, (116) 
+Element #: 21, Current Node #: 33, Diagonal Node #: 64, (115) 
+Element #: 21, Current Node #: 37, Diagonal Node #: 60, (108) 
+Element #: 21, Current Node #: 36, Diagonal Node #: 61, (109) 
+Element #: 21, Current Node #: 60, Diagonal Node #: 37, (67) 
+Element #: 21, Current Node #: 61, Diagonal Node #: 36, (66) 
+Element #: 21, Current Node #: 65, Diagonal Node #: 32, (59) 
+Element #: 21, Current Node #: 64, Diagonal Node #: 33, (60) 
+Element #: 22, Current Node #: 33, Diagonal Node #: 66, (117) 
+Element #: 22, Current Node #: 34, Diagonal Node #: 65, (116) 
+Element #: 22, Current Node #: 38, Diagonal Node #: 61, (109) 
+Element #: 22, Current Node #: 37, Diagonal Node #: 62, (110) 
+Element #: 22, Current Node #: 61, Diagonal Node #: 38, (68) 
+Element #: 22, Current Node #: 62, Diagonal Node #: 37, (67) 
+Element #: 22, Current Node #: 66, Diagonal Node #: 33, (60) 
+Element #: 22, Current Node #: 65, Diagonal Node #: 34, (61) 
+Element #: 23, Current Node #: 34, Diagonal Node #: 67, (118) 
+Element #: 23, Current Node #: 35, Diagonal Node #: 66, (117) 
+Element #: 23, Current Node #: 39, Diagonal Node #: 62, (110) 
+Element #: 23, Current Node #: 38, Diagonal Node #: 63, (111) 
+Element #: 23, Current Node #: 62, Diagonal Node #: 39, (69) 
+Element #: 23, Current Node #: 63, Diagonal Node #: 38, (68) 
+Element #: 23, Current Node #: 67, Diagonal Node #: 34, (61) 
+Element #: 23, Current Node #: 66, Diagonal Node #: 35, (62) 
+Element #: 24, Current Node #: 36, Diagonal Node #: 69, (123) 
+Element #: 24, Current Node #: 37, Diagonal Node #: 68, (122) 
+Element #: 24, Current Node #: 41, Diagonal Node #: 64, (115) 
+Element #: 24, Current Node #: 40, Diagonal Node #: 65, (116) 
+Element #: 24, Current Node #: 64, Diagonal Node #: 41, (74) 
+Element #: 24, Current Node #: 65, Diagonal Node #: 40, (73) 
+Element #: 24, Current Node #: 69, Diagonal Node #: 36, (66) 
+Element #: 24, Current Node #: 68, Diagonal Node #: 37, (67) 
+Element #: 25, Current Node #: 37, Diagonal Node #: 70, (124) 
+Element #: 25, Current Node #: 38, Diagonal Node #: 69, (123) 
+Element #: 25, Current Node #: 42, Diagonal Node #: 65, (116) 
+Element #: 25, Current Node #: 41, Diagonal Node #: 66, (117) 
+Element #: 25, Current Node #: 65, Diagonal Node #: 42, (75) 
+Element #: 25, Current Node #: 66, Diagonal Node #: 41, (74) 
+Element #: 25, Current Node #: 70, Diagonal Node #: 37, (67) 
+Element #: 25, Current Node #: 69, Diagonal Node #: 38, (68) 
+Element #: 26, Current Node #: 38, Diagonal Node #: 71, (125) 
+Element #: 26, Current Node #: 39, Diagonal Node #: 70, (124) 
+Element #: 26, Current Node #: 43, Diagonal Node #: 66, (117) 
+Element #: 26, Current Node #: 42, Diagonal Node #: 67, (118) 
+Element #: 26, Current Node #: 66, Diagonal Node #: 43, (76) 
+Element #: 26, Current Node #: 67, Diagonal Node #: 42, (75) 
+Element #: 26, Current Node #: 71, Diagonal Node #: 38, (68) 
+Element #: 26, Current Node #: 70, Diagonal Node #: 39, (69) 
+Element #: 27, Current Node #: 40, Diagonal Node #: 73, (130) 
+Element #: 27, Current Node #: 41, Diagonal Node #: 72, (129) 
+Element #: 27, Current Node #: 45, Diagonal Node #: 68, (122) 
+Element #: 27, Current Node #: 44, Diagonal Node #: 69, (123) 
+Element #: 27, Current Node #: 68, Diagonal Node #: 45, (81) 
+Element #: 27, Current Node #: 69, Diagonal Node #: 44, (80) 
+Element #: 27, Current Node #: 73, Diagonal Node #: 40, (73) 
+Element #: 27, Current Node #: 72, Diagonal Node #: 41, (74) 
+Element #: 28, Current Node #: 41, Diagonal Node #: 74, (131) 
+Element #: 28, Current Node #: 42, Diagonal Node #: 73, (130) 
+Element #: 28, Current Node #: 46, Diagonal Node #: 69, (123) 
+Element #: 28, Current Node #: 45, Diagonal Node #: 70, (124) 
+Element #: 28, Current Node #: 69, Diagonal Node #: 46, (82) 
+Element #: 28, Current Node #: 70, Diagonal Node #: 45, (81) 
+Element #: 28, Current Node #: 74, Diagonal Node #: 41, (74) 
+Element #: 28, Current Node #: 73, Diagonal Node #: 42, (75) 
+Element #: 29, Current Node #: 42, Diagonal Node #: 75, (132) 
+Element #: 29, Current Node #: 43, Diagonal Node #: 74, (131) 
+Element #: 29, Current Node #: 47, Diagonal Node #: 70, (124) 
+Element #: 29, Current Node #: 46, Diagonal Node #: 71, (125) 
+Element #: 29, Current Node #: 70, Diagonal Node #: 47, (83) 
+Element #: 29, Current Node #: 71, Diagonal Node #: 46, (82) 
+Element #: 29, Current Node #: 75, Diagonal Node #: 42, (75) 
+Element #: 29, Current Node #: 74, Diagonal Node #: 43, (76) 
+Element #: 30, Current Node #: 44, Diagonal Node #: 77, (137) 
+Element #: 30, Current Node #: 45, Diagonal Node #: 76, (136) 
+Element #: 30, Current Node #: 49, Diagonal Node #: 72, (129) 
+Element #: 30, Current Node #: 48, Diagonal Node #: 73, (130) 
+Element #: 30, Current Node #: 72, Diagonal Node #: 49, (88) 
+Element #: 30, Current Node #: 73, Diagonal Node #: 48, (87) 
+Element #: 30, Current Node #: 77, Diagonal Node #: 44, (80) 
+Element #: 30, Current Node #: 76, Diagonal Node #: 45, (81) 
+Element #: 31, Current Node #: 45, Diagonal Node #: 78, (138) 
+Element #: 31, Current Node #: 46, Diagonal Node #: 77, (137) 
+Element #: 31, Current Node #: 50, Diagonal Node #: 73, (130) 
+Element #: 31, Current Node #: 49, Diagonal Node #: 74, (131) 
+Element #: 31, Current Node #: 73, Diagonal Node #: 50, (89) 
+Element #: 31, Current Node #: 74, Diagonal Node #: 49, (88) 
+Element #: 31, Current Node #: 78, Diagonal Node #: 45, (81) 
+Element #: 31, Current Node #: 77, Diagonal Node #: 46, (82) 
+Element #: 32, Current Node #: 46, Diagonal Node #: 79, (139) 
+Element #: 32, Current Node #: 47, Diagonal Node #: 78, (138) 
+Element #: 32, Current Node #: 51, Diagonal Node #: 74, (131) 
+Element #: 32, Current Node #: 50, Diagonal Node #: 75, (132) 
+Element #: 32, Current Node #: 74, Diagonal Node #: 51, (90) 
+Element #: 32, Current Node #: 75, Diagonal Node #: 50, (89) 
+Element #: 32, Current Node #: 79, Diagonal Node #: 46, (82) 
+Element #: 32, Current Node #: 78, Diagonal Node #: 47, (83) 
+Element #: 33, Current Node #: 48, Diagonal Node #: 81, (144) 
+Element #: 33, Current Node #: 49, Diagonal Node #: 80, (143) 
+Element #: 33, Current Node #: 53, Diagonal Node #: 76, (136) 
+Element #: 33, Current Node #: 52, Diagonal Node #: 77, (137) 
+Element #: 33, Current Node #: 76, Diagonal Node #: 53, (95) 
+Element #: 33, Current Node #: 77, Diagonal Node #: 52, (94) 
+Element #: 33, Current Node #: 81, Diagonal Node #: 48, (87) 
+Element #: 33, Current Node #: 80, Diagonal Node #: 49, (88) 
+Element #: 34, Current Node #: 49, Diagonal Node #: 82, (145) 
+Element #: 34, Current Node #: 50, Diagonal Node #: 81, (144) 
+Element #: 34, Current Node #: 54, Diagonal Node #: 77, (137) 
+Element #: 34, Current Node #: 53, Diagonal Node #: 78, (138) 
+Element #: 34, Current Node #: 77, Diagonal Node #: 54, (96) 
+Element #: 34, Current Node #: 78, Diagonal Node #: 53, (95) 
+Element #: 34, Current Node #: 82, Diagonal Node #: 49, (88) 
+Element #: 34, Current Node #: 81, Diagonal Node #: 50, (89) 
+Element #: 35, Current Node #: 50, Diagonal Node #: 83, (146) 
+Element #: 35, Current Node #: 51, Diagonal Node #: 82, (145) 
+Element #: 35, Current Node #: 55, Diagonal Node #: 78, (138) 
+Element #: 35, Current Node #: 54, Diagonal Node #: 79, (139) 
+Element #: 35, Current Node #: 78, Diagonal Node #: 55, (97) 
+Element #: 35, Current Node #: 79, Diagonal Node #: 54, (96) 
+Element #: 35, Current Node #: 83, Diagonal Node #: 50, (89) 
+Element #: 35, Current Node #: 82, Diagonal Node #: 51, (90) 
+Element #: 36, Current Node #: 56, Diagonal Node #: 89, (158) 
+Element #: 36, Current Node #: 57, Diagonal Node #: 88, (157) 
+Element #: 36, Current Node #: 61, Diagonal Node #: 84, (150) 
+Element #: 36, Current Node #: 60, Diagonal Node #: 85, (151) 
+Element #: 36, Current Node #: 84, Diagonal Node #: 61, (109) 
+Element #: 36, Current Node #: 85, Diagonal Node #: 60, (108) 
+Element #: 36, Current Node #: 89, Diagonal Node #: 56, (101) 
+Element #: 36, Current Node #: 88, Diagonal Node #: 57, (102) 
+Element #: 37, Current Node #: 57, Diagonal Node #: 90, (159) 
+Element #: 37, Current Node #: 58, Diagonal Node #: 89, (158) 
+Element #: 37, Current Node #: 62, Diagonal Node #: 85, (151) 
+Element #: 37, Current Node #: 61, Diagonal Node #: 86, (152) 
+Element #: 37, Current Node #: 85, Diagonal Node #: 62, (110) 
+Element #: 37, Current Node #: 86, Diagonal Node #: 61, (109) 
+Element #: 37, Current Node #: 90, Diagonal Node #: 57, (102) 
+Element #: 37, Current Node #: 89, Diagonal Node #: 58, (103) 
+Element #: 38, Current Node #: 58, Diagonal Node #: 91, (160) 
+Element #: 38, Current Node #: 59, Diagonal Node #: 90, (159) 
+Element #: 38, Current Node #: 63, Diagonal Node #: 86, (152) 
+Element #: 38, Current Node #: 62, Diagonal Node #: 87, (153) 
+Element #: 38, Current Node #: 86, Diagonal Node #: 63, (111) 
+Element #: 38, Current Node #: 87, Diagonal Node #: 62, (110) 
+Element #: 38, Current Node #: 91, Diagonal Node #: 58, (103) 
+Element #: 38, Current Node #: 90, Diagonal Node #: 59, (104) 
+Element #: 39, Current Node #: 60, Diagonal Node #: 93, (165) 
+Element #: 39, Current Node #: 61, Diagonal Node #: 92, (164) 
+Element #: 39, Current Node #: 65, Diagonal Node #: 88, (157) 
+Element #: 39, Current Node #: 64, Diagonal Node #: 89, (158) 
+Element #: 39, Current Node #: 88, Diagonal Node #: 65, (116) 
+Element #: 39, Current Node #: 89, Diagonal Node #: 64, (115) 
+Element #: 39, Current Node #: 93, Diagonal Node #: 60, (108) 
+Element #: 39, Current Node #: 92, Diagonal Node #: 61, (109) 
+Element #: 40, Current Node #: 61, Diagonal Node #: 94, (166) 
+Element #: 40, Current Node #: 62, Diagonal Node #: 93, (165) 
+Element #: 40, Current Node #: 66, Diagonal Node #: 89, (158) 
+Element #: 40, Current Node #: 65, Diagonal Node #: 90, (159) 
+Element #: 40, Current Node #: 89, Diagonal Node #: 66, (117) 
+Element #: 40, Current Node #: 90, Diagonal Node #: 65, (116) 
+Element #: 40, Current Node #: 94, Diagonal Node #: 61, (109) 
+Element #: 40, Current Node #: 93, Diagonal Node #: 62, (110) 
+Element #: 41, Current Node #: 62, Diagonal Node #: 95, (167) 
+Element #: 41, Current Node #: 63, Diagonal Node #: 94, (166) 
+Element #: 41, Current Node #: 67, Diagonal Node #: 90, (159) 
+Element #: 41, Current Node #: 66, Diagonal Node #: 91, (160) 
+Element #: 41, Current Node #: 90, Diagonal Node #: 67, (118) 
+Element #: 41, Current Node #: 91, Diagonal Node #: 66, (117) 
+Element #: 41, Current Node #: 95, Diagonal Node #: 62, (110) 
+Element #: 41, Current Node #: 94, Diagonal Node #: 63, (111) 
+Element #: 42, Current Node #: 64, Diagonal Node #: 97, (172) 
+Element #: 42, Current Node #: 65, Diagonal Node #: 96, (171) 
+Element #: 42, Current Node #: 69, Diagonal Node #: 92, (164) 
+Element #: 42, Current Node #: 68, Diagonal Node #: 93, (165) 
+Element #: 42, Current Node #: 92, Diagonal Node #: 69, (123) 
+Element #: 42, Current Node #: 93, Diagonal Node #: 68, (122) 
+Element #: 42, Current Node #: 97, Diagonal Node #: 64, (115) 
+Element #: 42, Current Node #: 96, Diagonal Node #: 65, (116) 
+Element #: 43, Current Node #: 65, Diagonal Node #: 98, (173) 
+Element #: 43, Current Node #: 66, Diagonal Node #: 97, (172) 
+Element #: 43, Current Node #: 70, Diagonal Node #: 93, (165) 
+Element #: 43, Current Node #: 69, Diagonal Node #: 94, (166) 
+Element #: 43, Current Node #: 93, Diagonal Node #: 70, (124) 
+Element #: 43, Current Node #: 94, Diagonal Node #: 69, (123) 
+Element #: 43, Current Node #: 98, Diagonal Node #: 65, (116) 
+Element #: 43, Current Node #: 97, Diagonal Node #: 66, (117) 
+Element #: 44, Current Node #: 66, Diagonal Node #: 99, (174) 
+Element #: 44, Current Node #: 67, Diagonal Node #: 98, (173) 
+Element #: 44, Current Node #: 71, Diagonal Node #: 94, (166) 
+Element #: 44, Current Node #: 70, Diagonal Node #: 95, (167) 
+Element #: 44, Current Node #: 94, Diagonal Node #: 71, (125) 
+Element #: 44, Current Node #: 95, Diagonal Node #: 70, (124) 
+Element #: 44, Current Node #: 99, Diagonal Node #: 66, (117) 
+Element #: 44, Current Node #: 98, Diagonal Node #: 67, (118) 
+Element #: 45, Current Node #: 68, Diagonal Node #: 101, (179) 
+Element #: 45, Current Node #: 69, Diagonal Node #: 100, (178) 
+Element #: 45, Current Node #: 73, Diagonal Node #: 96, (171) 
+Element #: 45, Current Node #: 72, Diagonal Node #: 97, (172) 
+Element #: 45, Current Node #: 96, Diagonal Node #: 73, (130) 
+Element #: 45, Current Node #: 97, Diagonal Node #: 72, (129) 
+Element #: 45, Current Node #: 101, Diagonal Node #: 68, (122) 
+Element #: 45, Current Node #: 100, Diagonal Node #: 69, (123) 
+Element #: 46, Current Node #: 69, Diagonal Node #: 102, (180) 
+Element #: 46, Current Node #: 70, Diagonal Node #: 101, (179) 
+Element #: 46, Current Node #: 74, Diagonal Node #: 97, (172) 
+Element #: 46, Current Node #: 73, Diagonal Node #: 98, (173) 
+Element #: 46, Current Node #: 97, Diagonal Node #: 74, (131) 
+Element #: 46, Current Node #: 98, Diagonal Node #: 73, (130) 
+Element #: 46, Current Node #: 102, Diagonal Node #: 69, (123) 
+Element #: 46, Current Node #: 101, Diagonal Node #: 70, (124) 
+Element #: 47, Current Node #: 70, Diagonal Node #: 103, (181) 
+Element #: 47, Current Node #: 71, Diagonal Node #: 102, (180) 
+Element #: 47, Current Node #: 75, Diagonal Node #: 98, (173) 
+Element #: 47, Current Node #: 74, Diagonal Node #: 99, (174) 
+Element #: 47, Current Node #: 98, Diagonal Node #: 75, (132) 
+Element #: 47, Current Node #: 99, Diagonal Node #: 74, (131) 
+Element #: 47, Current Node #: 103, Diagonal Node #: 70, (124) 
+Element #: 47, Current Node #: 102, Diagonal Node #: 71, (125) 
+Element #: 48, Current Node #: 72, Diagonal Node #: 105, (186) 
+Element #: 48, Current Node #: 73, Diagonal Node #: 104, (185) 
+Element #: 48, Current Node #: 77, Diagonal Node #: 100, (178) 
+Element #: 48, Current Node #: 76, Diagonal Node #: 101, (179) 
+Element #: 48, Current Node #: 100, Diagonal Node #: 77, (137) 
+Element #: 48, Current Node #: 101, Diagonal Node #: 76, (136) 
+Element #: 48, Current Node #: 105, Diagonal Node #: 72, (129) 
+Element #: 48, Current Node #: 104, Diagonal Node #: 73, (130) 
+Element #: 49, Current Node #: 73, Diagonal Node #: 106, (187) 
+Element #: 49, Current Node #: 74, Diagonal Node #: 105, (186) 
+Element #: 49, Current Node #: 78, Diagonal Node #: 101, (179) 
+Element #: 49, Current Node #: 77, Diagonal Node #: 102, (180) 
+Element #: 49, Current Node #: 101, Diagonal Node #: 78, (138) 
+Element #: 49, Current Node #: 102, Diagonal Node #: 77, (137) 
+Element #: 49, Current Node #: 106, Diagonal Node #: 73, (130) 
+Element #: 49, Current Node #: 105, Diagonal Node #: 74, (131) 
+Element #: 50, Current Node #: 74, Diagonal Node #: 107, (188) 
+Element #: 50, Current Node #: 75, Diagonal Node #: 106, (187) 
+Element #: 50, Current Node #: 79, Diagonal Node #: 102, (180) 
+Element #: 50, Current Node #: 78, Diagonal Node #: 103, (181) 
+Element #: 50, Current Node #: 102, Diagonal Node #: 79, (139) 
+Element #: 50, Current Node #: 103, Diagonal Node #: 78, (138) 
+Element #: 50, Current Node #: 107, Diagonal Node #: 74, (131) 
+Element #: 50, Current Node #: 106, Diagonal Node #: 75, (132) 
+Element #: 51, Current Node #: 76, Diagonal Node #: 109, (193) 
+Element #: 51, Current Node #: 77, Diagonal Node #: 108, (192) 
+Element #: 51, Current Node #: 81, Diagonal Node #: 104, (185) 
+Element #: 51, Current Node #: 80, Diagonal Node #: 105, (186) 
+Element #: 51, Current Node #: 104, Diagonal Node #: 81, (144) 
+Element #: 51, Current Node #: 105, Diagonal Node #: 80, (143) 
+Element #: 51, Current Node #: 109, Diagonal Node #: 76, (136) 
+Element #: 51, Current Node #: 108, Diagonal Node #: 77, (137) 
+Element #: 52, Current Node #: 77, Diagonal Node #: 110, (194) 
+Element #: 52, Current Node #: 78, Diagonal Node #: 109, (193) 
+Element #: 52, Current Node #: 82, Diagonal Node #: 105, (186) 
+Element #: 52, Current Node #: 81, Diagonal Node #: 106, (187) 
+Element #: 52, Current Node #: 105, Diagonal Node #: 82, (145) 
+Element #: 52, Current Node #: 106, Diagonal Node #: 81, (144) 
+Element #: 52, Current Node #: 110, Diagonal Node #: 77, (137) 
+Element #: 52, Current Node #: 109, Diagonal Node #: 78, (138) 
+Element #: 53, Current Node #: 78, Diagonal Node #: 111, (195) 
+Element #: 53, Current Node #: 79, Diagonal Node #: 110, (194) 
+Element #: 53, Current Node #: 83, Diagonal Node #: 106, (187) 
+Element #: 53, Current Node #: 82, Diagonal Node #: 107, (188) 
+Element #: 53, Current Node #: 106, Diagonal Node #: 83, (146) 
+Element #: 53, Current Node #: 107, Diagonal Node #: 82, (145) 
+Element #: 53, Current Node #: 111, Diagonal Node #: 78, (138) 
+Element #: 53, Current Node #: 110, Diagonal Node #: 79, (139) 
+Element #: 54, Current Node #: 84, Diagonal Node #: 117, (207) 
+Element #: 54, Current Node #: 85, Diagonal Node #: 116, (206) 
+Element #: 54, Current Node #: 89, Diagonal Node #: 112, (199) 
+Element #: 54, Current Node #: 88, Diagonal Node #: 113, (200) 
+Element #: 54, Current Node #: 112, Diagonal Node #: 89, (158) 
+Element #: 54, Current Node #: 113, Diagonal Node #: 88, (157) 
+Element #: 54, Current Node #: 117, Diagonal Node #: 84, (150) 
+Element #: 54, Current Node #: 116, Diagonal Node #: 85, (151) 
+Element #: 55, Current Node #: 85, Diagonal Node #: 118, (208) 
+Element #: 55, Current Node #: 86, Diagonal Node #: 117, (207) 
+Element #: 55, Current Node #: 90, Diagonal Node #: 113, (200) 
+Element #: 55, Current Node #: 89, Diagonal Node #: 114, (201) 
+Element #: 55, Current Node #: 113, Diagonal Node #: 90, (159) 
+Element #: 55, Current Node #: 114, Diagonal Node #: 89, (158) 
+Element #: 55, Current Node #: 118, Diagonal Node #: 85, (151) 
+Element #: 55, Current Node #: 117, Diagonal Node #: 86, (152) 
+Element #: 56, Current Node #: 86, Diagonal Node #: 119, (209) 
+Element #: 56, Current Node #: 87, Diagonal Node #: 118, (208) 
+Element #: 56, Current Node #: 91, Diagonal Node #: 114, (201) 
+Element #: 56, Current Node #: 90, Diagonal Node #: 115, (202) 
+Element #: 56, Current Node #: 114, Diagonal Node #: 91, (160) 
+Element #: 56, Current Node #: 115, Diagonal Node #: 90, (159) 
+Element #: 56, Current Node #: 119, Diagonal Node #: 86, (152) 
+Element #: 56, Current Node #: 118, Diagonal Node #: 87, (153) 
+Element #: 57, Current Node #: 88, Diagonal Node #: 121, (214) 
+Element #: 57, Current Node #: 89, Diagonal Node #: 120, (213) 
+Element #: 57, Current Node #: 93, Diagonal Node #: 116, (206) 
+Element #: 57, Current Node #: 92, Diagonal Node #: 117, (207) 
+Element #: 57, Current Node #: 116, Diagonal Node #: 93, (165) 
+Element #: 57, Current Node #: 117, Diagonal Node #: 92, (164) 
+Element #: 57, Current Node #: 121, Diagonal Node #: 88, (157) 
+Element #: 57, Current Node #: 120, Diagonal Node #: 89, (158) 
+Element #: 58, Current Node #: 89, Diagonal Node #: 122, (215) 
+Element #: 58, Current Node #: 90, Diagonal Node #: 121, (214) 
+Element #: 58, Current Node #: 94, Diagonal Node #: 117, (207) 
+Element #: 58, Current Node #: 93, Diagonal Node #: 118, (208) 
+Element #: 58, Current Node #: 117, Diagonal Node #: 94, (166) 
+Element #: 58, Current Node #: 118, Diagonal Node #: 93, (165) 
+Element #: 58, Current Node #: 122, Diagonal Node #: 89, (158) 
+Element #: 58, Current Node #: 121, Diagonal Node #: 90, (159) 
+Element #: 59, Current Node #: 90, Diagonal Node #: 123, (216) 
+Element #: 59, Current Node #: 91, Diagonal Node #: 122, (215) 
+Element #: 59, Current Node #: 95, Diagonal Node #: 118, (208) 
+Element #: 59, Current Node #: 94, Diagonal Node #: 119, (209) 
+Element #: 59, Current Node #: 118, Diagonal Node #: 95, (167) 
+Element #: 59, Current Node #: 119, Diagonal Node #: 94, (166) 
+Element #: 59, Current Node #: 123, Diagonal Node #: 90, (159) 
+Element #: 59, Current Node #: 122, Diagonal Node #: 91, (160) 
+Element #: 60, Current Node #: 92, Diagonal Node #: 125, (221) 
+Element #: 60, Current Node #: 93, Diagonal Node #: 124, (220) 
+Element #: 60, Current Node #: 97, Diagonal Node #: 120, (213) 
+Element #: 60, Current Node #: 96, Diagonal Node #: 121, (214) 
+Element #: 60, Current Node #: 120, Diagonal Node #: 97, (172) 
+Element #: 60, Current Node #: 121, Diagonal Node #: 96, (171) 
+Element #: 60, Current Node #: 125, Diagonal Node #: 92, (164) 
+Element #: 60, Current Node #: 124, Diagonal Node #: 93, (165) 
+Element #: 61, Current Node #: 93, Diagonal Node #: 126, (222) 
+Element #: 61, Current Node #: 94, Diagonal Node #: 125, (221) 
+Element #: 61, Current Node #: 98, Diagonal Node #: 121, (214) 
+Element #: 61, Current Node #: 97, Diagonal Node #: 122, (215) 
+Element #: 61, Current Node #: 121, Diagonal Node #: 98, (173) 
+Element #: 61, Current Node #: 122, Diagonal Node #: 97, (172) 
+Element #: 61, Current Node #: 126, Diagonal Node #: 93, (165) 
+Element #: 61, Current Node #: 125, Diagonal Node #: 94, (166) 
+Element #: 62, Current Node #: 94, Diagonal Node #: 127, (223) 
+Element #: 62, Current Node #: 95, Diagonal Node #: 126, (222) 
+Element #: 62, Current Node #: 99, Diagonal Node #: 122, (215) 
+Element #: 62, Current Node #: 98, Diagonal Node #: 123, (216) 
+Element #: 62, Current Node #: 122, Diagonal Node #: 99, (174) 
+Element #: 62, Current Node #: 123, Diagonal Node #: 98, (173) 
+Element #: 62, Current Node #: 127, Diagonal Node #: 94, (166) 
+Element #: 62, Current Node #: 126, Diagonal Node #: 95, (167) 
+Element #: 63, Current Node #: 96, Diagonal Node #: 129, (228) 
+Element #: 63, Current Node #: 97, Diagonal Node #: 128, (227) 
+Element #: 63, Current Node #: 101, Diagonal Node #: 124, (220) 
+Element #: 63, Current Node #: 100, Diagonal Node #: 125, (221) 
+Element #: 63, Current Node #: 124, Diagonal Node #: 101, (179) 
+Element #: 63, Current Node #: 125, Diagonal Node #: 100, (178) 
+Element #: 63, Current Node #: 129, Diagonal Node #: 96, (171) 
+Element #: 63, Current Node #: 128, Diagonal Node #: 97, (172) 
+Element #: 64, Current Node #: 97, Diagonal Node #: 130, (229) 
+Element #: 64, Current Node #: 98, Diagonal Node #: 129, (228) 
+Element #: 64, Current Node #: 102, Diagonal Node #: 125, (221) 
+Element #: 64, Current Node #: 101, Diagonal Node #: 126, (222) 
+Element #: 64, Current Node #: 125, Diagonal Node #: 102, (180) 
+Element #: 64, Current Node #: 126, Diagonal Node #: 101, (179) 
+Element #: 64, Current Node #: 130, Diagonal Node #: 97, (172) 
+Element #: 64, Current Node #: 129, Diagonal Node #: 98, (173) 
+Element #: 65, Current Node #: 98, Diagonal Node #: 131, (230) 
+Element #: 65, Current Node #: 99, Diagonal Node #: 130, (229) 
+Element #: 65, Current Node #: 103, Diagonal Node #: 126, (222) 
+Element #: 65, Current Node #: 102, Diagonal Node #: 127, (223) 
+Element #: 65, Current Node #: 126, Diagonal Node #: 103, (181) 
+Element #: 65, Current Node #: 127, Diagonal Node #: 102, (180) 
+Element #: 65, Current Node #: 131, Diagonal Node #: 98, (173) 
+Element #: 65, Current Node #: 130, Diagonal Node #: 99, (174) 
+Element #: 66, Current Node #: 100, Diagonal Node #: 133, (235) 
+Element #: 66, Current Node #: 101, Diagonal Node #: 132, (234) 
+Element #: 66, Current Node #: 105, Diagonal Node #: 128, (227) 
+Element #: 66, Current Node #: 104, Diagonal Node #: 129, (228) 
+Element #: 66, Current Node #: 128, Diagonal Node #: 105, (186) 
+Element #: 66, Current Node #: 129, Diagonal Node #: 104, (185) 
+Element #: 66, Current Node #: 133, Diagonal Node #: 100, (178) 
+Element #: 66, Current Node #: 132, Diagonal Node #: 101, (179) 
+Element #: 67, Current Node #: 101, Diagonal Node #: 134, (236) 
+Element #: 67, Current Node #: 102, Diagonal Node #: 133, (235) 
+Element #: 67, Current Node #: 106, Diagonal Node #: 129, (228) 
+Element #: 67, Current Node #: 105, Diagonal Node #: 130, (229) 
+Element #: 67, Current Node #: 129, Diagonal Node #: 106, (187) 
+Element #: 67, Current Node #: 130, Diagonal Node #: 105, (186) 
+Element #: 67, Current Node #: 134, Diagonal Node #: 101, (179) 
+Element #: 67, Current Node #: 133, Diagonal Node #: 102, (180) 
+Element #: 68, Current Node #: 102, Diagonal Node #: 135, (237) 
+Element #: 68, Current Node #: 103, Diagonal Node #: 134, (236) 
+Element #: 68, Current Node #: 107, Diagonal Node #: 130, (229) 
+Element #: 68, Current Node #: 106, Diagonal Node #: 131, (230) 
+Element #: 68, Current Node #: 130, Diagonal Node #: 107, (188) 
+Element #: 68, Current Node #: 131, Diagonal Node #: 106, (187) 
+Element #: 68, Current Node #: 135, Diagonal Node #: 102, (180) 
+Element #: 68, Current Node #: 134, Diagonal Node #: 103, (181) 
+Element #: 69, Current Node #: 104, Diagonal Node #: 137, (242) 
+Element #: 69, Current Node #: 105, Diagonal Node #: 136, (241) 
+Element #: 69, Current Node #: 109, Diagonal Node #: 132, (234) 
+Element #: 69, Current Node #: 108, Diagonal Node #: 133, (235) 
+Element #: 69, Current Node #: 132, Diagonal Node #: 109, (193) 
+Element #: 69, Current Node #: 133, Diagonal Node #: 108, (192) 
+Element #: 69, Current Node #: 137, Diagonal Node #: 104, (185) 
+Element #: 69, Current Node #: 136, Diagonal Node #: 105, (186) 
+Element #: 70, Current Node #: 105, Diagonal Node #: 138, (243) 
+Element #: 70, Current Node #: 106, Diagonal Node #: 137, (242) 
+Element #: 70, Current Node #: 110, Diagonal Node #: 133, (235) 
+Element #: 70, Current Node #: 109, Diagonal Node #: 134, (236) 
+Element #: 70, Current Node #: 133, Diagonal Node #: 110, (194) 
+Element #: 70, Current Node #: 134, Diagonal Node #: 109, (193) 
+Element #: 70, Current Node #: 138, Diagonal Node #: 105, (186) 
+Element #: 70, Current Node #: 137, Diagonal Node #: 106, (187) 
+Element #: 71, Current Node #: 106, Diagonal Node #: 139, (244) 
+Element #: 71, Current Node #: 107, Diagonal Node #: 138, (243) 
+Element #: 71, Current Node #: 111, Diagonal Node #: 134, (236) 
+Element #: 71, Current Node #: 110, Diagonal Node #: 135, (237) 
+Element #: 71, Current Node #: 134, Diagonal Node #: 111, (195) 
+Element #: 71, Current Node #: 135, Diagonal Node #: 110, (194) 
+Element #: 71, Current Node #: 139, Diagonal Node #: 106, (187) 
+Element #: 71, Current Node #: 138, Diagonal Node #: 107, (188) 
+Element #: 72, Current Node #: 112, Diagonal Node #: 145, (256) 
+Element #: 72, Current Node #: 113, Diagonal Node #: 144, (255) 
+Element #: 72, Current Node #: 117, Diagonal Node #: 140, (248) 
+Element #: 72, Current Node #: 116, Diagonal Node #: 141, (249) 
+Element #: 72, Current Node #: 140, Diagonal Node #: 117, (207) 
+Element #: 72, Current Node #: 141, Diagonal Node #: 116, (206) 
+Element #: 72, Current Node #: 145, Diagonal Node #: 112, (199) 
+Element #: 72, Current Node #: 144, Diagonal Node #: 113, (200) 
+Element #: 73, Current Node #: 113, Diagonal Node #: 146, (257) 
+Element #: 73, Current Node #: 114, Diagonal Node #: 145, (256) 
+Element #: 73, Current Node #: 118, Diagonal Node #: 141, (249) 
+Element #: 73, Current Node #: 117, Diagonal Node #: 142, (250) 
+Element #: 73, Current Node #: 141, Diagonal Node #: 118, (208) 
+Element #: 73, Current Node #: 142, Diagonal Node #: 117, (207) 
+Element #: 73, Current Node #: 146, Diagonal Node #: 113, (200) 
+Element #: 73, Current Node #: 145, Diagonal Node #: 114, (201) 
+Element #: 74, Current Node #: 114, Diagonal Node #: 147, (258) 
+Element #: 74, Current Node #: 115, Diagonal Node #: 146, (257) 
+Element #: 74, Current Node #: 119, Diagonal Node #: 142, (250) 
+Element #: 74, Current Node #: 118, Diagonal Node #: 143, (251) 
+Element #: 74, Current Node #: 142, Diagonal Node #: 119, (209) 
+Element #: 74, Current Node #: 143, Diagonal Node #: 118, (208) 
+Element #: 74, Current Node #: 147, Diagonal Node #: 114, (201) 
+Element #: 74, Current Node #: 146, Diagonal Node #: 115, (202) 
+Element #: 75, Current Node #: 116, Diagonal Node #: 149, (263) 
+Element #: 75, Current Node #: 117, Diagonal Node #: 148, (262) 
+Element #: 75, Current Node #: 121, Diagonal Node #: 144, (255) 
+Element #: 75, Current Node #: 120, Diagonal Node #: 145, (256) 
+Element #: 75, Current Node #: 144, Diagonal Node #: 121, (214) 
+Element #: 75, Current Node #: 145, Diagonal Node #: 120, (213) 
+Element #: 75, Current Node #: 149, Diagonal Node #: 116, (206) 
+Element #: 75, Current Node #: 148, Diagonal Node #: 117, (207) 
+Element #: 76, Current Node #: 117, Diagonal Node #: 150, (264) 
+Element #: 76, Current Node #: 118, Diagonal Node #: 149, (263) 
+Element #: 76, Current Node #: 122, Diagonal Node #: 145, (256) 
+Element #: 76, Current Node #: 121, Diagonal Node #: 146, (257) 
+Element #: 76, Current Node #: 145, Diagonal Node #: 122, (215) 
+Element #: 76, Current Node #: 146, Diagonal Node #: 121, (214) 
+Element #: 76, Current Node #: 150, Diagonal Node #: 117, (207) 
+Element #: 76, Current Node #: 149, Diagonal Node #: 118, (208) 
+Element #: 77, Current Node #: 118, Diagonal Node #: 151, (265) 
+Element #: 77, Current Node #: 119, Diagonal Node #: 150, (264) 
+Element #: 77, Current Node #: 123, Diagonal Node #: 146, (257) 
+Element #: 77, Current Node #: 122, Diagonal Node #: 147, (258) 
+Element #: 77, Current Node #: 146, Diagonal Node #: 123, (216) 
+Element #: 77, Current Node #: 147, Diagonal Node #: 122, (215) 
+Element #: 77, Current Node #: 151, Diagonal Node #: 118, (208) 
+Element #: 77, Current Node #: 150, Diagonal Node #: 119, (209) 
+Element #: 78, Current Node #: 120, Diagonal Node #: 153, (270) 
+Element #: 78, Current Node #: 121, Diagonal Node #: 152, (269) 
+Element #: 78, Current Node #: 125, Diagonal Node #: 148, (262) 
+Element #: 78, Current Node #: 124, Diagonal Node #: 149, (263) 
+Element #: 78, Current Node #: 148, Diagonal Node #: 125, (221) 
+Element #: 78, Current Node #: 149, Diagonal Node #: 124, (220) 
+Element #: 78, Current Node #: 153, Diagonal Node #: 120, (213) 
+Element #: 78, Current Node #: 152, Diagonal Node #: 121, (214) 
+Element #: 79, Current Node #: 121, Diagonal Node #: 154, (271) 
+Element #: 79, Current Node #: 122, Diagonal Node #: 153, (270) 
+Element #: 79, Current Node #: 126, Diagonal Node #: 149, (263) 
+Element #: 79, Current Node #: 125, Diagonal Node #: 150, (264) 
+Element #: 79, Current Node #: 149, Diagonal Node #: 126, (222) 
+Element #: 79, Current Node #: 150, Diagonal Node #: 125, (221) 
+Element #: 79, Current Node #: 154, Diagonal Node #: 121, (214) 
+Element #: 79, Current Node #: 153, Diagonal Node #: 122, (215) 
+Element #: 80, Current Node #: 122, Diagonal Node #: 155, (272) 
+Element #: 80, Current Node #: 123, Diagonal Node #: 154, (271) 
+Element #: 80, Current Node #: 127, Diagonal Node #: 150, (264) 
+Element #: 80, Current Node #: 126, Diagonal Node #: 151, (265) 
+Element #: 80, Current Node #: 150, Diagonal Node #: 127, (223) 
+Element #: 80, Current Node #: 151, Diagonal Node #: 126, (222) 
+Element #: 80, Current Node #: 155, Diagonal Node #: 122, (215) 
+Element #: 80, Current Node #: 154, Diagonal Node #: 123, (216) 
+Element #: 81, Current Node #: 124, Diagonal Node #: 157, (277) 
+Element #: 81, Current Node #: 125, Diagonal Node #: 156, (276) 
+Element #: 81, Current Node #: 129, Diagonal Node #: 152, (269) 
+Element #: 81, Current Node #: 128, Diagonal Node #: 153, (270) 
+Element #: 81, Current Node #: 152, Diagonal Node #: 129, (228) 
+Element #: 81, Current Node #: 153, Diagonal Node #: 128, (227) 
+Element #: 81, Current Node #: 157, Diagonal Node #: 124, (220) 
+Element #: 81, Current Node #: 156, Diagonal Node #: 125, (221) 
+Element #: 82, Current Node #: 125, Diagonal Node #: 158, (278) 
+Element #: 82, Current Node #: 126, Diagonal Node #: 157, (277) 
+Element #: 82, Current Node #: 130, Diagonal Node #: 153, (270) 
+Element #: 82, Current Node #: 129, Diagonal Node #: 154, (271) 
+Element #: 82, Current Node #: 153, Diagonal Node #: 130, (229) 
+Element #: 82, Current Node #: 154, Diagonal Node #: 129, (228) 
+Element #: 82, Current Node #: 158, Diagonal Node #: 125, (221) 
+Element #: 82, Current Node #: 157, Diagonal Node #: 126, (222) 
+Element #: 83, Current Node #: 126, Diagonal Node #: 159, (279) 
+Element #: 83, Current Node #: 127, Diagonal Node #: 158, (278) 
+Element #: 83, Current Node #: 131, Diagonal Node #: 154, (271) 
+Element #: 83, Current Node #: 130, Diagonal Node #: 155, (272) 
+Element #: 83, Current Node #: 154, Diagonal Node #: 131, (230) 
+Element #: 83, Current Node #: 155, Diagonal Node #: 130, (229) 
+Element #: 83, Current Node #: 159, Diagonal Node #: 126, (222) 
+Element #: 83, Current Node #: 158, Diagonal Node #: 127, (223) 
+Element #: 84, Current Node #: 128, Diagonal Node #: 161, (284) 
+Element #: 84, Current Node #: 129, Diagonal Node #: 160, (283) 
+Element #: 84, Current Node #: 133, Diagonal Node #: 156, (276) 
+Element #: 84, Current Node #: 132, Diagonal Node #: 157, (277) 
+Element #: 84, Current Node #: 156, Diagonal Node #: 133, (235) 
+Element #: 84, Current Node #: 157, Diagonal Node #: 132, (234) 
+Element #: 84, Current Node #: 161, Diagonal Node #: 128, (227) 
+Element #: 84, Current Node #: 160, Diagonal Node #: 129, (228) 
+Element #: 85, Current Node #: 129, Diagonal Node #: 162, (285) 
+Element #: 85, Current Node #: 130, Diagonal Node #: 161, (284) 
+Element #: 85, Current Node #: 134, Diagonal Node #: 157, (277) 
+Element #: 85, Current Node #: 133, Diagonal Node #: 158, (278) 
+Element #: 85, Current Node #: 157, Diagonal Node #: 134, (236) 
+Element #: 85, Current Node #: 158, Diagonal Node #: 133, (235) 
+Element #: 85, Current Node #: 162, Diagonal Node #: 129, (228) 
+Element #: 85, Current Node #: 161, Diagonal Node #: 130, (229) 
+Element #: 86, Current Node #: 130, Diagonal Node #: 163, (286) 
+Element #: 86, Current Node #: 131, Diagonal Node #: 162, (285) 
+Element #: 86, Current Node #: 135, Diagonal Node #: 158, (278) 
+Element #: 86, Current Node #: 134, Diagonal Node #: 159, (279) 
+Element #: 86, Current Node #: 158, Diagonal Node #: 135, (237) 
+Element #: 86, Current Node #: 159, Diagonal Node #: 134, (236) 
+Element #: 86, Current Node #: 163, Diagonal Node #: 130, (229) 
+Element #: 86, Current Node #: 162, Diagonal Node #: 131, (230) 
+Element #: 87, Current Node #: 132, Diagonal Node #: 165, (291) 
+Element #: 87, Current Node #: 133, Diagonal Node #: 164, (290) 
+Element #: 87, Current Node #: 137, Diagonal Node #: 160, (283) 
+Element #: 87, Current Node #: 136, Diagonal Node #: 161, (284) 
+Element #: 87, Current Node #: 160, Diagonal Node #: 137, (242) 
+Element #: 87, Current Node #: 161, Diagonal Node #: 136, (241) 
+Element #: 87, Current Node #: 165, Diagonal Node #: 132, (234) 
+Element #: 87, Current Node #: 164, Diagonal Node #: 133, (235) 
+Element #: 88, Current Node #: 133, Diagonal Node #: 166, (292) 
+Element #: 88, Current Node #: 134, Diagonal Node #: 165, (291) 
+Element #: 88, Current Node #: 138, Diagonal Node #: 161, (284) 
+Element #: 88, Current Node #: 137, Diagonal Node #: 162, (285) 
+Element #: 88, Current Node #: 161, Diagonal Node #: 138, (243) 
+Element #: 88, Current Node #: 162, Diagonal Node #: 137, (242) 
+Element #: 88, Current Node #: 166, Diagonal Node #: 133, (235) 
+Element #: 88, Current Node #: 165, Diagonal Node #: 134, (236) 
+Element #: 89, Current Node #: 134, Diagonal Node #: 167, (293) 
+Element #: 89, Current Node #: 135, Diagonal Node #: 166, (292) 
+Element #: 89, Current Node #: 139, Diagonal Node #: 162, (285) 
+Element #: 89, Current Node #: 138, Diagonal Node #: 163, (286) 
+Element #: 89, Current Node #: 162, Diagonal Node #: 139, (244) 
+Element #: 89, Current Node #: 163, Diagonal Node #: 138, (243) 
+Element #: 89, Current Node #: 167, Diagonal Node #: 134, (236) 
+Element #: 89, Current Node #: 166, Diagonal Node #: 135, (237) 
+Element #: 90, Current Node #: 140, Diagonal Node #: 173, (305) 
+Element #: 90, Current Node #: 141, Diagonal Node #: 172, (304) 
+Element #: 90, Current Node #: 145, Diagonal Node #: 168, (297) 
+Element #: 90, Current Node #: 144, Diagonal Node #: 169, (298) 
+Element #: 90, Current Node #: 168, Diagonal Node #: 145, (256) 
+Element #: 90, Current Node #: 169, Diagonal Node #: 144, (255) 
+Element #: 90, Current Node #: 173, Diagonal Node #: 140, (248) 
+Element #: 90, Current Node #: 172, Diagonal Node #: 141, (249) 
+Element #: 91, Current Node #: 141, Diagonal Node #: 174, (306) 
+Element #: 91, Current Node #: 142, Diagonal Node #: 173, (305) 
+Element #: 91, Current Node #: 146, Diagonal Node #: 169, (298) 
+Element #: 91, Current Node #: 145, Diagonal Node #: 170, (299) 
+Element #: 91, Current Node #: 169, Diagonal Node #: 146, (257) 
+Element #: 91, Current Node #: 170, Diagonal Node #: 145, (256) 
+Element #: 91, Current Node #: 174, Diagonal Node #: 141, (249) 
+Element #: 91, Current Node #: 173, Diagonal Node #: 142, (250) 
+Element #: 92, Current Node #: 142, Diagonal Node #: 175, (307) 
+Element #: 92, Current Node #: 143, Diagonal Node #: 174, (306) 
+Element #: 92, Current Node #: 147, Diagonal Node #: 170, (299) 
+Element #: 92, Current Node #: 146, Diagonal Node #: 171, (300) 
+Element #: 92, Current Node #: 170, Diagonal Node #: 147, (258) 
+Element #: 92, Current Node #: 171, Diagonal Node #: 146, (257) 
+Element #: 92, Current Node #: 175, Diagonal Node #: 142, (250) 
+Element #: 92, Current Node #: 174, Diagonal Node #: 143, (251) 
+Element #: 93, Current Node #: 144, Diagonal Node #: 177, (312) 
+Element #: 93, Current Node #: 145, Diagonal Node #: 176, (311) 
+Element #: 93, Current Node #: 149, Diagonal Node #: 172, (304) 
+Element #: 93, Current Node #: 148, Diagonal Node #: 173, (305) 
+Element #: 93, Current Node #: 172, Diagonal Node #: 149, (263) 
+Element #: 93, Current Node #: 173, Diagonal Node #: 148, (262) 
+Element #: 93, Current Node #: 177, Diagonal Node #: 144, (255) 
+Element #: 93, Current Node #: 176, Diagonal Node #: 145, (256) 
+Element #: 94, Current Node #: 145, Diagonal Node #: 178, (313) 
+Element #: 94, Current Node #: 146, Diagonal Node #: 177, (312) 
+Element #: 94, Current Node #: 150, Diagonal Node #: 173, (305) 
+Element #: 94, Current Node #: 149, Diagonal Node #: 174, (306) 
+Element #: 94, Current Node #: 173, Diagonal Node #: 150, (264) 
+Element #: 94, Current Node #: 174, Diagonal Node #: 149, (263) 
+Element #: 94, Current Node #: 178, Diagonal Node #: 145, (256) 
+Element #: 94, Current Node #: 177, Diagonal Node #: 146, (257) 
+Element #: 95, Current Node #: 146, Diagonal Node #: 179, (314) 
+Element #: 95, Current Node #: 147, Diagonal Node #: 178, (313) 
+Element #: 95, Current Node #: 151, Diagonal Node #: 174, (306) 
+Element #: 95, Current Node #: 150, Diagonal Node #: 175, (307) 
+Element #: 95, Current Node #: 174, Diagonal Node #: 151, (265) 
+Element #: 95, Current Node #: 175, Diagonal Node #: 150, (264) 
+Element #: 95, Current Node #: 179, Diagonal Node #: 146, (257) 
+Element #: 95, Current Node #: 178, Diagonal Node #: 147, (258) 
+Element #: 96, Current Node #: 148, Diagonal Node #: 181, (319) 
+Element #: 96, Current Node #: 149, Diagonal Node #: 180, (318) 
+Element #: 96, Current Node #: 153, Diagonal Node #: 176, (311) 
+Element #: 96, Current Node #: 152, Diagonal Node #: 177, (312) 
+Element #: 96, Current Node #: 176, Diagonal Node #: 153, (270) 
+Element #: 96, Current Node #: 177, Diagonal Node #: 152, (269) 
+Element #: 96, Current Node #: 181, Diagonal Node #: 148, (262) 
+Element #: 96, Current Node #: 180, Diagonal Node #: 149, (263) 
+Element #: 97, Current Node #: 149, Diagonal Node #: 182, (320) 
+Element #: 97, Current Node #: 150, Diagonal Node #: 181, (319) 
+Element #: 97, Current Node #: 154, Diagonal Node #: 177, (312) 
+Element #: 97, Current Node #: 153, Diagonal Node #: 178, (313) 
+Element #: 97, Current Node #: 177, Diagonal Node #: 154, (271) 
+Element #: 97, Current Node #: 178, Diagonal Node #: 153, (270) 
+Element #: 97, Current Node #: 182, Diagonal Node #: 149, (263) 
+Element #: 97, Current Node #: 181, Diagonal Node #: 150, (264) 
+Element #: 98, Current Node #: 150, Diagonal Node #: 183, (321) 
+Element #: 98, Current Node #: 151, Diagonal Node #: 182, (320) 
+Element #: 98, Current Node #: 155, Diagonal Node #: 178, (313) 
+Element #: 98, Current Node #: 154, Diagonal Node #: 179, (314) 
+Element #: 98, Current Node #: 178, Diagonal Node #: 155, (272) 
+Element #: 98, Current Node #: 179, Diagonal Node #: 154, (271) 
+Element #: 98, Current Node #: 183, Diagonal Node #: 150, (264) 
+Element #: 98, Current Node #: 182, Diagonal Node #: 151, (265) 
+Element #: 99, Current Node #: 152, Diagonal Node #: 185, (326) 
+Element #: 99, Current Node #: 153, Diagonal Node #: 184, (325) 
+Element #: 99, Current Node #: 157, Diagonal Node #: 180, (318) 
+Element #: 99, Current Node #: 156, Diagonal Node #: 181, (319) 
+Element #: 99, Current Node #: 180, Diagonal Node #: 157, (277) 
+Element #: 99, Current Node #: 181, Diagonal Node #: 156, (276) 
+Element #: 99, Current Node #: 185, Diagonal Node #: 152, (269) 
+Element #: 99, Current Node #: 184, Diagonal Node #: 153, (270) 
+Element #: 100, Current Node #: 153, Diagonal Node #: 186, (327) 
+Element #: 100, Current Node #: 154, Diagonal Node #: 185, (326) 
+Element #: 100, Current Node #: 158, Diagonal Node #: 181, (319) 
+Element #: 100, Current Node #: 157, Diagonal Node #: 182, (320) 
+Element #: 100, Current Node #: 181, Diagonal Node #: 158, (278) 
+Element #: 100, Current Node #: 182, Diagonal Node #: 157, (277) 
+Element #: 100, Current Node #: 186, Diagonal Node #: 153, (270) 
+Element #: 100, Current Node #: 185, Diagonal Node #: 154, (271) 
+Element #: 101, Current Node #: 154, Diagonal Node #: 187, (328) 
+Element #: 101, Current Node #: 155, Diagonal Node #: 186, (327) 
+Element #: 101, Current Node #: 159, Diagonal Node #: 182, (320) 
+Element #: 101, Current Node #: 158, Diagonal Node #: 183, (321) 
+Element #: 101, Current Node #: 182, Diagonal Node #: 159, (279) 
+Element #: 101, Current Node #: 183, Diagonal Node #: 158, (278) 
+Element #: 101, Current Node #: 187, Diagonal Node #: 154, (271) 
+Element #: 101, Current Node #: 186, Diagonal Node #: 155, (272) 
+Element #: 102, Current Node #: 156, Diagonal Node #: 189, (333) 
+Element #: 102, Current Node #: 157, Diagonal Node #: 188, (332) 
+Element #: 102, Current Node #: 161, Diagonal Node #: 184, (325) 
+Element #: 102, Current Node #: 160, Diagonal Node #: 185, (326) 
+Element #: 102, Current Node #: 184, Diagonal Node #: 161, (284) 
+Element #: 102, Current Node #: 185, Diagonal Node #: 160, (283) 
+Element #: 102, Current Node #: 189, Diagonal Node #: 156, (276) 
+Element #: 102, Current Node #: 188, Diagonal Node #: 157, (277) 
+Element #: 103, Current Node #: 157, Diagonal Node #: 190, (334) 
+Element #: 103, Current Node #: 158, Diagonal Node #: 189, (333) 
+Element #: 103, Current Node #: 162, Diagonal Node #: 185, (326) 
+Element #: 103, Current Node #: 161, Diagonal Node #: 186, (327) 
+Element #: 103, Current Node #: 185, Diagonal Node #: 162, (285) 
+Element #: 103, Current Node #: 186, Diagonal Node #: 161, (284) 
+Element #: 103, Current Node #: 190, Diagonal Node #: 157, (277) 
+Element #: 103, Current Node #: 189, Diagonal Node #: 158, (278) 
+Element #: 104, Current Node #: 158, Diagonal Node #: 191, (335) 
+Element #: 104, Current Node #: 159, Diagonal Node #: 190, (334) 
+Element #: 104, Current Node #: 163, Diagonal Node #: 186, (327) 
+Element #: 104, Current Node #: 162, Diagonal Node #: 187, (328) 
+Element #: 104, Current Node #: 186, Diagonal Node #: 163, (286) 
+Element #: 104, Current Node #: 187, Diagonal Node #: 162, (285) 
+Element #: 104, Current Node #: 191, Diagonal Node #: 158, (278) 
+Element #: 104, Current Node #: 190, Diagonal Node #: 159, (279) 
+Element #: 105, Current Node #: 160, Diagonal Node #: 193, (340) 
+Element #: 105, Current Node #: 161, Diagonal Node #: 192, (339) 
+Element #: 105, Current Node #: 165, Diagonal Node #: 188, (332) 
+Element #: 105, Current Node #: 164, Diagonal Node #: 189, (333) 
+Element #: 105, Current Node #: 188, Diagonal Node #: 165, (291) 
+Element #: 105, Current Node #: 189, Diagonal Node #: 164, (290) 
+Element #: 105, Current Node #: 193, Diagonal Node #: 160, (283) 
+Element #: 105, Current Node #: 192, Diagonal Node #: 161, (284) 
+Element #: 106, Current Node #: 161, Diagonal Node #: 194, (341) 
+Element #: 106, Current Node #: 162, Diagonal Node #: 193, (340) 
+Element #: 106, Current Node #: 166, Diagonal Node #: 189, (333) 
+Element #: 106, Current Node #: 165, Diagonal Node #: 190, (334) 
+Element #: 106, Current Node #: 189, Diagonal Node #: 166, (292) 
+Element #: 106, Current Node #: 190, Diagonal Node #: 165, (291) 
+Element #: 106, Current Node #: 194, Diagonal Node #: 161, (284) 
+Element #: 106, Current Node #: 193, Diagonal Node #: 162, (285) 
+Element #: 107, Current Node #: 162, Diagonal Node #: 195, (342) 
+Element #: 107, Current Node #: 163, Diagonal Node #: 194, (341) 
+Element #: 107, Current Node #: 167, Diagonal Node #: 190, (334) 
+Element #: 107, Current Node #: 166, Diagonal Node #: 191, (335) 
+Element #: 107, Current Node #: 190, Diagonal Node #: 167, (293) 
+Element #: 107, Current Node #: 191, Diagonal Node #: 166, (292) 
+Element #: 107, Current Node #: 195, Diagonal Node #: 162, (285) 
+Element #: 107, Current Node #: 194, Diagonal Node #: 163, (286) 
+Element #: 108, Current Node #: 196, Diagonal Node #: 32, (59) 
+Element #: 108, Current Node #: 0, Diagonal Node #: 204, (58) 
+Element #: 108, Current Node #: 4, Diagonal Node #: 203, (51) 
+Element #: 108, Current Node #: 197, Diagonal Node #: 28, (52) 
+Element #: 108, Current Node #: 203, Diagonal Node #: 4, (10) 
+Element #: 108, Current Node #: 28, Diagonal Node #: 197, (9) 
+Element #: 108, Current Node #: 32, Diagonal Node #: 196, (2) 
+Element #: 108, Current Node #: 204, Diagonal Node #: 0, (3) 
+Element #: 109, Current Node #: 197, Diagonal Node #: 36, (66) 
+Element #: 109, Current Node #: 4, Diagonal Node #: 205, (65) 
+Element #: 109, Current Node #: 8, Diagonal Node #: 204, (58) 
+Element #: 109, Current Node #: 198, Diagonal Node #: 32, (59) 
+Element #: 109, Current Node #: 204, Diagonal Node #: 8, (17) 
+Element #: 109, Current Node #: 32, Diagonal Node #: 198, (16) 
+Element #: 109, Current Node #: 36, Diagonal Node #: 197, (9) 
+Element #: 109, Current Node #: 205, Diagonal Node #: 4, (10) 
+Element #: 110, Current Node #: 198, Diagonal Node #: 40, (73) 
+Element #: 110, Current Node #: 8, Diagonal Node #: 206, (72) 
+Element #: 110, Current Node #: 12, Diagonal Node #: 205, (65) 
+Element #: 110, Current Node #: 199, Diagonal Node #: 36, (66) 
+Element #: 110, Current Node #: 205, Diagonal Node #: 12, (24) 
+Element #: 110, Current Node #: 36, Diagonal Node #: 199, (23) 
+Element #: 110, Current Node #: 40, Diagonal Node #: 198, (16) 
+Element #: 110, Current Node #: 206, Diagonal Node #: 8, (17) 
+Element #: 111, Current Node #: 199, Diagonal Node #: 44, (80) 
+Element #: 111, Current Node #: 12, Diagonal Node #: 207, (79) 
+Element #: 111, Current Node #: 16, Diagonal Node #: 206, (72) 
+Element #: 111, Current Node #: 200, Diagonal Node #: 40, (73) 
+Element #: 111, Current Node #: 206, Diagonal Node #: 16, (31) 
+Element #: 111, Current Node #: 40, Diagonal Node #: 200, (30) 
+Element #: 111, Current Node #: 44, Diagonal Node #: 199, (23) 
+Element #: 111, Current Node #: 207, Diagonal Node #: 12, (24) 
+Element #: 112, Current Node #: 200, Diagonal Node #: 48, (87) 
+Element #: 112, Current Node #: 16, Diagonal Node #: 208, (86) 
+Element #: 112, Current Node #: 20, Diagonal Node #: 207, (79) 
+Element #: 112, Current Node #: 201, Diagonal Node #: 44, (80) 
+Element #: 112, Current Node #: 207, Diagonal Node #: 20, (38) 
+Element #: 112, Current Node #: 44, Diagonal Node #: 201, (37) 
+Element #: 112, Current Node #: 48, Diagonal Node #: 200, (30) 
+Element #: 112, Current Node #: 208, Diagonal Node #: 16, (31) 
+Element #: 113, Current Node #: 201, Diagonal Node #: 52, (94) 
+Element #: 113, Current Node #: 20, Diagonal Node #: 209, (93) 
+Element #: 113, Current Node #: 24, Diagonal Node #: 208, (86) 
+Element #: 113, Current Node #: 202, Diagonal Node #: 48, (87) 
+Element #: 113, Current Node #: 208, Diagonal Node #: 24, (45) 
+Element #: 113, Current Node #: 48, Diagonal Node #: 202, (44) 
+Element #: 113, Current Node #: 52, Diagonal Node #: 201, (37) 
+Element #: 113, Current Node #: 209, Diagonal Node #: 20, (38) 
+Element #: 114, Current Node #: 203, Diagonal Node #: 60, (108) 
+Element #: 114, Current Node #: 28, Diagonal Node #: 211, (107) 
+Element #: 114, Current Node #: 32, Diagonal Node #: 210, (100) 
+Element #: 114, Current Node #: 204, Diagonal Node #: 56, (101) 
+Element #: 114, Current Node #: 210, Diagonal Node #: 32, (59) 
+Element #: 114, Current Node #: 56, Diagonal Node #: 204, (58) 
+Element #: 114, Current Node #: 60, Diagonal Node #: 203, (51) 
+Element #: 114, Current Node #: 211, Diagonal Node #: 28, (52) 
+Element #: 115, Current Node #: 204, Diagonal Node #: 64, (115) 
+Element #: 115, Current Node #: 32, Diagonal Node #: 212, (114) 
+Element #: 115, Current Node #: 36, Diagonal Node #: 211, (107) 
+Element #: 115, Current Node #: 205, Diagonal Node #: 60, (108) 
+Element #: 115, Current Node #: 211, Diagonal Node #: 36, (66) 
+Element #: 115, Current Node #: 60, Diagonal Node #: 205, (65) 
+Element #: 115, Current Node #: 64, Diagonal Node #: 204, (58) 
+Element #: 115, Current Node #: 212, Diagonal Node #: 32, (59) 
+Element #: 116, Current Node #: 205, Diagonal Node #: 68, (122) 
+Element #: 116, Current Node #: 36, Diagonal Node #: 213, (121) 
+Element #: 116, Current Node #: 40, Diagonal Node #: 212, (114) 
+Element #: 116, Current Node #: 206, Diagonal Node #: 64, (115) 
+Element #: 116, Current Node #: 212, Diagonal Node #: 40, (73) 
+Element #: 116, Current Node #: 64, Diagonal Node #: 206, (72) 
+Element #: 116, Current Node #: 68, Diagonal Node #: 205, (65) 
+Element #: 116, Current Node #: 213, Diagonal Node #: 36, (66) 
+Element #: 117, Current Node #: 206, Diagonal Node #: 72, (129) 
+Element #: 117, Current Node #: 40, Diagonal Node #: 214, (128) 
+Element #: 117, Current Node #: 44, Diagonal Node #: 213, (121) 
+Element #: 117, Current Node #: 207, Diagonal Node #: 68, (122) 
+Element #: 117, Current Node #: 213, Diagonal Node #: 44, (80) 
+Element #: 117, Current Node #: 68, Diagonal Node #: 207, (79) 
+Element #: 117, Current Node #: 72, Diagonal Node #: 206, (72) 
+Element #: 117, Current Node #: 214, Diagonal Node #: 40, (73) 
+Element #: 118, Current Node #: 207, Diagonal Node #: 76, (136) 
+Element #: 118, Current Node #: 44, Diagonal Node #: 215, (135) 
+Element #: 118, Current Node #: 48, Diagonal Node #: 214, (128) 
+Element #: 118, Current Node #: 208, Diagonal Node #: 72, (129) 
+Element #: 118, Current Node #: 214, Diagonal Node #: 48, (87) 
+Element #: 118, Current Node #: 72, Diagonal Node #: 208, (86) 
+Element #: 118, Current Node #: 76, Diagonal Node #: 207, (79) 
+Element #: 118, Current Node #: 215, Diagonal Node #: 44, (80) 
+Element #: 119, Current Node #: 208, Diagonal Node #: 80, (143) 
+Element #: 119, Current Node #: 48, Diagonal Node #: 216, (142) 
+Element #: 119, Current Node #: 52, Diagonal Node #: 215, (135) 
+Element #: 119, Current Node #: 209, Diagonal Node #: 76, (136) 
+Element #: 119, Current Node #: 215, Diagonal Node #: 52, (94) 
+Element #: 119, Current Node #: 76, Diagonal Node #: 209, (93) 
+Element #: 119, Current Node #: 80, Diagonal Node #: 208, (86) 
+Element #: 119, Current Node #: 216, Diagonal Node #: 48, (87) 
+Element #: 120, Current Node #: 210, Diagonal Node #: 88, (157) 
+Element #: 120, Current Node #: 56, Diagonal Node #: 218, (156) 
+Element #: 120, Current Node #: 60, Diagonal Node #: 217, (149) 
+Element #: 120, Current Node #: 211, Diagonal Node #: 84, (150) 
+Element #: 120, Current Node #: 217, Diagonal Node #: 60, (108) 
+Element #: 120, Current Node #: 84, Diagonal Node #: 211, (107) 
+Element #: 120, Current Node #: 88, Diagonal Node #: 210, (100) 
+Element #: 120, Current Node #: 218, Diagonal Node #: 56, (101) 
+Element #: 121, Current Node #: 211, Diagonal Node #: 92, (164) 
+Element #: 121, Current Node #: 60, Diagonal Node #: 219, (163) 
+Element #: 121, Current Node #: 64, Diagonal Node #: 218, (156) 
+Element #: 121, Current Node #: 212, Diagonal Node #: 88, (157) 
+Element #: 121, Current Node #: 218, Diagonal Node #: 64, (115) 
+Element #: 121, Current Node #: 88, Diagonal Node #: 212, (114) 
+Element #: 121, Current Node #: 92, Diagonal Node #: 211, (107) 
+Element #: 121, Current Node #: 219, Diagonal Node #: 60, (108) 
+Element #: 122, Current Node #: 212, Diagonal Node #: 96, (171) 
+Element #: 122, Current Node #: 64, Diagonal Node #: 220, (170) 
+Element #: 122, Current Node #: 68, Diagonal Node #: 219, (163) 
+Element #: 122, Current Node #: 213, Diagonal Node #: 92, (164) 
+Element #: 122, Current Node #: 219, Diagonal Node #: 68, (122) 
+Element #: 122, Current Node #: 92, Diagonal Node #: 213, (121) 
+Element #: 122, Current Node #: 96, Diagonal Node #: 212, (114) 
+Element #: 122, Current Node #: 220, Diagonal Node #: 64, (115) 
+Element #: 123, Current Node #: 213, Diagonal Node #: 100, (178) 
+Element #: 123, Current Node #: 68, Diagonal Node #: 221, (177) 
+Element #: 123, Current Node #: 72, Diagonal Node #: 220, (170) 
+Element #: 123, Current Node #: 214, Diagonal Node #: 96, (171) 
+Element #: 123, Current Node #: 220, Diagonal Node #: 72, (129) 
+Element #: 123, Current Node #: 96, Diagonal Node #: 214, (128) 
+Element #: 123, Current Node #: 100, Diagonal Node #: 213, (121) 
+Element #: 123, Current Node #: 221, Diagonal Node #: 68, (122) 
+Element #: 124, Current Node #: 214, Diagonal Node #: 104, (185) 
+Element #: 124, Current Node #: 72, Diagonal Node #: 222, (184) 
+Element #: 124, Current Node #: 76, Diagonal Node #: 221, (177) 
+Element #: 124, Current Node #: 215, Diagonal Node #: 100, (178) 
+Element #: 124, Current Node #: 221, Diagonal Node #: 76, (136) 
+Element #: 124, Current Node #: 100, Diagonal Node #: 215, (135) 
+Element #: 124, Current Node #: 104, Diagonal Node #: 214, (128) 
+Element #: 124, Current Node #: 222, Diagonal Node #: 72, (129) 
+Element #: 125, Current Node #: 215, Diagonal Node #: 108, (192) 
+Element #: 125, Current Node #: 76, Diagonal Node #: 223, (191) 
+Element #: 125, Current Node #: 80, Diagonal Node #: 222, (184) 
+Element #: 125, Current Node #: 216, Diagonal Node #: 104, (185) 
+Element #: 125, Current Node #: 222, Diagonal Node #: 80, (143) 
+Element #: 125, Current Node #: 104, Diagonal Node #: 216, (142) 
+Element #: 125, Current Node #: 108, Diagonal Node #: 215, (135) 
+Element #: 125, Current Node #: 223, Diagonal Node #: 76, (136) 
+Element #: 126, Current Node #: 217, Diagonal Node #: 116, (206) 
+Element #: 126, Current Node #: 84, Diagonal Node #: 225, (205) 
+Element #: 126, Current Node #: 88, Diagonal Node #: 224, (198) 
+Element #: 126, Current Node #: 218, Diagonal Node #: 112, (199) 
+Element #: 126, Current Node #: 224, Diagonal Node #: 88, (157) 
+Element #: 126, Current Node #: 112, Diagonal Node #: 218, (156) 
+Element #: 126, Current Node #: 116, Diagonal Node #: 217, (149) 
+Element #: 126, Current Node #: 225, Diagonal Node #: 84, (150) 
+Element #: 127, Current Node #: 218, Diagonal Node #: 120, (213) 
+Element #: 127, Current Node #: 88, Diagonal Node #: 226, (212) 
+Element #: 127, Current Node #: 92, Diagonal Node #: 225, (205) 
+Element #: 127, Current Node #: 219, Diagonal Node #: 116, (206) 
+Element #: 127, Current Node #: 225, Diagonal Node #: 92, (164) 
+Element #: 127, Current Node #: 116, Diagonal Node #: 219, (163) 
+Element #: 127, Current Node #: 120, Diagonal Node #: 218, (156) 
+Element #: 127, Current Node #: 226, Diagonal Node #: 88, (157) 
+Element #: 128, Current Node #: 219, Diagonal Node #: 124, (220) 
+Element #: 128, Current Node #: 92, Diagonal Node #: 227, (219) 
+Element #: 128, Current Node #: 96, Diagonal Node #: 226, (212) 
+Element #: 128, Current Node #: 220, Diagonal Node #: 120, (213) 
+Element #: 128, Current Node #: 226, Diagonal Node #: 96, (171) 
+Element #: 128, Current Node #: 120, Diagonal Node #: 220, (170) 
+Element #: 128, Current Node #: 124, Diagonal Node #: 219, (163) 
+Element #: 128, Current Node #: 227, Diagonal Node #: 92, (164) 
+Element #: 129, Current Node #: 220, Diagonal Node #: 128, (227) 
+Element #: 129, Current Node #: 96, Diagonal Node #: 228, (226) 
+Element #: 129, Current Node #: 100, Diagonal Node #: 227, (219) 
+Element #: 129, Current Node #: 221, Diagonal Node #: 124, (220) 
+Element #: 129, Current Node #: 227, Diagonal Node #: 100, (178) 
+Element #: 129, Current Node #: 124, Diagonal Node #: 221, (177) 
+Element #: 129, Current Node #: 128, Diagonal Node #: 220, (170) 
+Element #: 129, Current Node #: 228, Diagonal Node #: 96, (171) 
+Element #: 130, Current Node #: 221, Diagonal Node #: 132, (234) 
+Element #: 130, Current Node #: 100, Diagonal Node #: 229, (233) 
+Element #: 130, Current Node #: 104, Diagonal Node #: 228, (226) 
+Element #: 130, Current Node #: 222, Diagonal Node #: 128, (227) 
+Element #: 130, Current Node #: 228, Diagonal Node #: 104, (185) 
+Element #: 130, Current Node #: 128, Diagonal Node #: 222, (184) 
+Element #: 130, Current Node #: 132, Diagonal Node #: 221, (177) 
+Element #: 130, Current Node #: 229, Diagonal Node #: 100, (178) 
+Element #: 131, Current Node #: 222, Diagonal Node #: 136, (241) 
+Element #: 131, Current Node #: 104, Diagonal Node #: 230, (240) 
+Element #: 131, Current Node #: 108, Diagonal Node #: 229, (233) 
+Element #: 131, Current Node #: 223, Diagonal Node #: 132, (234) 
+Element #: 131, Current Node #: 229, Diagonal Node #: 108, (192) 
+Element #: 131, Current Node #: 132, Diagonal Node #: 223, (191) 
+Element #: 131, Current Node #: 136, Diagonal Node #: 222, (184) 
+Element #: 131, Current Node #: 230, Diagonal Node #: 104, (185) 
+Element #: 132, Current Node #: 224, Diagonal Node #: 144, (255) 
+Element #: 132, Current Node #: 112, Diagonal Node #: 232, (254) 
+Element #: 132, Current Node #: 116, Diagonal Node #: 231, (247) 
+Element #: 132, Current Node #: 225, Diagonal Node #: 140, (248) 
+Element #: 132, Current Node #: 231, Diagonal Node #: 116, (206) 
+Element #: 132, Current Node #: 140, Diagonal Node #: 225, (205) 
+Element #: 132, Current Node #: 144, Diagonal Node #: 224, (198) 
+Element #: 132, Current Node #: 232, Diagonal Node #: 112, (199) 
+Element #: 133, Current Node #: 225, Diagonal Node #: 148, (262) 
+Element #: 133, Current Node #: 116, Diagonal Node #: 233, (261) 
+Element #: 133, Current Node #: 120, Diagonal Node #: 232, (254) 
+Element #: 133, Current Node #: 226, Diagonal Node #: 144, (255) 
+Element #: 133, Current Node #: 232, Diagonal Node #: 120, (213) 
+Element #: 133, Current Node #: 144, Diagonal Node #: 226, (212) 
+Element #: 133, Current Node #: 148, Diagonal Node #: 225, (205) 
+Element #: 133, Current Node #: 233, Diagonal Node #: 116, (206) 
+Element #: 134, Current Node #: 226, Diagonal Node #: 152, (269) 
+Element #: 134, Current Node #: 120, Diagonal Node #: 234, (268) 
+Element #: 134, Current Node #: 124, Diagonal Node #: 233, (261) 
+Element #: 134, Current Node #: 227, Diagonal Node #: 148, (262) 
+Element #: 134, Current Node #: 233, Diagonal Node #: 124, (220) 
+Element #: 134, Current Node #: 148, Diagonal Node #: 227, (219) 
+Element #: 134, Current Node #: 152, Diagonal Node #: 226, (212) 
+Element #: 134, Current Node #: 234, Diagonal Node #: 120, (213) 
+Element #: 135, Current Node #: 227, Diagonal Node #: 156, (276) 
+Element #: 135, Current Node #: 124, Diagonal Node #: 235, (275) 
+Element #: 135, Current Node #: 128, Diagonal Node #: 234, (268) 
+Element #: 135, Current Node #: 228, Diagonal Node #: 152, (269) 
+Element #: 135, Current Node #: 234, Diagonal Node #: 128, (227) 
+Element #: 135, Current Node #: 152, Diagonal Node #: 228, (226) 
+Element #: 135, Current Node #: 156, Diagonal Node #: 227, (219) 
+Element #: 135, Current Node #: 235, Diagonal Node #: 124, (220) 
+Element #: 136, Current Node #: 228, Diagonal Node #: 160, (283) 
+Element #: 136, Current Node #: 128, Diagonal Node #: 236, (282) 
+Element #: 136, Current Node #: 132, Diagonal Node #: 235, (275) 
+Element #: 136, Current Node #: 229, Diagonal Node #: 156, (276) 
+Element #: 136, Current Node #: 235, Diagonal Node #: 132, (234) 
+Element #: 136, Current Node #: 156, Diagonal Node #: 229, (233) 
+Element #: 136, Current Node #: 160, Diagonal Node #: 228, (226) 
+Element #: 136, Current Node #: 236, Diagonal Node #: 128, (227) 
+Element #: 137, Current Node #: 229, Diagonal Node #: 164, (290) 
+Element #: 137, Current Node #: 132, Diagonal Node #: 237, (289) 
+Element #: 137, Current Node #: 136, Diagonal Node #: 236, (282) 
+Element #: 137, Current Node #: 230, Diagonal Node #: 160, (283) 
+Element #: 137, Current Node #: 236, Diagonal Node #: 136, (241) 
+Element #: 137, Current Node #: 160, Diagonal Node #: 230, (240) 
+Element #: 137, Current Node #: 164, Diagonal Node #: 229, (233) 
+Element #: 137, Current Node #: 237, Diagonal Node #: 132, (234) 
+Element #: 138, Current Node #: 231, Diagonal Node #: 172, (304) 
+Element #: 138, Current Node #: 140, Diagonal Node #: 239, (303) 
+Element #: 138, Current Node #: 144, Diagonal Node #: 238, (296) 
+Element #: 138, Current Node #: 232, Diagonal Node #: 168, (297) 
+Element #: 138, Current Node #: 238, Diagonal Node #: 144, (255) 
+Element #: 138, Current Node #: 168, Diagonal Node #: 232, (254) 
+Element #: 138, Current Node #: 172, Diagonal Node #: 231, (247) 
+Element #: 138, Current Node #: 239, Diagonal Node #: 140, (248) 
+Element #: 139, Current Node #: 232, Diagonal Node #: 176, (311) 
+Element #: 139, Current Node #: 144, Diagonal Node #: 240, (310) 
+Element #: 139, Current Node #: 148, Diagonal Node #: 239, (303) 
+Element #: 139, Current Node #: 233, Diagonal Node #: 172, (304) 
+Element #: 139, Current Node #: 239, Diagonal Node #: 148, (262) 
+Element #: 139, Current Node #: 172, Diagonal Node #: 233, (261) 
+Element #: 139, Current Node #: 176, Diagonal Node #: 232, (254) 
+Element #: 139, Current Node #: 240, Diagonal Node #: 144, (255) 
+Element #: 140, Current Node #: 233, Diagonal Node #: 180, (318) 
+Element #: 140, Current Node #: 148, Diagonal Node #: 241, (317) 
+Element #: 140, Current Node #: 152, Diagonal Node #: 240, (310) 
+Element #: 140, Current Node #: 234, Diagonal Node #: 176, (311) 
+Element #: 140, Current Node #: 240, Diagonal Node #: 152, (269) 
+Element #: 140, Current Node #: 176, Diagonal Node #: 234, (268) 
+Element #: 140, Current Node #: 180, Diagonal Node #: 233, (261) 
+Element #: 140, Current Node #: 241, Diagonal Node #: 148, (262) 
+Element #: 141, Current Node #: 234, Diagonal Node #: 184, (325) 
+Element #: 141, Current Node #: 152, Diagonal Node #: 242, (324) 
+Element #: 141, Current Node #: 156, Diagonal Node #: 241, (317) 
+Element #: 141, Current Node #: 235, Diagonal Node #: 180, (318) 
+Element #: 141, Current Node #: 241, Diagonal Node #: 156, (276) 
+Element #: 141, Current Node #: 180, Diagonal Node #: 235, (275) 
+Element #: 141, Current Node #: 184, Diagonal Node #: 234, (268) 
+Element #: 141, Current Node #: 242, Diagonal Node #: 152, (269) 
+Element #: 142, Current Node #: 235, Diagonal Node #: 188, (332) 
+Element #: 142, Current Node #: 156, Diagonal Node #: 243, (331) 
+Element #: 142, Current Node #: 160, Diagonal Node #: 242, (324) 
+Element #: 142, Current Node #: 236, Diagonal Node #: 184, (325) 
+Element #: 142, Current Node #: 242, Diagonal Node #: 160, (283) 
+Element #: 142, Current Node #: 184, Diagonal Node #: 236, (282) 
+Element #: 142, Current Node #: 188, Diagonal Node #: 235, (275) 
+Element #: 142, Current Node #: 243, Diagonal Node #: 156, (276) 
+Element #: 143, Current Node #: 236, Diagonal Node #: 192, (339) 
+Element #: 143, Current Node #: 160, Diagonal Node #: 244, (338) 
+Element #: 143, Current Node #: 164, Diagonal Node #: 243, (331) 
+Element #: 143, Current Node #: 237, Diagonal Node #: 188, (332) 
+Element #: 143, Current Node #: 243, Diagonal Node #: 164, (290) 
+Element #: 143, Current Node #: 188, Diagonal Node #: 237, (289) 
+Element #: 143, Current Node #: 192, Diagonal Node #: 236, (282) 
+Element #: 143, Current Node #: 244, Diagonal Node #: 160, (283) 

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: testRegularMeshUtils.c 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+	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);
+
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+
+	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( 7 ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 7 ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 7 ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( False ) );
+	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( 1 ) );
+	
+	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;
+	
+	Build( mesh, 0, False );
+	Initialise(mesh, 0, False );
+	
+
+	
+	if (rank == procToWatch)
+	{
+		Node_Index				currElementNodesCount=0;	
+		Node_Index*         	currElementNodes = NULL;
+		Element_Index          	element_dI = 0;
+		Node_Index             	refNode_eI = 0;
+		Node_Index				node_Diagonal = 0;
+		Node_Index				node_Diagonal_gI = 0;
+		
+		// only use this while setting up the test
+		//Print(mesh, stream);
+				
+		// Some tests involving RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex()
+		
+		
+		for (element_dI=0; element_dI < mesh->elementDomainCount; element_dI++) {
+			
+			currElementNodes = mesh->elementNodeTbl[element_dI];
+			currElementNodesCount = mesh->elementNodeCountTbl[element_dI];
+			
+			for (refNode_eI = 0; refNode_eI < currElementNodesCount; refNode_eI++ ) {
+				
+				node_Diagonal = RegularMeshUtils_GetDiagOppositeAcrossElementNodeIndex(mesh, element_dI, 
+					currElementNodes[refNode_eI]) ;
+				node_Diagonal_gI = Mesh_NodeMapDomainToGlobal( mesh, 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);
+				
+			}
+		}	
+	}
+	
+	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);
+	
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSemiRegDeform.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSemiRegDeform.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSemiRegDeform.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,243 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 <mpi.h>
+
+#include "Base/Base.h"
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+
+#include "Discretisation/Utils/types.h"
+#include "Discretisation/Utils/SemiRegDeform.h"
+
+
+struct _Node {
+	double tmp;
+};
+
+struct _Element {
+	double tmp;
+};
+
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm			commWorld;
+	int				rank;
+	int				nProcs;
+	int				procToWatch;
+	Dictionary*			dict;
+	ExtensionManager_Register*	extMgrReg;
+	Topology*			nTopo;
+	ElementLayout*			eLyt;
+	NodeLayout*			nLyt;
+	MeshDecomp*			decomp;
+	MeshLayout*			mLyt;
+	Mesh*				mesh;
+	Stream*				stream;
+	SemiRegDeform*			srd;
+
+
+	/*
+	** 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 );
+
+	Base_Init( &argc, &argv );
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_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;
+
+	/*
+	** Polpulate the dictionary.
+	*/
+
+	dict = Dictionary_New();
+	Dictionary_Add( dict, "rank", Dictionary_Entry_Value_FromUnsignedInt( rank ) );
+	Dictionary_Add( dict, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt( nProcs ) );
+	Dictionary_Add( dict, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dict, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 5 ) );
+	Dictionary_Add( dict, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	Dictionary_Add( dict, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dict, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dict, "allowPartitionOnNode", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dict, "allowUnbalancing", Dictionary_Entry_Value_FromBool( False ) );
+	Dictionary_Add( dict, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 0 ) );
+
+
+	/*
+	** Create the mesh.
+	*/
+
+	nTopo = (Topology*)IJK6Topology_New( "IJK6Topology", dict );
+	eLyt = (ElementLayout*)ParallelPipedHexaEL_New( "PPHexaEL", 3, dict );
+	nLyt = (NodeLayout*)CornerNL_New( "CornerNL", dict, eLyt, nTopo );
+	decomp = (MeshDecomp*)HexaMD_New( "HexaMD", dict, commWorld, eLyt, nLyt );
+	mLyt = MeshLayout_New( "MeshLayout", eLyt, nLyt, decomp );
+	
+	extMgrReg = ExtensionManager_Register_New();
+	mesh = Mesh_New( "Mesh", mLyt, sizeof(Node), sizeof(Element), extMgrReg, dict );
+
+	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;
+
+
+	/*
+	** Build phase.
+	*/
+
+	Build( mesh, 0, False );
+
+
+	/*
+	** Initialisation phase.
+	*/
+
+	Initialise(mesh, 0, False );
+
+
+	/*
+	** 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] < ((HexaMD*)decomp)->nodeGlobal3DCounts[2]; ijk[2]++ ) {
+			for( ijk[0] = 0; ijk[0] < ((HexaMD*)decomp)->nodeGlobal3DCounts[0]; ijk[0]++ ) {
+				ijk[1] = 0;
+				GRM_Project( &srd->grm, ijk, &lower );
+
+				ijk[1] = ((HexaMD*)decomp)->nodeGlobal3DCounts[1] - 1;
+				GRM_Project( &srd->grm, ijk, &upper );
+
+				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] < ((HexaMD*)decomp)->nodeGlobal3DCounts[2]; ijk[2]++ ) {
+			for( ijk[0] = 0; ijk[0] < ((HexaMD*)decomp)->nodeGlobal3DCounts[0]; ijk[0]++ ) {
+				ijk[1] = 0;
+				GRM_Project( &srd->grm, ijk, &lower );
+				ijk[1] = ((HexaMD*)decomp)->nodeGlobal3DCounts[1] - 2;
+				GRM_Project( &srd->grm, ijk, &upper );
+				SemiRegDeform_AddStrip( srd, lower, upper );
+
+				lower = upper;
+				ijk[1] = ((HexaMD*)decomp)->nodeGlobal3DCounts[1] - 1;
+				GRM_Project( &srd->grm, ijk, &upper );
+				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 );
+	Stg_Class_Delete( mLyt );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLyt );
+	Stg_Class_Delete( eLyt );
+	Stg_Class_Delete( nTopo );
+	Stg_Class_Delete( dict );
+
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	Base_Finalise();
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return EXIT_SUCCESS;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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 );
+	}
+
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSync.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSync.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSync.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,605 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testSyncVC.c 3056 2005-06-28 06:06:29Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define NLOCALS	10
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		nProcs;
+	int		watch;
+	Stream*		stream;
+	unsigned	nGlobals;
+	unsigned	locals[NLOCALS];
+	unsigned	nRequired;
+	unsigned*	required;
+	unsigned*	array;
+
+	void initArray( unsigned** array, unsigned nRequired, unsigned nLocals, unsigned rank );
+	void dumpSync( const char* title, Sync* sync );
+	
+	
+	/*
+	** Initialise MPI and StGermain, get world info.
+	*/
+	
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &nProcs );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	MPI_Barrier( MPI_COMM_WORLD ); /* Ensures copyright info always come first in output */
+
+	/* Setup a stream. */
+	stream = Journal_Register( Info_Type, "myStream" );
+	
+	/* Which process are we going to watch? */
+	watch = (argc >= 2) ? atoi( argv[1] ) : 0;
+
+	/* Set up globals. */
+	nGlobals = NLOCALS * nProcs;
+	
+	
+	/*
+	** Test 1.
+	**	Here we will set up a system with no dependancies on other procs.
+	*/
+	
+	{
+		Sync*		sync;
+		
+		sync = Sync_New( "someName" );
+
+		/* Set up local values. */
+		{
+			unsigned	local_i;
+			
+			for( local_i = 0; local_i < NLOCALS; local_i++ ) {
+				locals[local_i] = rank * NLOCALS + local_i;
+			}
+		}
+		
+		/* No dependancies. */
+		nRequired = 0;
+		required = NULL;
+
+		/* Setup basic stuff. */
+		initArray( &array, nRequired, NLOCALS, rank );
+
+		/* Perform initialisation. */
+		Sync_Negotiate( sync, 
+				nGlobals, 
+				locals, NLOCALS, 
+				NULL, 0, 
+				required, nRequired, 
+				MPI_COMM_WORLD );
+		
+		/* Prepare send/recv. */
+		Sync_SetDomainArray( sync, 
+				     sizeof(unsigned), 
+				     sizeof(unsigned), array );
+
+		/* Execute. */
+		Sync_SendRecv( sync );
+		
+		/* Check the results. */
+		dumpSync( "Test 1:", sync );
+		
+		Stg_Class_Delete( sync );
+	}
+
+	/*
+	** Test 2.
+	**	Here we will set up a system with some dependancies on other procs.
+	*/
+	
+	{
+		Sync*	sync;
+		
+		sync = Sync_New( "someName" );
+		
+		/* Set up local values. */
+		{
+			unsigned	local_i;
+			
+			for( local_i = 0; local_i < NLOCALS; local_i++ ) {
+				locals[local_i] = rank * NLOCALS + local_i;
+			}
+		}
+		
+		/* Dependancies. */
+		{
+			unsigned	req_i;
+			
+			nRequired = 2;
+			required = Memory_Alloc_Array( unsigned, nRequired, "testSync" );
+			for( req_i = nRequired; req_i > 0; req_i-- ) {
+				required[nRequired - req_i] = ((rank + 1) % nProcs) * NLOCALS + req_i - 1;
+			}
+		}
+
+		/* Setup basic stuff. */
+		initArray( &array, nRequired, NLOCALS, rank );
+
+		/* Perform initialisation. */
+		Sync_Negotiate( sync, 
+				nGlobals, 
+				locals, NLOCALS, 
+				NULL, 0, 
+				required, nRequired, 
+				MPI_COMM_WORLD );
+		
+		/* Prepare send/recv. */
+		Sync_SetDomainArray( sync, 
+				     sizeof(unsigned), 
+				     sizeof(unsigned), array );
+
+		/* Free the required array. */
+		FreeArray( required );
+
+		/* Execute. */
+		Sync_SendRecv( sync );
+		
+		/* Check the results. */
+		dumpSync( "Test 2:", sync );
+		
+		Stg_Class_Delete( sync );
+	}
+	
+
+	/*
+	** Test 3.
+	**	Each proc is entirely dependant on another.
+	*/
+	
+	{
+		Sync*	sync;
+		
+		sync = Sync_New( "someName" );
+		
+		/* Set up local values. */
+		{
+			unsigned	local_i;
+			
+			for( local_i = 0; local_i < NLOCALS; local_i++ ) {
+				locals[local_i] = rank * NLOCALS + local_i;
+			}
+		}
+		
+		/* Dependancies. */
+		{
+			unsigned	req_i;
+			
+			nRequired = NLOCALS;
+			required = Memory_Alloc_Array( unsigned, nRequired, "testSync" );
+			for( req_i = 0; req_i < nRequired; req_i++ ) {
+				required[req_i] = ((rank + 1) % nProcs) * NLOCALS + req_i;
+			}
+		}
+
+		/* Setup basic stuff. */
+		initArray( &array, nRequired, NLOCALS, rank );
+
+		/* Perform initialisation. */
+		Sync_Negotiate( sync, 
+				nGlobals, 
+				locals, NLOCALS, 
+				NULL, 0, 
+				required, nRequired, 
+				MPI_COMM_WORLD );
+		
+		/* Prepare send/recv. */
+		Sync_SetDomainArray( sync, 
+				     sizeof(unsigned), 
+				     sizeof(unsigned), array );
+		
+		/* Free the required array. */
+		FreeArray( required );
+		
+		/* Execute. */
+		Sync_SendRecv( sync );
+		
+		/* Check the results. */
+		dumpSync( "Test 3:", sync );
+		
+		Stg_Class_Delete( sync );
+	}
+	
+	
+	/*
+	** Shut everything down.
+	*/
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return EXIT_SUCCESS;
+}
+
+
+void initArray( unsigned** array, unsigned nRequired, unsigned nLocals, unsigned rank ) {
+   unsigned	val_i;
+
+   *array = Memory_Alloc_Array( unsigned, nLocals + nRequired, "testSync" );
+   for( val_i = 0; val_i < nLocals; val_i++ ) {
+      (*array)[val_i] = rank * nLocals + val_i;
+   }
+}
+
+
+void buildSinkMap( Sync* sync, unsigned** map ) {
+	if( sync->netSink ) {
+		unsigned*	tmpMap;
+		unsigned	snkInd = 0;
+		unsigned	proc_i;
+		
+		tmpMap = Memory_Alloc_Array( unsigned, sync->netSink, "testSync" );
+		
+		for( proc_i = 0; proc_i < sync->nProcs; proc_i++ ) {
+			unsigned	snk_i;
+
+			for( snk_i = 0; snk_i < sync->nSink[proc_i]; snk_i++ ) {
+				tmpMap[snkInd] = sync->sink[proc_i][snk_i] % 10;
+				snkInd++;
+			}
+		}
+
+		*map = tmpMap;
+	}
+	else {
+		*map = NULL;
+	}
+}
+
+
+void buildSourceMap( Sync* sync, unsigned** map ) {
+	if( sync->netSource ) {
+		unsigned*	tmpMap;
+		unsigned	src_i;
+		
+		tmpMap = Memory_Alloc_Array( unsigned, sync->netSource, "testSync" );
+		
+		for( src_i = 0; src_i < sync->netSource; src_i++ ) {
+			tmpMap[src_i] = src_i;
+		}
+		
+		*map = tmpMap;
+	}
+	else {
+		*map = NULL;
+	}
+}
+
+
+/*
+** A whole bunch of printing tools.
+*/
+
+typedef struct {
+	unsigned	col;
+	unsigned	indent;
+	unsigned	tabWidth;
+	
+	unsigned	master;
+	unsigned	nProcs;
+	unsigned	rank;
+	MPI_Comm	comm;
+} PrintContext;
+
+
+void expandTabs( PrintContext* ctx, char* str, const char* tabStr ) {
+	char*	curPos;
+	char*	res;
+	
+	curPos = str;
+	do {
+		res = strpbrk( curPos, tabStr );
+		if( res ) {
+			unsigned	nextTab;
+			unsigned	tab_i;
+			
+			*res = '\0';
+			ctx->col += strlen( curPos );
+			printf( "%s", curPos );
+			
+			/* Calculate the next tab stop. */
+			nextTab = ctx->tabWidth - ctx->col % ctx->tabWidth;
+			ctx->col += nextTab;
+			for( tab_i = 0; tab_i < nextTab; tab_i++ ) {
+				printf( " " );
+			}
+			
+			curPos = res + 1;
+		}
+	}
+	while( res );
+	
+	/* Print the last section. */
+	ctx->col += strlen( curPos );
+	printf( "%s", curPos );
+}
+
+
+void print( PrintContext* ctx, const char* fmt, ... ) {
+	va_list	args;
+	char*	tmpFmt;
+	unsigned	maxStrSize;
+	
+	char*	tabCode = "\xFF";
+	char*	crCode = "\xFE";
+	
+	
+	if( !fmt ) {
+		return;
+	}
+	
+	/* Start the variable argument list. */
+	va_start( args, fmt );
+	
+	
+	/*
+	** If we need to indent, then do so.
+	*/
+	
+	if( ctx->col < ctx->indent * ctx->tabWidth ) {
+		unsigned	indSize = ctx->indent * ctx->tabWidth - ctx->col;
+		unsigned	tab_i;
+		
+		for( tab_i = 0; tab_i < indSize; tab_i++ ) {
+			printf( " " );
+		}
+		
+		ctx->col = ctx->indent * ctx->tabWidth;
+	}
+	
+	
+	/*
+	** Process the format string looking for tabs and newlines.  Any we find we'll encode so that c formatted print
+	** won't modify it.  We want to mess with it.
+	*/
+	
+	{
+		unsigned	chr_i;
+		unsigned	len = strlen( fmt ) + 1;
+		unsigned	curChr = 0;
+		
+		/* Destination format buffer. */
+		tmpFmt = Memory_Alloc_Array( char, len, "print" );
+		
+		for( chr_i = 0; chr_i < len; chr_i++ ) {
+			if( fmt[chr_i] == '\t' ) {
+				tmpFmt[curChr] = tabCode[0];
+			}
+			else if( fmt[chr_i] == '\n' ) {
+				tmpFmt[curChr] = crCode[0];
+			}
+			else {
+				tmpFmt[curChr] = fmt[chr_i];
+			}
+			
+			curChr++;
+		}
+		
+		/* TODO: Need to implement a system of counting how long the string is going to be.  Will look for '%' format
+		   discriptors in the format string and use the maximum number of digits for that type.  For the moment, just
+		   hard code a maximum. */
+		maxStrSize = 1024;
+	}
+	
+	
+	/*
+	** Dump the string to a new buffer and translate back while printing.
+	*/
+	
+	{
+		char*	tmpStr;
+		char*	res;
+		char*	curPos;
+		
+		tmpStr = Memory_Alloc_Array( char, maxStrSize, "print" );
+		
+		/* Pass to vsprintf. */
+		vsprintf( tmpStr, tmpFmt, args );
+		
+		/* Free destination buffer. */
+		FreeArray( tmpFmt );
+		
+		/* Tokenize on carriage returns and tab stops respectively. */
+		curPos = tmpStr;
+		do {
+			res = strpbrk( curPos, crCode );
+			if( res ) {
+				/* Search for tab stops. */
+				*res = '\0';
+				expandTabs( ctx, curPos, tabCode );
+				
+				/* Print carriage return. */
+				ctx->col = 0;
+				printf( "\n" );
+				
+				curPos = res + 1;
+			}
+		}
+		while( res );
+		
+		/* Search for tabs in the last section. */
+		expandTabs( ctx, curPos, tabCode );
+		
+		/* Free memory. */
+		FreeArray( tmpStr );
+	}
+	
+	/* End the argument list. */
+	va_end( args );
+}
+
+
+void printArray_unsigned( PrintContext* ctx, 
+					 const char*	title, 
+					 unsigned		size, 
+					 unsigned*	array )
+{
+	if( title ) {
+		print( ctx, title );
+	}
+	print( ctx, "[]:\n" );
+	ctx->indent++;
+	
+	if( size > 0 && array ) {
+		unsigned	item_i;
+		
+		for( item_i = 0; item_i < size; item_i++ ) {
+			print( ctx, "[%d]:\t%d\n", item_i, array[item_i] );
+		}
+	}
+	else {
+		print( ctx, "empty\n" );
+	}
+	
+	ctx->indent--;
+}
+
+
+void printArray2D_unsigned( PrintContext*	ctx, 
+					   const char*		title, 
+					   unsigned		nBlocks, 
+					   unsigned*		sizes, 
+					   unsigned**		array )
+{
+	if( title ) {
+		print( ctx, title );
+	}
+	print( ctx, "[][]:\n" );
+	ctx->indent++;
+	
+	if( nBlocks > 0 && array && sizes ) {
+		unsigned	block_i;
+		char*	title;
+		unsigned	maxTitleLen;
+		
+		maxTitleLen = (unsigned)floor( log10( (double)nBlocks ) ) + 4;
+		title = Memory_Alloc_Array( char, maxTitleLen, "printArray2D_unsigned" );
+		
+		for( block_i = 0; block_i < nBlocks; block_i++ ) {
+			sprintf( title, "[%d]", block_i );
+			printArray_unsigned( ctx, title, sizes[block_i], array[block_i] );
+		}
+		
+		FreeArray( title );
+	}
+	else {
+		print( ctx, "empty\n" );
+	}
+	
+	ctx->indent--;
+}
+
+
+const unsigned	tagBeginPrinting = 1021;
+
+void printPreBarrier( PrintContext* ctx ) {
+	/* We need to ensure that if we're running in parallel each proc prints in order.  We'll do this by waiting for a 
+	   go-ahead from the previous proc. */
+	if( ctx->rank > 0 ) {
+		MPI_Status	status;
+		unsigned		buf;
+		
+		MPI_Recv( &buf, 1, MPI_UNSIGNED, ctx->rank - 1, tagBeginPrinting, ctx->comm, &status );
+	}
+}
+
+
+void printPostBarrier( PrintContext* ctx ) {
+	/* Before signalling, make sure our output is flushed. */
+	fflush( stdout );
+	
+	/* Signal the next proc to begin printing. */
+	if( ctx->nProcs > 1 && ctx->rank < ctx->nProcs - 1 ) {
+		unsigned		buf;
+		
+		MPI_Send( &buf, 1, MPI_UNSIGNED, ctx->rank + 1, tagBeginPrinting, ctx->comm );
+	}
+	
+	/* This will make sure proc 0 doesn't start printing again until all others are done. */
+	MPI_Barrier( ctx->comm );
+}
+
+
+void dumpSync( const char* title, Sync* sync ) {
+	PrintContext	ctx;
+	
+	/* Set up the context. */
+	ctx.indent = 0;
+	ctx.col = 0;
+	ctx.tabWidth = 5;
+	ctx.nProcs = sync->nProcs;
+	ctx.rank = sync->rank;
+	ctx.comm = sync->comm;
+	
+	/* Dump. */
+	if( title ) {
+		print( &ctx, title );
+		print( &ctx, "\n" );
+	}
+	ctx.indent++;
+	print( &ctx, "Sync on proc %d:\n", sync->rank );
+	ctx.indent++;
+	printArray_unsigned( &ctx, "nSource", sync->nProcs, sync->nSource );
+	printArray2D_unsigned( &ctx, "source", sync->nProcs, sync->nSource, sync->source );
+	printArray_unsigned( &ctx, "nSink", sync->nProcs, sync->nSink );
+	printArray2D_unsigned( &ctx, "sink", sync->nProcs, sync->nSink, sync->sink );
+	print( &ctx, "\n" );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegration.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegration.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegration.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,333 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian 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 3665 2006-07-04 04:56:29Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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 == DiscretisationContext_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];
+	DiscretisationContext*     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 );
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_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();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+	context = _DiscretisationContext_New( 
+			sizeof(DiscretisationContext), 
+			DiscretisationContext_Type, 
+			_DiscretisationContext_Delete, 
+			_DiscretisationContext_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, (void**)&array, NULL );
+	variableList[1] = Variable_NewVector( "testVariable2", Variable_DataType_Double, 2, &size1, (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] );
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1051 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ea8
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e240
+		_entryTbl[0]:
+			varName (ptr): 0x8067ec0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805eb10
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805eb70
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061048
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f78fd3
+		_print (func ptr): 0xb7f79019
+		_copy (func ptr): 0xb7f795ca
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f782a4
+	_construct (func ptr): 0xb7f797df
+	_build (func ptr): 0xb7f7979d
+	_initialise (func ptr): 0xb7edcde2
+	_execute (func ptr): 0xb7edcea6
+	_destroy (func ptr): 0xb7edced6
+	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): 0xb7f7982e
+	_getVariableCount (func ptr): 0xb7f79bc4
+	_getVariableIndex (func ptr): 0xb7f79bdb
+	_getValueIndex (func ptr): 0xb7f79cb6
+	_getValueCount (func ptr): 0xb7f79cbe
+	_getValue (func ptr): 0xb7f79cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e328
+	indexCount: 8
+	indexTbl (ptr): 0x806c0d8
+		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): 0x806c108
+		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): 0x806c138
+		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): 0x806c228
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049eb5
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e150
+		_entryTbl[0]:
+			varName (ptr): 0x805f068
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806bf38
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061048
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f78fd3
+		_print (func ptr): 0xb7f79019
+		_copy (func ptr): 0xb7f795ca
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f782a4
+	_construct (func ptr): 0xb7f797df
+	_build (func ptr): 0xb7f7979d
+	_initialise (func ptr): 0xb7edcde2
+	_execute (func ptr): 0xb7edcea6
+	_destroy (func ptr): 0xb7edced6
+	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): 0xb7f7982e
+	_getVariableCount (func ptr): 0xb7f79bc4
+	_getVariableIndex (func ptr): 0xb7f79bdb
+	_getValueIndex (func ptr): 0xb7f79cb6
+	_getValueCount (func ptr): 0xb7f79cbe
+	_getValue (func ptr): 0xb7f79cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e328
+	indexCount: 8
+	indexTbl (ptr): 0x806c228
+		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): 0x806c108
+		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): 0x806c3b0
+		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): 0x806c0b0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806bf38
+				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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ec1
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e328
+		_entryTbl[0]:
+			varName (ptr): 0x80665c0
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x8066a70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066c40
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x8061048
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f78fd3
+		_print (func ptr): 0xb7f79019
+		_copy (func ptr): 0xb7f795ca
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f782a4
+	_construct (func ptr): 0xb7f797df
+	_build (func ptr): 0xb7f7979d
+	_initialise (func ptr): 0xb7edcde2
+	_execute (func ptr): 0xb7edcea6
+	_destroy (func ptr): 0xb7edced6
+	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): 0xb7f7982e
+	_getVariableCount (func ptr): 0xb7f79bc4
+	_getVariableIndex (func ptr): 0xb7f79bdb
+	_getValueIndex (func ptr): 0xb7f79cb6
+	_getValueCount (func ptr): 0xb7f79cbe
+	_getValue (func ptr): 0xb7f79cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e240
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c108
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ecd
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e240
+		_entryTbl[0]:
+			varName (ptr): 0x8067f80
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x8067208
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x80673d8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x8061048
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f78fd3
+		_print (func ptr): 0xb7f79019
+		_copy (func ptr): 0xb7f795ca
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f782a4
+	_construct (func ptr): 0xb7f797df
+	_build (func ptr): 0xb7f7979d
+	_initialise (func ptr): 0xb7edcde2
+	_execute (func ptr): 0xb7edcea6
+	_destroy (func ptr): 0xb7edced6
+	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): 0xb7f7982e
+	_getVariableCount (func ptr): 0xb7f79bc4
+	_getVariableIndex (func ptr): 0xb7f79bdb
+	_getValueIndex (func ptr): 0xb7f79cb6
+	_getValueCount (func ptr): 0xb7f79cbe
+	_getValue (func ptr): 0xb7f79cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e328
+	indexCount: 16
+	indexTbl (ptr): 0x8068668
+		indexTbl[0]: 1
+		indexTbl[1]: 3
+		indexTbl[2]: 5
+		indexTbl[3]: 7
+		indexTbl[4]: 9
+		indexTbl[5]: 11
+		indexTbl[6]: 13
+		indexTbl[7]: 15
+		indexTbl[8]: 17
+		indexTbl[9]: 19
+		indexTbl[10]: 21
+		indexTbl[11]: 23
+		indexTbl[12]: 25
+		indexTbl[13]: 27
+		indexTbl[14]: 29
+		indexTbl[15]: 31
+	vcVarCountTbl (ptr): 0x8068328
+		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): 0x806c438
+		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): 0x806c108
+		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, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00
+var[4]: 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00
+var[5]: 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False 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 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049eda
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e150
+		_entryTbl[0]:
+			varName (ptr): 0x8065cf0
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806e1a0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061048
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f78fd3
+		_print (func ptr): 0xb7f79019
+		_copy (func ptr): 0xb7f795ca
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f782a4
+	_construct (func ptr): 0xb7f797df
+	_build (func ptr): 0xb7f7979d
+	_initialise (func ptr): 0xb7edcde2
+	_execute (func ptr): 0xb7edcea6
+	_destroy (func ptr): 0xb7edced6
+	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): 0xb7f7982e
+	_getVariableCount (func ptr): 0xb7f79bc4
+	_getVariableIndex (func ptr): 0xb7f79bdb
+	_getValueIndex (func ptr): 0xb7f79cb6
+	_getValueCount (func ptr): 0xb7f79cbe
+	_getValue (func ptr): 0xb7f79cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e328
+	indexCount: 8
+	indexTbl (ptr): 0x806c108
+		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): 0x806c228
+		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): 0x806c608
+		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): 0x806c0b0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806e1a0
+				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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ee5
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e328
+		_entryTbl[0]:
+			varName (ptr): 0x8068168
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068190
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067fb0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061048
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f78fd3
+		_print (func ptr): 0xb7f79019
+		_copy (func ptr): 0xb7f795ca
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f782a4
+	_construct (func ptr): 0xb7f797df
+	_build (func ptr): 0xb7f7979d
+	_initialise (func ptr): 0xb7edcde2
+	_execute (func ptr): 0xb7edcea6
+	_destroy (func ptr): 0xb7edced6
+	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): 0xb7f7982e
+	_getVariableCount (func ptr): 0xb7f79bc4
+	_getVariableIndex (func ptr): 0xb7f79bdb
+	_getValueIndex (func ptr): 0xb7f79cb6
+	_getValueCount (func ptr): 0xb7f79cbe
+	_getValue (func ptr): 0xb7f79cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e240
+	indexCount: 8
+	indexTbl (ptr): 0x806c228
+		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): 0x806c108
+		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): 0x806c678
+		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): 0x806c0d8
+		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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,875 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ea8
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e2d8
+		_entryTbl[0]:
+			varName (ptr): 0x8067ec0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805eb10
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805eb70
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061018
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f9efd3
+		_print (func ptr): 0xb7f9f019
+		_copy (func ptr): 0xb7f9f5ca
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f9e2a4
+	_construct (func ptr): 0xb7f9f7df
+	_build (func ptr): 0xb7f9f79d
+	_initialise (func ptr): 0xb7f02de2
+	_execute (func ptr): 0xb7f02ea6
+	_destroy (func ptr): 0xb7f02ed6
+	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): 0xb7f9f82e
+	_getVariableCount (func ptr): 0xb7f9fbc4
+	_getVariableIndex (func ptr): 0xb7f9fbdb
+	_getValueIndex (func ptr): 0xb7f9fcb6
+	_getValueCount (func ptr): 0xb7f9fcbe
+	_getValue (func ptr): 0xb7f9fcd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 8
+	indexTbl (ptr): 0x806c090
+		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): 0x806c0c0
+		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): 0x806c0f0
+		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): 0x806c1e0
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049eb5
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e1a0
+		_entryTbl[0]:
+			varName (ptr): 0x805f068
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806de00
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061018
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f9efd3
+		_print (func ptr): 0xb7f9f019
+		_copy (func ptr): 0xb7f9f5ca
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f9e2a4
+	_construct (func ptr): 0xb7f9f7df
+	_build (func ptr): 0xb7f9f79d
+	_initialise (func ptr): 0xb7f02de2
+	_execute (func ptr): 0xb7f02ea6
+	_destroy (func ptr): 0xb7f02ed6
+	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): 0xb7f9f82e
+	_getVariableCount (func ptr): 0xb7f9fbc4
+	_getVariableIndex (func ptr): 0xb7f9fbdb
+	_getValueIndex (func ptr): 0xb7f9fcb6
+	_getValueCount (func ptr): 0xb7f9fcbe
+	_getValue (func ptr): 0xb7f9fcd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 8
+	indexTbl (ptr): 0x806c1e0
+		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): 0x806c0c0
+		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): 0x806c368
+		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): 0x80686a0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806de00
+				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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ec1
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0b8
+		_entryTbl[0]:
+			varName (ptr): 0x80665c0
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x8066a70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066c40
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x8061018
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f9efd3
+		_print (func ptr): 0xb7f9f019
+		_copy (func ptr): 0xb7f9f5ca
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f9e2a4
+	_construct (func ptr): 0xb7f9f7df
+	_build (func ptr): 0xb7f9f79d
+	_initialise (func ptr): 0xb7f02de2
+	_execute (func ptr): 0xb7f02ea6
+	_destroy (func ptr): 0xb7f02ed6
+	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): 0xb7f9f82e
+	_getVariableCount (func ptr): 0xb7f9fbc4
+	_getVariableIndex (func ptr): 0xb7f9fbdb
+	_getValueIndex (func ptr): 0xb7f9fcb6
+	_getValueCount (func ptr): 0xb7f9fcbe
+	_getValue (func ptr): 0xb7f9fcd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e2d8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c0c0
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ecd
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e2d8
+		_entryTbl[0]:
+			varName (ptr): 0x8067f80
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x8067208
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x80673d8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x8061018
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f9efd3
+		_print (func ptr): 0xb7f9f019
+		_copy (func ptr): 0xb7f9f5ca
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f9e2a4
+	_construct (func ptr): 0xb7f9f7df
+	_build (func ptr): 0xb7f9f79d
+	_initialise (func ptr): 0xb7f02de2
+	_execute (func ptr): 0xb7f02ea6
+	_destroy (func ptr): 0xb7f02ed6
+	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): 0xb7f9f82e
+	_getVariableCount (func ptr): 0xb7f9fbc4
+	_getVariableIndex (func ptr): 0xb7f9fbdb
+	_getValueIndex (func ptr): 0xb7f9fcb6
+	_getValueCount (func ptr): 0xb7f9fcbe
+	_getValue (func ptr): 0xb7f9fcd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c0c0
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049eda
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e1a0
+		_entryTbl[0]:
+			varName (ptr): 0x8065cf0
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806df80
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061018
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f9efd3
+		_print (func ptr): 0xb7f9f019
+		_copy (func ptr): 0xb7f9f5ca
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f9e2a4
+	_construct (func ptr): 0xb7f9f7df
+	_build (func ptr): 0xb7f9f79d
+	_initialise (func ptr): 0xb7f02de2
+	_execute (func ptr): 0xb7f02ea6
+	_destroy (func ptr): 0xb7f02ed6
+	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): 0xb7f9f82e
+	_getVariableCount (func ptr): 0xb7f9fbc4
+	_getVariableIndex (func ptr): 0xb7f9fbdb
+	_getValueIndex (func ptr): 0xb7f9fcb6
+	_getValueCount (func ptr): 0xb7f9fcbe
+	_getValue (func ptr): 0xb7f9fcd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 8
+	indexTbl (ptr): 0x806c0c0
+		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): 0x806c1e0
+		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): 0x80686a0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806df80
+				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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ee5
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0b8
+		_entryTbl[0]:
+			varName (ptr): 0x8068168
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068190
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067fb0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061018
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f9efd3
+		_print (func ptr): 0xb7f9f019
+		_copy (func ptr): 0xb7f9f5ca
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f9e2a4
+	_construct (func ptr): 0xb7f9f7df
+	_build (func ptr): 0xb7f9f79d
+	_initialise (func ptr): 0xb7f02de2
+	_execute (func ptr): 0xb7f02ea6
+	_destroy (func ptr): 0xb7f02ed6
+	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): 0xb7f9f82e
+	_getVariableCount (func ptr): 0xb7f9fbc4
+	_getVariableIndex (func ptr): 0xb7f9fbdb
+	_getValueIndex (func ptr): 0xb7f9fcb6
+	_getValueCount (func ptr): 0xb7f9fcbe
+	_getValue (func ptr): 0xb7f9fcd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e2d8
+	indexCount: 8
+	indexTbl (ptr): 0x806c1e0
+		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): 0x806c0c0
+		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): 0x806c448
+		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): 0x806c090
+		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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1051 @@
+StGermain Framework revision 3605. Copyright (C) 2003-2005 VPAC.
+Testing for WallVC_Front
+WallVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ea8
+		_dictionaryEntryName: WallVC_Front
+	_wall: Front
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e2d8
+		_entryTbl[0]:
+			varName (ptr): 0x8067ec0
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805eb10
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x805eb70
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061000
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f17fd3
+		_print (func ptr): 0xb7f18019
+		_copy (func ptr): 0xb7f185ca
+	name: WallVC_FrontName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f172a4
+	_construct (func ptr): 0xb7f187df
+	_build (func ptr): 0xb7f1879d
+	_initialise (func ptr): 0xb7e7bde2
+	_execute (func ptr): 0xb7e7bea6
+	_destroy (func ptr): 0xb7e7bed6
+	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): 0xb7f1882e
+	_getVariableCount (func ptr): 0xb7f18bc4
+	_getVariableIndex (func ptr): 0xb7f18bdb
+	_getValueIndex (func ptr): 0xb7f18cb6
+	_getValueCount (func ptr): 0xb7f18cbe
+	_getValue (func ptr): 0xb7f18cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 8
+	indexTbl (ptr): 0x806c0d8
+		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): 0x806c108
+		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): 0x806c138
+		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): 0x806c228
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049eb5
+		_dictionaryEntryName: WallVC_Back
+	_wall: Back
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e1a0
+		_entryTbl[0]:
+			varName (ptr): 0x805f068
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806bf38
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061000
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f17fd3
+		_print (func ptr): 0xb7f18019
+		_copy (func ptr): 0xb7f185ca
+	name: WallVC_BackName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f172a4
+	_construct (func ptr): 0xb7f187df
+	_build (func ptr): 0xb7f1879d
+	_initialise (func ptr): 0xb7e7bde2
+	_execute (func ptr): 0xb7e7bea6
+	_destroy (func ptr): 0xb7e7bed6
+	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): 0xb7f1882e
+	_getVariableCount (func ptr): 0xb7f18bc4
+	_getVariableIndex (func ptr): 0xb7f18bdb
+	_getValueIndex (func ptr): 0xb7f18cb6
+	_getValueCount (func ptr): 0xb7f18cbe
+	_getValue (func ptr): 0xb7f18cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 8
+	indexTbl (ptr): 0x806c228
+		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): 0x806c108
+		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): 0x806c3b0
+		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): 0x806c0b0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806bf38
+				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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ec1
+		_dictionaryEntryName: WallVC_Left
+	_wall: Left
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0b8
+		_entryTbl[0]:
+			varName (ptr): 0x80665c0
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[1]:
+			varName (ptr): 0x8066a70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x8066c40
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+	_mesh (ptr): 0x8061000
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f17fd3
+		_print (func ptr): 0xb7f18019
+		_copy (func ptr): 0xb7f185ca
+	name: WallVC_LeftName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f172a4
+	_construct (func ptr): 0xb7f187df
+	_build (func ptr): 0xb7f1879d
+	_initialise (func ptr): 0xb7e7bde2
+	_execute (func ptr): 0xb7e7bea6
+	_destroy (func ptr): 0xb7e7bed6
+	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): 0xb7f1882e
+	_getVariableCount (func ptr): 0xb7f18bc4
+	_getVariableIndex (func ptr): 0xb7f18bdb
+	_getValueIndex (func ptr): 0xb7f18cb6
+	_getValueCount (func ptr): 0xb7f18cbe
+	_getValue (func ptr): 0xb7f18cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e2d8
+	indexCount: 0
+	indexTbl (ptr): (nil)
+	vcVarCountTbl (ptr): (nil)
+	vcTbl (ptr): (nil)
+	valueCount: 3
+	valueTbl (ptr): 0x806c108
+		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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ecd
+		_dictionaryEntryName: WallVC_Right
+	_wall: Right
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e2d8
+		_entryTbl[0]:
+			varName (ptr): 0x8067f80
+				varName: vx
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[1]:
+			varName (ptr): 0x8067208
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+		_entryTbl[2]:
+			varName (ptr): 0x80673d8
+				varName: vz
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 1
+	_mesh (ptr): 0x8061000
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f17fd3
+		_print (func ptr): 0xb7f18019
+		_copy (func ptr): 0xb7f185ca
+	name: WallVC_RightName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f172a4
+	_construct (func ptr): 0xb7f187df
+	_build (func ptr): 0xb7f1879d
+	_initialise (func ptr): 0xb7e7bde2
+	_execute (func ptr): 0xb7e7bea6
+	_destroy (func ptr): 0xb7e7bed6
+	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): 0xb7f1882e
+	_getVariableCount (func ptr): 0xb7f18bc4
+	_getVariableIndex (func ptr): 0xb7f18bdb
+	_getValueIndex (func ptr): 0xb7f18cb6
+	_getValueCount (func ptr): 0xb7f18cbe
+	_getValue (func ptr): 0xb7f18cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 16
+	indexTbl (ptr): 0x8068668
+		indexTbl[0]: 1
+		indexTbl[1]: 3
+		indexTbl[2]: 5
+		indexTbl[3]: 7
+		indexTbl[4]: 9
+		indexTbl[5]: 11
+		indexTbl[6]: 13
+		indexTbl[7]: 15
+		indexTbl[8]: 17
+		indexTbl[9]: 19
+		indexTbl[10]: 21
+		indexTbl[11]: 23
+		indexTbl[12]: 25
+		indexTbl[13]: 27
+		indexTbl[14]: 29
+		indexTbl[15]: 31
+	vcVarCountTbl (ptr): 0x8068328
+		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): 0x806c438
+		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): 0x806c108
+		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, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00
+var[4]: 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00
+var[5]: 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.00, 0.00, 30.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
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False 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 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX 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 
+
+Testing for WallVC_Top
+WallVC (ptr): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049eda
+		_dictionaryEntryName: WallVC_Top
+	_wall: Top
+	_entryCount: 1
+	_entryTbl (ptr): 0x806e1a0
+		_entryTbl[0]:
+			varName (ptr): 0x8065cf0
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x806df80
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+	_mesh (ptr): 0x8061000
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f17fd3
+		_print (func ptr): 0xb7f18019
+		_copy (func ptr): 0xb7f185ca
+	name: WallVC_TopName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f172a4
+	_construct (func ptr): 0xb7f187df
+	_build (func ptr): 0xb7f1879d
+	_initialise (func ptr): 0xb7e7bde2
+	_execute (func ptr): 0xb7e7bea6
+	_destroy (func ptr): 0xb7e7bed6
+	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): 0xb7f1882e
+	_getVariableCount (func ptr): 0xb7f18bc4
+	_getVariableIndex (func ptr): 0xb7f18bdb
+	_getValueIndex (func ptr): 0xb7f18cb6
+	_getValueCount (func ptr): 0xb7f18cbe
+	_getValue (func ptr): 0xb7f18cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e0b8
+	indexCount: 8
+	indexTbl (ptr): 0x806c108
+		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): 0x806c228
+		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): 0x806c608
+		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): 0x806c0b0
+		valueTbl[0]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x806df80
+				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): 0x806da50
+	dictionary (ptr): 0x805e558
+	_dictionaryEntryName (ptr): 0x8049ee5
+		_dictionaryEntryName: WallVC_Bottom
+	_wall: Bottom
+	_entryCount: 3
+	_entryTbl (ptr): 0x806e0b8
+		_entryTbl[0]:
+			varName (ptr): 0x8068168
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8068190
+				varName: vy
+			value:
+				type: VC_ValueType_Double
+				asDouble: 3
+		_entryTbl[2]:
+			varName (ptr): 0x8067fb0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+	_mesh (ptr): 0x8061000
+VariableCondition (ptr): 0x806da50
+Stg_Component (ptr): 0x806da50
+Stg_Object (ptr): 0x806da50
+	Stg_Class (ptr): 0x806da50
+		sizeOfSelf: 192
+		_deleteSelf: Yes
+		type: WallVC
+		_delete (func ptr): 0xb7f17fd3
+		_print (func ptr): 0xb7f18019
+		_copy (func ptr): 0xb7f185ca
+	name: WallVC_BottomName
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f172a4
+	_construct (func ptr): 0xb7f187df
+	_build (func ptr): 0xb7f1879d
+	_initialise (func ptr): 0xb7e7bde2
+	_execute (func ptr): 0xb7e7bea6
+	_destroy (func ptr): 0xb7e7bed6
+	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): 0xb7f1882e
+	_getVariableCount (func ptr): 0xb7f18bc4
+	_getVariableIndex (func ptr): 0xb7f18bdb
+	_getValueIndex (func ptr): 0xb7f18cb6
+	_getValueCount (func ptr): 0xb7f18cbe
+	_getValue (func ptr): 0xb7f18cd5
+	variable_Register (ptr): 0x806e290
+	conFunc_Register (ptr): 0x805b9f8
+	_set (ptr): 0x806e2d8
+	indexCount: 8
+	indexTbl (ptr): 0x806c228
+		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): 0x806c108
+		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): 0x806c678
+		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): 0x806c0d8
+		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 
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,238 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 3555 2006-05-10 07:05:46Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/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;
+}
+
+
+int main(int argc, char *argv[])
+{
+	MPI_Comm		CommWorld;
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	Topology*       nTopology;
+	ElementLayout*	eLayout;
+	NodeLayout*	nLayout;
+	MeshDecomp*	decomp;
+	MeshLayout*	layout;
+	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"};
+	
+	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);
+	
+	Base_Init( &argc, &argv );
+	
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationShape_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	DiscretisationUtils_Init( &argc, &argv );
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+
+	io_handler = XML_IO_Handler_New();
+
+	stream = Journal_Register (Info_Type, "myStream");
+	
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/wallVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+	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(4));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool(True));
+
+	extensionMgr_Register = ExtensionManager_Register_New();	
+	
+	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 );
+	layout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	mesh = Mesh_New( "Mesh", layout, 0, 0, extensionMgr_Register, dictionary );
+	
+	/* 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, decomp->nodeLocalCount, "array[i]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &decomp->nodeLocalCount, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double, decomp->nodeLocalCount * 5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &decomp->nodeLocalCount, (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 );
+		Build( vc, 0, False );
+		
+		for (j = 0; j < 6; j++)
+			memset(array[j], 0, sizeof(double)* decomp->nodeLocalCount );
+		memset(array[6], 0, sizeof(double)* decomp->nodeLocalCount * 5);
+		VariableCondition_Apply(vc, NULL);
+	
+		if (rank == procToWatch)
+		{
+			printf("Testing for %s\n", vcKey[i]);
+			Print(vc, stream);
+			printf("\n");
+			for (j = 0; j < 6; j++)
+			{
+				printf("\nvar[%u]: %.2lf", j, array[j][0]);
+				for (k = 1; k < decomp->nodeLocalCount; k++)
+					printf(", %.2lf", array[j][k]);
+			}
+			printf("\nvar[6]: %.2lf", array[6][0]);
+			for (j = 1; j < decomp->nodeLocalCount*5; j++)
+				printf(", %.2lf", array[6][j]);
+			printf("\n\n");
+			
+			for (j = 0; j < 7; j++)
+			{
+				for (k = 0; k < decomp->nodeLocalCount; k++)
+					printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+				printf("\n");
+			}
+			printf("\n");
+			
+			for (j = 0; j < 7; j++)
+			{
+				for (k = 0; k < decomp->nodeLocalCount; 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(layout);
+	Stg_Class_Delete(decomp);
+	Stg_Class_Delete(nLayout);
+	Stg_Class_Delete(eLayout);
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete(dictionary);
+	
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Discretisation.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Discretisation.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Discretisation.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 libDiscretisation.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: Discretisation.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_h__
+#define __Discretisation_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 /* __Discretisation_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/Swarm/Swarm.h"
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool Discretisation_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	DiscretisationSwarm_Finalise();
+	DiscretisationUtils_Finalise();
+	DiscretisationMesh_Finalise();
+	DiscretisationShape_Finalise();
+	DiscretisationGeometry_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Finalise_h__
+#define __Discretisation_Finalise_h__
+	
+	Bool Discretisation_Finalise( void );
+	
+#endif /* __Discretisation_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "Base/Base.h"
+
+#include "Discretisation/Geometry/Geometry.h"
+#include "Discretisation/Shape/Shape.h"
+#include "Discretisation/Mesh/Mesh.h"
+#include "Discretisation/Utils/Utils.h"
+#include "Discretisation/Swarm/Swarm.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool Discretisation_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 );
+	
+	DiscretisationGeometry_Init( argc, argv );
+	DiscretisationShape_Init( argc, argv );
+	DiscretisationMesh_Init( argc, argv );
+	DiscretisationUtils_Init( argc, argv );
+	DiscretisationSwarm_Init( argc, argv );
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __Discretisation_Init_h__
+#define __Discretisation_Init_h__
+	
+	Bool Discretisation_Init( int* argc, char** argv[] );
+	
+#endif /* __Discretisation_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,77 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+SO_EXT = $(EXT_SO)
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = -L$(BLD_LIBDIR) -lStGermainBase $(PROJ_LIBRARIES) -lm  $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)  `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(LIBS)
+
+export:: export-headers export-libraries
+#export:: export-headers
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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_lib = StGermainDiscretisation
+def_inc = StGermain/Discretisation
+
+def_srcs = \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	Init.h \
+	Finalise.h \
+	Discretisation.h
+
+def_libs = 
+def_objlists = StGermainDiscretisationUtils StGermainDiscretisationSwarm StGermainDiscretisationMesh StGermainDiscretisationShape StGermainDiscretisationGeometry

Added: long/3D/SNAC/trunk/StGermain/Discretisation/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain ${MPI_INCLUDES}
+EXTERNAL_LIBS = ${LAPACK_BLAS_LIBS}
+
+packages = XML MATH 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+	
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Discretisation/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+

Added: long/3D/SNAC/trunk/StGermain/Discretisation/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3680 2006-07-16 23:59:51Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisation -lStGermainBase ${RPATH_LFLAGS}
+
+packages = PETSC MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: testLibDiscretisation.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+#include "Discretisation/Discretisation.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( !Base_Init( &argc, &argv ) || !Discretisation_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 );
+	
+	Discretisation_Finalise();
+	Base_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+Bool LinearAlgebra_Init( int* argc, char** argv[] ) {
+	return True;
+}
+
+Bool LinearAlgebra_Finalise( void ) {
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/FD/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainFD
+
+RECURSE_DIRS = ${def_sub}
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+	@if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+

Added: long/3D/SNAC/trunk/StGermain/FD/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src tests Python

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/FD/Bindings
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = MeshContext
+
+def_pyc_package = StGermain/FD/Bindings
+def_pyc = __init__.py

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermainFD -lStGermain `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS)
+LCCFLAGS =
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = MeshContext
+def_pyb_package = StGermain/FD/Bindings
+
+def_srcs = \
+	misc.c \
+	bindings.c \
+	init.c
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: bindings.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "StGermain/FD/FD.h"
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef MeshContext_Python_Methods[] = {
+	{ MeshContext_Python_copyright__name__,	MeshContext_Python_copyright,	METH_VARARGS, MeshContext_Python_copyright__doc__	},
+	{ MeshContext_Python_Print__name__,	MeshContext_Python_Print,	METH_VARARGS, MeshContext_Python_Print__doc__		},
+	{ MeshContext_Python_Delete__name__,	MeshContext_Python_Delete,	METH_VARARGS, MeshContext_Python_Delete__doc__		},
+	{ MeshContext_Python_GetMesh__name__,	MeshContext_Python_GetMesh,	METH_VARARGS, MeshContext_Python_GetMesh__doc__		},
+	{ 0, 0, 0, 0 }
+};
+
+
+/* "Print" member */
+char MeshContext_Python_Print__doc__[] = "Print the MeshContext";
+char MeshContext_Python_Print__name__[] = "Print";
+PyObject* MeshContext_Python_Print( PyObject* self, PyObject* args ) {
+	PyObject*	pyMeshContext;
+	MeshContext*	context;
+	Stream*		stream = Journal_Register (Info_Type, "myStream");	
+
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMeshContext ) ) {
+		return NULL;
+	}
+	context = (MeshContext*)( PyCObject_AsVoidPtr( pyMeshContext ) );
+	
+	/* Run function */
+	Print( context, stream );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "Stg_Class_Delete" member */
+char MeshContext_Python_Delete__doc__[] = "Stg_Class_Delete/destroy the MeshContext";
+char MeshContext_Python_Delete__name__[] = "Stg_Class_Delete";
+PyObject* MeshContext_Python_Delete( PyObject* self, PyObject* args ) {
+	PyObject*	pyMeshContext;
+	MeshContext*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMeshContext ) ) {
+		return NULL;
+	}
+	context = (MeshContext*)( PyCObject_AsVoidPtr( pyMeshContext ) );
+	
+	/* Run function */
+	Stg_Class_Delete( context );
+	
+	/* Return */
+	Py_INCREF( Py_None );
+	return Py_None;
+}
+
+/* "GetDictionary" member */
+char MeshContext_Python_GetDictionary__doc__[] = "Get the Dictionary of the MeshContext";
+char MeshContext_Python_GetDictionary__name__[] = "GetDictionary";
+PyObject* MeshContext_Python_GetDictionary( PyObject* self, PyObject* args ) {
+	PyObject*	pyMeshContext;
+	MeshContext*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMeshContext ) ) {
+		return NULL;
+	}
+	context = (MeshContext*)( PyCObject_AsVoidPtr( pyMeshContext ) );
+	
+	return PyCObject_FromVoidPtr( context->dictionary, 0 );
+}
+
+/* "GetMesh" member */
+char MeshContext_Python_GetMesh__doc__[] = "Get the Mesh of the MeshContext";
+char MeshContext_Python_GetMesh__name__[] = "GetMesh";
+PyObject* MeshContext_Python_GetMesh( PyObject* self, PyObject* args ) {
+	PyObject*	pyMeshContext;
+	MeshContext*	context;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyMeshContext ) ) {
+		return NULL;
+	}
+	context = (MeshContext*)( PyCObject_AsVoidPtr( pyMeshContext ) );
+	
+	return PyCObject_FromVoidPtr( context->mesh, 0 );
+}

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Build the binding table(s).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: bindings.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __MeshContext_Python_bindings_h__
+#define __MeshContext_Python_bindings_h__
+	
+	extern struct PyMethodDef MeshContext_Python_Methods[];
+	
+	extern char MeshContext_Python_Print__name__[];
+	extern char MeshContext_Python_Print__doc__[];
+	PyObject* MeshContext_Python_Print( PyObject* self, PyObject* args );
+	
+	extern char MeshContext_Python_Delete__name__[];
+	extern char MeshContext_Python_Delete__doc__[];
+	PyObject* MeshContext_Python_Delete( PyObject* self, PyObject* args );
+	
+	extern char MeshContext_Python_GetMesh__name__[];
+	extern char MeshContext_Python_GetMesh__doc__[];
+	PyObject* MeshContext_Python_GetMesh( PyObject* self, PyObject* args );
+	
+#endif /* __MeshContext_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 MeshContext_Python__doc__[] = "";
+
+void initMeshContext() {
+	Py_InitModule4( "MeshContext", MeshContext_Python_Methods, MeshContext_Python__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "can't initialize module MeshContext" );
+	}
+	return;
+}

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 MeshContext_Python_copyright__doc__[] = "";
+char MeshContext_Python_copyright__name__[] = "copyright";
+
+PyObject* MeshContext_Python_copyright( PyObject* self, PyObject* args ) {
+    return Py_BuildValue( "s", "StGermain.FD.MeshContext Python Bindings module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __MeshContext_Python_misc_h__
+#define __MeshContext_Python_misc_h__
+
+	/* "copyright" member */
+	extern char MeshContext_Python_copyright__name__[];
+	extern char MeshContext_Python_copyright__doc__[];
+	PyObject* MeshContext_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __MeshContext_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.FD.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 $"

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/FD
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/FD/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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/FD
+def_pyc = __init__.py MeshContext.py

Added: long/3D/SNAC/trunk/StGermain/FD/Python/MeshContext.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/MeshContext.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/MeshContext.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,43 @@
+#!/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: MeshContext.py 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import Bindings.MeshContext as bindings
+import StGermain.Base.Context.Context as Context
+import StGermain.Discretisation.Mesh.Mesh as Mesh
+
+def copyright():
+	return "StGermain.FD.MeshContext Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+class MeshContext( Context.Context ):
+	def __init__( self, _handle ):
+		Context.Context.__init__( self, _handle )
+		self.mesh = Mesh.Mesh( bindings.GetMesh( self._handle ) )
+		return

Added: long/3D/SNAC/trunk/StGermain/FD/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.FD 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 $"

Added: long/3D/SNAC/trunk/StGermain/FD/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/FD/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/FD/src/FD.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/FD.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/FD.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 libFD.
+**
+** Assumptions:
+**	None so far.
+**
+** Comments:
+**	None so far.
+**
+** $Id: FD.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __FD_h__
+#define __FD_h__
+
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "MeshContext.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __FD_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool FD_Finalise( void ) {
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/FD/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __FD_Finalise_h__
+#define __FD_Finalise_h__
+	
+	Bool FD_Finalise( void );
+	
+#endif /* __FD_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "shortcuts.h"
+#include "StGermain/StGermain.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool FD_Init( int* argc, char** argv[] ) {
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/FD/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __FD_Init_h__
+#define __FD_Init_h__
+	
+	Bool FD_Init( int* argc, char** argv[] );
+	
+#endif /* __FD_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+SO_EXT = $(EXT_SO)
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = -L$(BLD_LIBDIR) -lStGermain -lStGermainDiscretisation -lStGermainBase $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS) `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(LIBS)
+
+export:: export-headers export-libraries
+#export:: export-headers
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/FD/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainFD
+def_inc = StGermain/FD
+
+def_srcs = \
+	MeshContext.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	types.h \
+	shortcuts.h \
+	MeshContext.h \
+	Init.h \
+	Finalise.h \
+	FD.h
+
+def_libs = 
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: MeshContext.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "MeshContext.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* Textual name of this class */
+const Type MeshContext_Type = "MeshContext";
+
+
+MeshContext* _MeshContext_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,
+		MeshLayout*			meshLayout,
+		SizeT				nodeSize,
+		SizeT				elementSize,
+		MPI_Comm			communicator,
+		Dictionary*			dictionary )
+{
+	MeshContext* self;
+	
+	/* Allocate memory */
+	self = (MeshContext*)_AbstractContext_New( sizeOfSelf, type, _delete, _print, _copy,
+			_defaultConstructor, _construct, _build, _initialise, _execute, _destroy, name, initFlag,
+			_setDt, start, stop, communicator, dictionary );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	_MeshContext_Init( self, meshLayout, nodeSize, elementSize );
+	
+	return self;
+}
+
+void _MeshContext_Init( MeshContext* self, MeshLayout* meshLayout, SizeT nodeSize, SizeT elementSize ) {
+	Dictionary* meshDict;
+
+	/* General and Virtual info should already be set */
+	
+	/* MeshContext info */
+	self->meshLayout = meshLayout;
+	meshDict = Dictionary_Entry_Value_AsDictionary( Dictionary_Get( self->dictionary, "mesh" ) );
+	self->mesh = Mesh_New( "Mesh", self->meshLayout, nodeSize, elementSize, self->extensionMgr_Register,
+		meshDict ? meshDict : self->dictionary );
+	self->meshExtensionMgr = ExtensionManager_New_OfExistingObject( "mesh", self->mesh );
+	ExtensionManager_Register_Add( self->extensionMgr_Register, self->meshExtensionMgr ); 
+	
+	/* Add hooks to entry points */
+	EntryPoint_Append( Context_GetEntryPoint( self, AbstractContext_EP_Build ), "defaultMeshBuild",
+		_MeshContext_Build, MeshContext_Type );
+	EntryPoint_Append( Context_GetEntryPoint( self, AbstractContext_EP_Initialise ), "defaultMeshICs",
+		_MeshContext_InitialConditions,	MeshContext_Type );
+}
+
+
+void _MeshContext_Delete( void* meshContext ) {
+	MeshContext* self = (MeshContext*)meshContext;
+	
+	/* NOTE: as ExtensionManager_Free() is currently coded (21 April 2004) the below
+	3 lines are a bug - all ExtensionManager_Free does in this case is prematurely
+	delete the mesh object itself. Not sure if something else
+	should be there, or if ExtensionManager_Free() needs to be re-coded. */
+	#if 0
+	if( self->mesh ) {
+		ExtensionManager_Free( self->meshExtensionMgr, self->mesh );
+	}
+	#endif
+	Stg_Class_Delete( self->mesh );
+	
+	/* Stg_Class_Delete parent */
+	_AbstractContext_Delete( meshContext );
+}
+
+void _MeshContext_Print( void* meshContext, Stream* stream ) {
+	MeshContext* self = (MeshContext*)meshContext;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "MeshContext (%p):\n", self );
+	
+	/* Virtual info */
+	
+	/* MeshContext info */
+	Print( self->meshLayout, stream );
+	Print( self->mesh, stream );
+	Print( self->meshExtensionMgr, stream );
+	
+	/* Print parent */
+	_AbstractContext_Print( meshContext, stream );
+}
+
+
+void _MeshContext_Build( Context* context, void* data ) {
+	MeshContext* self = (MeshContext*)context;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+	
+	Build( self->mesh, data, False );
+}
+
+void _MeshContext_InitialConditions( Context* context, void* data ) {
+	MeshContext* self = (MeshContext*)context;
+	
+	Journal_Printf( self->debug, "In: %s\n", __func__ );
+	
+	Initialise( self->mesh, data, False );
+}

Added: long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Abstract class faciliting how mesh-based "modellers"/"solvers" are laid out and execute.
+**
+** Assumptions:
+**
+** Comments:
+**	This is a class, of which subclasses can be defined, which can override default methods.
+**	Currently built with only MeshPIC_Context in mind (for Snac).
+**
+** $Id: MeshContext.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __FD_MeshContext_h__
+#define __FD_MeshContext_h__
+	
+
+	/* Textual name of this class */
+	extern const Type MeshContext_Type;
+	
+	#define __MeshContext \
+		/* General info */ \
+		__AbstractContext \
+		\
+		/* Virtual info */ \
+		\
+		/* MeshContext info */ \
+		MeshLayout*			meshLayout; \
+		Mesh*				mesh; \
+		ExtensionManager*		meshExtensionMgr;
+	struct MeshContext { __MeshContext };
+	
+	
+	/* No "MeshContext_New" and "MeshContext_Init" as this is an abstract class */
+	
+	/* Creation implementation / Virtual constructor */
+	MeshContext* _MeshContext_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,
+		MeshLayout*			meshLayout,
+		SizeT				nodeSize,
+		SizeT				elementSize,
+		MPI_Comm			communicator,
+		Dictionary*			dictionary );
+	
+	/* Initialisation implementation */
+	void _MeshContext_Init( MeshContext* self, MeshLayout* meshLayout, SizeT nodeSize, SizeT elementSize );
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _MeshContext_Delete( void* meshContext );
+	
+	/* Print implementation */
+	void _MeshContext_Print( void* meshContext, Stream* stream);
+	
+	
+	/* Build the mesh implementation */
+	void _MeshContext_Build( Context* context, void* data );
+	
+	/* Initialise the mesh implementation */
+	void _MeshContext_InitialConditions( Context* context, void* data );
+	
+#endif /* __FD_MeshContext_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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">MeshContext</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/FD/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>

Added: long/3D/SNAC/trunk/StGermain/FD/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermain -lStGermainDiscretisation -lStGermainBase
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/FD/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Shortcuts to complex types in the eyes of the Context user.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __FD_shortcuts_h__
+#define __FD_shortcuts_h__
+	
+	/* MeshContext shortcuts */
+	#define Node_At( self, index )				Mesh_NodeAt( (self)->mesh, (index) )
+	#define Element_At( self, index )			Mesh_ElementAt( (self)->mesh, (index) )
+	
+	#define Node_Neighbour_I( self, node, index )		(self)->mesh->nodeNeighbourTbl[(node)][(index)]
+	#define Node_Element_I( self, node, index )		(self)->mesh->nodeElementTbl[(node)][(index)]
+	#define Element_Neighbour_I( self, element, index )	(self)->mesh->elementNeighbour[(element)][(index)]
+	#define Element_Node_I( self, element, index )		(self)->mesh->elementNodeTbl[(element)][(index)]
+	
+	#define Node_Neighbour_P( self, node, index )		Node_At( (self), Node_Neighbour_I( (self), (node), (index) ) )
+	#define Node_Element_P( self, node, index )		Element_At( (self), Node_Element_I( (self), (node), (index) ) )
+	#define Element_Neighbour_P( self, element, index )	Element_At( (self), Element_Neighbour_I( (self), (element), (index) ) )
+	#define Element_Node_P( self, element, index )		Node_At( (self), Element_Node_I( (self), (element), (index) ) )
+	
+#endif /* __FD_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Context types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __FD_types_h__
+#define __FD_types_h__
+	
+	/* Context types/classes */
+	typedef struct MeshContext		MeshContext;
+	
+#endif /* __FD_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/FD/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+#hack
+DL_INCDIR=/usr/include
+DL_LIBDIR=/usr/lib
+DL_LIBS=-ldl
+MODULE_EXT=$(EXT_SO)
+SO_EXT = $(EXT_SO)
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` -L${DL_LIBDIR} ${DL_LIBS}
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\" -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/FD/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainFD
+
+def_srcs = \
+	testLibFD.c \
+	testMeshContext0.c
+
+def_checks = \
+	testLibFD.0of1.sh \
+	testMeshContext0.0of1.sh
+

Added: long/3D/SNAC/trunk/StGermain/FD/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3680 2006-07-16 23:59:51Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainFD -lStGermain -lStGermainDiscretisation -lStGermainBase ${RPATH_LFLAGS}
+
+packages = PETSC MPI XML MATH DL
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibFD " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,77 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: testLibFD.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain.h"
+#include "FD/FD.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 ) ) {
+		fprintf( stderr, "Error initialising StGermain, exiting.\n" );
+		exit( EXIT_FAILURE );
+	}
+	FD_Init( &argc, &argv );
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	FD_Finalise();
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,66 @@
+Watching rank: 0
+StGermain Framework revision 3654. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library revision 3654. Copyright (C) 2003-2005 VPAC.
+meshContext->entryPointList->count: 17
+meshContext->entryPointList->_size: 24
+Context: TestContext
+	EP: Context_Construct
+		H: "default" (Context)
+	EP: Context_ConstructExtensions
+	EP: Context_Build
+		H: "BuildAllLiveComponents" (Context)
+		H: "defaultMeshBuild" (MeshContext)
+	EP: Context_Initialise
+		H: "InitialiseAllLiveComponents" (Context)
+		H: "defaultMeshICs" (MeshContext)
+	EP: Context_Execute
+		H: "default" (Context)
+	EP: Context_Destroy
+	EP: Context_DestroyExtensions
+	EP: Context_Dt
+		H: "test" (TestMeshContext)
+	EP: Context_Step
+		H: "default" (Context)
+	EP: Context_Solve
+		H: "test" (TestMeshContext)
+	EP: Context_UpdateClass
+	EP: Context_Sync
+		H: "test" (TestMeshContext)
+	EP: Context_FrequentOutput
+		H: "test" (TestMeshContext)
+	EP: Context_Dump
+	EP: Context_DumpClass
+	EP: Context_Save
+		H: "SaveTimeInfo" (Context)
+	EP: Context_SaveClass
+Run until simulation time passes 10.
+This is Dt, returning 2
+TimeStep = 1, Start time = 0 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Sync
+This is Output
+This is Dt, returning 2
+TimeStep = 2, Start time = 2 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Sync
+This is Output
+This is Dt, returning 2
+TimeStep = 3, Start time = 4 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Sync
+This is Output
+This is Dt, returning 2
+TimeStep = 4, Start time = 6 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Sync
+This is Output
+This is Dt, returning 2
+TimeStep = 5, Start time = 8 + 2 prev timeStep dt
+This is SetDt... setting to 2
+This is Solve
+This is Sync
+This is Output

Added: long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testMeshContext0 " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests MeshContext in the most basic sence... creation on default values, run, and delete.
+**
+** $Id: testMeshContext0.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain.h"
+#include "StGermain/FD/FD.h"
+#include "Base/Base.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+Stream* testInfoStream;
+
+struct _Node {
+	Coord coord;
+	double temp;
+};
+
+struct _Element {
+	Coord coord;
+	double temp;
+};
+
+void MyDelete( void* meshContext ) {
+	_MeshContext_Delete( meshContext );
+}
+
+void MyPrint( void* meshContext, Stream* stream ) {
+	_MeshContext_Print( meshContext, stream );
+}
+
+void MyBuild( void* context ) {
+	printf( "This is Build\n" );
+}
+
+void MyInitialConditions( void* context ) {
+	printf( "This is InitialConditions\n" );
+}
+
+double dt = 2.0f;
+
+double MyDt( void* context ) {
+	printf( "This is Dt, returning %g\n", dt );
+	return dt;
+}
+
+void MySolve( void* context ) {
+	printf( "This is Solve\n" );
+}
+
+void MySync( void* context ) {
+	printf( "This is Sync\n" );
+}
+
+void MyOutput( void* context ) {
+	printf( "This is Output\n" );
+}
+
+void MySetDt( void* context, double _dt ) {
+	printf( "This is SetDt... setting to %g\n", _dt );
+	dt = _dt;
+}
+
+int main( int argc, char* argv[] ) {
+	MPI_Comm CommWorld;
+	int rank;
+	int numProcessors;
+	int procToWatch;
+	Dictionary* dictionary;
+	Topology*			nTopology;
+	ElementLayout*			eLayout;
+	NodeLayout*			nLayout;
+	MeshDecomp*			decomp;
+	MeshLayout*			meshLayout;
+	MeshContext* meshContext;
+	
+	/* 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 );
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) printf( "Watching rank: %i\n", rank );
+	
+	StGermain_Init( &argc, &argv );
+	FD_Init( &argc, &argv );
+	
+	/* Initialize Stream */
+	testInfoStream =  Journal_Register( InfoStream_Type, "testInfoStream" );
+
+	/* Read input */
+	dictionary = Dictionary_New();
+	dictionary->add( dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	dictionary->add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( 3 ) );
+	dictionary->add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( 4 ) );
+	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( 10.0f ) );
+	dictionary->add( dictionary, "maxZ", Dictionary_Entry_Value_FromDouble( 300.0f ) );
+	
+	/* Build the context */
+	nTopology = (Topology*)IJK6Topology_New( "IJKTopology", 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 );
+	meshLayout = MeshLayout_New( "MeshLayout", eLayout, nLayout, decomp );
+	meshContext = _MeshContext_New( 
+		sizeof(MeshContext), 
+		"TestContext", 
+		MyDelete, 
+		MyPrint, 
+		NULL,
+		NULL, 
+		NULL, 
+		_AbstractContext_Build, 
+		_AbstractContext_Initialise, 
+		_AbstractContext_Execute, 
+		_AbstractContext_Destroy, 
+		"meshContext", 
+		True, 
+		MySetDt, 
+		0, 
+		10, 
+		meshLayout, 
+		sizeof(Node), 
+		sizeof(Element), 
+		CommWorld, 
+		dictionary );
+
+	/* Add entry points to the context */
+	EntryPoint_ReplaceAll( 
+		Context_GetEntryPoint( meshContext, AbstractContext_EP_Solve ),
+		"test", 
+		MySolve, 
+		"TestMeshContext" );
+	EntryPoint_ReplaceAll( Context_GetEntryPoint( meshContext, AbstractContext_EP_Dt ),
+		"test", 
+		MyDt, 
+		"TestMeshContext" );
+	EntryPoint_ReplaceAll( Context_GetEntryPoint( meshContext, AbstractContext_EP_Sync ),
+		"test", 
+		MySync, 
+		"TestMeshContext" );
+	EntryPoint_ReplaceAll( Context_GetEntryPoint( meshContext, AbstractContext_EP_FrequentOutput ),
+		"test", 
+		MyOutput, 
+		"TestMeshContext" );
+
+	if( rank == procToWatch ) {
+		Stream* stream = Journal_Register( InfoStream_Type, MeshContext_Type );
+
+		printf( "meshContext->entryPointList->count: %u\n", meshContext->entryPoint_Register->count );
+		printf( "meshContext->entryPointList->_size: %lu\n", meshContext->entryPoint_Register->_size );
+		Context_PrintConcise( meshContext, stream );
+	}
+	
+	/* Run the context */
+	if( rank == procToWatch ) {
+		Stg_Component_Build( meshContext, 0 /* dummy */, False );
+		Stg_Component_Initialise( meshContext, 0 /* dummy */, False );
+		Stg_Component_Execute( meshContext, 0 /* dummy */, False );
+	}
+	
+	/* Stg_Class_Delete stuff */
+	Stg_Component_Destroy( meshContext, 0 /* dummy */, False );
+	Stg_Class_Delete( meshContext );
+	Stg_Class_Delete( meshLayout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+	
+	FD_Finalise();
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libBase
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+	@if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+

Added: long/3D/SNAC/trunk/StGermain/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3851 2006-10-12 08:57:22Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = Regresstor compatibility Base Discretisation libStGermain src FD pyre
+
+#def_sub += Viewers # (Ignored due to FE removed) libStGermainAll
+
+ifeq (true,$(shell if test -x $(DOXYGEN); then echo true; fi ))
+	def_sub += doc
+else
+	warn := $(shell echo Not entering doc directory as doxygen not found. 1>&2 )
+	warn := $(shell echo To generate doxgen docs, please set the DOXYGEN environment variable then re-run configure.sh. 1>&2 )
+endif

Added: long/3D/SNAC/trunk/StGermain/Makefile.system
===================================================================
--- long/3D/SNAC/trunk/StGermain/Makefile.system	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Makefile.system	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,624 @@
+ifndef WHICH
+	WHICH=/usr/bin/which
+endif
+ifndef UNAME
+	UNAME=/bin/uname
+endif
+ifndef UNAME_M
+	UNAME_M=/bin/uname -m
+endif
+ifndef UNAME_R
+	UNAME_R=/bin/uname -r
+endif
+ifndef MACHINE
+	MACHINE=i686
+endif
+ifndef KERNEL_RELEASE
+	KERNEL_RELEASE=2.6.24-19-generic
+endif
+ifndef UNAME_S
+	UNAME_S=/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=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=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 OPTIONS
+	OPTIONS=
+endif
+ifndef USE_RUN_LONG_TESTS
+	USE_RUN_LONG_TESTS=
+endif
+ifndef PROJ_ROOT
+	PROJ_ROOT=/home/echoi/opt/SNAC/StGermain
+endif
+ifndef BLD_DIR
+	BLD_DIR=/home/echoi/opt/SNAC/build
+endif
+ifndef EXPORT_DIR
+	EXPORT_DIR=/home/echoi/opt/SNAC/build
+endif
+ifndef TMP_DIR
+	TMP_DIR=/home/echoi/opt/SNAC/build/tmp
+endif
+ifndef BIN_DIR
+	BIN_DIR=/home/echoi/opt/SNAC/build/bin
+endif
+ifndef LIB_DIR
+	LIB_DIR=/home/echoi/opt/SNAC/build/lib
+endif
+ifndef INC_DIR
+	INC_DIR=/home/echoi/opt/SNAC/build/include
+endif
+ifndef TST_DIR
+	TST_DIR=/home/echoi/opt/SNAC/build/tests
+endif
+ifndef PYB_DIR
+	PYB_DIR=/home/echoi/opt/SNAC/build/Python
+endif
+ifndef PYC_DIR
+	PYC_DIR=/home/echoi/opt/SNAC/build/Python
+endif
+ifndef SHARE_DIR
+	SHARE_DIR=/home/echoi/opt/SNAC/build/share
+endif
+PROJECT=StGermain
+ifndef FIND_SUBDIRS
+	FIND_SUBDIRS=${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 `pwd | ${SED} s/src//g | ${SED} s/tests//g`
+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 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=${MATH_DIR}/include
+endif
+ifndef MATH_INCLUDES
+	MATH_INCLUDES=-I${MATH_INCDIR}
+endif
+ifndef MATH_LIBDIR
+	MATH_LIBDIR=${MATH_DIR}/lib
+endif
+ifndef MATH_LIBS
+	MATH_LIBS=-L${MATH_LIBDIR} -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=-lxml2
+endif
+ifndef PETSC_DIR
+	PETSC_DIR=/home/echoi/opt/petsc-2.3.2-p10
+endif
+ifndef BOPT
+	BOPT=O
+endif
+ifndef PETSC_INCDIR
+	PETSC_INCDIR=${PETSC_DIR}/include
+endif
+ifndef PETSC_VERSION_RELEASE
+	PETSC_VERSION_RELEASE=1
+endif
+ifndef PETSC_BINDIR
+	PETSC_BINDIR=${PETSC_DIR}/bin
+endif
+ifndef PETSC_LIBDIR
+	PETSC_LIBDIR=${PETSC_DIR}/lib/${PETSC_ARCH}
+endif
+ifndef PETSC_BMAKEDIR
+	PETSC_BMAKEDIR=${PETSC_DIR}/bmake/${PETSC_ARCH}
+endif
+ifndef PETSC_CONFIG_FILE
+	PETSC_CONFIG_FILE=${PETSC_BMAKEDIR}/petscconf
+endif
+ifndef PETSC_VARIABLES_FILE
+	PETSC_VARIABLES_FILE=${PETSC_BMAKEDIR}/petscconf
+endif
+ifndef PETSC_INCLUDES
+	PETSC_INCLUDES=-I${PETSC_INCDIR} -I${PETSC_BMAKEDIR}
+endif
+ifndef BLAS_LIB
+	BLAS_LIB=
+endif
+ifndef LAPACK_LIB
+	LAPACK_LIB=
+endif
+ifndef LAPACK_BLAS_LIBS
+	LAPACK_BLAS_LIBS= -Wl,-rpath,/home/echoi/opt/petsc-2.3.2-p10/externalpackages/f2cblaslapack/linux-gnu-c-debug -L/home/echoi/opt/petsc-2.3.2-p10/externalpackages/f2cblaslapack/linux-gnu-c-debug -lf2clapack -Wl,-rpath,/home/echoi/opt/petsc-2.3.2-p10/externalpackages/f2cblaslapack/linux-gnu-c-debug -L/home/echoi/opt/petsc-2.3.2-p10/externalpackages/f2cblaslapack/linux-gnu-c-debug -lf2cblas -lm
+endif
+ifndef PETSC_X11_LIBS
+	PETSC_X11_LIBS= -lX11
+endif
+ifndef CLINKER_SLFLAG
+	CLINKER_SLFLAG=
+endif
+ifndef MATLAB_LIB
+	MATLAB_LIB=
+endif
+ifndef PETSC_SOLVER_LIB
+	PETSC_SOLVER_LIB=petscksp
+endif
+ifndef PETSC_LIBFILES
+	PETSC_LIBFILES=-l${PETSC_SOLVER_LIB} -lpetscdm -lpetscmat -lpetscvec -lpetsc -lpetscsnes ${MUMPS_LIB} ${LAPACK_BLAS_LIBS} ${MATLAB_LIB} ${PETSC_X11_LIBS} ${CC_FORTRAN_LFLAGS}
+endif
+ifndef PETSC_LIBS
+	PETSC_LIBS=-L${PETSC_LIBDIR} ${PETSC_LIBFILES}
+endif
+ifndef PETSC_RPATH
+	PETSC_RPATH=-Xlinker -rpath -Xlinker ${PETSC_LIBDIR}
+endif
+ifndef MPI_DIR
+	MPI_DIR=/home/echoi/opt/mpich-1.2.7p1
+endif
+ifndef MPI_BINDIR
+	MPI_BINDIR=/home/echoi/opt/mpich-1.2.7p1/bin
+endif
+ifndef MPI_LIBDIR
+	MPI_LIBDIR=/home/echoi/opt/mpich-1.2.7p1/lib
+endif
+ifndef MPI_INCDIR
+	MPI_INCDIR=/home/echoi/opt/mpich-1.2.7p1/include
+endif
+ifndef MPI_INCLUDES
+	MPI_INCLUDES=-I${MPI_INCDIR}
+endif
+ifndef MPI_IMPLEMENTATION
+	MPI_IMPLEMENTATION=mpich
+endif
+ifndef MPI_LIBRARY
+	MPI_LIBRARY=mpich
+endif
+ifndef MPI_LIBFILES
+	MPI_LIBFILES=-lmpich -lpmpich    -lpthread  -lrt 
+endif
+ifndef MPI_RPATH
+	MPI_RPATH=-Xlinker -rpath -Xlinker ${MPI_LIBDIR}
+endif
+ifndef MPI_LIBS
+	MPI_LIBS=-L${MPI_LIBDIR} ${MPI_LIBFILES}
+endif
+ifndef MPI_RUN_COMMAND
+	MPI_RUN_COMMAND=mpirun
+endif
+ifndef MPI_RUN
+	MPI_RUN=${MPI_BINDIR}/${MPI_RUN_COMMAND}
+endif
+ifndef MPI_NPROC
+	MPI_NPROC=-np
+endif
+HAVE_MPI=1
+HAVE_PETSC=1
+ifndef MPI_DIR
+	MPI_DIR=/home/echoi/opt/mpich-1.2.7p1
+endif
+ifndef MPI_BINDIR
+	MPI_BINDIR=/home/echoi/opt/mpich-1.2.7p1/bin
+endif
+ifndef MPI_LIBDIR
+	MPI_LIBDIR=/home/echoi/opt/mpich-1.2.7p1/lib
+endif
+ifndef MPI_INCDIR
+	MPI_INCDIR=/home/echoi/opt/mpich-1.2.7p1/include
+endif
+ifndef MPI_INCLUDES
+	MPI_INCLUDES=-I/home/echoi/opt/mpich-1.2.7p1/include
+endif
+ifndef MPI_IMPLEMENTATION
+	MPI_IMPLEMENTATION=mpich
+endif
+ifndef MPI_LIBFILES
+	MPI_LIBFILES=-lmpich -lpmpich    -lpthread  -lrt 
+endif
+ifndef MPI_RPATH
+	MPI_RPATH=-Xlinker -rpath -Xlinker /home/echoi/opt/mpich-1.2.7p1/lib
+endif
+ifndef MPI_LIBS
+	MPI_LIBS=-L/home/echoi/opt/mpich-1.2.7p1/lib -lmpich -lpmpich    -lpthread  -lrt 
+endif
+ifndef MPI_RUN_COMMAND
+	MPI_RUN_COMMAND=mpirun
+endif
+ifndef MPI_RUN
+	MPI_RUN=/home/echoi/opt/mpich-1.2.7p1/bin/mpirun
+endif
+ifndef MPI_NPROC
+	MPI_NPROC=-np
+endif
+HAVE_MPI=1
+ifndef PYTHON_DIR
+	PYTHON_DIR=/usr/
+endif
+ifndef PYTHON_VERSION
+	PYTHON_VERSION=2.5
+endif
+ifndef PYTHON_INCDIR
+	PYTHON_INCDIR=${PYTHON_DIR}/include/python${PYTHON_VERSION}
+endif
+ifndef PYTHON_INCLUDES
+	PYTHON_INCLUDES=-I${PYTHON_INCDIR} -DHAVE_PYTHON
+endif
+ifndef PYTHON_BINDIR
+	PYTHON_BINDIR=${PYTHON_DIR}/bin
+endif
+ifndef PYTHON
+	PYTHON=${PYTHON_BINDIR}/python
+endif
+ifndef PYTHON_LIB
+	PYTHON_LIB=python${PYTHON_VERSION}
+endif
+ifndef PYTHON_LIBDIR
+	PYTHON_LIBDIR=${PYTHON_DIR}/lib/python${PYTHON_VERSION}
+endif
+ifndef PYTHON_MODDIR
+	PYTHON_MODDIR=${PYTHON_DIR}/lib/python${PYTHON_VERSION}
+endif
+ifndef PYTHON_COMPILEALL
+	PYTHON_COMPILEALL=${PYTHON} ${PYTHON_MODDIR}/compileall.py
+endif
+ifndef PYTHON_EXTERNAL_LIBS
+	PYTHON_EXTERNAL_LIBS=-lpthread -ldl -lutil
+endif
+ifndef PYTHON_LIBS
+	PYTHON_LIBS=-L${PYTHON_LIBDIR} -l${PYTHON_LIB} ${PYTHON_EXTERNAL_LIBS}
+endif
+ifndef PYTHON_STATIC_LIB
+	PYTHON_STATIC_LIB=${PYTHON_LIBDIR}/config/libpython${PYTHON_VERSION}.a
+endif
+ifndef HAVE_PYTHON
+	HAVE_PYTHON=1
+endif
+ifndef GL_DIR
+	GL_DIR=/usr
+endif
+ifndef GL_INCDIR
+	GL_INCDIR=${GL_DIR}/include
+endif
+ifndef GL_LIBDIR
+	GL_LIBDIR=${GL_DIR}/lib
+endif
+ifndef GL_RPATH
+	GL_RPATH=${RPATH_FLAG}${GL_LIBDIR}
+endif
+ifndef GL_INCLUDES
+	GL_INCLUDES=-I${GL_INCDIR} -I${GL_INCDIR}/GL
+endif
+GL_INCLUDES+=-DHAVE_GL
+ifndef HAVE_GL
+	HAVE_GL=1
+endif
+ifndef GL_LIBFILES
+	GL_LIBFILES=-lGL -lGLU
+endif
+ifndef GL_LIBS
+	GL_LIBS=-L${GL_LIBDIR} ${GL_LIBFILES}
+endif
+ifndef OSMESA_DIR
+	OSMESA_DIR=${GL_DIR}
+endif
+ifndef OSMESA_INCDIR
+	OSMESA_INCDIR=${OSMESA_DIR}/include
+endif
+ifndef OSMESA_INCLUDES
+	OSMESA_INCLUDES=-I${OSMESA_INCDIR} -I${OSMESA_INCDIR}/GL/
+endif
+ifndef OSMESA_LIBDIR
+	OSMESA_LIBDIR=${OSMESA_DIR}/lib
+endif
+ifndef OSMESA_LIBFILES
+	OSMESA_LIBFILES=-lOSMesa
+endif
+ifndef OSMESA_LIBS
+	OSMESA_LIBS=-L${OSMESA_LIBDIR} ${OSMESA_LIBFILES}
+endif
+ifndef SDL_DIR
+	SDL_DIR=/usr
+endif
+ifndef SDL_INCDIR
+	SDL_INCDIR=${SDL_DIR}/include
+endif
+ifndef HDF5_DIR
+	HDF5_DIR=/usr
+endif
+ifndef HDF5_INCDIR
+	HDF5_INCDIR=${HDF5_DIR}/include
+endif
+ifndef HDF5_INCLUDES
+	HDF5_INCLUDES=-I${HDF5_INCLUDES}
+endif
+ifndef HDF5_LIBDIR
+	HDF5_LIBDIR=${HDF5_LIBDIR}/lib
+endif
+ifndef HDF5_LIBFILES
+	HDF5_LIBFILES=-lhdf5
+endif
+ifndef HDF5_LIBS
+	HDF5_LIBS=-L${HDF5_LIBDIR} ${HDF5_LIBFILES}
+endif
+ifndef APPS_XML_DIR
+	APPS_XML_DIR=/home/echoi/opt/SNAC/build/lib/STGERMAIN
+endif
+	EXPORT_INCLUDE_DIR=/StGermain
+	EXAMPLES_DIR=/home/echoi/opt/SNAC/build/share/StGermain
+	STG_INCLUDE_PATH=/home/echoi/opt/SNAC/build/lib/StGermain
+	EXPORT_INCLUDE_DIR=/home/echoi/opt/SNAC/build/lib/StGermain/StGermain

Added: long/3D/SNAC/trunk/StGermain/Makefile.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/Makefile.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Makefile.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+link VMake/Makefile.vmake
\ No newline at end of file


Property changes on: long/3D/SNAC/trunk/StGermain/Makefile.vmake
___________________________________________________________________
Name: svn:special
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = submitBuild checkDiff checkExecution startRun endRun

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = regresstorCheckDiff
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Class.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Makes a web service call to submit the results of a make */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libcsoap/soap-client.h>
+
+
+const char* Regresstor_URN = "urn:Regresstor";			/* The name of the web service class */
+const char* Regresstor_SubmitCheckMethod = "submitCheck";	/* The name of the web service function */
+
+/* Index Positions to the paramter array */
+#define RunID_Pos		0
+#define UnitName_Pos		1
+#define TestName_Pos		2
+#define Passed_Pos		3
+#define OutputLocation_Pos	4
+#define URL_Pos			5		/* The URL for the submit build function */
+
+/* The number of paramters in the submit build function */
+#define Parameter_Num_Pos	6
+
+/* The parameter names to the submit build function */
+const char* parameterNames[Parameter_Num_Pos] = {
+	"RunID",
+	"UnitName",
+	"TestName",
+	"Passed",
+	"OutputLocation",
+	"URL" };
+
+void printUsage();
+void initParametersArray( char** parameters );
+void fetchParametersFromArgv( char** parameters, int argc, char** argv );
+int checkParameters( char** parameters );
+char* getFileContents( char* filename );
+int interpretResponse( SoapCtx* response, xmlChar** buildID );
+
+int main( int argc, char** argv ) {
+
+	SoapCtx* request;
+	SoapCtx* response;
+	herror_t error;
+	int ii;
+
+	/* The array of parameter values to be fetched from argv. */
+	char* parameters[Parameter_Num_Pos];
+
+	xmlChar* buildID;
+
+	if ( argc != Parameter_Num_Pos + 1 ) {
+		printf( "Regresstor: Invalid Number of arguments! Num given: %d\n", argc );
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	initParametersArray( parameters );
+	fetchParametersFromArgv( parameters, argc, argv );
+
+	if ( ! checkParameters( parameters ) ) {
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	printf( "Regresstor: calling web service %s(), %s at %s.\n",
+		Regresstor_SubmitCheckMethod,
+		Regresstor_URN,
+		parameters[URL_Pos]);
+
+	/* SOAP CALL */
+	error = soap_client_init_args( argc, argv );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+	
+	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_SubmitCheckMethod, &request );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+
+	/* Add parameters into envelope except for the URL */
+	soap_env_push_item( request->env, NULL, "parameters" );
+
+	for ( ii = 0; ii < URL_Pos; ++ii ) {
+		if ( ii == OutputLocation_Pos ) {
+			/* Attach file */
+			char* contents;
+			char* paramName = NULL;
+			int sendDummyFile = 1;
+
+			paramName = "Output";
+
+			if ( strcmp( parameters[ii], "none" ) != 0 ) {
+				contents = getFileContents( parameters[ii] );
+				if ( contents != NULL ) {
+					soap_env_add_item( request->env, "xsd:string", paramName, contents );
+					free( contents );
+					sendDummyFile = 0;
+				}
+			}
+			if ( sendDummyFile ) {
+				soap_env_add_item( request->env, "xsd:string", paramName, "No output file" );
+			}
+		}
+		else
+		{
+			soap_env_add_item( request->env, "xsd:string", parameterNames[ii], parameters[ii] );
+		}
+	}
+
+	/* Check commandline to see if diff passed. If fail, add a "Diff Failed" sub test */
+	if ( strcmp( parameters[Passed_Pos], "0" ) == 0 ) {
+		/* Add the sub test */
+		soap_env_add_item( request->env, "xsd:string", "FailedSubTests", "Diff failed" );
+	}
+	
+	soap_env_pop_item( request->env );
+	
+	error = soap_client_invoke( request, &response, parameters[URL_Pos], "");
+                                                                                                                                    
+	if ( error != H_OK ) {
+		log_error4( "[%d] %s(): %s ", herror_code(error), herror_func(error), herror_message(error) );
+		herror_release( error );
+		soap_ctx_free( request );
+		return EXIT_FAILURE;
+	}
+
+	interpretResponse( response, &buildID );
+
+	soap_ctx_free( request );
+	soap_ctx_free( response );
+
+	soap_client_destroy();
+
+
+	return EXIT_SUCCESS;
+}
+
+void printUsage() {
+	int ii;
+	
+	printf( "Usage:\n" );
+	printf( "\t./regresstorCheckDiff (param)=(value)\n" );
+	printf( "All parameters must be given!\n" );
+	printf( "Parameters:\n" );
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		printf( "\t%s\n", parameterNames[ii] );
+	}
+}
+
+/* Initialises all values to NULL */
+void initParametersArray( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		parameters[ii] = NULL;
+	}
+}
+void fetchParametersFromArgv( char** parameters, int argc, char** argv ) {
+	int ii, jj;
+	char* param;
+	char* value;
+	int pos;
+
+	for ( ii = 1; ii < argc; ++ii ) {
+		if ( !strchr( argv[ii], '=' ) ) {
+			printf( "Regresstor: Invalid argument %s. Assign (param)=(value)\n", argv[ii] );
+			return;
+		}
+
+		param = strtok( argv[ii], "=" );
+		value = strtok( NULL, "=" );
+
+		if ( !param ) {
+			printf( "Regresstor: Invalid argument %s.\n", argv[ii] );
+			return;
+		}
+		if ( !value ) {
+			printf( "Regresstor: Parameter %s needs a value.\n", param );
+			return;
+		}
+
+		pos = -1;
+		for ( jj = 0; jj < Parameter_Num_Pos; ++jj ) {
+			if ( strcmp( param, parameterNames[jj] ) == 0 ) {
+				pos = jj;
+				break;
+			}
+		}
+		if ( pos == -1 ) {
+			printf( "Regresstor: Invalid param %s\n", argv[ii] );
+			return;
+		}
+		printf("\t%s=%s\n", parameterNames[pos], value );
+		parameters[pos] = value;
+	}
+}
+int checkParameters( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		if ( parameters[ii] == NULL ) {
+			printf( "Regresstor: Parameter %s was not given.\n", parameterNames[ii] );
+			return 0;
+		}
+	}
+
+	return 1;
+}
+char* getFileContents( char* filename ) {
+	FILE* file;
+	long size;
+	char* contents;
+                                                                                                                                    
+	file = fopen( filename, "r" );
+	if ( !file ) {
+		return NULL;
+	}
+	if( fseek( file, 0L, SEEK_END ) != 0 ) {
+		return NULL;
+	}
+	size = ftell( file ) + 1;
+	if ( size < 1 ) {
+		return NULL;
+	}
+	contents = (char*)malloc( size );
+	if ( contents == NULL ) {
+		return NULL;
+	}
+	rewind( file );
+	fread( contents, 1, size - 1, file );
+	contents[ size - 1 ] = '\0';
+
+	fclose( file );
+
+	return contents;
+}
+int interpretResponse( SoapCtx* response, xmlChar** buildID ) {
+	xmlNodePtr method;
+	xmlNodePtr node;
+	xmlChar* value;
+                                                                                                                                    
+	method = soap_env_get_method( response->env );
+
+	if ( method ) {
+		if ( strcmp( (char*)method->name, "Fault" ) == 0 ) {
+			printf( "Regresstor: A SOAP error has occured:\n" );
+			node = soap_xml_get_children( method );
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+				printf( "Regresstor: %s=%s\n", node->name, value );
+				node = soap_xml_get_next(node);
+			}
+			return 0;
+		}
+		
+		node = soap_xml_get_children( method );		/* The s-gensym3 struct */
+
+		if ( node->children ) {
+			/* This is where the response values are */
+			node = node->children;
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+
+				if ( strcmp( (char*)node->name, "errorMsg" ) == 0 ) {
+					printf( "Regresstor: Error - %s\n", value );
+					return 0;
+				}
+				
+				node = soap_xml_get_next(node);
+			}
+		}
+	}
+	else {
+		printf( "Regresstor: Non-SOAP response.\n" );
+	}
+	printf( "Regresstor: Successfully submited check.\n" );
+	return 1;
+}

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,23 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+packages = CSOAP NANOHTTP XML
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = regresstorCheckExecution
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Class.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Makes a web service call to submit the results of a make */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libcsoap/soap-client.h>
+
+
+const char* Regresstor_URN = "urn:Regresstor";			/* The name of the web service class */
+const char* Regresstor_SubmitCheckMethod = "submitCheck";	/* The name of the web service function */
+
+/* Index Positions to the paramter array */
+#define RunID_Pos		0
+#define UnitName_Pos		1
+#define TestName_Pos		2
+#define Passed_Pos		3
+#define OutputLocation_Pos	4
+#define URL_Pos			5		/* The URL for the submit build function */
+
+/* The number of paramters in the submit build function */
+#define Parameter_Num_Pos	6
+
+/* The parameter names to the submit build function */
+const char* parameterNames[Parameter_Num_Pos] = {
+	"RunID",
+	"UnitName",
+	"TestName",
+	"Passed",
+	"OutputLocation",
+	"URL" };
+
+void printUsage();
+void initParametersArray( char** parameters );
+void fetchParametersFromArgv( char** parameters, int argc, char** argv );
+int checkParameters( char** parameters );
+char* getFileContents( char* filename );
+int interpretResponse( SoapCtx* response, xmlChar** buildID );
+
+int main( int argc, char** argv ) {
+
+	SoapCtx* request;
+	SoapCtx* response;
+	herror_t error;
+	int ii;
+
+	/* The array of parameter values to be fetched from argv. */
+	char* parameters[Parameter_Num_Pos];
+
+	xmlChar* buildID;
+
+	if ( argc != Parameter_Num_Pos + 1 ) {
+		printf( "Regresstor: Invalid Number of arguments! Num given: %d\n", argc );
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	initParametersArray( parameters );
+	fetchParametersFromArgv( parameters, argc, argv );
+
+	if ( ! checkParameters( parameters ) ) {
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	printf( "Regresstor: calling web service %s(), %s at %s.\n",
+		Regresstor_SubmitCheckMethod,
+		Regresstor_URN,
+		parameters[URL_Pos]);
+
+	/* SOAP CALL */
+	error = soap_client_init_args( argc, argv );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+	
+	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_SubmitCheckMethod, &request );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+
+	/* Add parameters into envelope except for the URL */
+	soap_env_push_item( request->env, NULL, "parameters" );
+
+	for ( ii = 0; ii < URL_Pos; ++ii ) {
+		if ( ii == OutputLocation_Pos ) {
+			/* Attach file */
+			char* contents;
+			char* paramName = NULL;
+			int sendDummyFile = 1;
+
+			paramName = "Output";
+
+			if ( strcmp( parameters[ii], "none" ) != 0 ) {
+				contents = getFileContents( parameters[ii] );
+				if ( contents != NULL ) {
+					soap_env_add_item( request->env, "xsd:string", paramName, contents );
+					free( contents );
+					sendDummyFile = 0;
+				}
+			}
+			if ( sendDummyFile ) {
+				soap_env_add_item( request->env, "xsd:string", paramName, "No output file" );
+			}
+		}
+		else
+		{
+			soap_env_add_item( request->env, "xsd:string", parameterNames[ii], parameters[ii] );
+		}
+	}
+
+	/* Check commandline to see if diff passed. If fail, add a "Diff Failed" sub test */
+	if ( strcmp( parameters[Passed_Pos], "0" ) == 0 ) {
+		/* Add the sub test */
+		soap_env_add_item( request->env, "xsd:string", "FailedSubTests", "Error failure" );
+	}
+	
+	soap_env_pop_item( request->env );
+	
+	error = soap_client_invoke( request, &response, parameters[URL_Pos], "");
+                                                                                                                                    
+	if ( error != H_OK ) {
+		log_error4( "[%d] %s(): %s ", herror_code(error), herror_func(error), herror_message(error) );
+		herror_release( error );
+		soap_ctx_free( request );
+		return EXIT_FAILURE;
+	}
+
+	interpretResponse( response, &buildID );
+
+	soap_ctx_free( request );
+	soap_ctx_free( response );
+
+	soap_client_destroy();
+
+
+	return EXIT_SUCCESS;
+}
+
+void printUsage() {
+	int ii;
+	
+	printf( "Usage:\n" );
+	printf( "\t./regresstorCheckError (param)=(value)\n" );
+	printf( "All parameters must be given!\n" );
+	printf( "Parameters:\n" );
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		printf( "\t%s\n", parameterNames[ii] );
+	}
+}
+
+/* Initialises all values to NULL */
+void initParametersArray( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		parameters[ii] = NULL;
+	}
+}
+void fetchParametersFromArgv( char** parameters, int argc, char** argv ) {
+	int ii, jj;
+	char* param;
+	char* value;
+	int pos;
+
+	for ( ii = 1; ii < argc; ++ii ) {
+		if ( !strchr( argv[ii], '=' ) ) {
+			printf( "Regresstor: Invalid argument %s. Assign (param)=(value)\n", argv[ii] );
+			return;
+		}
+
+		param = strtok( argv[ii], "=" );
+		value = strtok( NULL, "=" );
+
+		if ( !param ) {
+			printf( "Regresstor: Invalid argument %s.\n", argv[ii] );
+			return;
+		}
+		if ( !value ) {
+			printf( "Regresstor: Parameter %s needs a value.\n", param );
+			return;
+		}
+
+		pos = -1;
+		for ( jj = 0; jj < Parameter_Num_Pos; ++jj ) {
+			if ( strcmp( param, parameterNames[jj] ) == 0 ) {
+				pos = jj;
+				break;
+			}
+		}
+		if ( pos == -1 ) {
+			printf( "Regresstor: Invalid param %s\n", argv[ii] );
+			return;
+		}
+		printf("\t%s=%s\n", parameterNames[pos], value );
+		parameters[pos] = value;
+	}
+}
+int checkParameters( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		if ( parameters[ii] == NULL ) {
+			printf( "Regresstor: Parameter %s was not given.\n", parameterNames[ii] );
+			return 0;
+		}
+	}
+
+	return 1;
+}
+char* getFileContents( char* filename ) {
+	FILE* file;
+	long size;
+	char* contents;
+                                                                                                                                    
+	file = fopen( filename, "r" );
+	if ( !file ) {
+		return NULL;
+	}
+	if( fseek( file, 0L, SEEK_END ) != 0 ) {
+		return NULL;
+	}
+	size = ftell( file ) + 1;
+	if ( size < 1 ) {
+		return NULL;
+	}
+	contents = (char*)malloc( size );
+	if ( contents == NULL ) {
+		return NULL;
+	}
+	rewind( file );
+	fread( contents, 1, size - 1, file );
+	contents[ size - 1 ] = '\0';
+
+	fclose( file );
+
+	return contents;
+}
+int interpretResponse( SoapCtx* response, xmlChar** buildID ) {
+	xmlNodePtr method;
+	xmlNodePtr node;
+	xmlChar* value;
+                                                                                                                                    
+	method = soap_env_get_method( response->env );
+
+	if ( method ) {
+		if ( strcmp( (char*)method->name, "Fault" ) == 0 ) {
+			printf( "Regresstor: A SOAP error has occured:\n" );
+			node = soap_xml_get_children( method );
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+				printf( "Regresstor: %s=%s\n", node->name, value );
+				node = soap_xml_get_next(node);
+			}
+			return 0;
+		}
+		
+		node = soap_xml_get_children( method );		/* The s-gensym3 struct */
+
+		if ( node->children ) {
+			/* This is where the response values are */
+			node = node->children;
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+
+				if ( strcmp( (char*)node->name, "errorMsg" ) == 0 ) {
+					printf( "Regresstor: Error - %s\n", value );
+					return 0;
+				}
+				
+				node = soap_xml_get_next(node);
+			}
+		}
+	}
+	else {
+		printf( "Regresstor: Non-SOAP response.\n" );
+	}
+	printf( "Regresstor: Successfully submited check.\n" );
+	return 1;
+}

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,23 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+packages = CSOAP NANOHTTP XML
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = regresstorEndRun
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,245 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Class.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Makes a web service call to submit the results of a make */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libcsoap/soap-client.h>
+
+
+const char* Regresstor_URN = "urn:Regresstor";			/* The name of the web service class */
+const char* Regresstor_EndRunMethod = "endRun";
+
+/* Index Positions to the paramter array */
+#define RunID			0
+#define URL_Pos			1		/* The URL for the submit build function */
+
+/* The number of paramters in the submit build function */
+#define Parameter_Num_Pos	2
+
+/* The parameter names to the submit build function */
+const char* parameterNames[Parameter_Num_Pos] = {
+	"RunID",
+	"URL" };
+
+void printUsage();
+void initParametersArray( char** parameters );
+void fetchParametersFromArgv( char** parameters, int argc, char** argv );
+int checkParameters( char** parameters );
+int interpretResponse( SoapCtx* response, xmlChar** buildID );
+
+int main( int argc, char** argv ) {
+
+	SoapCtx* request;
+	SoapCtx* response;
+	herror_t error;
+	int ii;
+
+	/* The array of parameter values to be fetched from argv. */
+	char* parameters[Parameter_Num_Pos];
+
+	if ( argc != Parameter_Num_Pos + 1 ) {
+		printf( "Regresstor: Invalid Number of arguments! Num given: %d\n", argc );
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	initParametersArray( parameters );
+	fetchParametersFromArgv( parameters, argc, argv );
+
+	if ( ! checkParameters( parameters ) ) {
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	printf( "Regresstor: calling web service %s(), %s at %s.\n",
+		Regresstor_EndRunMethod,
+		Regresstor_URN,
+		parameters[URL_Pos]);
+
+	/* SOAP CALL */
+	error = soap_client_init_args( argc, argv );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+	
+	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_EndRunMethod, &request );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+
+	/* Add parameters into envelope except for the URL */
+	soap_env_push_item( request->env, NULL, "parameters" );
+
+	for ( ii = 0; ii < URL_Pos; ++ii ) {
+		soap_env_add_item( request->env, "xsd:string", parameterNames[ii], parameters[ii] );
+	}
+
+	soap_env_pop_item( request->env );
+	
+	error = soap_client_invoke( request, &response, parameters[URL_Pos], "");
+                                                                                                                                    
+	if ( error != H_OK ) {
+		log_error4( "[%d] %s(): %s ", herror_code(error), herror_func(error), herror_message(error) );
+		herror_release( error );
+		soap_ctx_free( request );
+		return EXIT_FAILURE;
+	}
+
+	interpretResponse( response, NULL );
+
+	soap_ctx_free( request );
+	soap_ctx_free( response );
+
+	soap_client_destroy();
+
+
+	return EXIT_SUCCESS;
+}
+
+void printUsage() {
+	int ii;
+	
+	printf( "Usage:\n" );
+	printf( "\t./regresstorEndRun (param)=(value)\n" );
+	printf( "All parameters must be given!\n" );
+	printf( "Parameters:\n" );
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		printf( "\t%s\n", parameterNames[ii] );
+	}
+}
+
+/* Initialises all values to NULL */
+void initParametersArray( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		parameters[ii] = NULL;
+	}
+}
+void fetchParametersFromArgv( char** parameters, int argc, char** argv ) {
+	int ii, jj;
+	char* param;
+	char* value;
+	int pos;
+
+	for ( ii = 1; ii < argc; ++ii ) {
+		if ( !strchr( argv[ii], '=' ) ) {
+			printf( "Regresstor: Invalid argument %s. Assign (param)=(value)\n", argv[ii] );
+			return;
+		}
+
+		param = strtok( argv[ii], "=" );
+		value = strtok( NULL, "=" );
+
+		if ( !param ) {
+			printf( "Regresstor: Invalid argument %s.\n", argv[ii] );
+			return;
+		}
+		if ( !value ) {
+			printf( "Regresstor: Parameter %s needs a value.\n", param );
+			return;
+		}
+
+		pos = -1;
+		for ( jj = 0; jj < Parameter_Num_Pos; ++jj ) {
+			if ( strcmp( param, parameterNames[jj] ) == 0 ) {
+				pos = jj;
+				break;
+			}
+		}
+		if ( pos == -1 ) {
+			printf( "Regresstor: Invalid param %s\n", argv[ii] );
+			return;
+		}
+		printf("\t%s=%s\n", parameterNames[pos], value );
+		parameters[pos] = value;
+	}
+}
+int checkParameters( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		if ( parameters[ii] == NULL ) {
+			printf( "Regresstor: Parameter %s was not given.\n", parameterNames[ii] );
+			return 0;
+		}
+	}
+
+	return 1;
+}
+
+int interpretResponse( SoapCtx* response, xmlChar** runID ) {
+	xmlNodePtr method;
+	xmlNodePtr node;
+	xmlChar* value;
+                                                                                                                                    
+	method = soap_env_get_method( response->env );
+
+	if ( method ) {
+		if ( strcmp( (char*)method->name, "Fault" ) == 0 ) {
+			printf( "Regresstor: A SOAP error has occured:\n" );
+			node = soap_xml_get_children( method );
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+				printf( "Regresstor: %s=%s\n", node->name, value );
+				node = soap_xml_get_next(node);
+			}
+			return 0;
+		}
+		
+		node = soap_xml_get_children( method );		/* The s-gensym3 struct */
+
+		if ( node->children ) {
+			/* This is where the response values are */
+			node = node->children;
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+
+				if ( strcmp( (char*)node->name, "errorMsg" ) == 0 ) {
+					printf( "Regresstor: Error - %s\n", value );
+					return 0;
+				}
+				
+				node = soap_xml_get_next(node);
+			}
+		}
+	}
+	else {
+		printf( "Regresstor: Non-SOAP response.\n" );
+	}
+	printf( "Regresstor: Successfully end run.\n" );
+	return 1;
+}

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,23 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+packages = CSOAP NANOHTTP XML
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.rules 2746 2005-03-06 00:29:00Z 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
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = regresstorStartRun
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,259 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Class.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Makes a web service call to submit the results of a make */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libcsoap/soap-client.h>
+
+
+const char* Regresstor_URN = "urn:Regresstor";			/* The name of the web service class */
+const char* Regresstor_StartRunMethod = "beginRun";
+
+/* Index Positions to the paramter array */
+#define BuildID			0
+#define URL_Pos			1		/* The URL for the submit build function */
+
+/* The number of paramters in the submit build function */
+#define Parameter_Num_Pos	2
+
+/* The parameter names to the submit build function */
+const char* parameterNames[Parameter_Num_Pos] = {
+	"BuildID",
+	"URL" };
+
+void printUsage();
+void initParametersArray( char** parameters );
+void fetchParametersFromArgv( char** parameters, int argc, char** argv );
+int checkParameters( char** parameters );
+int interpretResponse( SoapCtx* response, xmlChar** buildID );
+
+int main( int argc, char** argv ) {
+
+	SoapCtx* request;
+	SoapCtx* response;
+	herror_t error;
+	int ii;
+
+	/* The array of parameter values to be fetched from argv. */
+	char* parameters[Parameter_Num_Pos];
+
+	xmlChar* runID;
+
+	if ( argc != Parameter_Num_Pos + 1 ) {
+		printf( "Regresstor: Invalid Number of arguments! Num given: %d\n", argc );
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	initParametersArray( parameters );
+	fetchParametersFromArgv( parameters, argc, argv );
+
+	if ( ! checkParameters( parameters ) ) {
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	printf( "Regresstor: calling web service %s(), %s at %s.\n",
+		Regresstor_StartRunMethod,
+		Regresstor_URN,
+		parameters[URL_Pos]);
+
+	/* SOAP CALL */
+	error = soap_client_init_args( argc, argv );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+	
+	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_StartRunMethod, &request );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+
+	/* Add parameters into envelope except for the URL */
+	soap_env_push_item( request->env, NULL, "parameters" );
+
+	for ( ii = 0; ii < URL_Pos; ++ii ) {
+		soap_env_add_item( request->env, "xsd:string", parameterNames[ii], parameters[ii] );
+	}
+
+	soap_env_pop_item( request->env );
+	
+	error = soap_client_invoke( request, &response, parameters[URL_Pos], "");
+                                                                                                                                    
+	if ( error != H_OK ) {
+		log_error4( "[%d] %s(): %s ", herror_code(error), herror_func(error), herror_message(error) );
+		herror_release( error );
+		soap_ctx_free( request );
+		return EXIT_FAILURE;
+	}
+
+	if ( interpretResponse( response, &runID ) ) {
+		FILE* runFile;
+		runFile = fopen( "./RUNID", "w" );
+		if ( runFile ) {
+			fprintf( runFile, "%s", runID );
+		}
+		else {
+			printf( "Unable to write to ./RUNID.\n" );
+		}
+	}
+
+	soap_ctx_free( request );
+	soap_ctx_free( response );
+
+	soap_client_destroy();
+
+
+	return EXIT_SUCCESS;
+}
+
+void printUsage() {
+	int ii;
+	
+	printf( "Usage:\n" );
+	printf( "\t./regresstorStartRun (param)=(value)\n" );
+	printf( "All parameters must be given!\n" );
+	printf( "Parameters:\n" );
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		printf( "\t%s\n", parameterNames[ii] );
+	}
+}
+
+/* Initialises all values to NULL */
+void initParametersArray( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		parameters[ii] = NULL;
+	}
+}
+void fetchParametersFromArgv( char** parameters, int argc, char** argv ) {
+	int ii, jj;
+	char* param;
+	char* value;
+	int pos;
+
+	for ( ii = 1; ii < argc; ++ii ) {
+		if ( !strchr( argv[ii], '=' ) ) {
+			printf( "Regresstor: Invalid argument %s. Assign (param)=(value)\n", argv[ii] );
+			return;
+		}
+
+		param = strtok( argv[ii], "=" );
+		value = strtok( NULL, "=" );
+
+		if ( !param ) {
+			printf( "Regresstor: Invalid argument %s.\n", argv[ii] );
+			return;
+		}
+		if ( !value ) {
+			printf( "Regresstor: Parameter %s needs a value.\n", param );
+			return;
+		}
+
+		pos = -1;
+		for ( jj = 0; jj < Parameter_Num_Pos; ++jj ) {
+			if ( strcmp( param, parameterNames[jj] ) == 0 ) {
+				pos = jj;
+				break;
+			}
+		}
+		if ( pos == -1 ) {
+			printf( "Regresstor: Invalid param %s\n", argv[ii] );
+			return;
+		}
+		printf("\t%s=%s\n", parameterNames[pos], value );
+		parameters[pos] = value;
+	}
+}
+int checkParameters( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		if ( parameters[ii] == NULL ) {
+			printf( "Regresstor: Parameter %s was not given.\n", parameterNames[ii] );
+			return 0;
+		}
+	}
+
+	return 1;
+}
+
+int interpretResponse( SoapCtx* response, xmlChar** runID ) {
+	xmlNodePtr method;
+	xmlNodePtr node;
+	xmlChar* value;
+                                                                                                                                    
+	method = soap_env_get_method( response->env );
+
+	if ( method ) {
+		if ( strcmp( (char*)method->name, "Fault" ) == 0 ) {
+			printf( "Regresstor: A SOAP error has occured:\n" );
+			node = soap_xml_get_children( method );
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+				printf( "Regresstor: %s=%s\n", node->name, value );
+				node = soap_xml_get_next(node);
+			}
+			return 0;
+		}
+		
+		node = soap_xml_get_children( method );		/* The s-gensym3 struct */
+
+		if ( node->children ) {
+			/* This is where the response values are */
+			node = node->children;
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+
+				if ( strcmp( (char*)node->name, "errorMsg" ) == 0 ) {
+					printf( "Regresstor: Error - %s\n", value );
+					return 0;
+				}
+				else if ( strcmp( (char*)node->name, "runID" ) == 0 ) {
+					*runID = value;
+				}
+				
+				node = soap_xml_get_next(node);
+			}
+		}
+	}
+	else {
+		printf( "Regresstor: Non-SOAP response.\n" );
+	}
+	printf( "Regresstor: Successfully begin run.\n" );
+	return 1;
+}

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,23 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+packages = CSOAP NANOHTTP XML
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,16 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = regresstorSubmitBuild
+
+def_srcs = \
+	main.c
+
+def_hdrs = 
+	

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,341 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: Class.c 2933 2005-05-12 06:13:10Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Makes a web service call to submit the results of a make */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libcsoap/soap-client.h>
+
+
+const char* Regresstor_URN = "urn:Regresstor";			/* The name of the web service class */
+const char* Regresstor_SubmitBuildMethod = "submitBuild";	/* The name of the web service function */
+
+/* Index Positions to the paramter array */
+#define Project_Pos		0
+#define BuildOptions_Pos	1
+#define CC_Pos			2
+#define Revision_Pos		3
+#define MachineName_Pos		4
+#define Hardware_Pos		5
+#define OS_Pos			6
+#define Kernel_Pos		7
+#define Who_Pos			8
+#define LocalModification_Pos	9
+#define Compiled_Pos		10
+#define MakefileLocation_Pos	11		/* Full path to Makefile.system */
+#define LogLocation_Pos		12		/* Full path to make log */
+#define URL_Pos			13		/* The URL for the submit build function */
+
+/* The number of parameters in the submit build function */
+#define Parameter_Num_Pos	14
+
+/* The parameter names to the submit build function */
+const char* parameterNames[Parameter_Num_Pos] = {
+	"Project",
+	"BuildOptions",
+	"CC",
+	"Revision",
+	"MachineName",
+	"Hardware",
+	"OS",
+	"Kernel",
+	"Who",
+	"LocalModification",
+	"Compiled",
+	"MakefileLocation",
+	"LogLocation",
+	"URL" };
+
+void printUsage();
+void initParametersArray( char** parameters );
+void fetchParametersFromArgv( char** parameters, int argc, char** argv );
+int checkParameters( char** parameters );
+char* getFileContents( char* filename );
+int interpretResponse( SoapCtx* response, xmlChar** buildID );
+
+int main( int argc, char** argv ) {
+
+	SoapCtx* request;
+	SoapCtx* response;
+	herror_t error;
+	int ii;
+
+	/* The array of parameter values to be fetched from argv. */
+	char* parameters[Parameter_Num_Pos];
+
+	xmlChar* buildID;
+
+	if ( argc != Parameter_Num_Pos + 1 ) {
+		printf( "Regresstor: Invalid Number of arguments! Num given: %d\n", argc );
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	initParametersArray( parameters );
+	fetchParametersFromArgv( parameters, argc, argv );
+
+	if ( ! checkParameters( parameters ) ) {
+		printUsage();
+		return EXIT_FAILURE;
+	}
+
+	printf( "Regresstor: calling web service %s(), %s at %s.\n",
+		Regresstor_SubmitBuildMethod,
+		Regresstor_URN,
+		parameters[URL_Pos]);
+
+	/* SOAP CALL */
+	error = soap_client_init_args( argc, argv );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+	
+	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_SubmitBuildMethod, &request );
+	if ( error != H_OK ) {
+		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
+		herror_release(error);
+		return EXIT_FAILURE;
+	}
+
+	soap_env_push_item( request->env, NULL, "parameters" );
+
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		if ( ii == MakefileLocation_Pos || ii == LogLocation_Pos ) {
+			/* Make file attachements */
+			char* contents;
+			char* paramName = NULL;
+			switch ( ii ) {
+				case MakefileLocation_Pos:
+					paramName = "Makefile";
+					break;
+				case LogLocation_Pos:
+					paramName = "Log";
+					break;
+			}
+			contents = getFileContents( parameters[ii] );
+			if ( contents == NULL ) {
+				soap_env_add_item( request->env, "xsd:string", paramName, "No attachment" );
+			}
+			else {
+				soap_env_add_item( request->env, "xsd:string", paramName, contents );
+				free( contents );
+			}
+		}
+		else if ( ii != URL_Pos ) {
+			/* Add parameters into envelope except for the URL */
+			soap_env_add_item( request->env, "xsd:string", parameterNames[ii], parameters[ii] );
+		}
+	}
+	soap_env_pop_item( request->env );
+	
+	error = soap_client_invoke( request, &response, parameters[URL_Pos], "");
+                                                                                                                                    
+	if ( error != H_OK ) {
+		log_error4( "[%d] %s(): %s ", herror_code(error), herror_func(error), herror_message(error) );
+		herror_release( error );
+		soap_ctx_free( request );
+		return EXIT_FAILURE;
+	}
+
+	if ( interpretResponse( response, &buildID ) ) {
+		FILE* buildFile;
+		buildFile = fopen( "./BUILDID", "w" );
+		if ( buildFile ) {
+			fprintf( buildFile, "%s", buildID );
+		}
+		else {
+			printf( "Unable to write to ./BUILDID.\n" );
+		}
+	}
+
+	soap_ctx_free( request );
+	soap_ctx_free( response );
+
+	soap_client_destroy();
+
+
+	return EXIT_SUCCESS;
+}
+
+void printUsage() {
+	int ii;
+	
+	printf( "Usage:\n" );
+	printf( "\t./regresstorSubmitBuild (param)=(value)\n" );
+	printf( "All parameters must be given!\n" );
+	printf( "Parameters:\n" );
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		printf( "\t%s\n", parameterNames[ii] );
+	}
+}
+
+/* Initialises all values to NULL */
+void initParametersArray( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		parameters[ii] = NULL;
+	}
+}
+void fetchParametersFromArgv( char** parameters, int argc, char** argv ) {
+	int ii, jj;
+	char* param;
+	char* value;
+	int pos;
+
+	for ( ii = 1; ii < argc; ++ii ) {
+		if ( !strchr( argv[ii], '=' ) ) {
+			printf( "Regresstor: Invalid argument %s. Assign (param)=(value)\n", argv[ii] );
+			return;
+		}
+
+		param = strtok( argv[ii], "=" );
+		value = strtok( NULL, "=" );
+
+		if ( !param ) {
+			printf( "Regresstor: Invalid argument %s.\n", argv[ii] );
+			return;
+		}
+		if ( !value ) {
+			/* Special case for BuildOptions which can be none */
+			if ( strcmp( param, parameterNames[BuildOptions_Pos] ) == 0 ) {
+				value = "none";
+			}
+			else {
+				printf( "Regresstor: Parameter %s needs a value.\n", param );
+				return;
+			}
+		}
+
+		pos = -1;
+		for ( jj = 0; jj < Parameter_Num_Pos; ++jj ) {
+			if ( strcmp( param, parameterNames[jj] ) == 0 ) {
+				pos = jj;
+				break;
+			}
+		}
+		if ( pos == -1 ) {
+			printf( "Regresstor: Invalid param %s\n", argv[ii] );
+			return;
+		}
+		printf("\t%s=%s\n", parameterNames[pos], value );
+		parameters[pos] = value;
+	}
+}
+int checkParameters( char** parameters ) {
+	int ii;
+	for ( ii = 0; ii < Parameter_Num_Pos; ++ii ) {
+		if ( parameters[ii] == NULL ) {
+			printf( "Regresstor: Parameter %s was not given.\n", parameterNames[ii] );
+			return 0;
+		}
+	}
+
+	return 1;
+}
+
+char* getFileContents( char* filename ) {
+	FILE* file;
+	long size;
+	char* contents;
+
+	file = fopen( filename, "r" );
+	if ( !file ) {
+		return NULL;
+	}
+	if( fseek( file, 0L, SEEK_END ) != 0 ) {
+		return NULL;
+	}
+	size = ftell( file ) + 1;
+	if ( size < 1 ) {
+		return NULL;
+	}
+	contents = (char*)malloc( size );
+	if ( contents == NULL ) {
+		return NULL;
+	}
+	rewind( file );
+	fread( contents, 1, size - 1, file );
+	contents[ size - 1 ] = '\0';
+
+	fclose( file );
+	
+	return contents;
+}
+
+int interpretResponse( SoapCtx* response, xmlChar** buildID ) {
+	xmlNodePtr method;
+	xmlNodePtr node;
+	xmlChar* value;
+                                                                                                                                    
+	method = soap_env_get_method( response->env );
+
+	if ( method ) {
+		if ( strcmp( (char*)method->name, "Fault" ) == 0 ) {
+			printf( "Regresstor: A SOAP error has occured:\n" );
+			node = soap_xml_get_children( method );
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+				printf( "Regresstor: %s=%s\n", node->name, value );
+				node = soap_xml_get_next(node);
+			}
+			return 0;
+		}
+		
+		node = soap_xml_get_children( method );		/* The s-gensym3 struct */
+
+		if ( node->children ) {
+			/* This is where the response values are */
+			node = node->children;
+			while ( node ) {
+				value = xmlNodeListGetString( node->doc, node->xmlChildrenNode, 1 );
+
+				if ( strcmp( (char*)node->name, "errorMsg" ) == 0 ) {
+					printf( "Regresstor: Error - %s\n", value );
+					return 0;
+				}
+				else if ( strcmp( (char*)node->name, "buildID" ) == 0 ) {
+					*buildID = value;
+				}
+				
+				node = soap_xml_get_next(node);
+			}
+		}
+	}
+	else {
+		printf( "Regresstor: Non-SOAP response.\n" );
+	}
+	printf( "Regresstor: Successfully submited build.\n" );
+	return 1;
+}

Added: long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,23 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+packages = CSOAP NANOHTTP XML
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,36 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = libRegresstor
+
+ifdef HAVE_SOAP
+	def_sub += ClientPrograms
+endif
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorEmail.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorEmail.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorEmail.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,85 @@
+
+package RegresstorEmail;
+use strict;
+
+use Net::SMTP;
+
+sub new() {
+	my $type = shift;
+	my $self = {};
+
+	$self->{PROJECT};
+	$self->{DATE};
+
+	$self->{MAILTO};
+	$self->{MAILFROM};
+	$self->{SUBJECT};
+	$self->{CONTENTS};
+	bless( $self );
+
+	return $self;
+}
+
+sub project {
+	my $self = shift;
+	if (@_) { $self->{PROJECT} = shift; }
+	return $self->{PROJECT};
+}
+
+sub date {
+	my $self = shift;
+	if (@_) { $self->{DATE} = shift; }
+	return $self->{DATE};
+}
+
+sub mailto {
+	my $self = shift;
+	if (@_) { $self->{MAILTO} = shift; }
+	return $self->{MAILTO};
+}
+
+sub mailfrom {
+	my $self = shift;
+	if (@_) { $self->{MAILFROM} = shift; }
+	return $self->{MAILFROM};
+}
+
+sub subject {
+	my $self = shift;
+	if (@_) { $self->{SUBJECT} = shift; }
+	return $self->{SUBJECT};
+}
+
+sub contents {
+	my $self = shift;
+	if (@_) { $self->{CONTENTS} = shift; }
+	return $self->{CONTENTS};
+}
+
+sub sendmail {
+	my $self = shift;
+
+	unless ( @_ ) {
+		print "You must provide an smtp server to send with!\n";
+		die;
+	}
+	my $smtp = shift;
+
+	my $mail = Net::SMTP->new( $smtp ) or die "Failed to create email.\n";
+
+	$mail->mail( $self->{MAILFROM} );
+	$mail->to( $self->{MAILTO} );
+
+	$mail->data();
+	$mail->datasend( "To: $self->{MAILTO}\n" );
+	$mail->datasend( "Subject: $self->{SUBJECT}\n" );
+	$mail->datasend( "Content-type: text/plain\n\n" );
+	$mail->datasend( "$self->{CONTENTS}\n" );
+	$mail->dataend();
+
+	$mail->quit(); # Send email 
+}
+
+1;
+__END__
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorMailConfig.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorMailConfig.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorMailConfig.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,89 @@
+
+package RegresstorMailConfig;
+use strict;
+
+use XML::Simple;
+
+my $defaultConfigFilename = "RegresstorMailConfig.xml";
+
+sub new {
+	my $type = shift;
+	my $self = {};
+	$self->{DATABASE} = undef;
+	$self->{HOST} = undef;
+	$self->{USER} = undef;
+	$self->{PASSWORD} = undef;
+	$self->{SMTPSERVER} = undef;
+	$self->{REGRESSTORSERVER} = undef;
+	bless( $self );
+
+	if ( @_ ) {
+		$self->readConfigFile( @_ );
+	}
+	else {
+		$self->readConfigFile( $defaultConfigFilename );
+	}
+	
+	return $self;
+}
+sub readConfigFile() {
+	my $self = shift;
+	my $argLength = @_;
+	unless ( $argLength == 1 ) {
+		warn "Usage readConfigFile( FILENAME )\n";
+		return;
+	}
+	my $xml = XML::Simple->new();
+	my @data = $xml->XMLin( $_[0] );
+	
+	$self->database( $data[0]->{database} );
+	$self->host( $data[0]->{host} );
+	$self->user( $data[0]->{user} );
+	$self->password( $data[0]->{password} );
+	$self->smtpserver( $data[0]->{smtpserver} );
+	$self->regresstorserver( $data[0]->{regresstorserver} );
+}
+
+sub database {
+	my $self = shift;
+	if (@_) { $self->{DATABASE} = shift; }
+	return $self->{DATABASE};
+}
+
+sub host {
+	my $self = shift;
+	if (@_) { $self->{HOST} = shift; }
+	return $self->{HOST};
+}
+
+sub user {
+	my $self = shift;
+	if (@_) { $self->{USER} = shift; }
+	return $self->{USER};
+}
+
+sub password {
+	my $self = shift;
+	if (@_) { $self->{PASSWORD} = shift; }
+	return $self->{PASSWORD};
+}
+
+sub smtpserver {
+	my $self = shift;
+	if (@_) { $self->{SMTPSERVER} = shift; }
+	return $self->{SMTPSERVER};
+}
+
+sub regresstorserver {
+	my $self = shift;
+	if (@_) { $self->{REGRESSTORSERVER} = shift; }
+	return $self->{REGRESSTORSERVER};
+}
+
+sub getConnectionString {
+	my $self = shift;
+	return "DBI:mysql:" . $self->database . ":" . $self->host;
+}
+
+1;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/regresstorCheckAndSend.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/regresstorCheckAndSend.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/regresstorCheckAndSend.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,250 @@
+#!/usr/bin/perl
+
+use DBI;
+                                                                                                                                    
+use lib '.';
+use RegresstorMailConfig;
+use RegresstorEmail;
+
+my $error;
+
+my $config = RegresstorMailConfig->new();
+                                                                                                                                    
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+                or $error = "Unable to connect with database\n";
+
+if ( $error ) {
+	print $error;
+	die;
+}
+
+my @emails = ();
+
+my $emailQuery = $dbh->prepare(
+	qq{
+		SELECT ProjectID, EndDate
+		FROM Build, Run
+		WHERE Build.ID = Run.BuildID
+		AND   NotificationSent = 0
+		AND   EndDate <> '0000-00-00'
+		AND   EndTime <> '00:00:00'
+		GROUP BY ProjectID, EndDate 
+	});
+$emailQuery ->execute();
+
+my @emailQuery = ();
+while ( my @row = $emailQuery->fetchrow_array() ) {
+	my $newEmail = RegresstorEmail::new();
+	$newEmail->project( $row[0] );
+	$newEmail->date( $row[1] );
+	push( @emails, $newEmail );
+}
+$emailQuery->finish();
+
+foreach my $counter ( 0 .. @emails - 1 ) {
+	my $subjectCompilesQuery = $dbh->prepare(
+		qq{
+			SELECT Sum( Compiled ), Count( Compiled )
+			FROM Build, Run
+			WHERE Build.ID = Run.BuildID
+			AND   NotificationSent = 0
+			AND   EndDate <> '0000-00-00'
+			AND   EndTime <> '00:00:00'
+			AND   ProjectID = ?
+			AND   EndDate = ?
+		});
+	$subjectCompilesQuery->execute( RegresstorEmail::project( $emails[$counter] ), RegresstorEmail::date( $emails[$counter] ) );
+	my @compilesResult = $subjectCompilesQuery->fetchrow_array();
+	$subjectCompilesQuery->finish();
+
+	my $subjectTestsQuery = $dbh->prepare(
+		qq{
+			SELECT Sum( Passed ), Count( Passed )
+			FROM Build, Run, UnitTestCheck
+			WHERE Build.ID = Run.BuildID
+			AND   Run.ID = UnitTestCheck.RunID
+			AND   NotificationSent = 0
+			AND   EndDate <> '0000-00-00'
+			AND   EndTime <> '00:00:00'
+			AND   ProjectID = ?
+			AND   EndDate = ?
+		});
+	$subjectTestsQuery->execute( RegresstorEmail::project( $emails[$counter] ), RegresstorEmail::date( $emails[$counter] ) );
+	my @testsResult= $subjectTestsQuery->fetchrow_array();
+	$subjectTestsQuery->finish();
+
+	my $projectNameQuery = $dbh->prepare(
+		qq{
+			Select Name
+			From Project
+			WHERE ID = ?
+		} );
+	$projectNameQuery->execute( RegresstorEmail::project( $emails[$counter] ) );
+	my @projectNameResult = $projectNameQuery->fetchrow_array();
+	$projectNameQuery->finish();
+	my $projectName = $projectNameResult[0];
+
+	my $subject = "Regression Test: " . $projectName . ". " .
+					"$compilesResult[0] / $compilesResult[1] Compiles, " .
+					"$testsResult[0] / $testsResult[1] Passes.";
+	
+	RegresstorEmail::subject( $emails[$counter], $subject );
+
+	my $contentsQuery = $dbh->prepare(
+		qq{
+			SELECT EndDate, EndTime, Revision, Machine.Name, Hardware, OS, Compiled, 
+				Sum( Passed ), Count( Passed ) - Sum( Passed )
+			FROM Build, Machine, Run, UnitTestCheck
+			WHERE Machine.ID = Build.MachineID
+			AND   Build.ID = Run.BuildID
+			AND   Run.ID = UnitTestCheck.RunID
+			AND   NotificationSent = 0
+			AND   EndDate <> '0000-00-00'
+			AND   EndTime <> '00:00:00'
+			AND   ProjectID = ?
+			AND   EndDate = ?
+			GROUP BY Run.ID
+			UNION
+			SELECT EndDate, EndTime, Revision, Machine.Name, Hardware, OS, Compiled, 0, 0
+			FROM Build, Machine, Run
+			LEFT JOIN UnitTestCheck ON Run.ID = UnitTestCheck.RunID
+			WHERE Machine.ID = Build.MachineID
+			AND   Build.ID = Run.BuildID
+			AND   NotificationSent = 0
+			AND   EndDate <> '0000-00-00'
+			AND   EndTime <> '00:00:00'
+			AND   ProjectID = ?
+			AND   EndDate = ?
+			AND   UnitTestCheck.RunID IS NULL       # LEFT JOIN and this is equiv of NOT IN
+			GROUP BY Run.ID
+		});
+	$contentsQuery->execute( $emails[$counter]->{PROJECT}, $emails[$counter]->{DATE}, 
+		$emails[$counter]->{PROJECT}, $emails[$counter]->{DATE} );
+
+	my @contentsData = ();
+	my @colWidths;
+
+	while ( my @tuple = $contentsQuery->fetchrow_array() ) {
+		foreach my $ii ( 0 .. @tuple - 1 ) {
+			# Hardcode Compiled index
+			if ( $ii == 6 ) {
+				if ( $tuple[$ii] eq "1" ) {
+					$tuple[$ii] = "yes";
+				}
+				else {
+					$tuple[$ii] = "no";
+				}
+			}
+
+			if ( $ii == 0 ) {
+				@colWidths[$ii] = 0;
+			}
+			my $colLength = length $tuple[$ii];
+			if ( $colLength > @colWidths[$ii] ) {
+				@colWidths[$ii] = $colLength;
+			}
+		}
+		push( @contentsData, \@tuple );
+	}
+	$contentsQuery->finish();
+
+	my @headings = ( 
+		"*Date*", 
+		"*Time*", 
+		"*Revision*", 
+		"*Machine*", 
+		"*Hardware*", 
+		"*OS*", 
+		"*Compiled*",
+		"*Passes*",
+		"*Fails" );
+	for my $heading_I ( 0 .. @headings - 1 ) {
+		my $headingLength = length $headings[$heading_I];
+		if ( $headingLength > @colWidths[$heading_I] ) {
+			@colWidths[$heading_I] = $headingLength;
+		}
+	}
+
+	my $printString = "| ";
+
+	foreach my $len_I ( 0 .. @colWidths - 1) {
+		$printString = $printString . sprintf( "%%%ds | ", @colWidths[$len_I] );
+	}
+	$printString = $printString . "\n";
+
+	my $contents = sprintf( 
+		$printString, 
+		$headings[0],
+		$headings[1],
+		$headings[2],
+		$headings[3],
+		$headings[4],
+		$headings[5],
+		$headings[6],
+		$headings[7],
+		$headings[8] );
+
+	foreach my $tuple_I ( 0 .. @contentsData - 1 ) {
+		my @tupleData = @{ @contentsData[$tuple_I] };
+		$contents = $contents . sprintf(
+			$printString,
+			$tupleData[0],
+			$tupleData[1],
+			$tupleData[2],
+			$tupleData[3],
+			$tupleData[4],
+			$tupleData[5],
+			$tupleData[6],
+			$tupleData[7],
+			$tupleData[8] );
+	}
+	
+	$contents = $contents . "\n";
+	$contents = $contents . "Goto " . $config->regresstorserver . "/Summary.cgi for more information\n\n";
+
+	RegresstorEmail::contents( $emails[$counter], $contents );
+
+	my $mailQuery = $dbh->prepare(
+		qq{
+			SELECT MailTo, MailFrom
+			FROM Project
+			WHERE ID = ?
+		});
+	$mailQuery->execute( $emails[$counter]->{PROJECT} );
+	my @mailResults = $mailQuery->fetchrow_array();
+	$mailQuery->finish();
+
+	if ( @mailResults ) {
+		$emails[$counter]->{MAILTO} = $mailResults[0];
+		$emails[$counter]->{MAILFROM} = $mailResults[1];
+
+		my @mailtoarray = split( /@/, $mailResults[0] );
+		$emails[$counter]->{SUBJECT} = "\[$mailtoarray[0]\] " .$emails[$counter]->{SUBJECT};
+		
+		
+		RegresstorEmail::sendmail( $emails[$counter], $config->smtpserver );
+		print "Email sent: $emails[$counter]->{SUBJECT}\n";
+
+		my $updateCommand= $dbh->prepare(
+			qq{
+				UPDATE Run, Build
+				SET NotificationSent='1'
+				WHERE Run.BuildID = Build.ID
+				AND   NotificationSent = 0
+				AND   EndDate <> '0000-00-00'
+				AND   EndTime <> '00:00:00'
+				AND   ProjectID = ?
+				AND   EndDate = ?
+			});
+		$updateCommand->execute( $emails[$counter]->{PROJECT}, $emails[$counter]->{DATE} );
+		$updateCommand->finish();
+	}
+	else {
+		print "Failed to send email: $emails[$counter]->{SUBJECT}\n";
+	}
+
+}
+
+$dbh->disconnect();
+
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/regresstorCheckAndSend.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,85 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use CGI;
+use DBI;
+use HTML::Template;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+
+if ( $error ) {
+	&RegresstorCommon::displayError( 'Build', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $queryString = 
+		qq{
+			SELECT Build.ID, Project.Name AS Project, BuildOptions, CC, Revision,
+				MachineID, Machine.Name AS MachineName, Who, LocalModification,
+				Date, Time, Compiled
+			FROM Build, Project, Machine
+			WHERE Build.ProjectID = Project.ID
+			AND   Build.MachineID = Machine.ID
+		};
+
+	my $cgi = new CGI;
+	my @params= $cgi->param();
+	if ( @params ) {
+		my $numparams = @params;
+		for ( my $ii = 0; $ii < $numparams; $ii++ ) {
+			if ( ! $cgi->param( $params[$ii] ) eq undef || $cgi->param( $params[$ii] ) eq '0' ) {
+				$queryString = $queryString . " AND " . $params[$ii] . "= '" . $cgi->param( $params[$ii] ) . "'";
+			}
+		}
+	}
+
+	my $queryString = $queryString . " ORDER BY Date DESC, Time DESC";
+
+	my $query = $dbh->prepare( $queryString );
+
+	# Fire up the SQL command
+	$query->execute();
+
+	# Translate results into perl data structure
+	my $result = RegresstorTable->new( 
+		'ID',
+		'Project',
+		'BuildOptions', 
+		'CC',
+		'Revision', 
+		'MachineID', 
+		'MachineName',
+		'Who', 
+		'LocalModification', 
+		'Date', 
+		'Time', 
+		'Compiled' );
+	$result->fillData( $query );
+
+	# Clean up DBI 
+	$query->finish();
+	$dbh->disconnect();
+
+	# open the html template
+	my $template = HTML::Template->new( filename => 'Build.tmpl');
+
+	# fill in some parameters
+	$template->param( data => $result->table );
+
+	# send the obligatory Content-Type and print the template output
+	print "Content-Type: text/html\n\n", $template->output;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,84 @@
+<html>
+	<head><title>Build Table</title></head>
+	<body>
+		<h1>Build Table</h1>
+		<p>
+		Links: <a href=Summary.cgi>Summary</a> | <a href=Machine.cgi>Machine</a> | <a href=Build.cgi>Build</a> | <a href=Run.cgi>Run</a> | <a href=UnitTestCheck.cgi>UnitTestCheck</a> | <a href=FailedUnitSubTest.cgi>FailedUnitSubTest</a>
+		</p>
+		<form action="Build.cgi" method="get">
+		<table>
+		<tr>
+		<td>Project Name:</td><td><input type="text" name="Project.Name" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>BuildOptions:</td><td><input type="text" name="BuildOptions" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Compiler:</td><td><input type="text" name="CC" value="" size=10 /></td>
+		</tr>
+		<tr>
+		<td>Revision:</td><td><input type="text" name="Revision" value="" size=10 /></td>
+		</tr>
+		<tr>
+		<td>Machine Name:</td><td><input type="text" name="Machine.Name" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Who:</td><td><input type="text" name="Who" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>LocalModification:</td><td><input type="text" name="LocalModification" value="" size=1 /></td>
+		</tr>
+		<tr>
+		<td>Compiled:</td><td><input type="text" name="Compiled" value="" size=1 /></td>
+		</tr> 
+		<tr>
+		<td>Date &gt;=</td><td><input type="text" name="Date>" value="" size=10 /></td>
+		<td>Date &lt;=</td><td><input type="text" name="Date<" value="" size=10 /></td>
+		</tr>
+		<tr>
+		<td>Time &gt;=</td><td><input type="text" name="Time>" value="" size=10 /></td>
+		<td>Time &lt;=</td><td><input type="text" name="Time<" value="" size=10 /></td>
+		</tr>
+		</table>
+		<input type="submit" value="Filter" /> <input type="reset" value="Clear">
+		</form>
+		<p>
+		<TMPL_VAR NAME=queryString>
+		</p>
+		<table border=1>
+		<tr>
+			<td><b>ID</b></td>
+			<td><b>Project</b></td>
+			<td><b>BuildOptions</b></td>
+			<td><b>Compiler (CC)</b></td>
+			<td><b>Revision</b></td>
+			<td><b>Machine</b></td>
+			<td><b>Who</b></td>
+			<td><b>LocalModification</b></td>
+			<td><b>Date</b></td>
+			<td><b>Time</b></td>
+			<td><b>Compiled</b></td>
+			<td><b>Makefile</b></td>
+			<td><b>Log</b></td>
+		</tr>
+		<TMPL_LOOP NAME=data>
+		<tr>
+			
+			<td><a name=<TMPL_VAR NAME=ID>><TMPL_VAR NAME=ID></a></td>
+			<td><TMPL_VAR NAME=Project></td>
+			<td><TMPL_VAR NAME=BuildOptions></td>
+			<td><TMPL_VAR NAME=CC></td>
+			<td><TMPL_VAR NAME=Revision></td>
+			<td><a href=Machine.cgi#<TMPL_VAR NAME=MachineID>><TMPL_VAR NAME=MachineName></a></td>
+			<td><TMPL_VAR NAME=Who></td>
+			<td><TMPL_VAR NAME=LocalModification></td>
+			<td><TMPL_VAR NAME=Date></td>
+			<td><TMPL_VAR NAME=Time></td>
+			<td><TMPL_VAR NAME=Compiled></td>
+			<td><a href=downloadBuildMakefile.cgi?ID=<TMPL_VAR NAME=ID>>Makefile.system</a></td>
+			<td><a href=downloadBuildLog.cgi?ID=<TMPL_VAR NAME=ID>>Compile Log</a></td>
+		</tr>
+		</TMPL_LOOP>
+		</table>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Error.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Error.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Error.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,12 @@
+<html>
+	<head><title><TMPL_VAR NAME=title></title></head>
+	<body>
+		<h1><TMPL_VAR NAME=title></h1>
+		<p>
+		<b>Error!!!</b><br/>
+		<TMPL_VAR Name=errorMsg><br/>
+		Database: <TMPL_VAR Name=database><br/>
+		Host: <TMPL_VAR Name=host><br/>
+		</p>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,71 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use CGI;
+use DBI;
+use HTML::Template;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+
+if ( $error ) {
+	&RegresstorCommon::displayError( 'FailedUnitSubTest', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $queryString = 
+		qq{
+			SELECT FailedUnitSubTest.ID AS ID, TestName, UnitTestCheckID, SubTest
+			FROM FailedUnitSubTest, UnitTestCheck, Run, Build, Project
+			WHERE FailedUnitSubTest.UnitTestCheckID = UnitTestCheck.ID
+			AND   UnitTestCheck.RunID = Run.ID
+			AND   Run.BuildID = Build.ID
+			AND   Build.ProjectID = Project.ID
+		};
+
+	my $cgi = new CGI;
+	my @params= $cgi->param();
+	if ( @params ) {
+		my $numparams = @params;
+		for ( my $ii = 0; $ii < $numparams; $ii++ ) {
+			if ( ! $cgi->param( $params[$ii] ) eq undef || $cgi->param( $params[$ii] ) eq '0' ) {
+				$queryString = $queryString . " AND " . $params[$ii] . " = '" . $cgi->param( $params[$ii] ) . "'";
+			}
+		}
+	}
+		
+	my $query = $dbh->prepare( $queryString );
+
+	# Fire up the SQL command
+	$query->execute();
+
+	# Translate results into perl data structure
+	my $result = RegresstorTable->new( 'ID', 'TestName', 'UnitTestCheckID', 'SubTest' );
+	$result->fillData( $query );
+
+	# Clean up DBI 
+	$query->finish();
+	$dbh->disconnect();
+
+	# open the html template
+	my $template = HTML::Template->new( filename => 'FailedUnitSubTest.tmpl');
+
+	# fill in some parameters
+	$template->param( data => $result->table );
+
+	# send the obligatory Content-Type and print the template output
+	print "Content-Type: text/html\n\n", $template->output;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,38 @@
+<html>
+	<head><title>FailedUnitSubTest Table</title></head>
+	<body>
+		<h1>FailedUnitSubTest Table</h1>
+		<p>
+		Links: <a href=Summary.cgi>Summary</a> | <a href=Machine.cgi>Machine</a> | <a href=Build.cgi>Build</a> | <a href=Run.cgi>Run</a> | <a href=UnitTestCheck.cgi>UnitTestCheck</a> | <a href=FailedUnitSubTest.cgi>FailedUnitSubTest</a>
+		</p>
+		<form action="FailedUnitSubTest.cgi" method="get">
+		<table>
+		<tr>
+		<td>RunID:</td><td><input type="text" name="UnitTestCheckID" value="" size=5 /></td>
+		</tr>
+		<tr>
+		<td>SubTest:</td><td><input type="text" name="SubTest" value="" size=5 /></td>
+		</tr>
+		</table>
+		<input type="submit" value="Filter" /> <input type="reset" value="Clear">
+		</form>
+		<table border=1>
+		<tr>
+			<td><b>ID</b></td>
+			<td><b>UnitTestCheckID</b></td>
+			<td><b>TestName</b></td>
+			<td><b>SubTest</b></td>
+			<td><b>Output</b></td>
+		</tr>
+		<TMPL_LOOP NAME=data>
+		<tr>
+			<td><TMPL_VAR NAME=ID></td>
+			<td><a href=UnitTestCheck.cgi#<TMPL_VAR NAME=UnitTestCheckID>><TMPL_VAR NAME=UnitTestCheckID></a></td>
+			<td><a href=UnitTestCheck.cgi#<TMPL_VAR NAME=UnitTestCheckID>><TMPL_VAR NAME=TestName></a></td>
+			<td><TMPL_VAR NAME=SubTest></td>
+			<td><a href=downloadFailedUnitSubTestOutput.cgi?ID=<TMPL_VAR NAME=ID>>more info...</a></td>
+		</tr>
+		</TMPL_LOOP>
+		</table>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,67 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use CGI;
+use DBI;
+use HTML::Template;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+
+if ( $error ) {
+	&RegresstorCommon::displayError( 'Machine', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $queryString =
+		qq{
+			SELECT ID, Name, Hardware, OS, Kernel
+			FROM Machine 
+		};
+		
+	my $cgi = new CGI;
+	my @params= $cgi->param();
+	if ( @params ) {
+		my $numparams = @params;
+		for ( my $ii = 0; $ii < $numparams; $ii++ ) {
+			if ( ! $cgi->param( $params[$ii] ) eq undef || $cgi->param( $params[$ii] ) eq '0' ) {
+				$queryString = $queryString . " AND " . $params[$ii] . " = '" . $cgi->param( $params[$ii] ) . "'";
+			}
+		}
+	}
+														
+	my $query = $dbh->prepare( $queryString );
+
+	# Fire up the SQL command
+	$query->execute();
+
+	# Translate results into perl data structure
+	my $result = RegresstorTable->new( 'ID', 'Name', 'Hardware', 'OS', 'Kernel' );
+	$result->fillData( $query );
+
+	# Clean up DBI 
+	$query->finish();
+	$dbh->disconnect();
+
+	# open the html template
+	my $template = HTML::Template->new( filename => 'Machine.tmpl');
+
+	# fill in some parameters
+	$template->param( data => $result->table );
+
+	# send the obligatory Content-Type and print the template output
+	print "Content-Type: text/html\n\n", $template->output;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+<html>
+	<head><title>Machine Table</title></head>
+	<body>
+		<h1>Machine Table</h1>
+		<p>
+		Links: <a href=Summary.cgi>Summary</a> | <a href=Machine.cgi>Machine</a> | <a href=Build.cgi>Build</a> | <a href=Run.cgi>Run</a> | <a href=UnitTestCheck.cgi>UnitTestCheck</a> |
+		<a href=FailedUnitSubTest.cgi>FailedUnitSubTest</a>
+		</p>
+		<table border=1>
+		<tr>
+			<td><b>ID</b></td>
+			<td><b>Name</b></td>
+			<td><b>Hardware</b></td>
+			<td><b>OS</b></td>
+			<td><b>Kernel</b></td>
+		</tr>
+		<TMPL_LOOP NAME=data>
+		<tr>
+			<td><a name=<TMPL_VAR NAME=ID>><TMPL_VAR NAME=ID></a></td>
+			<td><TMPL_VAR NAME=Name></td>
+			<td><TMPL_VAR NAME=Hardware></td>
+			<td><TMPL_VAR NAME=OS></td>
+			<td><TMPL_VAR NAME=Kernel></td>
+		</tr>
+		</TMPL_LOOP>
+		</table>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+#!/usr/bin/perl -w
+
+use SOAP::Transport::HTTP;
+
+SOAP::Transport::HTTP::CGI
+	-> dispatch_to('Regresstor')
+	-> handle;
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,546 @@
+
+package Regresstor;
+
+use DBI;
+use Compress::Zlib;
+
+use lib '.';
+use RegresstorConfig;
+
+sub submitBuild {
+	shift;			# Remove class name
+
+	unless ( @_ == 1 ) { 
+		return { errorMsg => "Invalid number of arguments" };
+	}
+
+	my $arguments = shift;	# A Hash (dictionary) of values
+
+	my $project;
+	my $buildOptions;
+	my $CC;
+	my $revision;
+	my $machineName;
+	my $hardware;
+	my $OS;
+	my $kernel;
+	my $who;
+	my $localModification;
+	my $date;
+	my $time;
+	my $compiled;
+	my $makefile;
+	my $makefileCompressed;
+	my $log;
+	my $logCompressed;
+
+	# Gather all the required information as variables
+
+	unless ( exists $arguments->{Project} ) {
+		return { errorMsg => "Argument Project not given" };
+	}
+	$project = $arguments->{Project};
+	unless ( exists $arguments->{BuildOptions} ) {
+		return { errorMsg => "Argument BuildOptions not given" };
+	}
+	$buildOptions= $arguments->{BuildOptions};
+	unless ( exists $arguments->{CC} ) {
+		return { errorMsg => "Argument CC not given" };
+	}
+	$CC = $arguments->{CC};
+	unless ( exists $arguments->{Revision} ) {
+		return { errorMsg => "Argument Revision not given" };
+	}
+	$revision = $arguments->{Revision};
+	unless ( exists $arguments->{MachineName} ) {
+		return { errorMsg => "Argument Machine_Name not given" };
+	}
+	$machineName = $arguments->{MachineName};
+	unless ( exists $arguments->{Hardware} ) {
+		return { errorMsg => "Argument Hardware not given" };
+	}
+	$hardware = $arguments->{Hardware};
+	unless ( exists $arguments->{OS} ) {
+		return { errorMsg => "Argument OS not given" };
+	}
+	$OS = $arguments->{OS};
+	unless ( exists $arguments->{Kernel} ) {
+		return { errorMsg => "Argument Kernel not given" };
+	}
+	$kernel= $arguments->{Kernel};
+	unless ( exists $arguments->{Who} ) {
+		return { errorMsg => "Argument Who not given" };
+	}
+	$who = $arguments->{Who};
+	unless ( exists $arguments->{LocalModification} ) {
+		return { errorMsg => "Argument LocalModification not given" };
+	}
+	$localModification = $arguments->{LocalModification};		
+	unless ( exists $arguments->{Compiled} ) {
+		return { errorMsg => "Argument Compiled not given" };
+	}
+	$compiled = $arguments->{Compiled};
+	unless ( exists $arguments->{Makefile} ) {
+		return { errorMsg => "Argument Makefile not given" };
+	}
+	$makefile = $arguments->{Makefile};
+	unless ( exists $arguments->{Log} ) {
+		return { errorMsg => "Argument Log not given" };
+	}
+	$log = $arguments->{Log};
+
+	# Record the server's date and time
+	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;
+	$year = 1900 + $year;	# Adjust year
+	$mon = 1 + $mon;	# Adjust month
+
+	$date = "$year-$mon-$mday";
+	$time = "$hour:$min:$sec";
+
+	# Compress attachments
+	$makefileCompressed = compress( $makefile, Z_BEST_COMPRESSION );
+	$logCompressed = compress( $log, Z_BEST_COMPRESSION );
+
+	##### Authentication? If so, put here #####
+	
+
+
+	my $config = RegresstorConfig->new();
+	my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+			or return { errorMsg => "Unable to estiblish connection with database server." };
+
+	# Find the ProjectID value	
+	my $projectID;
+	
+	my $projectIDQueryString = 
+		qq{
+			SELECT ID
+			FROM Project
+			WHERE Name = '$project'
+		};
+	my $projectIDQuery = $dbh->prepare( $projectIDQueryString );
+	$projectIDQuery->execute();
+	my @projectResult = $projectIDQuery->fetchrow_array();
+	$projectIDQuery->finish();
+
+	if ( @projectResult ) {
+		# Project exists and grab the ID value
+		$projectID = $projectResult[0];
+	}
+	else {
+		# Insert Project tuple
+		my $projectCommand = $dbh->prepare(
+			qq{
+				INSERT INTO Project( Name )
+				VALUES ( '$project' )
+			} );
+		$projectCommand->execute();
+		$projectCommand->finish();
+
+		$projectQuery = $dbh->prepare( $projectIDQueryString );
+		$projectQuery->execute();
+		@projectResult = $projectQuery->fetchrow_array();
+		$projectQuery->finish();
+		if ( @projectResult ) {
+			$projectID = $projectResult[0];
+		}
+		else {
+			# Command did not succeed
+			$dbh->disconnect();
+			return { errorMsg => "Unable to create new entry for project." };
+		}
+	}
+
+	# Find the MachineID value	
+	my $machineID;
+	
+	my $machineIDQueryString = 
+		qq{
+			SELECT ID
+			FROM Machine
+			WHERE Name = '$machineName'
+			AND   Hardware = '$hardware'
+			AND   OS = '$OS'
+			AND   Kernel = '$kernel'
+		};
+
+	my $machineIDQuery = $dbh->prepare( $machineIDQueryString );
+	$machineIDQuery->execute();
+	my @machineResult = $machineIDQuery->fetchrow_array();
+	$machineIDQuery->finish();
+
+	if ( @machineResult ) {
+		# Machine exists grab the ID value
+		$machineID = $machineResult[0];
+	}
+	else {
+		# Machine does not exist. Add new tuple and grab the new ID again
+		my $machineCommand= $dbh->prepare(
+			qq{
+				INSERT INTO Machine ( Name, Hardware, OS, Kernel )
+				VALUES ( '$machineName', '$hardware', '$OS', '$kernel' )
+			} );
+	        $machineCommand->execute();
+	        $machineCommand->finish();
+
+		# Search for the new ID
+		$machineIDQuery = $dbh->prepare( $machineIDQueryString );
+		$machineIDQuery->execute();
+	        @machineResult = $machineIDQuery->fetchrow_array();
+	        $machineIDQuery->finish();
+		if ( @machineResult ) {
+			$machineID = $machineResult[0];
+		}
+		else {
+			# Command did not succeed
+			$dbh->disconnect();
+			return { errorMsg => "Unable to create new entry for machine." };
+		}
+	}
+
+	# Now that we have all the information, attempt to insert into database the Build entry
+	my $buildCommand = $dbh->prepare(
+		qq{
+			INSERT INTO Build
+				(
+				ProjectID, 
+				BuildOptions, 
+				CC, 
+				Revision, 
+				MachineID, 
+				Who, 
+				LocalModification, 
+				Date, 
+				Time, 
+				Compiled,
+				Makefile,
+				Log )
+			VALUES	(
+				'$projectID',
+				'$buildOptions',
+				'$CC',
+				'$revision',
+				'$machineID',
+				'$who',
+				'$localModification',
+				'$date',
+				'$time',
+				'$compiled',
+				?, ? )
+		} );
+	$buildCommand->execute( $makefileCompressed, $logCompressed );
+	$buildCommand->finish();
+
+	my $buildIDQuery = $dbh->prepare(
+		qq{
+			SELECT ID
+			FROM Build
+			WHERE ProjectID='$projectID'
+			AND   BuildOptions='$buildOptions'
+			AND   CC='$CC'
+			AND   Revision='$revision'
+			AND   MachineID='$machineID'
+			AND   Who='$who'
+			AND   LocalModification='$localModification'
+			AND   Date='$date'
+			AND   Time='$time'
+		} );
+	$buildIDQuery->execute();
+	my @buildResult = $buildIDQuery->fetchrow_array();	
+	$buildIDQuery->finish();
+
+	$dbh->disconnect();
+	
+	if ( @buildResult ) {
+		my $buildID = $buildResult[0];
+		
+		# Submit is successful and database record inserted.
+		# Return the build ID
+		return { buildID => $buildID };		
+	}
+	else {
+		return { errorMsg => "Unable to insert Build tuple into database." };
+	}
+}
+
+sub submitCheck {
+	shift;			# Remove class name
+
+	unless ( @_ == 1 ) { 
+		return { errorMsg => "Invalid number of arguments" };
+	}
+
+	my $arguments = shift;	# A Hash (dictionary) of values
+
+	my $runID;
+	my $unitName;
+	my $testName;
+	my $passed;
+	my $output;
+	my @failedSubTests;
+
+	# Gather all the required information as variables
+
+	unless ( exists $arguments->{RunID} ) {
+		return { errorMsg => "Argument RunID not given" };
+	}
+	$runID = $arguments->{RunID};
+	unless ( exists $arguments->{UnitName} ) {
+		return { errorMsg => "Argument UnitName not given" };
+	}
+	$unitName = $arguments->{UnitName};
+	unless ( exists $arguments->{TestName} ) {
+		return { errorMsg => "Argument TestName not given" };
+	}
+	$testName = $arguments->{TestName};
+	$testName = substr( $testName, 0, 50 ); # Truncate string to TestName field width
+
+	if ( exists $arguments->{Output} ) {
+		$output = $arguments->{Output};
+	}
+	else {
+		$output = undef;
+	}
+	
+
+	if ( exists $arguments->{FailedSubTests} ) {
+		$passed = 0;
+# Comment out until I work out how to get array passed from csoap to perl soap
+#		@failedSubTests = @{ $arguments->{FailedSubTests} };
+		@failedSubTests = $arguments->{FailedSubTests};
+	}
+	else {
+		$passed = 1;
+		$failedSubTests = undef;
+	}
+
+	##### Authentication? If so, put here #####
+
+	my $outputCompressed = '';
+
+	if ( $output ) {
+		$outputCompressed = compress( $output, Z_BEST_COMPRESSION );
+	}
+
+	# Check to see if entry exists!
+	my $unitTestCheckID;
+
+	my $config = RegresstorConfig->new();
+	my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+			or return { errorMsg => "Unable to estiblish connection with database server." };
+
+	my $unitTestCheckIDQueryString = 
+		qq{
+			SELECT ID, Passed
+			FROM UnitTestCheck
+			WHERE RunID='$runID'
+			AND   testName='$testName'
+		};
+
+	my $unitTestCheckIDQuery= $dbh->prepare( $unitTestCheckIDQueryString );
+	$unitTestCheckIDQuery->execute();
+	my @unitTestCheckResult = $unitTestCheckIDQuery->fetchrow_array();
+	$unitTestCheckIDQuery->finish();
+
+	if ( @unitTestCheckResult ) {
+		# Entry exists, this is probably a checkDiff submit
+		$unitTestCheckID = $unitTestCheckResult[0];
+
+		unless( $passed ) {
+			if ( $unitTestCheckResult[1] == 1 ) {
+				# If this second submit is a fail, change the "Passed" status of this 
+				# test to false if it was originally true.
+				my $updateUnitCheckCommand = $dbh->prepare(
+					qq{
+						UPDATE UnitTestCheck
+						SET Passed='0'
+						WHERE ID='$unitTestCheckID'
+					} );
+				$updateUnitCheckCommand->execute();
+				$updateUnitCheckCommand->finish();
+			}
+		}
+	}
+	else {
+		my $unitTestCheckCommand= $dbh->prepare(
+			qq{
+				INSERT INTO UnitTestCheck ( RunID, UnitName, TestName, Passed )
+				VALUES ( '$runID', '$unitName', '$testName', '$passed' )
+			});
+		$unitTestCheckCommand->execute();
+		$unitTestCheckCommand->finish();
+		
+		# Look for the newly added tuple
+		$unitTestCheckIDQuery= $dbh->prepare( $unitTestCheckIDQueryString );
+		$unitTestCheckIDQuery->execute();
+		@unitTestCheckResult = $unitTestCheckIDQuery->fetchrow_array();
+		$unitTestCheckIDQuery->finish();
+
+		if ( @unitTestCheckResult ) {
+			$unitTestCheckID = $unitTestCheckResult[0];
+		}	
+		else {
+			return { errorMsg => "Unable to add tuple to UnitTestCheck table" };
+		}
+	}
+	
+	unless ( $passed ) {
+		# Add the failed sub test entries too
+		my $failCount = @failedSubTests;
+		for ( my $counter = 0; $counter < $failCount; $counter++ ) {
+			my $failedUnitSubTestCommand = $dbh->prepare(
+				qq{
+					INSERT INTO FailedUnitSubTest ( UnitTestCheckID, SubTest, Output )
+					VALUES ( '$unitTestCheckID', '$failedSubTests[$counter]', ? )
+				} );
+
+	                $failedUnitSubTestCommand->execute( $outputCompressed );
+        	        $failedUnitSubTestCommand->finish();
+		}
+	}	
+
+	$dbh->disconnect();		
+
+	return { unitTestCheckID => $unitTestCheckID };
+
+}
+
+
+sub beginRun {
+	shift;			# Remove class name
+
+	unless ( @_ == 1 ) { 
+		return { errorMsg => "Invalid number of arguments" };
+	}
+
+	my $arguments = shift;	# A Hash (dictionary) of values
+
+	my $buildID;
+
+	# Gather all the required information as variables
+
+	unless ( exists $arguments->{BuildID} ) {
+		return { errorMsg => "Argument BuildID not given" };
+	}
+	$buildID = $arguments->{BuildID};
+
+	##### Authentication? If so, put here #####
+	
+	my $config = RegresstorConfig->new();
+	my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+			or return { errorMsg => "Unable to estiblish connection with database server." };
+
+	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;
+	$year = 1900 + $year;	# Adjust year
+	$mon = 1 + $mon;	# Adjust month
+
+	$date = "$year-$mon-$mday";
+	$time = "$hour:$min:$sec";
+
+	my $insertTupleCommand = $dbh->prepare(
+		qq{
+			INSERT INTO Run ( BuildID, StartDate, StartTime, EndDate, EndTime )
+			VALUES ( '$buildID', '$date', '$time', '0000-00-00', '00:00:00' )
+		} );
+	$insertTupleCommand->execute();
+	$insertTupleCommand->finish();
+	
+	# Read back
+	my $runID;
+	my $runIDQuery = $dbh->prepare(
+		qq{
+			SELECT ID
+			FROM Run
+			WHERE BuildID='$buildID'
+			AND   StartDate='$date'
+			AND   StartTime='$time'
+		} );
+	$runIDQuery->execute();
+	my @runIDQueryResult = $runIDQuery->fetchrow_array();
+	$runIDQuery->finish();
+
+	if ( @runIDQueryResult ) {
+		$runID = $runIDQueryResult[0];
+	}
+	else {
+		$dbh->disconnect();
+		return { errorMsg => "Unable to add Run tuple" };
+	}
+
+
+	$dbh->disconnect();		
+
+	return { runID => $runID };
+
+}
+
+
+sub endRun {
+	shift;			# Remove class name
+
+	unless ( @_ == 1 ) { 
+		return { errorMsg => "Invalid number of arguments" };
+	}
+
+	my $arguments = shift;	# A Hash (dictionary) of values
+
+	my $runID;
+
+	# Gather all the required information as variables
+
+	unless ( exists $arguments->{RunID} ) {
+		return { errorMsg => "Argument RunID not given" };
+	}
+	$runID = $arguments->{RunID};
+	
+	##### Authentication? If so, put here #####
+
+	my $config = RegresstorConfig->new();
+	my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+			or return { errorMsg => "Unable to estiblish connection with database server." };
+
+	
+	my $checkRunExistQuery = $dbh->prepare(
+		qq{
+			SELECT ID
+			FROM Run
+			WHERE ID='$runID'
+		} );
+	$checkRunExistQuery->execute();
+	my @checkRunExistQueryResult = $checkRunExistQuery->fetchrow_array();
+	unless ( @checkRunExistQueryResult ) {
+		$dbh->disconnect();
+		return { errorMsg => "Run does not exist" };
+	}
+
+	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;
+	$year = 1900 + $year;	# Adjest year
+	$mon = 1 + $mon;	# Adjust month
+
+	$date = "$year-$mon-$mday";
+	$time = "$hour:$min:$sec";
+
+	my $updateRunCommand = $dbh->prepare(
+		qq{
+			UPDATE Run
+			SET EndDate='$date', EndTime='$time'
+			WHERE ID='$runID'
+		} );
+	$updateRunCommand->execute();
+	$updateRunCommand->finish();
+	
+	return { runID => runID }; 
+
+}
+
+1;
+__END__
+
+
+
+sub die_with_fault {
+    die SOAP::Fault->faultcode('Server.Custom') # will be qualified
+                   ->faultstring('Died in server method')
+                   ->faultdetail(bless {code => 1} => 'BadError')
+                   ->faultactor('http://www.soaplite.com/custom');
+  }

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorCommon.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorCommon.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorCommon.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+
+package RegresstorCommon;
+use strict;
+
+use HTML::Template;
+
+my $errorTemplate = "Error.tmpl";
+
+sub displayError() {
+	my $argLength = @_;
+
+	unless ( $argLength == 4 ) {
+		warn "Usage: displayError( title, errorMsg, database, host )\n";
+		return;
+	}
+
+	my $template = HTML::Template->new( filename => $errorTemplate );
+	$template->param( title => $_[0] );
+	$template->param( errorMsg => $_[1] );
+	$template->param( database => $_[2] );
+	$template->param( host => $_[3] );
+	print "Content-Type: text/html\n\n", $template->output;
+}
+
+1
+;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorConfig.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorConfig.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorConfig.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,73 @@
+
+package RegresstorConfig;
+use strict;
+
+use XML::Simple;
+
+my $defaultConfigFilename = "RegresstorConfig.xml";
+
+sub new {
+	my $type = shift;
+	my $self = {};
+	$self->{DATABASE} = undef;
+	$self->{HOST} = undef;
+	$self->{USER} = undef;
+	$self->{PASSWORD} = undef;
+	bless( $self );
+
+	if ( @_ ) {
+		$self->readConfigFile( @_ );
+	}
+	else {
+		$self->readConfigFile( $defaultConfigFilename );
+	}
+	
+	return $self;
+}
+sub readConfigFile() {
+	my $self = shift;
+	my $argLength = @_;
+	unless ( $argLength == 1 ) {
+		warn "Usage readConfigFile( FILENAME )\n";
+		return;
+	}
+	my $xml = XML::Simple->new();
+	my @data = $xml->XMLin( $_[0] );
+	
+	$self->database( $data[0]->{database} );
+	$self->host( $data[0]->{host} );
+	$self->user( $data[0]->{user} );
+	$self->password( $data[0]->{password} );
+}
+
+sub database {
+	my $self = shift;
+	if (@_) { $self->{DATABASE} = shift; }
+	return $self->{DATABASE};
+}
+
+sub host {
+	my $self = shift;
+	if (@_) { $self->{HOST} = shift; }
+	return $self->{HOST};
+}
+
+sub user {
+	my $self = shift;
+	if (@_) { $self->{USER} = shift; }
+	return $self->{USER};
+}
+
+sub password {
+	my $self = shift;
+	if (@_) { $self->{PASSWORD} = shift; }
+	return $self->{PASSWORD};
+}
+
+sub getConnectionString {
+	my $self = shift;
+	return "DBI:mysql:" . $self->database . ":" . $self->host;
+}
+
+1;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorTable.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorTable.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorTable.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,61 @@
+
+package RegresstorTable;
+use strict;
+
+sub new {
+	my $type = shift;
+	my $self = {};
+
+	my $argLength = @_;
+
+	if ( $argLength < 1 ) {
+		warn "Usage: RegresstorTable->new( fields, ... )\n";
+	}
+	bless( $self );
+	$self->fields( @_ );
+	$self->table( undef );
+
+	return $self;
+}
+
+sub fields {
+	my $self = shift;
+	if ( @_ ) { @{ $self->{FIELDS} } = @_; }
+	return @{ $self->{FIELDS} };
+}
+
+sub table {
+	my $self = shift;
+	if ( @_ ) { @{ $self->{TABLE} } = @_; }
+	return @{ $self->{TABLE} };
+}
+
+sub fillData {
+	my $self = shift;
+	my $argLength = @_;
+
+	if ( $argLength != 1 ) {
+		warn "Usage: fillData( query )\n";
+		return;
+	}
+	my $query = shift;
+	my @fieldArray = $self->fields;
+	my @result = ();
+
+	while ( my @row = $query->fetchrow_array() ) {
+		my %rowData;
+		my $fieldLength = @fieldArray;
+		for ( my $counter = 0; $counter < $fieldLength; $counter++ ) {
+			$rowData{$fieldArray[$counter]} = $row[$counter];
+		}
+
+		push( @result, \%rowData );
+	}
+	$self->table( \@result );
+}
+
+
+
+1;
+__END__
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,83 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use CGI;
+use DBI;
+use HTML::Template;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+
+if ( $error ) {
+	&RegresstorCommon::displayError( 'Run', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $queryString =
+		qq{
+			SELECT Run.ID, BuildID, Project.Name AS ProjName, Machine.Name As MachineName, MachineID,
+				StartDate, StartTime, EndDate, EndTime, NotificationSent
+			FROM Run, Build, Project, Machine
+			WHERE Run.BuildID = Build.ID
+			AND   Build.ProjectID = Project.ID
+			AND   Build.MachineID = Machine.ID
+		};
+		
+	my $cgi = new CGI;
+	my @params= $cgi->param();
+	if ( @params ) {
+		my $numparams = @params;
+		for ( my $ii = 0; $ii < $numparams; $ii++ ) {
+			if ( ! $cgi->param( $params[$ii] ) eq undef || $cgi->param( $params[$ii] ) eq '0' ) {
+				$queryString = $queryString . " AND " . $params[$ii] . "= '" . $cgi->param( $params[$ii] ) . "'";
+			}
+		}
+	}
+	
+	$queryString = $queryString . " ORDER BY StartDate DESC, StartTime DESC";
+			
+	my $query = $dbh->prepare( $queryString );
+
+	# Fire up the SQL command
+	$query->execute();
+
+	# Translate results into perl data structure
+	my $result = RegresstorTable->new( 
+		'ID',
+		'BuildID',
+		'ProjName',
+		'MachineName',
+		'MachineID',
+		'StartDate',
+		'StartTime',
+		'EndDate',
+		'EndTime',
+		'NotificationSent' );
+	$result->fillData( $query );
+
+	# Clean up DBI 
+	$query->finish();
+	$dbh->disconnect();
+
+	# open the html template
+	my $template = HTML::Template->new( filename => 'Run.tmpl' );
+
+	# fill in some parameters
+	$template->param( data => $result->table );
+
+	# send the obligatory Content-Type and print the template output
+	print "Content-Type: text/html\n\n", $template->output;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,69 @@
+<html>
+	<head><title>Run Table</title></head>
+	<body>
+		<h1>Run Table</h1>
+		<p>
+		Links: <a href=Summary.cgi>Summary</a> | <a href=Machine.cgi>Machine</a> | <a href=Build.cgi>Build</a> | <a href=Run.cgi>Run</a> | <a href=UnitTestCheck.cgi>UnitTestCheck</a> | <a href=FailedUnitSubTest.cgi>FailedUnitSubTest</a>
+		</p>
+		<form action="Run.cgi" method="get">
+		<table>
+		<tr>
+		<td>BuildID:</td><td><input type="text" name="BuildID" value="" size=5 /></td>
+		</tr>
+		<tr>
+		<td>Project Name:</td><td><input type="text" name="Project.Name" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Machine Name:</td><td><input type="text" name="Machine.Name" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Notification Sent:</td><td><input type="text" name="NotificationSent" value="" size=1 /></td>
+		</tr>
+		<tr>
+		<td>StartDate &gt;=</td><td><input type="text" name="StartDate>" value="" size=10 /></td>
+		<td>StartDate &lt;=</td><td><input type="text" name="StartDate<" value="" size=10 /></td>
+		</tr>
+		<tr>
+		<td>StartTime &gt;=</td><td><input type="text" name="StartTime>" value="" size=10 /></td>
+		<td>StartTime &lt;=</td><td><input type="text" name="StartTime<" value="" size=10 /></td>
+		</tr>
+		<tr>
+		<td>EndDate &gt;=</td><td><input type="text" name="EndDate>" value="" size=10 /></td>
+		<td>EndDate &lt;=</td><td><input type="text" name="EndDate<" value="" size=10 /></td>
+		</tr>
+		<tr>
+		<td>EndTime &gt;=</td><td><input type="text" name="EndTime>" value="" size=10 /></td>
+		<td>EndTime &lt;=</td><td><input type="text" name="EndTime<" value="" size=10 /></td>
+		</tr>
+		</table>
+		<input type="submit" value="Filter" /> <input type="reset" value="Clear">
+		</form>
+		<table border=1>
+		<tr>
+			<td><b>ID</b></td>
+			<td><b>BuildID</b></td>
+			<td><b>Project</b></td>
+			<td><b>Machine</b></td>
+			<td><b>StartDate</b></td>
+			<td><b>StartTime</b></td>
+			<td><b>EndDate</b></td>
+			<td><b>EndTime</b></td>
+			<td><b>Notification Sent</b></td>
+		</tr>
+		<TMPL_LOOP NAME=data>
+		<tr>
+			
+			<td><a name=<TMPL_VAR NAME=ID>><TMPL_VAR NAME=ID></a></td>
+			<td><a href=Build.cgi#<TMPL_VAR NAME=BuildID>><TMPL_VAR NAME=BuildID></a></td>
+			<td><a href=Build.cgi#<TMPL_VAR NAME=BuildID>><TMPL_VAR NAME=ProjName></a></td>
+			<td><a href=Machine.cgi#<TMPL_VAR NAME=MachineID>><TMPL_VAR NAME=MachineName></a></td>
+			<td><TMPL_VAR NAME=StartDate></td>
+			<td><TMPL_VAR NAME=StartTime></td>
+			<td><TMPL_VAR NAME=EndDate></td>
+			<td><TMPL_VAR NAME=EndTime></td>
+			<td><TMPL_VAR NAME=NotificationSent></td>
+		</tr>
+		</TMPL_LOOP>
+		</table>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,165 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use CGI;
+use DBI;
+use HTML::Template;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+# open the html template
+my $template = HTML::Template->new( filename => 'Summary.tmpl');
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+
+if ( $error ) {
+	&RegresstorCommon::displayError( 'Build', $error, $config->database, $config->host );
+	exit;
+}
+
+my $queryString = "";
+
+my $testsQuery =
+	qq{
+		SELECT Machine.Name AS Name, Project.Name AS Project, BuildOptions, CC, Revision, Who, LocalModification,
+			Run.EndDate AS Date, Run.EndTime AS Time, Compiled, 
+			SUM( Passed ) AS Passes, COUNT( Passed ) - SUM( Passed ) AS Fails, COUNT( Passed ) AS Total,
+			MachineID, BuildID, RunID
+		FROM Build, Machine, Project, Run, UnitTestCheck
+		WHERE Build.MachineID = Machine.ID
+		AND   Build.ProjectID = Project.ID
+		AND   Run.BuildID = Build.ID
+		AND   UnitTestCheck.RunID = Run.ID
+	};
+
+my $zeroTestQuery =
+	qq{
+		SELECT Machine.Name AS Name, Project.Name AS Project, BuildOptions, CC, Revision, Who, LocalModification,
+			Run.EndDate AS Date, Run.EndTime AS Time, Compiled, 
+			0 AS Passes, 0 AS Fails, 0 AS Total,
+			MachineID, BuildID, RunID
+		FROM Build, Machine, Project, Run
+		LEFT JOIN UnitTestCheck ON Run.ID = UnitTestCheck.RunID
+		WHERE Build.MachineID = Machine.ID
+		AND   Build.ProjectID = Project.ID
+		AND   Run.BuildID = Build.ID
+		AND   UnitTestCheck.RunID IS NULL  
+	};
+	
+my $cgi = new CGI;
+my @params= $cgi->param();
+my $paramKey;
+my $paramValue;
+my $hasDateRange = 0;
+my $msg = '';
+
+my $condition = "";
+
+if ( @params ) {
+	my $numparams = @params;
+	for ( my $ii = 0; $ii < $numparams; $ii++ ) {
+		if ( ! $cgi->param( $params[$ii] ) eq undef || $cgi->param( $params[$ii] ) eq '0' ) {
+			if ( $params[$ii] =~ m/Date/ ) {
+				$hasDateRange = 1;
+			}
+			$condition .= " AND " . $params[$ii] . "= '" . $cgi->param( $params[$ii] ) . "'";
+			$paramValue = $cgi->param( $params[$ii] );
+		}
+		else {
+			$paramValue = '';
+		}
+		# back fill the search params into the form
+		if ( $params[$ii] eq 'Machine.Name' ) {
+			$paramKey = 'searchMachine';
+		}
+		elsif ( $params[$ii] eq 'Project.Name' ) {
+			$paramKey = 'searchProject';
+		}
+		elsif ( $params[$ii] eq 'Date>' ) {
+			$paramKey = 'minDate';
+		}
+		elsif ( $params[$ii] eq 'Date<' ) {
+			$paramKey = 'maxDate';
+		}
+		elsif ( $params[$ii] eq 'Time>' ) {
+			$paramKey = 'minTime';
+		}
+		elsif ( $params[$ii] eq 'Time<' ) {
+			$paramKey = 'maxTime';
+		}
+		else {
+			$paramKey = "search" . $params[$ii];
+		}
+		$template->param( $paramKey => $paramValue );
+	}
+}
+
+if ( $hasDateRange == 0 ) {
+	#my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;
+	my @today = localtime time;
+	my @yesterday = localtime( time - 86400 );
+	
+	my $myMin = sprintf( "%d-%d-%d", $yesterday[5] + 1900, $yesterday[4] + 1, $yesterday[3] );
+	my $myMax = sprintf( "%d-%d-%d", $today[5]     + 1900, $today[4]     + 1, $today[3]     );
+	
+	$condition .= " AND DATE >= '" . $myMin . "' AND DATE <= '" . $myMax . "' ";
+
+	$template->param( minDate => $myMin );
+	$template->param( maxDate => $myMax );
+}
+
+$condition .= 
+	qq{
+		GROUP BY Run.ID
+	};
+
+my $result = RegresstorTable->new( 
+	'Name',
+	'Project',
+	'BuildOptions',
+	'CC',
+	'Revision',
+	'Who',
+	'LocalModification',
+	'Date',
+	'Time',
+	'Compiled',
+	'Passes',
+	'Fails',
+	'Total',
+	'MachineID',
+	'BuildID',
+	'RunID' );
+
+$queryString .= $testsQuery . $condition;
+$queryString .= " UNION ";
+$queryString .= $zeroTestQuery . $condition;
+$queryString .=	" ORDER BY Date DESC, Name, CC, BuildOptions, Time DESC";
+
+#$msg = $queryString;
+
+my $query = $dbh->prepare( $queryString );
+$query->execute();
+$result->fillData( $query );
+
+# Clean up DBI 
+$query->finish();
+$dbh->disconnect();
+
+# fill in the query results
+$template->param( data => $result->table );
+$template->param( message => $msg );
+
+# send the obligatory Content-Type and print the template output
+print "Content-Type: text/html\n\n", $template->output;
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,85 @@
+<html>
+	<head><title>Sumamry Page</title></head>
+	<body>
+		<h1>Summary Page</h1>
+		<p>
+		Links: <a href=Summary.cgi>Summary</a> | <a href=Machine.cgi>Machine</a> | <a href=Build.cgi>Build</a> | <a href=Run.cgi>Run</a> | <a href=UnitTestCheck.cgi>UnitTestCheck</a> | <a href=FailedUnitSubTest.cgi>FailedUnitSubTest</a>
+		</p>
+		<form action="Summary.cgi" method="get">
+		<table>
+		<tr>
+		<td>Machine Name:</td><td><input type="text" name="Machine.Name" value="<TMPL_VAR NAME=searchMachine>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Project Name:</td><td><input type="text" name="Project.Name" value="<TMPL_VAR NAME=searchProject>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>BuildOptions:</td><td><input type="text" name="BuildOptions" value="<TMPL_VAR NAME=searchBuildOptions>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>CC:</td><td><input type="text" name="CC" value="<TMPL_VAR NAME=searchCC>" size=10 /></td>
+		</tr>
+		<tr>
+		<td>Revision:</td><td><input type="text" name="Revision" value="<TMPL_VAR NAME=searchRevision>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Who:</td><td><input type="text" name="Who" value="<TMPL_VAR NAME=searchWho>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>LocalModification:</td><td><input type="text" name="LocalModification" value="<TMPL_VAR NAME=searchLocalModification>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Compiled:</td><td><input type="text" name="Compiled" value="<TMPL_VAR NAME=searchCompiled>" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Date &gt;=</td><td><input type="text" name="Date>" value="<TMPL_VAR NAME=minDate>" size=10 /></td>
+		<td>Date &lt;=</td><td><input type="text" name="Date<" value="<TMPL_VAR NAME=maxDate>" size=10 /></td>
+		</tr>
+		<tr>
+		<td>Time &gt;=</td><td><input type="text" name="Time>" value="<TMPL_VAR NAME=minTime>" size=10 /></td>
+		<td>Time &lt;=</td><td><input type="text" name="Time<" value="<TMPL_VAR NAME=maxTime>" size=10 /></td>
+		</tr>
+		</table>
+		<input type="submit" value="Filter" /> <input type="reset" value="Clear">
+		</form>
+		<TMPL_VAR NAME=message>
+		<table border=1>
+		<tr>
+			<td><b>Machine Name</b></td>
+			<td><b>Project</b></td>
+			<td><b>Build Options</b></td>
+			<td><b>Compiler (CC)</b></td>
+			<td><b>Revision</b></td>
+			<td><b>Who</b></td>
+			<td><b>LocalModification</b></td>
+			<td><b>Date</b></td>
+			<td><b>Time</b></td>
+			<td><b>Compiled</b></td>
+			<td><b>Makefile</b></td>
+			<td><b>Log</b></td>
+			<td><b>Passes</b></td>
+			<td><b>Fails</b></td>
+			<td><b>Total Tests</b></td>
+		</tr>
+		<TMPL_LOOP NAME=data>
+		<tr>
+			<td><a href=Machine.cgi#<TMPL_VAR NAME=MachineID>><TMPL_VAR NAME=Name></a></td>
+			<td><TMPL_VAR NAME=Project></td>
+			<td><TMPL_VAR NAME=BuildOptions></td>
+			<td><TMPL_VAR NAME=CC></td>
+			<td><TMPL_VAR NAME=Revision></td>
+			<td><TMPL_VAR NAME=Who></td>
+			<td><TMPL_VAR NAME=LocalModification></td>
+			<td><TMPL_VAR NAME=Date></td>
+			<td><TMPL_VAR NAME=Time></td>
+			<td><TMPL_VAR NAME=Compiled></td>
+			<td><a href=downloadBuildMakefile.cgi?ID=<TMPL_VAR NAME=BuildID>>Makefile.system</a></td>
+			<td><a href=downloadBuildLog.cgi?ID=<TMPL_VAR NAME=BuildID>>Compile Log</a></td>
+			<td><a href=UnitTestCheck.cgi?Passed=1&&RunID=<TMPL_VAR NAME=RunID>><TMPL_VAR NAME=Passes></a></td>
+			<td><a href=UnitTestCheck.cgi?Passed=0&&RunID=<TMPL_VAR NAME=RunID>><TMPL_VAR NAME=Fails></a></td>
+			<td><a href=UnitTestCheck.cgi?RunID=<TMPL_VAR NAME=RunID>><TMPL_VAR NAME=Total></a></td>
+		</tr>
+		</TMPL_LOOP>
+		</table>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use CGI;
+use DBI;
+use HTML::Template;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+
+if ( $error ) {
+	&RegresstorCommon::displayError( 'UnitTestCheck', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $queryString = 
+		qq{
+			SELECT UnitTestCheck.ID, RunID, BuildID, Project.Name AS ProjName, UnitName, TestName, Passed
+			FROM UnitTestCheck, Run, Build, Project
+			WHERE UnitTestCheck.RunID = Run.ID
+			AND   Run.BuildID = Build.ID
+			AND   Build.ProjectID = Project.ID
+		};
+
+	my $cgi = new CGI;
+	my @params= $cgi->param();
+	if ( @params ) {
+		my $numparams = @params;
+		for ( my $ii = 0; $ii < $numparams; $ii++ ) {
+			if ( ! $cgi->param( $params[$ii] ) eq undef || $cgi->param( $params[$ii] ) eq '0' ) {
+				$queryString = $queryString . " AND " . $params[$ii] . " = '" . $cgi->param( $params[$ii] ) . "'";
+			}
+		}
+	}
+
+	$queryString = $queryString . " ORDER BY UnitTestCheck.ID";
+
+	my $query = $dbh->prepare( $queryString );
+
+	# Fire up the SQL command
+	$query->execute();
+
+	# Translate results into perl data structure
+	my $result = RegresstorTable->new( 'ID', 'RunID', 'BuildID', 'ProjName', 'UnitName', 'TestName', 'Passed' );
+	$result->fillData( $query );
+
+	# Clean up DBI 
+	$query->finish();
+	$dbh->disconnect();
+
+	# open the html template
+	my $template = HTML::Template->new( filename => 'UnitTestCheck.tmpl');
+
+	# fill in some parameters
+	$template->param( data => $result->table );
+
+	# send the obligatory Content-Type and print the template output
+	print "Content-Type: text/html\n\n", $template->output;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.tmpl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.tmpl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.tmpl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+<html>
+	<head><title>UnitTestCheck Table</title></head>
+	<body>
+		<h1>UnitTestCheck Table</h1>
+		<p>
+		Links: <a href=Summary.cgi>Summary</a> | <a href=Machine.cgi>Machine</a> | <a href=Build.cgi>Build</a> | <a href=Run.cgi>Run</a> | <a href=UnitTestCheck.cgi>UnitTestCheck</a> | <a href=FailedUnitSubTest.cgi>FailedUnitSubTest</a>
+		</p>
+		<form action="UnitTestCheck.cgi" method="get">
+		<table>
+		<tr>
+		<td>RunID:</td><td><input type="text" name="RunID" value="" size=5 /></td>
+		</tr>
+		<tr>
+		<td>Project Name:</td><td><input type="text" name="Project.Name" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>UnitName:</td><td><input type="text" name="UnitName" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>TestName:</td><td><input type="text" name="TestName" value="" size=20 /></td>
+		</tr>
+		<tr>
+		<td>Passed:</td><td><input type="text" name="Passed" value="" size=1 /></td>
+		</tr>
+		</table>
+		<input type="submit" value="Filter" /> <input type="reset" value="Clear">
+		</form>
+		<p>
+		<TMPL_VAR NAME=queryString>
+		</p>
+		<table border=1>
+		<tr>
+			<td><b>ID</b></td>
+			<td><b>RunID</b></td>
+			<td><b>Project/Build</b></td>
+			<td><b>UnitName</b></td>
+			<td><b>TestName</b></td>
+			<td><b>Passed</b></td>
+		</tr>
+		<TMPL_LOOP NAME=data>
+		<tr>
+			<td><a name=<TMPL_VAR NAME=ID>><TMPL_VAR NAME=ID></a></td>
+			<td><a href=Run.cgi#<TMPL_VAR NAME=RunID>><TMPL_VAR NAME=RunID></a></td>
+			<td><a href=Build.cgi#<TMPL_VAR NAME=BuildID>><TMPL_VAR NAME=ProjName></a></td>
+			<td><TMPL_VAR NAME=UnitName></td>
+			<td><TMPL_VAR NAME=TestName></td>
+			<td><a href=FailedUnitSubTest.cgi?UnitTestCheckID=<TMPL_VAR NAME=ID>><TMPL_VAR NAME=Passed></a></td>
+		</tr>
+		</TMPL_LOOP>
+		</table>
+	</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitBuild.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitBuild.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitBuild.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,29 @@
+#!/usr/bin/perl -w
+
+use SOAP::Lite;
+
+print "Submitting build results to server\n";
+
+my $response = SOAP::Lite
+	-> uri( 'urn:Regresstor' )
+	-> proxy( 'http://localhost/~alan/cgi-bin/RegresstorServices/Regresstor.cgi' )
+	-> submitBuild(	{
+		Project => "TheBlah",
+		BuildOptions =>"debug",
+		Revision => "123",
+		MachineName => "loony.vpac.org",
+		Hardware => "sgi",
+		OS => "Linux",
+		Kernel => "SuSE-123",
+		Who => "bob",
+		LocalModification => "1",
+		Compiled => "1" } )
+	-> result;
+
+if ( exists $response->{errorMsg} ) {
+	print "Error: $response->{errorMsg}\n";
+}
+else {
+	print "OK. BuildID = $response->{buildID}\n";
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitBuild.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitCheck.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitCheck.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitCheck.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,29 @@
+#!/usr/bin/perl -w
+
+use SOAP::Lite;
+
+print "Submitting build results to server\n";
+
+my @subTests = ( "a", "b", "c", "d" );
+
+
+my $response = SOAP::Lite
+	-> uri( 'urn:Regresstor' )
+	-> proxy( 'http://localhost/~alan/cgi-bin/RegresstorServices/Regresstor.cgi' )
+	-> submitCheck(	{
+		BuildID => 17,
+		UnitName => "Base/Foundation/BlahX",
+		TestName => "testBlah.c",
+		FailedSubTests => \@subTests
+		} );
+	-> result;
+
+if ( exists $response->{errorMsg} ) {
+	print "Error: $response->{errorMsg}\n";
+}
+else {
+	print "OK. UnitTestCheckID = $response->{unitTestCheckID}\n";
+}
+
+
+__END__


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitCheck.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildLog.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildLog.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildLog.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,64 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use DBI;
+use CGI;
+use Compress::Zlib;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $cgi = new CGI;
+my @params = $cgi->param();
+
+unless ( @params ) {
+	&RegresstorCommon::displayError( 'downloadBuildLog', "No ID specfied", " ", " " );
+	exit;
+}
+unless ( $params[0] eq "ID" ) {
+	&RegresstorCommon::displayError( 'downloadBuildLog', "No ID specfied", " ", " " );
+	exit;
+}
+my $ID = $cgi->param( 'ID' );
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+if ( $error ) {
+	&RegresstorCommon::displayError( 'downloadBuildLog', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $query = $dbh->prepare(
+		qq{
+			SELECT Log
+			FROM Build 
+			WHERE ID='$ID'
+		});
+	$query->execute();
+	my @result = $query->fetchrow_array();
+	unless ( @result ) {
+		&RegresstorCommon::displayError( 'downloadBuildLog', "File does not exists", $config->database, $config->host );
+		exit;
+	}
+	$query->finish();
+	$dbh->disconnect();
+
+	my $data = $result[0];
+	my $uncompressedData = uncompress( $data );
+
+	if ( ! $uncompressedData ) {
+		&RegresstorCommon::displayError( 'downloadBuildLog', "No data", $config->database, $config->host );
+		exit;
+	}
+	print "Content-Type: text/plain\n\n", $uncompressedData;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildLog.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildMakefile.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildMakefile.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildMakefile.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,64 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use DBI;
+use CGI;
+use Compress::Zlib;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $cgi = new CGI;
+my @params = $cgi->param();
+
+unless ( @params ) {
+	&RegresstorCommon::displayError( 'downloadBuildMakefile', "No ID specfied", " ", " " );
+	exit;
+}
+unless ( $params[0] eq "ID" ) {
+	&RegresstorCommon::displayError( 'downloadBuildMakefile', "No ID specfied", " ", " " );
+	exit;
+}
+my $ID = $cgi->param( 'ID' );
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+if ( $error ) {
+	&RegresstorCommon::displayError( 'downloadBuildMakefile', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $query = $dbh->prepare(
+		qq{
+			SELECT Makefile
+			FROM Build 
+			WHERE ID='$ID'
+		});
+	$query->execute();
+	my @result = $query->fetchrow_array();
+	unless ( @result ) {
+		&RegresstorCommon::displayError( 'downloadBuildMakefile', "File does not exists", $config->database, $config->host );
+		exit;
+	}
+	$query->finish();
+	$dbh->disconnect();
+
+	my $data = $result[0];
+	my $uncompressedData = uncompress( $data );
+
+	if ( ! $uncompressedData ) {
+		&RegresstorCommon::displayError( 'downloadBuildMakefile', "No data", $config->database, $config->host );
+		exit;
+	}
+	print "Content-Type: text/plain\n\n", $uncompressedData;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildMakefile.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadFailedUnitSubTestOutput.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadFailedUnitSubTestOutput.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadFailedUnitSubTestOutput.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,64 @@
+#!/usr/bin/perl -w
+
+# Simple Page which shows ALL contents of the FailedUnitSubTest table
+
+use DBI;
+use CGI;
+use Compress::Zlib;
+
+use lib '.';
+use RegresstorConfig;
+use RegresstorCommon;
+use RegresstorTable;
+
+# An error message
+my $error;
+
+my $cgi = new CGI;
+my @params = $cgi->param();
+
+unless ( @params ) {
+	&RegresstorCommon::displayError( 'downloadFailedUnitSubTestOutput', "No ID specfied", " ", " " );
+	exit;
+}
+unless ( $params[0] eq "ID" ) {
+	&RegresstorCommon::displayError( 'downloadFailedUnitSubTestOutput', "No ID specfied", " ", " " );
+	exit;
+}
+my $ID = $cgi->param( 'ID' );
+
+my $config = RegresstorConfig->new();
+
+my $dbh = DBI->connect( $config->getConnectionString, $config->user, $config->password )
+		or $error = "Unable to connect to database.";
+if ( $error ) {
+	&RegresstorCommon::displayError( 'downloadFailedUnitSubTestOutput', $error, $config->database, $config->host );
+	exit;
+}
+else {
+	# Create SQL statement
+	my $query = $dbh->prepare(
+		qq{
+			SELECT Output
+			FROM FailedUnitSubTest
+			WHERE ID='$ID'
+		});
+	$query->execute();
+	my @result = $query->fetchrow_array();
+	unless ( @result ) {
+		&RegresstorCommon::displayError( 'downloadFailedUnitSubTestOutput', "File does not exists", $config->database, $config->host );
+		exit;
+	}
+	$query->finish();
+	$dbh->disconnect();
+
+	my $data = $result[0];
+	my $uncompressedData = uncompress( $data );
+
+	if ( ! $uncompressedData ) {
+		&RegresstorCommon::displayError( 'downloadFailedUnitSubTestOutput', "No data", $config->database, $config->host );
+		exit;
+	}
+	print "Content-Type: text/plain\n\n", $uncompressedData;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadFailedUnitSubTestOutput.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = src

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.rules 2746 2005-03-06 00:29:00Z 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
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+
+#include <stdlib.h>
+
+#include "types.h"
+#include "FailedSubTest.h"
+
+FailedSubTest* FailedSubTest_New( char* subTestName ) {
+	FailedSubTest* result;
+
+	result = (FailedSubTest*)malloc( sizeof(FailedSubTest) );
+	
+	result->subTestName = subTestName;
+
+	return result;
+}
+
+void FailedSubTest_Delete( FailedSubTest* self ) {
+
+	if ( self ) {
+		free( self );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,19 @@
+
+
+#ifndef __FailedSubTest_h__
+#define __FailedSubTest_h__
+
+
+#define __FailedSubTest \
+	char*		subTestName;
+
+struct FailedSubTest {
+	__FailedSubTest
+};
+
+FailedSubTest* FailedSubTest_New( char* subTestName );
+
+void FailedSubTest_Delete( FailedSubTest* self );
+
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 2933 2005-05-12 06:13:10Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainRegresstor
+def_inc = StGermain/Regresstor/libRegresstor
+
+def_hdrs = Regresstor.h \
+		types.h \
+		FailedSubTest.h \
+		UnitTest.h \
+		RegressionTest.h 
+
+ifdef HAVE_SOAP
+
+	def_srcs = \
+		RegressionTest.c \
+		FailedSubTest.c  \
+		UnitTest.c 
+	
+endif
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,154 @@
+
+
+#include "forwardDecl.h"
+
+#include "types.h"
+#include "FailedSubTest.h"
+#include "UnitTest.h"
+#include "RegressionTest.h"
+
+#include <stdlib.h>
+#include <signal.h>
+#include <libcsoap/soap-client.h>
+#include <libxml/xmlIO.h>
+
+const char* Regresstor_URN = "urn:Regresstor";			/* The name of the web service class */
+const char* Regresstor_SubmitCheckMethod = "submitCheck";       /* The name of the web service function */
+
+UnitTest* stgRegressionTest = 0;
+
+typedef void (*Regresstor_HandlePtr)(int);
+void RegressionTest_CrashHandler( int sig );
+Regresstor_HandlePtr prevSegvHandler;
+Regresstor_HandlePtr prevBusHandler;
+
+/* Interface functions */
+void RegressionTest_Init_Func( char* url, char* runID, char* unitName, char* testName ) {
+
+	stgRegressionTest = UnitTest_New( url, runID, unitName, testName );
+
+	prevSegvHandler = signal( SIGSEGV, RegressionTest_CrashHandler );
+	prevBusHandler = signal( SIGBUS, RegressionTest_CrashHandler );
+}
+void RegressionTest_Finalise_Func() {
+	SoapCtx* request;
+	SoapCtx* response;
+	herror_t error;
+	
+	int dummyArgc = 0;
+	char** dummyArgv = NULL;
+
+	if ( !stgRegressionTest ) {
+		return;
+	}
+	if ( !stgRegressionTest->url || !stgRegressionTest->runID ) {
+		return;
+	}
+
+	error = soap_client_init_args( dummyArgc, dummyArgv );
+	if ( error != H_OK ) {
+		/* Print Error */
+		herror_release(error);
+		return;
+	}
+
+	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_SubmitCheckMethod, &request );
+	if ( error != H_OK ) {
+		/* Print Error */
+		herror_release(error);
+		return;
+	}
+
+	soap_env_push_item( request->env, NULL, "parameters" );
+
+	soap_env_add_item( request->env, "xsd:string", "RunID", stgRegressionTest->runID );
+	soap_env_add_item( request->env, "xsd:string", "UnitName", stgRegressionTest->unitName );
+	soap_env_add_item( request->env, "xsd:string", "TestName", stgRegressionTest->testName );
+
+	if ( stgRegressionTest->subTestCount > 0 ) {
+		int ii;
+/*		xmlNodePtr failedSubTests;*/
+
+/*		failedSubTests = soap_env_push_item( request->env, NULL, "FailedSubTests" ); */
+
+		/* Make this an 'array' data type for SOAP */
+/*		xmlNewProp( failedSubTests, (xmlChar*)"xsi:type", (xmlChar*)"SOAP-ENC:Array" );
+		xmlNewProp( failedSubTests, (xmlChar*)"SOAP-ENC:arrayType", (xmlChar*)"xsd:string[2]" );
+*/
+		/* Added the array elements */
+		for ( ii = 0; ii < stgRegressionTest->subTestCount; ++ii ) {
+/*			soap_env_add_item( request->env, "xsd:string", "subTest", stgRegressionTest->subTests[ii]->subTestName );*/
+			soap_env_add_item( request->env, "xsd:string", "FailedSubTests", stgRegressionTest->subTests[ii]->subTestName );
+		}
+
+		/* End array */
+/*		soap_env_pop_item( request->env );*/
+	}
+
+	soap_env_pop_item( request->env );
+
+/*	soap_xml_doc_print( request->env->root->doc );*/
+	
+	error = soap_client_invoke( request, &response, stgRegressionTest->url, "");
+                                                                                                                                    
+	if ( error != H_OK ) {
+		/* Print Error */
+		herror_release( error );
+		soap_ctx_free( request );
+		return;
+	}
+
+/*	soap_xml_doc_print( response->env->root->doc );*/
+
+	soap_ctx_free( request );
+	soap_ctx_free( response );
+
+	soap_client_destroy();
+
+	UnitTest_Delete( stgRegressionTest );
+}
+
+/* Private member functions */
+void RegressionTest_Check_Func( UnitTest* self, int expression, void* stream, char* subTestName, char* description ) {
+	if ( !stgRegressionTest ) {
+		return;
+	}
+
+	if ( expression ) {
+		/* Pass */
+		Journal_Printf( stream, "Passed test %s: %s\n", subTestName, description );
+	}
+	else {
+		/* Fail */
+		Journal_Printf( stream, "Failed test %s: %s\n", subTestName, description );
+
+		UnitTest_Add_FailedSubTest( stgRegressionTest, FailedSubTest_New( subTestName ) );
+	}
+}
+
+
+void RegressionTest_CrashHandler( int sig ) {
+
+	switch ( sig ) {
+		case SIGSEGV:
+			UnitTest_Add_FailedSubTest( stgRegressionTest, FailedSubTest_New( "SIGSEGV: Invalid memory reference" ) );
+			break;
+		case SIGBUS:
+			UnitTest_Add_FailedSubTest( stgRegressionTest, FailedSubTest_New( "SIGBUS: Bad memory access" ) );
+			break;
+	}
+
+	RegressionTest_Finalise();
+
+	switch ( sig ) {
+		case SIGSEGV:
+			prevSegvHandler( sig );
+			break;
+		case SIGBUS:
+			prevBusHandler( sig );
+			break;
+	}
+	
+	exit( 1 );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,34 @@
+
+
+#ifndef __Regresstor_RegressionTest_h__
+#define __Regresstor_RegressionTest_h__
+
+void RegressionTest_Init_Func( char* url, char* runID, char* unitName, char* testName );
+void RegressionTest_Finalise_Func();
+void RegressionTest_Check_Func( UnitTest* self, int expression, void* stream, char* subTestName, char* description );
+
+extern UnitTest* stgRegressionTest;
+
+#ifdef REGRESSION_RUN
+	#define RegressionTest_Init( unitName ) \
+		RegressionTest_Init_Func( REGRESSTOR_URL, RUNID, unitName, __FILE__ )
+	#define RegressionTest_Finalise RegressionTest_Finalise_Func
+	#define RegressionTest_Check( expression, stream, subTestName, description ) \
+		RegressionTest_Check_Func( stgRegressionTest, expression, stream, subTestName, description )
+	
+#else
+	/* If not a regression run, these functions mean nothing */
+	#define RegressionTest_Init( unitName )
+	#define RegressionTest_Finalise()
+
+	/* If not a regression run, firewall instead of check */
+	#define RegressionTest_Check( expression, stream, subTestName, description) \
+		{ \
+			Journal_Firewall( expression, stream, "Failed test %s: %s\n", subTestName, description ); \
+			Journal_Printf( stream, "Passed test %s: %s\n", subTestName, description ); \
+		}
+#endif
+
+#endif
+
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Regresstor.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Regresstor.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Regresstor.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+
+
+#ifndef __Regresstor_h__
+#define __Regresstor_h__
+
+	#include "types.h"
+	#include "UnitTest.h"
+	#include "FailedSubTest.h"
+	#include "RegressionTest.h"
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,58 @@
+
+#include <stdlib.h>
+
+#include "types.h"
+#include "FailedSubTest.h"
+#include "UnitTest.h"
+
+
+
+UnitTest* UnitTest_New( char* url, char* runID, char* unitName, char* testName ) {
+	UnitTest* result;
+
+	result = (UnitTest*)malloc( sizeof(UnitTest) );
+
+	result->url = url;
+	result->runID = runID;
+	result->unitName = unitName;
+	result->testName = testName;
+	result->subTests = NULL;
+	result->subTestCount = 0;
+	result->subTestSize = 0;
+
+	return result;
+}
+
+void UnitTest_Delete( UnitTest* self ) {
+
+	if ( self ) {
+		int ii;
+		
+		for ( ii = 0; ii < self->subTestCount; ++ii ) {
+			if ( self->subTests[ii] ) {
+				FailedSubTest_Delete( self->subTests[ii] );
+				self->subTests[ii] = NULL;
+			}
+		}
+		if ( self->subTests ) {
+			free( self->subTests );
+		}
+		
+		free( self );
+	}
+}
+
+
+void UnitTest_Add_FailedSubTest( UnitTest* self, FailedSubTest* test ) {
+	if ( !self || !test ) {
+		return;
+	}
+
+	if ( self->subTestCount >= self->subTestSize ) {
+		self->subTestSize++;
+		self->subTests = (FailedSubTest**)realloc( self->subTests, sizeof(FailedSubTest*) * self->subTestSize );
+	}
+	self->subTests[self->subTestCount] = test;
+	self->subTestCount++;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+
+
+#ifndef __UnitTest_h__
+#define __UnitTest_h__
+
+
+#define __UnitTest \
+	char*		url; \
+	char*		runID; \
+	char*		unitName; \
+	char*		testName; \
+	FailedSubTest**	subTests; \
+	unsigned int	subTestCount; \
+	unsigned int	subTestSize;
+	
+struct UnitTest {
+	__UnitTest
+};
+
+UnitTest* UnitTest_New( char* url, char* runID, char* unitName, char* testName );
+
+void UnitTest_Delete( UnitTest* self );
+
+void UnitTest_Add_FailedSubTest( UnitTest* self, FailedSubTest* test );
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/forwardDecl.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/forwardDecl.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/forwardDecl.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* SPECIAL NOTE.
+ *
+ * This is a dummy header file, listing a subset of function prototypes in the Journal system.
+ * The file has been constructed to allow the Memory Module to use the Journal, which resides in the IO directory.
+ * IO is invisible to the Foundation directory.
+ *
+ * On compilation these types and functions are processed as undefined symbols, and will not be linked until
+ * the Base directory is compiled into archive (.a) and dynamic libraries (.so).
+ *
+ * For this reason, JournalDummy.h must NOT be included in Foundation.h or Makefile.def as this will export it to become a part of
+ * the StGermain framework.
+ */
+
+#ifndef __Regresstor_forwardDecl_h__
+#define __Regresstor_forwardDecl_h__
+	
+	typedef char* Type;	
+	
+	/* Forward Declaration of Journal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	extern const Type Info_Type;
+	extern const Type Error_Type;
+	extern const Type Debug_Type;
+	
+	int Journal_Printf( void*, char*, ... );
+	int Journal_PrintfL( void*, unsigned int, char*, ... );
+	int Journal_Firewall( int expression, void* stream, char* fmt, ... );
+	
+	#ifdef DEBUG
+		#define Journal_DPrintf Journal_Printf
+	#else
+		#define Journal_DPrintf if (0) Journal_Printf
+	#endif
+	
+#endif

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.rules 2942 2005-05-16 02:30:09Z 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
+
+include Makefile.def
+
+ifdef HAVE_SOAP
+	lib = ${def_lib}
+	libstatic = yes
+	libdynamic = yes
+endif
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+
+packages = CSOAP NANOHTTP XML
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+** <b>Role:</b>
+**
+** <b>Assumptions:</b>
+**	None as yet.
+**
+** <b>Comments:</b>
+**	None as yet.
+**
+** $Id: types.h 2940 2005-05-15 00:53:19Z AlanLo $
+**
+**/
+
+#ifndef __Regresstor_types_h__
+#define __Regresstor_types_h__
+
+
+	typedef struct UnitTest UnitTest;
+	typedef struct FailedSubTest FailedSubTest;
+	
+#endif /* __Regresstor_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Regresstor/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.rules 2746 2005-03-06 00:29:00Z 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
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorDBSetup.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorDBSetup.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorDBSetup.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,409 @@
+#!/usr/bin/perl -w
+
+# regresstorDBSetup.pl
+#
+# Perl script which manages the installation of the regresstor database on a machine.
+
+use strict;
+
+use DBI;
+use XML::Simple;
+
+my @commands = ( "install", "createdb", "createtable", "createconfig" );
+my @descriptions = (
+	"This is the command to call when installing Regresstor database from scratch.",
+	"Creates the database only.",
+	"Creates database table schema only.",
+	"Creates xml configuration file for Regresstor web services." );
+my @helpFunctions = (
+	"printInstall",
+	"printCreateDB",
+	"printCreateTable",
+	"printCreateConfig" );
+my @commandFunctions = (
+	"commandInstall",
+	"commandCreateDB",
+	"commandCreateTable",
+	"commandCreateConfig" );
+
+my @options = ( "database", "host", "user", "password", "filename" );
+my $defaults = {
+	database => 'regresstordb',
+	host => 'localhost',
+	user => 'regresstor',
+	password => 'regresstor123',
+	filename => './RegresstorConfig.xml' };
+my $values = {
+	database => undef,
+	host => undef,
+	user => undef,
+	password => undef,
+	filename => undef };
+
+# Prints summary of tool usage
+sub printUsage() {
+	print "regresstorDBSetup.pl\n";
+	print "Unified tool for installing the Regresstor database.\n";
+	print "Usage:\n";
+	print "\tregresstorDBSetup.pl <command> [args]\n";
+	print "or\n";
+	print "\tregresstorDBSetup.pl help <command>\n";
+	print "\n";
+	print "Available commands:\n";
+	foreach my $i ( 0 .. $#commands ) {
+		print "\t$commands[$i]\n";
+	}
+}
+# Prints the common requirements for each command
+sub printRequirements() {
+	print "Requirements Checklist:\n";
+	print "\t- MYSQL\n";
+	print "\t- mysqld server running\n";
+	print "\t- MYSQL user with database creation permissions\n";
+}
+# Prints the common options of each command
+sub printCommonOptions() {
+	print "Options:\n";
+	print "\tdatabase=[$defaults->{database}]\t: The name of the Regresstor database\n";
+	print "\thost=[$defaults->{host}]\t: The host of the database server \n";
+	print "\tuser=[$defaults->{user}]\t: The user name for database access\n";
+	print "\tpassword=[$defaults->{password}]\t: The password for database access. Note: use simple non-critical one.\n";
+}
+# Prints install command
+sub printInstall() {
+	print "Performs all operations: createdb, createtable and createconfig.\n";
+	&printRequirements();
+	print "\n";
+	print "regresstorDBSetup.pl install [options]\n";
+	&printCommonOptions();
+}
+# Prints the createdb command
+sub printCreateDB() {
+	print "Creates the database on mysql.\n";
+	&printRequirements();
+	print "\n";
+	print "regresstorDBSetup.pl createdb [options]\n";
+	&printCommonOptions();
+}
+# Prints the createtable command
+sub printCreateTable() {
+	print "Creates the database tables on the target existing mysql database\n";
+	&printRequirements();
+	print "\n";
+	print "regresstorDBSetup.pl createtable [options]\n";
+	&printCommonOptions();
+}
+# Prints the createconfig command
+sub printCreateConfig() {
+	print "Creates a configuration file for the Regresstor web services to use.\n";
+	print "\n";
+	print "regresstorDBSetup.pl createconfig [options]\n";
+	&printCommonOptions();
+	print "\tfilename=[$defaults->{filename}]\t: The file to write configurations to.\n";
+}
+
+if ( $#ARGV < 0 ) {
+	&printUsage();
+	exit;
+}
+
+my $command = $ARGV[0];
+if ( $command eq "--help" ) {
+	&printUsage();
+	exit;
+}
+if ( $command eq "help" ) {
+	if ( $#ARGV < 1) {
+		&printUsage();
+		exit;
+	}
+	else {
+		my $helpCommand = $ARGV[1];
+		foreach my $i ( 0 .. @commands - 1 ) {
+			if ( $helpCommand eq $commands[$i] ) {
+				eval( $helpFunctions[$i] );
+				exit;
+			}
+		}
+		print "Unknown Command.\n";
+		&printUsage();
+		exit;
+	}
+}
+
+# Fetch options for commands 
+foreach my $argnum ( 1 .. $#ARGV ) {
+	if ( $ARGV[$argnum] =~ /=/ ) {
+		my @param = ();
+		my $length = 0;
+		
+		@param = split( /=/, $ARGV[$argnum] );
+		$length = @param;
+
+		my $found = 0;
+		
+		if ( ! $length == 2 ) {
+			print "Invalid option: $ARGV[$argnum]\n";
+			print "Please specify in the form of <param>=<value>\n";
+			exit;
+		}
+		foreach my $i ( 0 .. @options - 1 ) {
+			if ( $param[0] eq $options[$i] ) {
+				$values->{$options[$i]} = $param[1];
+				$found = 1;
+			}
+		}
+		if ( ! $found ) {
+			print "Unknown param: $param[0]\n";
+			exit;
+		}
+	}
+	else {
+		print "Invalid option: $ARGV[$argnum]\n";
+		print "Please specify in the form of <param>=<value>\n";
+		exit;
+	}
+}
+
+foreach my $i ( 0 .. @options -1 ) {
+	if ( ! $values->{$options[$i]} ) {
+		$values->{$options[$i]} = $defaults->{$options[$i]};
+	}
+}
+
+print "Using setttings:\n";
+print "database = $values->{database}\n";
+print "host = $values->{host}\n";
+print "user = $values->{user}\n";
+print "password= $values->{password}\n";
+print "\n";
+
+sub commandCreateDB() {
+
+	print "Creating database '$values->{database}'...\n";
+
+	my $dbh;
+	
+	# Check if database already exists
+	$dbh = DBI->connect( 
+		"DBI:mysql:$values->{database}:$values->{host}", 
+		$values->{user},
+		$values->{password},
+		{ PrintError => 0, RaiseError => 0 } );
+	if ( $dbh ) {
+		$dbh->disconnect();
+		print "Database '$values->{database}' already exists on this server! Exiting...\n";
+		exit;
+	}
+
+	# Connect to the 'mysql' database
+	$dbh = DBI->connect(
+		"DBI:mysql:mysql:$values->{host}",
+		$values->{user},
+		$values->{password} );
+	unless ( $dbh ) {	
+		print "Unable to connect to MYSQL! Exiting...\n";
+		die;
+	}
+
+	my $createDBCommand = $dbh->prepare(
+		qq{
+			CREATE DATABASE $values->{database}
+		} );
+	$createDBCommand->execute();
+	$createDBCommand->finish();
+	$dbh->disconnect();
+
+	# Check if database creation successful
+	$dbh = DBI->connect(
+		"DBI:mysql:$values->{database}:$values->{host}",
+		$values->{user},
+		$values->{password} );
+	unless ( $dbh ) {
+		print "Database creation failed! Exiting...\n";
+		die;
+	}
+	$dbh->disconnect();
+
+	print "Database '$values->{database}' successfully created.\n";
+}
+
+sub commandCreateTable() {
+	
+	print "Creating tables for database '$values->{database}'...\n";
+
+	my $dbh;
+
+	$dbh = DBI->connect(
+		"DBI:mysql:$values->{database}:$values->{host}",
+		$values->{user},
+		$values->{password} );
+	unless ( $dbh ) {
+		print "Unable to connect to database $values->{database} on $values->{host}. Exiting...\n";
+		die;
+	}
+	
+	# Test to see if any of the tables already exist in this database
+	# If so - bomb out because database integrity is invalid
+
+	my @tableList = ( "Machine", "Project", "Build", "Run", "UnitTestCheck", "FailedUnitSubTest" );
+	my $showTablesQuery = $dbh->prepare(
+		qq{
+			SHOW TABLES
+		} );
+	$showTablesQuery->execute();
+	while ( my @row = $showTablesQuery->fetchrow_array() ) {
+		foreach my $i ( 0 .. @tableList ) {
+			if ( $row[0] eq $tableList[$i] ) {
+				# A table exists!!!
+				$showTablesQuery->finish();
+				$dbh->disconnect();
+				print "Table '$tableList[$i]' already exists in database '$values->{database}'. Please check the database integrity on MYSQL. Exiting...\n";
+				die;
+			}
+		}
+	}
+	$showTablesQuery->finish();
+
+	my @createTableSQL = (
+		qq{
+			CREATE TABLE Machine (
+				ID int(11) unsigned NOT NULL auto_increment,
+				Name char(50) NOT NULL default '',
+				Hardware char(20) NOT NULL default '',
+				OS char(20) NOT NULL default '',
+				Kernel char(100) NOT NULL default '',
+				PRIMARY KEY  (ID),
+				UNIQUE KEY Name (Name,Hardware,OS,Kernel)
+			) TYPE=MyISAM
+		},
+		qq{
+			CREATE TABLE Project (
+				ID int(10) unsigned NOT NULL auto_increment,
+				Name char(50) NOT NULL default '',
+				MailTo char(200) NOT NULL default '',
+				MailFrom char(50) NOT NULL default '',
+				PRIMARY KEY  (ID),
+				UNIQUE KEY Name (Name)
+			) TYPE=MyISAM;
+		},
+		qq{
+			CREATE TABLE Build (
+				ID int(11) unsigned NOT NULL auto_increment,
+				ProjectID int(11) unsigned NOT NULL default '0',
+				BuildOptions varchar(200) NOT NULL default '',
+				CC varchar(20) NOT NULL default '',
+				Revision int(11) NOT NULL default '0',
+				MachineID int(11) unsigned NOT NULL default '0',
+				Who varchar(20) NOT NULL default '',
+				LocalModification tinyint(4) NOT NULL default '0',
+				Date date NOT NULL default '0000-00-00',
+				Time time NOT NULL default '00:00:00',
+				Compiled tinyint(4) NOT NULL default '0',
+				Makefile blob NOT NULL,
+				Log longblob NOT NULL,
+				PRIMARY KEY  (ID),
+				UNIQUE KEY Project (ProjectID,BuildOptions,CC,Revision,MachineID,Who,LocalModification,Date,Time)
+			) TYPE=MyISAM
+		},
+		qq{
+			CREATE TABLE Run (
+				ID int(10) unsigned NOT NULL auto_increment,
+				BuildID int(10) unsigned NOT NULL default '0',
+				StartDate date NOT NULL default '0000-00-00',
+				StartTime time NOT NULL default '00:00:00',
+				EndDate date default NULL,
+				EndTime time default NULL,
+				NotificationSent tinyint(4) NOT NULL default '0',
+				PRIMARY KEY  (ID),
+				UNIQUE KEY BuildID (BuildID,StartDate,StartTime)
+				) TYPE=MyISAM
+		},
+		qq{ 
+			CREATE TABLE UnitTestCheck (
+				ID int(11) unsigned NOT NULL auto_increment,
+				RunID int(11) unsigned NOT NULL default '0',
+				UnitName varchar(100) NOT NULL default '',
+				TestName varchar(50) NOT NULL default '',
+				Passed tinyint(4) NOT NULL default '0',
+				PRIMARY KEY  (ID),
+				UNIQUE KEY RunID (RunID,TestName)
+			) TYPE=MyISAM
+		},
+		qq{
+			CREATE TABLE FailedUnitSubTest (
+				ID bigint(20) unsigned NOT NULL auto_increment,
+				UnitTestCheckID int(11) unsigned NOT NULL default '0',
+				SubTest varchar(100) NOT NULL default '',
+				Output longblob NOT NULL,
+				PRIMARY KEY  (ID),
+				UNIQUE KEY UnitTestCheck_ID (UnitTestCheckID,SubTest)
+			) TYPE=MyISAM
+		} );
+
+	foreach my $i ( 0 .. @createTableSQL - 1 ) {
+		my $createTableCommand =$dbh->prepare( $createTableSQL[$i] );
+		$createTableCommand->execute();
+		$createTableCommand->finish();
+	}
+
+	# Check if table creation was successful
+
+	my @tables = ();
+	$showTablesQuery->execute();
+	while ( my @row = $showTablesQuery->fetchrow_array() ) {
+		foreach my $i ( 0 .. @tableList - 1 ) {
+			if ( $row[0] eq $tableList[$i] ) {
+				# A table exists!!!
+				push( @tables, $row[0] );
+			}
+		}
+	}
+	$showTablesQuery->finish();
+	$dbh->disconnect();
+	
+	my $tablesCount = @tables;
+	my $createTableSQLCount = @createTableSQL;
+
+	if ( $tablesCount != $createTableSQLCount ) {
+		print "Unable to create Tables. Exiting...\n";
+		die;
+	}
+	print "Regresstor tables successfully created on database '$values->{database}'.\n";
+}
+
+sub commandCreateConfig() {
+	print "Creating configuration file...\n";
+	
+	my $xml = new XML::Simple(
+	        NoAttr=>1,
+        	RootName=>'config' );
+                                                                                                                                    
+	my $data = $xml->XMLout( $values );
+	open configOutput, ">$values->{filename}"
+		or die "Unable to open file $values->{filename} for writing.\n";
+	print configOutput $data;
+	close configOutput;
+	print "Successfully writting configurations to $values->{filename}.\n";
+	print "Copy $values->{filename} to your RegresstorServices directory on your web server.\n";
+}
+
+sub commandInstall() {
+	print "Begin Regresstor database installation...\n";
+	&commandCreateDB();
+	&commandCreateTable();
+	&commandCreateConfig();
+	print "Regresstor database installation complete.\n";
+}
+
+
+foreach my $i ( 0 .. @commands - 1 ) {
+	if ( $command eq $commands[$i] ) {
+		eval( $commandFunctions[$i] );
+		exit;
+	}
+}
+print "Unknown command $command.\n";
+
+__END__
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorDBSetup.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorMailSetup.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorMailSetup.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorMailSetup.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,296 @@
+#!/usr/bin/perl -w
+
+# regresstorMailSetup.pl
+#
+# Perl script which manages the installation of the regresstor database on a machine.
+
+use strict;
+
+use DBI;
+use XML::Simple;
+
+my @commands = ( "createconfig", "projectsetup" );
+my @descriptions = (
+	"Creates xml configuration file for email scripts.",
+	"Add/Change mail settings for projects on the regresstor database" );
+my @helpFunctions = (
+	"printCreateConfig",
+	"printProjectSetup" );
+my @commandFunctions = (
+	"commandCreateConfig",
+	"commandProjectSetup" );
+
+my @options = ( "smtpserver", "regresstorserver", "database", "host", "user", "password", "filename", "project", "mailto", "mailfrom" );
+my $defaults = {
+	smtpserver => '',
+	regresstorserver => 'http://localhost/cgi-bin/RegresstorServices',
+	database => 'regressiondb',
+	host => 'localhost',
+	user => 'regresstoruser',
+	password => 'regresstor',
+	filename => './RegresstorMailConfig.xml',
+	project => '',
+	mailto => '',
+	mailfrom => '' };
+my $values = {
+	smtpserver => undef,
+	regresstorserver => undef,
+	database => undef,
+	host => undef,
+	user => undef,
+	password => undef,
+	filename => undef,
+	project => undef,
+	mailto => undef,
+	mailfrom => undef };
+
+# Prints summary of tool usage
+sub printUsage() {
+	print "regresstorMailSetup.pl\n";
+	print "Unified tool for installing the Regresstor database.\n";
+	print "Usage:\n";
+	print "\tregresstorMailSetup.pl <command> [args]\n";
+	print "or\n";
+	print "\tregresstorMailSetup.pl help <command>\n";
+	print "\n";
+	print "Available commands:\n";
+	foreach my $i ( 0 .. $#commands ) {
+		print "\t$commands[$i]\n";
+	}
+}
+# Prints the common requirements for each command
+sub printRequirements() {
+	print "Requirements Checklist:\n";
+	print "\t- Perl\n";
+	print "\t- Perl Net::SMTP\n";
+}
+# Prints the common options of each command
+sub printCommonOptions() {
+	print "Options:\n";
+	print "\tdatabase=[$defaults->{database}]\t: The name of the Regresstor database\n";
+	print "\thost=[$defaults->{host}]\t: The host of the database server \n";
+	print "\tuser=[$defaults->{user}]\t: The user name for database access\n";
+	print "\tpassword=[$defaults->{password}]\t: The password for database access. Note: use simple non-critical one.\n";
+}
+# Prints the createconfig command
+sub printCreateConfig() {
+	print "Creates a configuration file for the Regresstor web services to use.\n";
+	print "\n";
+	print "regresstorMailSetup.pl createconfig [options]\n";
+	&printCommonOptions();
+	print "\tfilename=[$defaults->{filename}]\t: The file to write configurations to.\n";
+	print "\tsmtpserver=[$defaults->{smtpserver}]\t: The smtp server for sending email.\n";
+	print "\tregresstorserver[$defaults->{regresstorserver}]\t: The server for regresstor web services.\n";
+}
+
+# Prints the projectsetup command
+sub printProjectSetup() {
+	print "Add/Change mail settings for a project in the regresstor database.\n";
+	print "\n";
+	print "regresstorMailSetup.pl projectsetup [options]\n";
+	&printCommonOptions();
+	print "\tproject=[$defaults->{project}]\t: The name of the project to set.\n";
+	print "\tmailto=[$defaults->{mailto}]\t: The mail list to send results to.\n";
+	print "\tmailfrom=[$defaults->{mailfrom}]\t: The email to reply to.\n";
+}
+
+if ( $#ARGV < 0 ) {
+	&printUsage();
+	exit;
+}
+
+my $command = $ARGV[0];
+if ( $command eq "--help" ) {
+	&printUsage();
+	exit;
+}
+if ( $command eq "help" ) {
+	if ( $#ARGV < 1) {
+		&printUsage();
+		exit;
+	}
+	else {
+		my $helpCommand = $ARGV[1];
+		foreach my $i ( 0 .. @commands - 1 ) {
+			if ( $helpCommand eq $commands[$i] ) {
+				eval( $helpFunctions[$i] );
+				exit;
+			}
+		}
+		print "Unknown Command.\n";
+		&printUsage();
+		exit;
+	}
+}
+
+# Fetch options for commands 
+foreach my $argnum ( 1 .. $#ARGV ) {
+	if ( $ARGV[$argnum] =~ /=/ ) {
+		my @param = ();
+		my $length = 0;
+		
+		@param = split( /=/, $ARGV[$argnum] );
+		$length = @param;
+
+		my $found = 0;
+		
+		if ( ! $length == 2 ) {
+			print "Invalid option: $ARGV[$argnum]\n";
+			print "Please specify in the form of <param>=<value>\n";
+			exit;
+		}
+		foreach my $i ( 0 .. @options - 1 ) {
+			if ( $param[0] eq $options[$i] ) {
+				$values->{$options[$i]} = $param[1];
+				$found = 1;
+			}
+		}
+		if ( ! $found ) {
+			print "Unknown param: $param[0]\n";
+			exit;
+		}
+	}
+	else {
+		print "Invalid option: $ARGV[$argnum]\n";
+		print "Please specify in the form of <param>=<value>\n";
+		exit;
+	}
+}
+
+foreach my $i ( 0 .. @options -1 ) {
+	if ( ! $values->{$options[$i]} ) {
+		$values->{$options[$i]} = $defaults->{$options[$i]};
+	}
+}
+
+print "Using setttings:\n";
+print "database = $values->{database}\n";
+print "host = $values->{host}\n";
+print "user = $values->{user}\n";
+print "password= $values->{password}\n";
+print "\n";
+
+sub commandCreateConfig() {
+	print "Creating configuration file...\n";
+
+	unless ( $values->{smtpserver} ) {
+		print "Error. You need to specify a smtpserver to send email with.\n";
+		die;
+	}
+
+	unless ( $values->{regresstorserver} ) {
+		print "Error. You need to specify regresstorserver to say where web services are located.\n"; 
+		die;
+	}
+
+	my $xml = new XML::Simple(
+	        NoAttr=>1,
+        	RootName=>'config' );
+                                                                                                                                    
+	my $data = $xml->XMLout( $values );
+	open configOutput, ">$values->{filename}"
+		or die "Unable to open file $values->{filename} for writing.\n";
+	print configOutput $data;
+	close configOutput;
+	print "Successfully writting configurations to $values->{filename}.\n";
+	print "Copy $values->{filename} to your RegresstorMail directory on your mail server.\n";
+}
+
+sub commandProjectSetup() {
+	
+	unless ( $values->{project} ) {
+		print "Required param: project\n";
+		die;
+	}
+	unless ( $values->{mailto} ) {
+		print "Required param: mailto\n";
+		die;
+	}
+	unless ( $values->{mailfrom} ) {
+		print "Required param: mailfrom\n";
+		die;
+	}
+
+	print "Adding/Changing settings for project $values->{project}...\n";
+
+	my $dbh = DBI->connect(
+		"DBI:mysql:$values->{database}:$values->{host}",
+		$values->{user},
+		$values->{password} );
+        unless ( $dbh ) {
+                print "Unable to connect to database $values->{database} on $values->{host}. Exiting...\n";
+                die;
+        }
+
+	my $projectID;
+	my $projectIDQuery = $dbh->prepare(
+		qq/
+			SELECT ID
+			FROM Project
+			WHERE Name='$values->{project}'
+		/ );
+	$projectIDQuery->execute();
+	my @projectResult = $projectIDQuery->fetchrow_array();
+	$projectIDQuery->finish();
+
+	my $projectCommand;
+	
+	if ( @projectResult ) {
+		$projectID = $projectResult[0];
+
+		$projectCommand = $dbh->prepare(
+			qq/
+				UPDATE Project
+				SET MailTo='$values->{mailto}', MailFrom='$values->{mailfrom}'
+				WHERE ID='$projectID'
+			/ );
+	}
+	else {
+		# Create new project
+		$projectCommand= $dbh->prepare(
+			qq/
+				INSERT INTO Project ( Name, MailTo, MailFrom )
+				VALUES ( '$values->{project}', '$values->{mailto}', '$values->{mailfrom}' )
+			/ );
+	}
+	$projectCommand->execute();
+	$projectCommand->finish();
+
+	my $projectQuery = $dbh->prepare(
+		qq/
+			SELECT ID, MailTo, MailFrom
+			FROM Project
+			WHERE Name='$values->{project}'
+		/ );
+	$projectQuery->execute();
+	@projectResult = $projectQuery->fetchrow_array();
+	$projectQuery->finish();
+
+	$dbh->disconnect();
+	
+	my $commandFailed = 1;
+	
+	if ( @projectResult ) {
+		if ( $projectResult[1] eq $values->{mailto} && $projectResult[2] eq $values->{mailfrom} ) {
+			$commandFailed = 0;
+		}
+	}
+
+	if ( $commandFailed ) {
+		print "Failed to add/change project settings.\n";
+		die;
+	}
+
+	print "Successfully add/changed settings for project.\n";
+}
+
+foreach my $i ( 0 .. @commands - 1 ) {
+	if ( $command eq $commands[$i] ) {
+		eval( $commandFunctions[$i] );
+		exit;
+	}
+}
+print "Unknown command $command.\n";
+
+__END__
+


Property changes on: long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorMailSetup.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/BinaryServer.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/BinaryServer.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/BinaryServer.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,74 @@
+
+package BinaryServer;
+
+use lib '../Common';
+use DBI;
+use SOAP::Transport::HTTP;
+
+use StGermainPrivate;
+use Dictionary;
+use QueryShortcuts;
+
+sub getBinary {
+	shift;		# remove class
+
+	unless ( @_ == 1  ) {
+		StGermainPrivate->SOAP_Fault_NumArgs();
+	}
+
+	my $arguments = shift;
+	my $getPluginResult = {};
+
+	my $pluginRetrived = 0;
+
+	# Mandatory info
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'IDs' );
+
+	my $config = Dictionary->new();
+	my $dbh = DBI->connect( "DBI:mysql:$config->{database}:$config->{host}", $config->{user}, $config->{password} )
+		or die StGermainPrivate->SOAP_Fault( "Unable to connect to database server $config->{database} at $config->{host} as $config->{user}" );
+
+	# Very simple approach to downloading plugins
+	# Receive a list of possible plugins to download and attempt to fetch them in order
+
+	my @IDs = @{ $arguments->{IDs} };
+	my $l = @IDs;
+	foreach $ID_I ( 0 .. @IDs - 1 ) {
+		if ( $pluginRetrived == 0 ) {
+			my @plugin = QueryShortcuts->GetTuple(
+				$dbh,
+				qq/
+					SELECT Name, Version, Author, Description, Organisation,
+						Hardware, OS, Kernel, CC, MachineName, BinaryLib
+					FROM Plugin, CompiledBinary
+					WHERE Plugin.ID = CompiledBinary.PluginID
+					AND   CompiledBinary.ID = '$IDs[$ID_I]'
+				/ );
+			if ( @plugin ) {
+				$getPluginResult = {
+					Name => $plugin[0],
+					Version => $plugin[1],
+					Author => $plugin[2],
+					Description => $plugin[3],
+					Organisation => $plugin[4],
+					Hardware => $plugin[5],
+					OS => $plugin[6],
+					Kernel => $plugin[7],
+					CC => $plugin[8],
+					MachineName => $plugin[9],
+					BinaryLib => $plugin[10] 
+				};
+				$pluginRetrived = 1;
+			}
+		}
+	}
+
+	unless ( $pluginRetrived == 1 ) {
+		die StGermainPrivate->SOAP_Fault( 'Unable to retrive plugin' );
+	}
+
+	return $getPluginResult;
+}
+
+1;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/services.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/services.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/services.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+#!/usr/bin/perl -w
+
+use BinaryServer;
+
+use SOAP::Transport::HTTP;
+SOAP::Transport::HTTP::CGI
+	-> dispatch_to('BinaryServer')
+	-> handle;
+
+1;
+__END__


Property changes on: long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/services.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/Common/Dictionary.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/Common/Dictionary.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/Common/Dictionary.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,38 @@
+package Dictionary;
+use strict;
+
+use XML::Simple;
+
+my $Dictionary_Default_Filename = "Config.xml";
+
+sub new {
+	my $type = shift;
+	my $self = {};
+	bless( $self );
+
+	if ( @_ ) {
+		$self->readXMLFile( @_ );
+	}
+	else {
+		$self->readXMLFile( $Dictionary_Default_Filename );
+	}
+	
+	return $self;
+}
+sub readXMLFile() {
+	my $self = shift;
+	my $argLength = @_;
+	unless ( $argLength == 1 ) {
+		return;
+	}
+	my $xml = XML::Simple->new();
+	my @data = $xml->XMLin( $_[0] );
+	my %config = %{ $data[0] };
+
+	foreach my $dataKey ( keys(%config) ) {
+		$self->{$dataKey} = $config{$dataKey};
+	}
+}
+
+1;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Services/Common/QueryShortcuts.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/Common/QueryShortcuts.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/Common/QueryShortcuts.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,131 @@
+package QueryShortcuts;
+use strict;
+
+use DBI;
+
+sub Exists {
+	shift;		# remove class name
+	unless ( @_ == 2 ) {
+		return undef;
+	}
+
+	my $dbh = shift;
+	my $queryString = shift;
+	
+	my $query = $dbh->prepare( $queryString );
+	$query->execute();
+	
+	my @queryResult = $query->fetchrow_array();
+	$query->finish();
+
+	if ( @queryResult ) {
+		return 1;
+	}
+	else {
+		return 0;
+	}
+}
+
+sub GetValue {
+	shift;		# remove class name
+	unless ( @_ == 2 ) {
+		return undef;
+	}
+
+	my $dbh = shift;
+	my $queryString = shift;
+
+	my $resultValue;
+	my $query = $dbh->prepare( $queryString );
+	$query->execute();
+	
+	my @queryResult = $query->fetchrow_array();
+	$query->finish();
+
+	if ( @queryResult ) {
+		$resultValue = $queryResult[0];
+	}
+	else {
+		$resultValue = undef;
+	}
+
+	return $resultValue;
+}
+
+sub Insert {
+	shift;		# remove class name
+	unless ( @_ == 2 ) {
+		return;
+	}
+
+	my $dbh = shift;
+	my $insertString = shift;
+	
+	my $insertCommand = $dbh->prepare( $insertString );
+	$insertCommand->execute();
+	$insertCommand->finish();
+}
+
+sub GetValueInsertIfNotExists {
+	shift;		# remove class name
+	unless ( @_ == 3 ) {
+		return undef;
+	}
+
+	my $dbh = shift;
+	my $queryString = shift;
+	my $insertString = shift;
+	
+	my $value = QueryShortcuts->GetValue( $dbh, $queryString );
+
+	if ( $value == undef ) {
+		QueryShortcuts->Insert( $dbh, $insertString );
+
+		$value = QueryShortcuts->GetValue( $dbh, $queryString );
+	}
+	
+	return $value;
+}
+
+sub GetTuple {
+	shift;		# remove class name
+	unless ( @_ == 2 ) {
+		return undef;
+	}
+
+	my $dbh = shift;
+	my $queryString = shift;
+
+	my $query = $dbh->prepare( $queryString );
+	$query->execute();
+	
+	my @queryResult = $query->fetchrow_array();
+	$query->finish();
+
+	return @queryResult;
+}
+
+sub GetData {
+	shift;		# remove class name
+	unless ( @_ == 2 ) {
+		return undef;
+	}
+
+	my $dbh = shift;
+	my $queryString = shift;
+
+	my @results = ();
+	my $query = $dbh->prepare( $queryString );
+	$query->execute();
+
+	while ( my @row = $query->fetchrow_array() ) {
+		push( @results, \@row );
+	}
+	$query->finish();
+
+	return @results;
+}
+
+
+1;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Services/Common/StGermainPrivate.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/Common/StGermainPrivate.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/Common/StGermainPrivate.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,136 @@
+package StGermainPrivate;
+use strict;
+
+use DBI;
+use SOAP::Transport::HTTP;
+
+use QueryShortcuts;
+
+sub SOAP_Fault {
+	shift;		# remove class
+	my $message = shift;
+
+	return SOAP::Fault
+		->faultcode( 'StGermain.Error' )
+		->faultstring( $message );
+}
+
+sub SOAP_Fault_NumArgs {
+	shift;		# remove class
+	die StGermainPrivate->SOAP_Fault( 'Invalid number of arguments' );
+}
+sub SOAP_Fault_NoKey {
+	shift;		# remove class
+	my $key = shift;
+	die StGermainPrivate->SOAP_Fault( "No value for {$key}" );
+}
+
+sub Assert_KeyIsInHash {
+	shift;		# remove class
+	my $hash = shift;
+	my $key = shift;
+
+	unless ( exists $hash->{$key} ) {
+		StGermainPrivate->SOAP_Fault_NoKey( $key );
+	}
+}
+
+sub SubmitBinaryPlugin {
+	shift;		# remove class
+	my $config = shift;
+	my $dbh = shift;
+	my $pluginID = shift;
+	my $arguments = shift;
+
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Hardware' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'OS' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Kernel' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'CC' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'MachineName' );
+
+	my $compiledBinaryID = QueryShortcuts->GetValue(
+		$dbh,
+		qq/
+			SELECT ID
+			FROM CompiledBinary
+			WHERE PluginID = '$pluginID'
+			AND   Hardware = '$arguments->{Hardware}'
+			AND   OS = '$arguments->{OS}'
+			AND   CC = '$arguments->{CC}'
+		/ );
+
+	if ( $compiledBinaryID != undef ) {
+		return { message => "Binary for {$arguments->{Name}, $arguments->{Version}, $arguments->{Hardware}, $arguments->{OS}, $arguments->{CC}} already exists" };
+	}
+
+	QueryShortcuts->Insert(
+		$dbh,
+		qq/
+			INSERT INTO CompiledBinary( PluginID, Hardware, OS, Kernel, CC, MachineName, BinaryLib )
+			VALUES ( 
+				'$pluginID',
+				'$arguments->{Hardware}',
+				'$arguments->{OS}',
+				'$arguments->{Kernel}',
+				'$arguments->{CC}',
+				'$arguments->{MachineName}',
+				'$arguments->{BinaryLib}' )
+		/ );
+
+	return { message => "Binary plugin sucessfully submitted" };
+}
+
+sub GetBinaryPlugin {
+	shift;		# remove class
+	my $config = shift;
+	my $dbh = shift;
+	my $pluginCondition = shift;
+	my $arguments = shift;
+
+	my $queryString =
+		qq/
+			SELECT CompiledBinary.ID
+			FROM Plugin, CompiledBinary
+			WHERE Plugin.ID = CompiledBinary.PluginID
+		/;
+
+	$queryString = $queryString . " AND " . $pluginCondition;
+
+	# Use 3 separate if statements
+	# Although all three values are required now, they could potentially be omitted too.
+
+	if ( exists $arguments->{Hardware} ) {
+		$queryString = $queryString . " AND Hardware='$arguments->{Hardware}'";
+	}
+	if ( exists $arguments->{OS} ) {
+		$queryString = $queryString . " AND OS='$arguments->{OS}'";
+	}
+	if ( exists $arguments->{CC} ) {
+		$queryString = $queryString . " AND CC='$arguments->{CC}'";
+	}
+
+	$queryString = $queryString . " ORDER BY Version DESC ";
+
+	my @CompiledBinaryIDs = QueryShortcuts->GetData( $dbh, $queryString );
+	my @idList = ();
+
+	# Recompact the data into a single array
+	foreach my $binaryID_I ( 0 .. @CompiledBinaryIDs - 1 ) {
+		my @binaryIDRow = @{ $CompiledBinaryIDs[$binaryID_I] };
+		push( @idList, $binaryIDRow[0] );
+	}
+
+	if ( @CompiledBinaryIDs ) {
+		return {
+			URL => $config->{binaryserver},
+			CompiledBinaryIDs => \@idList
+		};
+	}
+	return undef;
+}
+
+
+
+1;
+__END__
+

Added: long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-Dictionary.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-Dictionary.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-Dictionary.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+use Data::Dumper;
+
+use lib '..';
+use Dictionary;
+
+my $config = Dictionary->new();
+
+print Dumper( $config );
+


Property changes on: long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-Dictionary.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-QueryShortcuts.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-QueryShortcuts.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-QueryShortcuts.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+
+use DBI;
+use Data::Dumper;
+
+use lib '..';
+use Dictionary;
+use QueryShortcuts;
+
+my $config = Dictionary->new();
+my $dbh = DBI->connect( "DBI:mysql:$config->{database}:$config->{host}", $config->{user}, $config->{password} )
+	or die "Unable to connect to $config->{database} at $config->{host} as $config->{user}\n";
+
+my $existsPlugin = QueryShortcuts->Exists(
+	$dbh,
+	qq{
+		SELECT ID
+		FROM Plugin
+	} );
+if ( $existsPlugin == 1 ) {
+	print "Plugin table has data\n";
+}
+else {
+	print "Plugin table does not have data\n";
+}
+
+my $maxVersion = QueryShortcuts->GetValue(
+	$dbh,
+	qq{
+		SELECT MAX(Version)
+		FROM Plugin
+	} );
+if ( $maxVersion == undef ) {
+	$maxVersion = '0';
+}
+
+printf "$maxVersion\n";
+
+
+my $pluginID = QueryShortcuts->GetValueInsertIfNotExists(
+	$dbh,
+	qq/
+		SELECT ID
+		FROM Plugin
+		WHERE Name = 'QStest'
+		AND   Version = '1'
+	/,
+	qq/
+		INSERT INTO Plugin( Name, Version, Author, Description, Organisation )
+		VALUES (
+			'QStest',
+			'1',
+			'Alan Lo',
+			'blah blah blah',
+			'VPAC' )
+	/ );
+
+if ( $pluginID == undef ) {
+	print "Can't insert\n";
+}
+else {
+	print "Plugin ID is $pluginID\n";
+}
+
+my @data = QueryShortcuts->GetData(
+	$dbh,
+	qq/
+		SELECT *
+		FROM CompiledBinary
+	/ );
+
+print Dumper( @data );


Property changes on: long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-QueryShortcuts.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/StGermain.pm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/StGermain.pm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/StGermain.pm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,185 @@
+
+package StGermain;
+
+use DBI;
+use SOAP::Transport::HTTP;
+
+use lib 'Common';
+use StGermainPrivate;
+use Dictionary;
+use QueryShortcuts;
+
+sub ping {
+	shift;		# remove class
+
+	unless ( @_ == 1 ) {
+		StGermainPrivate->SOAP_Fault_NumArgs();
+	}
+
+	my $arguments = shift; # Hash (dictionary) of values
+
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'pingMessage' );
+
+	my $talkMsg = $arguments->{pingMessage};
+
+	return { pongMessage => $talkMsg };
+}
+
+sub giveFileTest {
+	shift;		# remove class
+
+	unless ( @_ == 1  ) {
+		StGermainPrivate->SOAP_Fault_NumArgs();
+	}
+
+	my $arguments = shift;
+
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'FileName' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'FileContents' );
+
+	my $fileName = $arguments->{Filename};
+	my $fileContexts = $arguments->{FileContents};
+
+	my $length = length $fileContexts;
+
+	my $returnMessage = sprintf ( "File %s received. Size %s bytes", $filename, $length );
+
+	return { retVal => $returnMessage };
+}
+
+sub submitPlugin {
+	shift;		# remove class
+
+	unless ( @_ == 1  ) {
+		StGermainPrivate->SOAP_Fault_NumArgs();
+	}
+
+	my $arguments = shift;
+	my $submitResult = {};
+
+	my $pluginSubmitted = 0;
+
+	# Mandatory info
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Name' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Version' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Author' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Description' );
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Organisation' );
+
+	my $config = Dictionary->new();
+	my $dbh = DBI->connect( "DBI:mysql:$config->{database}:$config->{host}", $config->{user}, $config->{password} )
+		or die StGermainPrivate->SOAP_Fault( "Unable to connect to database server $config->{database} at $config->{host} as $config->{user}" );
+
+	my $pluginID = QueryShortcuts->GetValueInsertIfNotExists(
+		$dbh,
+		qq/
+			SELECT ID
+			FROM Plugin
+			WHERE Name = '$arguments->{Name}'
+			AND   Version = '$arguments->{Version}'
+		/,
+		qq/
+			INSERT INTO Plugin( Name, Version, Author, Description, Organisation )
+			VALUES ( 
+				'$arguments->{Name}',
+				'$arguments->{Version}',
+				'$arguments->{Author}',
+				'$arguments->{Description}',
+				'$arguments->{Organisation}' )
+		/ );
+
+	if ( $pluginID == undef ) {
+		die StGermainPrivate->SOAP_Fault( 'Unable to add Plugin information to database' );
+	}
+	
+	if ( exists $arguments->{BinaryLib} ) {
+		$submitResult->{BinaryLib} = StGermainPrivate->SubmitBinaryPlugin( $config, $dbh, $pluginID, $arguments );
+		$pluginSubmitted = 1;
+	}
+
+	# Other forms of submission goes here
+
+	unless ( $pluginSubmitted == 1 ) {
+		die StGermainPrivate->SOAP_Fault( 'No plugin submitted' );
+	}
+
+	return $submitResult;
+}
+
+sub getPlugin {
+	shift;		# remove class
+
+	unless ( @_ == 1  ) {
+		StGermainPrivate->SOAP_Fault_NumArgs();
+	}
+
+	my $arguments = shift;
+	my $getPluginResult = {};
+
+	my $pluginRetrived = 0;
+
+	# Mandatory info
+	StGermainPrivate->Assert_KeyIsInHash( $arguments, 'Name' );
+
+	my $Version = undef;
+	if ( exists $arguments->{Version} ) {
+		$Version = $arguments->{Version};
+	}
+
+	my $config = Dictionary->new();
+	my $dbh = DBI->connect( "DBI:mysql:$config->{database}:$config->{host}", $config->{user}, $config->{password} )
+		or die StGermainPrivate->SOAP_Fault( "Unable to connect to database server $config->{database} at $config->{host} as $config->{user}" );
+
+	# Potentially, in a later upgrade, Version is a range or a condition
+	# Such as Version > xxx 
+
+	# Currently, if Version specified then the plugin fetched must be of that
+	# version. If not given, it fetches a list of all plugins it knows of under that name
+	# in most recent order.
+	my $pluginCondition;
+	if ( $Version == undef ) {
+		$pluginCondition="Name='$arguments->{Name}'";
+	}
+	else {
+		$pluginCondition="Name='$arguments->{Name}' AND Version='$Version'";
+	}
+
+	# This is where the money is.
+	# A smart fetching algorithm is here is what can really make this useful.
+	# Potentially connect with the 'Error' service to work things out a bit here.
+
+	# for now, you must have matching Hardware, OS and CC for a binary plugin
+	if ( 	exists $arguments->{Hardware} &&
+		exists $arguments->{OS} &&
+		exists $arguments->{CC} )
+	{
+		if ( exists $config->{binaryserver} ) {
+			$getPluginResult->{BinaryLib} = StGermainPrivate->GetBinaryPlugin(
+				$config,
+				$dbh,
+				$pluginCondition,
+				$arguments );
+			if ( $getPluginResult->{BinaryLib} != undef ) {
+				$pluginRetrived = 1;
+			}
+		}
+		else {
+			$getPluginResult->{binarydebug} = 'This server does not provide a binary download service';
+		}
+	}
+
+	# Put other forms of retrival here
+
+	unless ( $pluginRetrived == 1 ) {
+		die StGermainPrivate->SOAP_Fault( 
+qq/
+No matching plugin found
+$getPluginResult->{binarydebug}
+/ );
+	}
+
+	return $getPluginResult;
+}
+
+1;
+__END__

Added: long/3D/SNAC/trunk/StGermain/Services/services.cgi
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/services.cgi	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/services.cgi	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+#!/usr/bin/perl -w
+
+use StGermain;
+
+use SOAP::Transport::HTTP;
+SOAP::Transport::HTTP::CGI
+	-> dispatch_to('StGermain')
+	-> handle;
+
+1;
+__END__


Property changes on: long/3D/SNAC/trunk/StGermain/Services/services.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/tests/test-download.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/tests/test-download.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/tests/test-download.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+
+use DBI;
+use SOAP::Lite;
+use Data::Dumper;
+
+my $urn = 'urn:BinaryServer';
+my $url = 'http://localhost/~alan/cgi-bin/Codelet/BinaryDownload/services.cgi';
+
+my $downloadDir='downloads';
+
+print "Attempting to call talk() to $url...\n";
+
+my @args = ( '1' );
+
+$returnValue = SOAP::Lite
+	->uri( $urn )
+	->proxy( $url )
+	->getBinary( { IDs => \@args } );
+
+my $result = $returnValue->result;
+unless ( $returnValue->fault ) {
+	use Data::Dumper;
+	print Dumper( $result );
+	my $fileName = $downloadDir . "/" . $result->{Name} . "module.so";
+	print "Writing to file $fileName...\n";
+	open(FILEWRITE, ">$fileName");
+	print FILEWRITE $result->{BinaryLib};
+}
+else {
+	my $error = join ',',
+		$returnValue->fault->{faultcode},
+		$returnValue->fault->{faultstring};
+	print "$error\n";
+	exit 1;
+}
+


Property changes on: long/3D/SNAC/trunk/StGermain/Services/tests/test-download.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/tests/test-getBinary.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/tests/test-getBinary.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/tests/test-getBinary.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,120 @@
+#!/usr/bin/perl
+
+use DBI;
+use SOAP::Lite;
+use Data::Dumper;
+
+use lib '../Common';
+use Dictionary;
+use QueryShortcuts;
+
+my $urn = 'urn:StGermain';
+my $url = 'http://localhost/~alan/cgi-bin/Codelet/services.cgi';
+
+my $downloadDir='downloads';
+
+sub testGetPlugin {
+	my $arg = shift;
+	my $returnValue;
+
+	print "Attempting to call talk() to $url...\n";
+
+	$returnValue = SOAP::Lite
+		->uri( $urn )
+		->proxy( $url )
+		->getPlugin( $arg );
+
+	my $result = $returnValue->result;
+	unless ( $returnValue->fault ) {
+		use Data::Dumper;
+		print Dumper( $result );
+	}
+	else {
+		my $error = join ',',
+			$returnValue->fault->{faultcode},
+			$returnValue->fault->{faultstring};
+		print "$error\n";
+		exit 1;
+	}
+
+	if ( exists $result->{BinaryLib} ) {
+		my $binaryLibInfo = $result->{BinaryLib};
+		my @CompiledBinaryIDs = @{ $binaryLibInfo->{CompiledBinaryIDs} };
+		print "Received binary download url $binaryLibInfo->{URL}\n";
+		print "Possible download ID numbers: ";
+		foreach $downloadID_I ( 0 .. @CompiledBinaryIDs - 1 ) {
+			print "$CompiledBinaryIDs[$downloadID_I] ";
+		}
+		print "\n";
+
+		print "Downloading..\n";
+
+		my $binaryArgs = {
+			IDs => \@CompiledBinaryIDs
+		};
+		$returnValue = SOAP::Lite
+			->uri( 'urn:BinaryServer' )
+			->proxy( $binaryLibInfo->{URL} )
+			->getBinary( $binaryArgs );
+			
+		$result = $returnValue->result;
+		unless ( $returnValue->fault ) {
+			use Data::Dumper;
+			print Dumper( $result );
+		}
+		else {
+			my $error = join ',',
+				$returnValue->fault->{faultcode},
+				$returnValue->fault->{faultstring};
+			print "$error\n";
+			exit 1;
+		}
+
+		$filename = "$downloadDir/$result->{Name}module.so";
+		unless ( open( WRITEFILE, ">$filename" ) ) {
+			die "Unable to open file $filename for writing\n";
+		}
+
+		print WRITEFILE $result->{BinaryLib};
+	}
+}
+
+my $config = Dictionary->new();
+my $dbh = DBI->connect( "DBI:mysql:$config->{database}:$config->{host}", $config->{user}, $config->{password} )
+	or die "Unable to connect to $config->{database} at $config->{host} as $config->{user}\n";
+
+# get the first of any latest plugin
+my @plugin = QueryShortcuts->GetTuple(
+	$dbh,
+	qq{
+		SELECT Name, MAX(Version), Hardware, OS, CC
+		FROM Plugin, CompiledBinary
+		WHERE Plugin.ID = CompiledBinary.PluginID
+		GROUP BY Name
+	} );
+
+# Ask for a plugin info
+my $test = {
+	Name => $plugin[0],
+	Version => $plugin[1],
+	Hardware => $plugin[2],
+	OS => $plugin[3],
+	CC => $plugin[4]
+};
+
+print "===== TEST =====\n";
+print Dumper( $test );
+testGetPlugin( $test );
+	
+# Ask for a plugin info with any version
+my $test = {
+	Name => $plugin[0],
+	Hardware => $plugin[2],
+	OS => $plugin[3],
+	CC => $plugin[4]
+};
+
+print "===== TEST =====\n";
+print Dumper( $test );
+testGetPlugin( $test );
+	


Property changes on: long/3D/SNAC/trunk/StGermain/Services/tests/test-getBinary.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/tests/test-giveFileTest.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/tests/test-giveFileTest.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/tests/test-giveFileTest.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+use SOAP::Lite;
+
+my $urn = 'urn:StGermain';
+my $url = 'http://localhost/~alan/cgi-bin/Codelet/services.cgi';
+
+
+my $returnValue;
+
+my $filename = shift;
+if ( $filename eq "" ) {
+	$filename = "test-giveFileTest.pl";
+}
+print "Using file: $filename\n";
+
+unless ( open( MYFILE, $filename ) ) {
+	die "Can't open file $filename. Exiting...\n";
+}
+
+my $contents = "";
+my $line = "";
+
+$line = <MYFILE>;
+while ( $line ne "" ) { 
+	$contents = $contents . $line;
+	$line = <MYFILE>;
+}
+
+print "Attempting to call talk() to $url...\n";
+
+$returnValue = SOAP::Lite
+	->uri( $urn )
+	->proxy( $url )
+	->giveFileTest( {
+		FileName => $filename,
+		FileContents => $contents } );
+
+unless ( $returnValue->fault ) {
+	my $result = $returnValue->result->{retVal};
+	print("$result\n" );
+}
+else {
+	my $error = join ',',
+		$returnValue->fault->{faultcode},
+		$returnValue->fault->{faultstring};
+	print "$error\n";
+}
+
+


Property changes on: long/3D/SNAC/trunk/StGermain/Services/tests/test-giveFileTest.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/tests/test-ping.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/tests/test-ping.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/tests/test-ping.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+
+use SOAP::Lite;
+
+my $urn = 'urn:StGermain';
+my $url = 'http://localhost/~alan/cgi-bin/Codelet/services.cgi';
+
+print "Attempting to call talk() to $url...\n";
+
+my $returnValue;
+
+$returnValue = SOAP::Lite
+	->uri( $urn )
+	->proxy( $url )
+	->ping( { pingMessage => "Hello there!" } );
+
+use Data::Dumper;
+
+print "===== Env    ===========================\n";
+print Dumper( $returnValue );
+print "===== Result ===========================\n";
+print Dumper( $returnValue->result );
+print "===== Fault  ===========================\n";
+print Dumper( $returnValue->fault );
+
+
+print "===== Output ===========================\n";
+unless ( $returnValue->fault ) {
+	my $result = $returnValue->result->{pongMessage};
+	print("$result\n" );
+}
+else {
+	my $error = join ',',
+		$returnValue->fault->{faultcode},
+		$returnValue->fault->{faultstring};
+	print "$error\n"
+}
+
+


Property changes on: long/3D/SNAC/trunk/StGermain/Services/tests/test-ping.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Services/tests/test-submitBinary.pl
===================================================================
--- long/3D/SNAC/trunk/StGermain/Services/tests/test-submitBinary.pl	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Services/tests/test-submitBinary.pl	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+use DBI;
+use SOAP::Lite;
+use Data::Dumper;
+
+use lib '../Common';
+use Dictionary;
+use QueryShortcuts;
+
+my $urn = 'urn:StGermain';
+my $url = 'http://localhost/~alan/cgi-bin/Codelet/services.cgi';
+
+sub testSubmit {
+	my $arg = shift;
+	my $returnValue;
+
+	print "Attempting to call talk() to $url...\n";
+
+	$returnValue = SOAP::Lite
+		->uri( $urn )
+		->proxy( $url )
+		->submitPlugin( $arg );
+
+	unless ( $returnValue->fault ) {
+		my $result = $returnValue->result->{BinaryLib};
+		use Data::Dumper;
+		print Dumper( $result );
+	}
+	else {
+		my $error = join ',',
+			$returnValue->fault->{faultcode},
+			$returnValue->fault->{faultstring};
+		print "$error\n";
+	}
+}
+
+my $config = Dictionary->new();
+my $dbh = DBI->connect( "DBI:mysql:$config->{database}:$config->{host}", $config->{user}, $config->{password} )
+	or die "Unable to connect to $config->{database} at $config->{host} as $config->{user}\n";
+
+my $maxVersion = QueryShortcuts->GetValue(
+	$dbh,
+	qq{
+		SELECT MAX(Version)
+		FROM Plugin
+	} );
+if ( $maxVersion == undef ) {
+	$maxVersion = '0';
+}
+
+$maxVersion += 1;
+
+# Just make a Plugin record
+my $test = {
+	Name => 'TestPlugin',
+	Version => $maxVersion,
+	Author => 'Alan Lo',
+	Description => 'A dummy plugin',
+	Organisation => 'VPAC' };
+
+print "===== TEST =====\n";
+print Dumper( $test );
+testSubmit( $test );
+
+# Try to submit a record with incomplete args
+my $test = {
+	Version => $maxVersion,
+	Author => 'Alan Lo',
+	Description => 'A dummy plugin',
+	Organisation => 'VPAC' };
+	
+print "===== TEST =====\n";
+print Dumper( $test );
+testSubmit( $test );
+
+# Submit a binary
+my $test = {
+	Name => 'TestPlugin',
+	Version => $maxVersion,
+	Author => 'Alan Lo',
+	Description => 'A dummy plugin',
+	Organisation => 'VPAC',
+	Hardware => 'i686',
+	OS => 'linux',
+	Kernel => 'gentoo',
+	CC => 'gcc',
+	MachineName => 'dummy.vpac.org',
+	BinaryLib => 'Pretend this string is binary data' 
+};
+
+print "===== TEST =====\n";
+print Dumper( $test );
+testSubmit( $test );
+
+# Submit the binary again to force check
+my $test = {
+	Name => 'TestPlugin',
+	Version => $maxVersion,
+	Author => 'Alan Lo',
+	Description => 'A dummy plugin',
+	Organisation => 'VPAC',
+	Hardware => 'i686',
+	OS => 'linux',
+	Kernel => 'gentoo',
+	CC => 'gcc',
+	MachineName => 'dummy.vpac.org',
+	BinaryLib => 'Pretend this string is binary data' 
+};
+
+print "===== TEST =====\n";
+print Dumper( $test );
+testSubmit( $test );
+	


Property changes on: long/3D/SNAC/trunk/StGermain/Services/tests/test-submitBinary.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/COPYING
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/COPYING	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/COPYING	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,510 @@
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must
+be allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at least
+    three years, to give the same user the materials specified in
+    Subsection 6a, above, for a charge no more than the cost of
+    performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+  Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/all.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/all.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/all.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: all.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: all all_build
+
+RUN_TEE=true
+
+ifndef TEE
+	RUN_TEE=false
+endif
+ifdef USE_NOLOG
+	RUN_TEE=false
+endif
+ifdef TEE_ON
+	RUN_TEE=false
+endif
+
+ifeq (${RUN_TEE}, true)
+all:
+	@TEE_ON=1 ${MAKE} all_build 2>&1 | ${TEE} make${OPTIONS}.log
+	@echo "---------------------"
+	@echo "*** Build Summary ***"
+	@if grep -i "warning" make${OPTIONS}.log > make${OPTIONS}.warning; \
+		then echo "Warnings during build. See make${OPTIONS}.warning for details"; \
+		else ${RM} make${OPTIONS}.warning; echo "No warnings"; \
+		fi
+	@if grep -v "error[s]*.o" make${OPTIONS}.log | grep -i "error" > make${OPTIONS}.error; \
+		then echo "Errors during build. See make${OPTIONS}.error for details"; \
+		else ${RM} make${OPTIONS}.error; echo "No Errors"; \
+		fi
+	@echo "Log stored in: make${OPTIONS}.log"
+	@echo "---------------------"
+	@if test -r make${OPTIONS}.error; \
+		then ${MAKE} errorhelp; \
+		fi
+else
+all:
+	@${MAKE} all_build
+endif
+
+# Default build rule
+ifeq (${BUILD_SUBDIRS_LAST},true)
+ALL_BUILD_LIST := \
+	${PRE_MAKE} \
+	${SUBPROJ} \
+	${TARGETS} \
+	${HEADERS} \
+	${LIB} \
+	${MOD} \
+	${PLUGINS_OBJS} \
+	${PLUGINS} \
+	${PYB} \
+	${PYC} \
+	${TESTS} \
+	${BIN} \
+	${SUBDIRS} \
+	${POST_MAKE} 
+	remove-meta
+
+else
+ALL_BUILD_LIST := \
+	${PRE_MAKE} \
+	${SUBPROJ} \
+	${SUBDIRS} \
+	${TARGETS} \
+	${HEADERS} \
+	${LIB} \
+	${MOD} \
+	${PLUGINS_OBJS} \
+	${PLUGINS} \
+	${PYB} \
+	${PYC} \
+	${TESTS} \
+	${BIN} \
+	${POST_MAKE} 
+#	remove-meta 
+	
+endif
+
+all_build: ${ALL_BUILD_LIST}
+
+
+all-help: help-title all-command-header
+	@echo "Compiles all targets in current and all subdirectories."
+
+
+COMMAND_HELP += all-help

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/check.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/check.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/check.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: check patchtests
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "PROJ_ROOT=\"${PROJ_ROOT}\"" > tmp.sh; \
+	echo "export PROJ_ROOT" >> tmp.sh; \
+	echo "BLD_DIR=\"${BLD_DIR}\"" >> tmp.sh; \
+	echo "export BLD_DIR" >> tmp.sh; \
+	echo "TMP_DIR=\"${TMP_DIR}\"" >> tmp.sh; \
+	echo "export TMP_DIR" >> tmp.sh; \
+	echo "BIN_DIR=\"${BIN_DIR}\"" >> tmp.sh; \
+	echo "export BIN_DIR" >> tmp.sh; \
+	echo "LIB_DIR=\"${LIB_DIR}\"" >> tmp.sh; \
+	echo "export LIB_DIR" >> tmp.sh; \
+	echo "INC_DIR=\"${INC_DIR}\"" >> tmp.sh; \
+	echo "export INC_DIR" >> tmp.sh; \
+	echo "PYB_DIR=\"${PYB_DIR}\"" >> tmp.sh; \
+	echo "export PYB_DIR" >> tmp.sh; \
+	echo "PYC_DIR=\"${PYC_DIR}\"" >> tmp.sh; \
+	echo "export PYC_DIR" >> tmp.sh; \
+	echo "TST_DIR=\"${TST_DIR}\"" >> tmp.sh; \
+	echo "export TST_DIR" >> tmp.sh; \
+	echo "PATH=\"${BIN_DIR}:${PATH}\"" >> tmp.sh; \
+	echo "export PATH" >> tmp.sh; \
+	echo "LD_LIBRARY_PATH=\"${LIB_DIR}:${LD_LIBRARY_PATH}\"" >> tmp.sh; \
+	echo "export LD_LIBRARY_PATH" >> tmp.sh; \
+	echo "DYLD_LIBRARY_PATH=\"${LIB_DIR}:${DYLD_LIBRARY_PATH}\"" >> tmp.sh; \
+	echo "export DYLD_LIBRARY_PATH" >> tmp.sh; \
+	echo "PYTHONPATH=\"${PYC_DIR}:${PYB_DIR}:${PYTHONPATH}\"" >> tmp.sh; \
+	echo "export PYTHONPATH" >> tmp.sh; \
+	echo "MPI_DIR=\"${MPI_DIR}\"" >> tmp.sh; \
+	echo "export MPI_DIR" >> tmp.sh; \
+	echo "MPI_BINDIR=\"${MPI_BINDIR}\"" >> tmp.sh; \
+	echo "export MPI_BINDIR" >> tmp.sh; \
+	echo "MPI_LIBDIR=\"${MPI_LIBDIR}\"" >> tmp.sh; \
+	echo "export MPI_LIBDIR" >> tmp.sh; \
+	echo "MPI_INCDIR=\"${MPI_INCDIR}\"" >> tmp.sh; \
+	echo "export MPI_INCDIR" >> tmp.sh; \
+	echo "MPI_RUN=\"${MPI_RUN}\"" >> tmp.sh; \
+	echo "export MPI_RUN" >> tmp.sh; \
+	echo "MPI_NPROC=\"${MPI_NPROC}\"" >> tmp.sh; \
+	echo "export MPI_NPROC" >> tmp.sh; \
+	echo "REGRESSTOR_URL=\"${REGRESSTOR_URL}\"" >> tmp.sh; \
+	echo "export REGRESSTOR_URL" >> tmp.sh;
+
+ifeq (0,${MAKELEVEL})
+	export CURRDATE_TIME := $(shell date +%F_%R)
+	export PASSTOTALFILE := ${TMP_DIR}/passtotal.${CURRDATE_TIME}.txt
+	export FAILTOTALFILE := ${TMP_DIR}/failtotal.${CURRDATE_TIME}.txt
+endif
+
+check: ${PRE_MAKE_check} ${SUBDIRS} ${CHECKS} ${POST_MAKE_check}
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	if test ! "${RUNID}x" = "x"; then \
+		echo "RUNID=${RUNID}" >> tmp.sh; \
+		echo "export RUNID" >> tmp.sh; \
+		echo "REGRESSION_RUN=1" >> tmp.sh; \
+		echo "export REGRESSION_RUN" >> tmp.sh; \
+	fi; \
+	list='${CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;
+
+patchtests: ${SUBDIRS} ${PATCH_TESTS}
+
+check-help: help-title check-command-header
+	@echo "Runs all unit & system tests in sub and current directories"
+	@echo "If run_long_checks is enabled, long_checks are also included as well"
+	@echo "Tests are shell scripts that results in pass, "
+	@echo "diff (difference in expected result) and error (program error)"
+	@echo ""
+	@echo "All tests listed in the 'checks' variable in a directory are executed"
+
+COMMAND_HELP += check-help

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/clean.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/clean.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/clean.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: clean.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+RM_LIST += ${RM_LIST_TEMPS}
+
+MAKELOGS += $(shell find . -name "make*\.log")
+MAKELOGS += $(shell find . -name "make*\.warning")
+MAKELOGS += $(shell find . -name "make*\.error")
+RM_LIST += ${MAKELOGS}
+
+.PHONY: clean distclean distcleansub cleantemp 
+
+clean: ${PRE_MAKE_clean} ${SUBDIRS} cleanThisDir ${POST_MAKE_clean}
+
+distclean: ${PRE_MAKE_distclean} ${SUBDIRS} distCleanThisDir ${POST_MAKE_clean}
+	@${RM_F} ${TMP_DIR} ${BLD_DIR}
+
+cleantemp: ${SUBDIRS} cleanTempThisDir
+
+distcleansub: ${SUBDIRS} distCleanThisDir
+
+
+cleanThisDir:
+	@if test `echo ${RM_LIST} | wc -w` -gt 0; then \
+		echo "${RM_F} ${RM_LIST}"; \
+		${RM_F} ${RM_LIST}; \
+	fi
+
+distCleanThisDir: cleanThisDir
+	@(if test -h makefile; then ${RM_F} makefile; fi)
+	@${RM_F} Makefile.system
+
+cleanTempThisDir:
+	@if test `echo ${RM_LIST_TEMPS} | wc -w` -gt 0; then \
+		echo "${RM_F} ${RM_LIST_TEMPS}"; \
+		${RM_F} ${RM_LIST_TEMPS}; \
+	fi
+
+clean-logs:
+	@${RM_F} ${MAKELOGS}
+
+remove-meta:
+	@${RM_F} ${MOD_META_C} ${PLUGINS_META_C} ${META_C}
+
+clean-help: help-title clean-command-header
+	@echo "Recursively cleans subdirectories of targets, and temporary files."
+	@echo "Directories will remain."
+
+dist-clean-help: help-title dist-clean-command-header
+	@echo "Recursively cleans subdirectories of targets, temporary files and directories."
+	@echo "WARNING:"
+	@echo "This command removies directories and is unsafe if prefix or blddir is set to"
+	@echo "a shared location."
+
+COMMAND_HELP += clean-help dist-clean-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/docs.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/docs.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/docs.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: docs.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: docs 
+
+docs: ${SUBDIRS} dox
+
+dox:
+	@for dcfile in ${DOXINPUTS}; do \
+		sed 's:^\(INPUT\).*:\1 = '"${PROJ_ROOT}:" $$dcfile > $${dcfile}.1; \
+		sed 's:^\(STRIP_FROM_PATH\).*:\1 = '"${PROJ_ROOT}:" $${dcfile}.1 > $${dcfile}.2; \
+		if test -x "${SVN}"; then \
+			REVLINE=`${SVN} info | grep Revision`; \
+			sed 's+^\(PROJECT_NUMBER\).*+\1 = '"$${REVLINE}+" $$dcfile.2 > $${dcfile}.3; \
+		fi; \
+		${DOXYGEN} $${dcfile}.3; \
+		${RM_F} $${dcfile}.1 $${dcfile}.2 $${dcfile}.3; \
+	done;
+
+docs-help: help-title docs-command-header
+	@echo "Create doxygen (html/latex/man) documentation."
+
+COMMAND_HELP += docs-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/echo.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/echo.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/echo.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: echo.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: echo
+
+ifndef VAR
+echo:
+	@echo "Usage: make echo VAR=(variable to echo)"
+
+else
+echo:
+	@echo "VAR: $(VAR)=$($(VAR))"
+
+endif
+
+
+%-echo:
+	@echo "VAR: $*=$($*)"
+
+echo-help: help-title echo-command-header
+	@echo "Displays variables as seen by the make system"
+	@echo "Usage:"
+	@echo "   make echo VAR=(variable)"
+	@echo "OR"
+	@echo "   make (variable)-echo"
+
+COMMAND_HELP += echo-help

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/errorhelp.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/errorhelp.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/errorhelp.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: errorhelp.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: errorhelp
+
+ifeq ($(shell if test -r make${OPTIONS}.log -a -r make${OPTIONS}.error; then echo true; fi),true)
+
+errorhelp: ${ERRORHELP}
+
+else
+
+errorhelp:
+	@echo "No errors detected"
+
+endif
+
+errorhelp-help: help-title errorhelp-command-header
+	@echo "Tries to examine make outputs and display in simpiler terms"
+	@echo "StGermain related compile errors."
+	
+
+COMMAND_HELP += errorhelp-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/examples.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/examples.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/examples.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifdef examples_xml
+	examples_xml := $(subst .xml,, $(strip ${examples_xml} ) )
+	EXAMPLES_SRCDIR := $(shell pwd)
+	EXAMPLES_STOREDIR := $(strip $(subst ${PROJ_ROOT},${PROJECT}, $(shell pwd)))
+	EXAMPLES_XML = ${addprefix ${EXAMPLES_DIR}/${EXAMPLES_STOREDIR}/, ${addsuffix .flatten.xml,${examples_xml} } }
+endif
+
+.PHONY: examples
+
+examples: ${EXAMPLES_XML} ${SUBDIRS} 
+
+ifdef examples_xml
+
+${EXAMPLES_XML}: ${EXAMPLES_DIR}/${EXAMPLES_STOREDIR}/%.flatten.xml: %.xml ${EXAMPLES_DIR}
+	@if test ! -d "${EXAMPLES_DIR}/${EXAMPLES_STOREDIR}"; then ${MKDIR} "${EXAMPLES_DIR}/${EXAMPLES_STOREDIR}"; fi
+	- at if test ! -x ${STGERMAIN_DIR}/bin/FlattenXML; then \
+		echo "Example $< not being flatten because ${STGERMAIN_DIR}/bin/FlattenXML does not exist"; \
+	else \
+		echo "Creating flatten xml example file $@"; \
+		${STGERMAIN_DIR}/bin/FlattenXML ${EXAMPLES_SRCDIR}/$< -output_file=$@ 2>&1 > /dev/null; \
+	fi
+endif
+
+examples-help: help-title examples-command-header
+	@echo "Recursively looks in each subdirectory for input files listed in the"
+	@echo "examples_xml variable. Files found are flatteded and stored in the prefix"
+	@echo "directory."
+
+COMMAND_HELP += examples-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/find_fail.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/find_fail.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/find_fail.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: find_fail.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+find_fail:
+	@(find . -name "*.diffs" 2> /dev/null)
+	@(find . -name "*.error" 2> /dev/null)
+
+#alias
+ff: find_fail
+
+find_fail-help: help-title find_fail-command-header
+	@echo "Finds test outputs (.diffs and .error) files to"
+	@echo "to reveal failed tests."
+	@echo ""
+	@echo "Usage:"
+	@echo "   make find_fail"
+	@echo "OR"
+	@echo "   make ff"
+
+
+COMMAND_HELP += find_fail-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/help.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/help.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/help.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: help.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: help
+
+COMMAND_TOPICS := $(addsuffix -topic,${COMMAND_HELP})
+
+help: help-title help-command command-topics
+
+help-title:
+	@echo "VMake - Build System"
+	@echo "--------------------"
+
+help-command:
+	@echo "Command topic list:"
+
+command-topics: ${COMMAND_TOPICS}
+
+%-topic:
+	@echo "   $*"
+
+%-command-header:
+	@echo "Command: $*"
+	@echo ""
+	@echo "Description:"
+	@echo ""

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/long_check.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/long_check.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/long_check.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: long_check long_patchtests
+
+long_check: override CHECKS=${LONG_CHECKS}
+long_check: check
+
+long_patchtests: override CHECKS=${LONG_CHECKS}
+long_patchtests: patchtests
+
+long_check-help: help-title long_check-command-header
+	@echo "Runs ONLY long unit & system tests in sub and current directories"
+	@echo "Tests are shell scripts that results in pass, "
+	@echo "diff (difference in expected result) and error (program error)"
+	@echo ""
+	@echo "All tests listed in the 'long_checks' variable in a directory are executed"
+
+COMMAND_HELP += long_check-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/regresstor.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/regresstor.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/regresstor.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifdef REGRESSION_RUN
+	PROJ_CFLAGS += -DREGRESSION_RUN -DREGRESSTOR_URL=\"${REGRESSTOR_URL}\"
+endif
+ifdef RUNID
+	PROJ_CFLAGS += -DRUNID=\"${RUNID}\"
+endif
+
+ifdef HAVE_SOAP
+
+.PHONY: regression regression_check submit_build
+
+REGRESSION_TEST_CLEAN_SUBDIRS = ${addsuffix -regression_clean, ${subdirs}}
+REGRESSION_TEST_CLEAN_FILES = ${TESTS} ${TEST_OBJS}
+
+regression_test_clean: ${REGRESSION_TEST_CLEAN_SUBDIRS} regression_test_cleanfiles
+
+regression_test_cleanfiles:
+	@if test `echo ${REGRESSION_TEST_CLEAN_FILES} | wc -w` -gt 0; then \
+		echo "${RM_F} ${REGRESSION_TEST_CLEAN_FILES}"; \
+		${RM_F} ${REGRESSION_TEST_CLEAN_FILES}; \
+	fi
+
+%-regression_clean: %
+	@(${CD} `echo $@ |${SED} 's/-regression_clean//'`; ${MAKE} PROJ_ROOT=${PROJ_ROOT} regression_test_clean)
+
+
+regression:
+	@(${MAKE} clean)
+	@(if test ! "`find . -name BUILDID`x" = "x"; then find . -name BUILDID | xargs ${RM}; fi)
+	@(${MAKE} all)
+	@(if test "`grep -v 'error[s]*.o' make${OPTIONS}.log | grep -i 'error'`x" = "x"; \
+		then COMPILED=1 ${MAKE} submit_build; \
+		else COMPILED=0 ${MAKE} submit_build; \
+		fi)
+
+submit_build:
+	@if test -x ${BLD_DIR}/bin/regresstorSubmitBuild; then \
+		ulimit -c unlimited; \
+		${BLD_DIR}/bin/regresstorSubmitBuild \
+				"Project=${PROJECT}" \
+				"BuildOptions=${OPTIONS}" \
+				"CC=${CC}" \
+				"Revision=${VERSION}" \
+				"MachineName=`hostname`" \
+				"Hardware=${MACHINE}" \
+				"OS=${SYSTEM}" \
+				"Kernel=${KERNEL_RELEASE}" \
+				"Who=${USER}" \
+				"LocalModification=`if ${SVN} st | ${GREP} '^[M,A,G,C,!] ' > /dev/null; then echo '1'; else echo '0'; fi`" \
+				"Compiled=${COMPILED}" \
+				"MakefileLocation=${PROJ_ROOT}/Makefile.system" \
+				"LogLocation=./make${OPTIONS}.log" \
+				"URL=${REGRESSTOR_URL}"; \
+		else \
+			echo "regresstorSubmitBuild failed!!!"; \
+		fi 
+
+regression_check:
+	@(if test -e RUNID; then ${RM} RUNID; fi)               # Remove previous RUNID if any
+	@(if test -r BUILDID; then \
+		echo "Starting Run..."; \
+		${BLD_DIR}/bin/regresstorStartRun \
+			"BuildID=`cat BUILDID`" \
+			"URL=${REGRESSTOR_URL}"; \
+		else echo "Run make regression first"; \
+		fi)
+	@(if test -r RUNID; then ${MAKE} regression_test_clean; fi)
+	@(if test -r RUNID; then REGRESSION_RUN=1 RUNID=`cat RUNID` REGRESSTOR_URL=${REGRESSTOR_URL} ${MAKE}; fi )
+	@(if test -r RUNID; then ${MAKE} RUNID=`cat RUNID` check; fi)
+	@(if test -r RUNID; then \
+		${BLD_DIR}/bin/regresstorEndRun \
+			"RunID=`cat RUNID`" \
+			"URL=${REGRESSTOR_URL}"; \
+		fi)
+else
+
+regression:
+	@echo "CSOAP not available"
+
+submit_build:
+	@echo "CSOAP not available"
+
+regression_check:
+	@echo "CSOAP not available"
+
+endif
+
+
+
+regression-help: help-title regression-command-header
+	@echo "Performs a make all for regression testing."
+	@echo "This command is only available when CSOAP is detected."
+	@echo "Results of compile (pass/faila) are sent to web service at"
+	@echo "REGRESSTOR_URL variable."
+	
+regression-check-help: help-title regression-check-command-header
+	@echo "Performs a make check for regression testing."
+	@echo "This command is only available when CSOAP is detected."
+	@echo "Results of tests (pass/faila) are sent to web service at"
+	@echo "REGRESSTOR_URL variable."
+
+COMMAND_HELP += regression-help regression-check-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/scibenchmark_check.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/scibenchmark_check.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/scibenchmark_check.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: scibenchmark_check scibenchmark_patchtests
+
+scibenchmark_check: override CHECKS=${SCIBENCHMARK_CHECKS}
+scibenchmark_check: check
+
+scibenchmark_patchtests: override CHECKS=${SCIBENCHMARK_CHECKS}
+scibenchmark_patchtests: patchtests
+
+scibenchmark_check-help: help-title long_check-command-header
+	@echo "Runs ONLY science benchmark checks in sub and current directories"
+	@echo "Tests are shell scripts that results in pass, "
+	@echo "diff (difference in expected result) and error (program error)"
+	@echo ""
+	@echo "All tests listed in the 'scibenchmark_checks' variable in a directory are executed"
+
+COMMAND_HELP += scibenchmark_check-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/single_exe.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/single_exe.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/single_exe.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: single_exe.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifndef XML_APP
+single_exe:
+	@echo "Usage: make single_exe XML_APP=(xml file) APP=(binary name)"
+
+else
+
+ifndef APP
+single_exe:
+	@echo "Usage: make single_exe XML_APP=(xml file) APP=(binary name)"
+
+else
+
+# Targets for the object files and libs but no executable
+single_exe_objs_and_libs: ${PRE_MAKE} ${SUBDIRS} ${LIB} ${HEADERS} ${MOD} ${PLUGINS_OBJS} ${PLUGINS} ${PYB} remove-meta ${POST_MAKE}
+
+# Targets the final binary
+ifeq ($(findstring ${APP},${BIN}),)
+single_exe_binary: ${SUBDIRS}
+else
+single_exe_binary: ${SUBDIRS} ${BIN}
+endif
+
+CFLAGS += "-DSINGLE_EXE"
+SINGLE_EXE_LIB := $(shell echo "-L${LIB_DIR} -l`basename ${XML_APP} .xml`")
+EXTERNAL_LIBS := ${SINGLE_EXE_LIB} ${EXTERNAL_LIBS} ${SINGLE_EXE_LIB} ${EXTERNAL_LIBS}
+
+ifdef EXTRA_PACKAGES
+	EXTERNAL_LIBS += $(foreach package, ${EXTRA_PACKAGES}, $($(package)_LIBS) )
+endif
+
+single_exe: single_exe_objs_and_libs
+	@(if test ! -x ${STGERMAIN_DIR}/bin/ListPlugins; then echo "Make ListPlugin program in StGermain first"; exit 1; fi)
+	# Creating soft link to have relative path access to data
+	@(${LN_S} ${STGERMAIN_DIR}/bin/ListPlugins ListPlugins-softlink)
+
+	# Making temp dirs to store info
+	@(if test ! -d `dirname ${TMP_DIR}/${XML_APP}`; then ${MKDIR} `dirname ${TMP_DIR}/${XML_APP}`; fi)
+
+	# Making list of plugins required
+	@(./ListPlugins-softlink ${XML_APP} | ${GREP} -v "StGermain Framework\." > ${TMP_DIR}/${XML_APP}.pluginlist)
+
+	# Making directory list of where plugin objects are found
+	@(if test -f ${TMP_DIR}/${XML_APP}.dirs; then ${RM} ${TMP_DIR}/${XML_APP}.dirs; fi)
+	-@(for plugin in `cat ${TMP_DIR}/${XML_APP}.pluginlist`; do dirname `find ${TMP_DIR} -name $$plugin.o` >> ${TMP_DIR}/${XML_APP}.dirs 2> /dev/null; done)
+	-@(for plugin in `cat ${TMP_DIR}/${XML_APP}.pluginlist`; do find ${TMP_DIR} -type d -name "*$${plugin}module*" >> ${TMP_DIR}/${XML_APP}.dirs 2> /dev/null; done)
+
+	# Making complete list of plugin objects
+	@(if test -f ${TMP_DIR}/${XML_APP}.objlist; then ${RM} ${TMP_DIR}/${XML_APP}.objlist; fi)
+	@(for dirs in `cat ${TMP_DIR}/${XML_APP}.dirs | uniq`; do find $$dirs -name "*.o" >> ${TMP_DIR}/${XML_APP}.objlist; done)
+
+	# Making Register code for plugins
+	@(echo "" > ${TMP_DIR}/${XML_APP}.c)
+	@(for plugin in `cat ${TMP_DIR}/${XML_APP}.pluginlist`; do echo "void $${plugin}_Register( void* context );" >> ${TMP_DIR}/${XML_APP}.c; done)
+	@(echo "void SingleRegister( void* context ) {" >> ${TMP_DIR}/${XML_APP}.c)
+	@(for plugin in `cat ${TMP_DIR}/${XML_APP}.pluginlist`; do echo "$${plugin}_Register( context );" >> ${TMP_DIR}/${XML_APP}.c; done)
+	@(echo "}" >> ${TMP_DIR}/${XML_APP}.c)
+	@(${CC} ${CC_PIPE} ${CFLAGS} ${SO_CFLAGS} -c -o ${TMP_DIR}/${XML_APP}.o ${TMP_DIR}/${XML_APP}.c)
+	@(echo "${TMP_DIR}/${XML_APP}.o" >> ${TMP_DIR}/${XML_APP}.objlist)
+
+	# Creating library archive
+	@(cat ${TMP_DIR}/${XML_APP}.objlist | xargs ${AR} cruP ${TMP_DIR}/${XML_APP}.a)
+	@(${CP} ${TMP_DIR}/${XML_APP}.a ${LIB_DIR}/lib`basename ${XML_APP} .xml`.a)
+	@(${RM} ListPlugins-softlink)
+	# Running make to create executable
+	@(make single_exe_binary XML_APP=${XML_APP} APP=${APP})
+
+endif
+endif
+
+
+single_exe-help: help-title single_exe-command-header
+	@echo "Compiles all sources into a single executable (libs+plugins)"
+	@echo "Useful for machines such as the blue gene which does not"
+	@echo "suppose dynamic libraries"
+	@echo "NOTE:"
+	@echo "This command has been unchecked since late 2005"
+
+COMMAND_HELP += single_exe-help
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/svncleanup.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/svncleanup.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/svncleanup.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: svncleanup.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: svncleanup
+
+svncleanup: check_have_svn check_svn_repository
+	@echo "Performing svn cleanup on all externals..."
+	@echo ">>> Clean up ."
+	@svn cleanup .
+	@for dir in `${SVN} status | ${GREP} "^X" | ${SED} 's/X      //'`; do \
+		echo ">>> Clean up $$dir"; \
+		${SVN} cleanup $$dir; \
+	done
+
+
+svncleanup-help: help-title svncleanup-command-header svncleanup-message svncleanup-usage
+
+svncleanup-message:
+	@echo "Traverses current and sub directories for svn externals and performs cleanup"
+
+svncleanup-usage:
+	@echo "Usage:"
+	@echo "   make svncleanup"
+
+
+COMMAND_HELP += svncleanup-help

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/touch.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/touch.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/touch.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: touch.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifndef LISTDIR
+	LISTDIR=${HOME}
+endif
+
+ifdef NOLIST
+
+touch-list:
+
+else
+
+TOUCH_DATE=$(shell date +"%Y-%b-%d-%a-%H-%M")
+TOUCH_FILE=${TOUCH_DATE}-touch.list
+
+touch-list:
+	@(echo "Creating touch list in ${LISTDIR}/${TOUCH_FILE}"; ${LS} -rtl > ${LISTDIR}/${TOUCH_FILE})
+	-@(if test "`echo ${EXPORT_DIR} | grep ${PROJ_ROOT}`x" = "x"; then echo "Appending binary file list..."; ${LS} -rtl ${EXPORT_DIR}/ 2> /dev/null >> ${LISTDIR}/${TOUCH_FILE}; fi)
+	-@(if test "`echo ${BLD_DIR} | grep ${PROJ_ROOT}`x" = "x"; then echo "Appending temp file list..."; ${LS} -rtl ${BLD_DIR} 2> /dev/null >> ${LISTDIR}/${TOUCH_FILE}; fi )
+
+endif
+
+touch: touch-list
+	@(echo "Touch files..."; find . -type f | xargs touch)
+	-@(if test "`echo ${EXPORT_DIR} | grep ${PROJ_ROOT}`x" = "x"; then echo "Touch binary files..."; find ${EXPORT_DIR} -type f 2> /dev/null | xargs touch 2> /dev/null; fi)
+	-@(if test "`echo ${BLD_DIR} | grep ${PROJ_ROOT}`x" = "x"; then echo "Touch temp files..."; find ${BLD_DIR} -type f 2> /dev/null | xargs touch 2> /dev/null; fi)
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/update.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/update.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/update.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: update.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: update
+
+ifndef DATE
+update: update-usage
+else
+update: check_have_svn check_svn_repository
+	@echo "Updating repositories to ${DATE}"
+	@for dir in `${SVN} status | ${GREP} "^X" | ${SED} 's/X      //'`; do \
+		echo ">>> Updating $$dir"; \
+		${SVN} update --ignore-externals -r${DATE} $$dir; \
+	done
+endif
+
+
+update-help: help-title update-command-header update-message update-usage
+
+update-message:
+	@echo "Updates all codes in the repository including externals to the given date"
+
+update-usage:
+	@echo "Usage:"
+	@echo "   make update DATE={yyyy-mm-dd}"
+
+
+COMMAND_HELP += update-help

Added: long/3D/SNAC/trunk/StGermain/VMake/Commands/version.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Commands/version.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Commands/version.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: version.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: version
+
+ifeq (${subproj},)
+version:
+	@echo ${CURRENT_DIR} \
+		`${SVN} info $$proj | ${GREP} 'Revision' | cut -f 2 -d ':'` \
+		`${SVN} info $$proj | ${GREP} 'Last Changed Date' | cut	-f 2 -d ':'`;
+else
+version: check_have_svn check_svn_repository
+	@for proj in ${subproj} ; do \
+		ver=`${SVN} info $$proj | ${GREP} 'Revision' | cut -f 2 -d ':'`; \
+		date=`${SVN} info $$proj | ${GREP} 'Last Changed Date' | cut -f 2 -d ':'`; \
+		echo "$$proj $$ver $$date"; \
+	done
+endif
+		
+version-help: help-title version-command-header version-message version-usage
+
+
+version-message:
+	@echo "Displays the version of each project"
+
+version-usage:
+	@echo "Usage:"
+	@echo "   make version"
+
+
+COMMAND_HELP += version-help

Added: long/3D/SNAC/trunk/StGermain/VMake/Component-meta-template.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Component-meta-template.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Component-meta-template.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name"></param>
+<param name="Organisation"></param>
+<param name="Project"></param>
+<param name="Location"></param>
+<param name="Project Web"></param>
+<!-- Copyright: select one -->
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="Copyright">Copyright (C) 2004-2005 VPAC.</param>
+<param name="Copyright">Copyright (C) 2005 VPAC and Monash Cluster Computing.</param>
+<param name="Copyright">Copyright (c) 2005, Monash Cluster Computing</param>
+<!-- End Copyright -->
+<!-- License: select one -->
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="License">http://www.gnu.org/licenses/lgpl.html http://www.opensource.org/licenses/bsd-license.php</param>
+<param name="License">http://www.opensource.org/licenses/bsd-license.php</param>
+<!-- End License -->
+<param name="Parent"></param>
+<param name="Description">...</param>
+
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/ImageFormats-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/ImageFormats-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/ImageFormats-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+#Check what image libraries are avaiable
+case ${SYSTEM} in
+	Linux)
+		setValueWithDefault JPEG_DIR '/usr'
+		setValueWithDefault PNG_DIR '/usr'
+		setValueWithDefault TIFF_DIR '/usr';;
+	Darwin)
+		setValueWithDefault JPEG_DIR '/sw'
+		setValueWithDefault PNG_DIR '/sw'
+		setValueWithDefault TIFF_DIR '/sw';;
+esac
+
+setValueWithDefault PNG_INCDIR '${PNG_DIR}/include'
+if test -r "${PNG_INCDIR}/png.h" -a "${NOPNG}" != "1" ; then
+	setValueWithDefault PNG_INCLUDES '-I${PNG_INCDIR} -DHAVE_PNG'
+	setValueWithDefault PNG_LIBDIR '${PNG_DIR}/lib'
+	setValueWithDefault PNG_LIBS '-L${PNG_LIBDIR} -lpng'
+
+	setValueWithDefault HAVE_PNG '1'
+fi
+
+setValueWithDefault JPEG_INCDIR '${JPEG_DIR}/include'
+if test -r "${JPEG_INCDIR}/jpeglib.h" -a "${NOJPEG}" != "1" ; then
+	setValueWithDefault JPEG_INCLUDES '-I${JPEG_INCDIR} -DHAVE_JPEG'
+	setValueWithDefault JPEG_LIBDIR '${JPEG_DIR}/lib'
+	setValueWithDefault JPEG_LIBS '-L${JPEG_LIBDIR} -ljpeg'
+
+	setValueWithDefault HAVE_JPEG '1'
+fi
+
+setValueWithDefault TIFF_INCDIR '${TIFF_DIR}/include'
+if test -r "${TIFF_INCDIR}/tiff.h" -a "${NOTIFF}" != "1" ; then
+	setValueWithDefault TIFF_INCLUDES '-I${TIFF_INCDIR} -DHAVE_TIFF'
+	setValueWithDefault TIFF_LIBDIR '${TIFF_DIR}/lib'
+	setValueWithDefault TIFF_LIBS '-L${TIFF_LIBDIR} -ltiff'
+
+	setValueWithDefault HAVE_TIFF '1'
+fi


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/ImageFormats-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+#include <osmesa.h>
+int main() {
+	void* osMesaContext = OSMesaCreateContext( OSMESA_RGBA, 0 );
+	OSMesaMakeCurrent( osMesaContext, 0, GL_UNSIGNED_BYTE, 100, 100 );
+	OSMesaDestroyContext( osMesaContext );
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.error
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.error	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.error	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,4 @@
+conftest.c:3: error: ‘OSMESA_RGBA’ undeclared (first use in this function)
+conftest.c:3: error: (Each undeclared identifier is reported only once
+conftest.c:3: error: for each function it appears in.)
+conftest.c:4: error: ‘GL_UNSIGNED_BYTE’ undeclared (first use in this function)

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.log
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.log	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.log	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+make[1]: Entering directory `/home/echoi/opt/SNAC/StGermain/VMake/Config/OpenGl'
+/usr/bin/cc -pipe  -DVERSION=\"\" -Wall -g  -DCURR_MODULE_NAME=\"conftest\"  -fPIC -c -o /home/echoi/opt/SNAC/StGermain/VMake/Config/OpenGl/bin-conftest/conftest.o -I/home/echoi/opt/SNAC/StGermain/VMake/Config/OpenGl    -I/usr/include/GL/   -I/usr/include/GL -DHAVE_GL -DHAVE_GL -DHAVE_GL    conftest.c
+conftest.c:1:20: 오류: osmesa.h: No such file or directory
+conftest.c: In function ‘main’:
+conftest.c:3: warning: implicit declaration of function ‘OSMesaCreateContext’
+conftest.c:3: error: ‘OSMESA_RGBA’ undeclared (first use in this function)
+conftest.c:3: error: (Each undeclared identifier is reported only once
+conftest.c:3: error: for each function it appears in.)
+conftest.c:3: warning: initialization makes pointer from integer without a cast
+conftest.c:4: warning: implicit declaration of function ‘OSMesaMakeCurrent’
+conftest.c:4: error: ‘GL_UNSIGNED_BYTE’ undeclared (first use in this function)
+conftest.c:5: warning: implicit declaration of function ‘OSMesaDestroyContext’
+make[1]: *** [/home/echoi/opt/SNAC/StGermain/VMake/Config/OpenGl/bin-conftest/conftest.o] 오류 1
+make[1]: Leaving directory `/home/echoi/opt/SNAC/StGermain/VMake/Config/OpenGl'

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.warning
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.warning	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.warning	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,4 @@
+conftest.c:3: warning: implicit declaration of function ‘OSMesaCreateContext’
+conftest.c:3: warning: initialization makes pointer from integer without a cast
+conftest.c:4: warning: implicit declaration of function ‘OSMesaMakeCurrent’
+conftest.c:5: warning: implicit declaration of function ‘OSMesaDestroyContext’

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = OSMESA GL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+#Obtain OpenGl library information
+
+# Check if we're allowed to use OPENGL
+if test "${NOOPENGL}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+	Darwin)
+		setValueWithDefault GL_INCDIR '/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/'
+		setValueWithDefault GL_LIBDIR '/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/'
+		warnIfNotValidFile "${GL_INCDIR}/gl.h" OpenGL GL_INCDIR;;
+	*)
+		setValueWithDefault GL_DIR '/usr'
+		setValueWithDefault GL_INCDIR '${GL_DIR}/include'
+		if test "${SYSTEM_64}" = "1" && test -r ${GL_DIR}/lib64; then
+			setValueWithDefault GL_LIBDIR '${GL_DIR}/lib64'
+		else
+			setValueWithDefault GL_LIBDIR '${GL_DIR}/lib'
+		fi
+		warnIfNotValidFile "${GL_INCDIR}/GL/gl.h" OpenGL GL_INCDIR;;
+esac
+if test "${RPATH_FLAG}x" != "x" ; then
+	setValueWithDefault GL_RPATH '${RPATH_FLAG}${GL_LIBDIR}'
+fi
+
+setValueWithDefault GL_INCLUDES   '-I${GL_INCDIR} -I${GL_INCDIR}/GL'
+appendVariableIfReadable GL_INCLUDES "${GL_INCDIR}/gl.h" -DHAVE_GL
+appendVariableIfReadable GL_INCLUDES "${GL_INCDIR}/GL/gl.h" -DHAVE_GL
+
+case ${SYSTEM} in 
+	Darwin)
+		GLU_HEADER="${GL_INCDIR}/glu.h"
+		;;
+	*)
+		GLU_HEADER="${GL_INCDIR}/GL/glu.h"
+		;;
+esac
+
+if ! test -r $GLU_HEADER; then
+	echo "Error: GL/glu.h not found. Please install the appropriate package for this on your system"
+	echo ""
+	echo "Note: glu.h appears differently on different systems. For example, GL, xorg, mesa...etc"
+	echo "If you are using fedora core 5, use yum to install mesa"
+	exitWithErrorIfNotOptional
+fi
+
+if test "x`echo ${GL_INCLUDES} | grep HAVE_GL`" != "x"; then
+	setValueWithDefault HAVE_GL '1'
+fi
+
+setValueWithDefault GL_LIBFILES  '-lGL -lGLU'
+setValueWithDefault GL_LIBS      '-L${GL_LIBDIR} ${GL_LIBFILES}'
+
+# Check if we're allowed to use OSMESA
+if test "${NOOSMESA}" = "1" ; then
+	return 0
+fi
+
+setValueWithDefault OSMESA_DIR           '${GL_DIR}'
+setValueWithDefault OSMESA_INCDIR        '${OSMESA_DIR}/include'
+setValueWithDefault OSMESA_INCLUDES      '-I${OSMESA_INCDIR} -I${OSMESA_INCDIR}/GL/'
+
+if test -r "${OSMESA_INCDIR}/osmesa.h" ; then 
+	OSMESA_HEADER="${OSMESA_INCDIR}/osmesa.h"
+elif test -r "${OSMESA_INCDIR}/GL/osmesa.h" ; then
+	OSMESA_HEADER="${OSMESA_INCDIR}/GL/osmesa.h"
+fi
+
+if test "${SYSTEM_64}" = "1" && test -r ${OSMESA_DIR}/lib64; then
+	setValueWithDefault OSMESA_LIBDIR        '${OSMESA_DIR}/lib64'
+else
+	setValueWithDefault OSMESA_LIBDIR        '${OSMESA_DIR}/lib'
+fi
+
+setValueWithDefault OSMESA_LIBFILES      '-lOSMesa'
+setValueWithDefault OSMESA_LIBS          '-L${OSMESA_LIBDIR} ${OSMESA_LIBFILES}'
+
+if DoCompileConftest ./VMake/Config/OpenGl; then
+	# Success
+	echo "OSMESA_INCLUDES+= -DHAVE_OSMESA" >> Makefile.system
+	setValueWithDefault HAVE_OSMESA '1'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault OSMESA_RPATH '${RPATH_FLAG}${OSMESA_LIBDIR}'
+	fi
+else
+	echo "    (OSMESA offscreen rendering will be unavailable)"
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#include <petsc.h>
+
+int main( int argc, char** argv ) {
+
+	PetscInitialize( &argc, &argv,(char *)0, NULL );
+	PetscFinalize();
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = PETSC MPI
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,256 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use PETSC
+if test "${NOPETSC}" = "1" ; then
+	return 0
+fi
+
+# Obtain PetSc information. 
+setValueWithDefault PETSC_DIR '/usr/'
+PETSC_DIR_CHECK=`warnIfNotValidFile ${PETSC_DIR} PetSc PETSC_DIR`
+
+if test "${PETSC_DIR_CHECK}x" != "x"; then
+	echo $PETSC_DIR_CHECK
+else	
+	setValueWithDefault BOPT 'O'
+
+	setValueWithDefault PETSC_INCDIR '${PETSC_DIR}/include'
+	assertValidFile ${PETSC_INCDIR}/petsc.h PETSc PETSC_INCDIR "PETSC_DIR"
+	assertValidFile ${PETSC_INCDIR}/petscversion.h PETSc PETSC_INCDIR "PETSC_DIR"
+
+	PETSC_VERSION_MAJOR=`grep "#define[ \t]*PETSC_VERSION_MAJOR[ \t]*" ${PETSC_INCDIR}/petscversion.h | sed 's/#define[ \t]*PETSC_VERSION_MAJOR[ \t]*//'`
+	PETSC_VERSION_MINOR=`grep "#define[ \t]*PETSC_VERSION_MINOR[ \t]*" ${PETSC_INCDIR}/petscversion.h | sed 's/#define[ \t]*PETSC_VERSION_MINOR[ \t]*//'`
+	PETSC_VERSION_SUBMINOR=`grep "#define[ \t]*PETSC_VERSION_SUBMINOR[ \t]*" ${PETSC_INCDIR}/petscversion.h | sed 's/#define[ \t]*PETSC_VERSION_SUBMINOR[ \t]*//'`
+
+	# Equals 1 if release, 0 if nightly build
+	PETSC_VERSION_RELEASE=`grep "#define[ \t]*PETSC_VERSION_RELEASE[ \t]*" ${PETSC_INCDIR}/petscversion.h | sed 's/#define[ \t]*PETSC_VERSION_RELEASE[ \t]*//'`
+	setValueWithDefault PETSC_VERSION_RELEASE "${PETSC_VERSION_RELEASE}"
+
+	echo PETSc version detected as $PETSC_VERSION_MAJOR.$PETSC_VERSION_MINOR.$PETSC_VERSION_SUBMINOR
+
+	if test "$PETSC_VERSION_MINOR" -lt "3"; then
+		ARCH_DIR=$PETSC_DIR/lib/lib${BOPT}
+	else
+		ARCH_DIR=$PETSC_DIR/lib
+	fi
+
+	if test "${PETSC_ARCH}x" = "x"; then
+		NUM_ARCH=`find $ARCH_DIR -maxdepth 1 -mindepth 1 -type d | wc -l | sed 's/^[ ]*//'`
+		case ${NUM_ARCH} in
+			0)
+				echo "Error: No PETSC_ARCH found in $PETSC_DIR/lib"
+				exitWithErrorIfNotOptional
+				;;
+			1)
+				setValueWithDefault PETSC_ARCH `find $ARCH_DIR -maxdepth 1 -mindepth 1 -type d | xargs basename`;;
+			*)
+				echo "Error: More than one PETSC_ARCH found in $PETSC_DIR/lib and PETSC_ARCH is unset. Please set a PETSC_ARCH."
+				exitWithErrorIfNotOptional
+				;;
+		esac
+	fi
+
+	setValueWithDefault PETSC_BINDIR '${PETSC_DIR}/bin'
+
+	case ${PETSC_VERSION_MINOR} in
+		3)
+			setValueWithDefault PETSC_LIBDIR '${PETSC_DIR}/lib/${PETSC_ARCH}';;
+		*)
+			setValueWithDefault PETSC_LIBDIR '${PETSC_DIR}/lib/lib${BOPT}/${PETSC_ARCH}';;
+	esac
+
+	assertValidFile ${PETSC_LIBDIR} PETSc PETSC_LIBDIR "PETSC_DIR & BOPT & PETSC_ARCH"
+
+	setValueWithDefault PETSC_BMAKEDIR '${PETSC_DIR}/bmake/${PETSC_ARCH}'
+
+	case ${PETSC_VERSION_MINOR} in
+		3)
+			setValueWithDefault PETSC_CONFIG_FILE '${PETSC_BMAKEDIR}/petscconf'
+			setValueWithDefault PETSC_VARIABLES_FILE '${PETSC_BMAKEDIR}/petscconf'
+			;;
+		*)
+			# Assume < 2.2
+			setValueWithDefault PETSC_CONFIG_FILE '${PETSC_BMAKEDIR}/packages'
+			setValueWithDefault PETSC_VARIABLES_FILE '${PETSC_BMAKEDIR}/variables'
+			;;
+	esac
+
+	PETSC_BMAKEDIR_RESULT=`warnIfNotValidFile ${PETSC_CONFIG_FILE} PetSc PETSC_BMAKEDIR "PETSC_DIR & PETSC_ARCH"`
+
+	if test "${USE_OPTIMISED}x" != "x"; then
+		case ${PETSC_VERSION_MINOR} in
+			3)
+				getVariableFromMakefile CONFIGURE_OPTIONS $PETSC_CONFIG_FILE
+				PETSC_USES_DEBUG=`echo $CONFIGURE_OPTIONS | grep '\-\-with\-debugging=0'`
+				if test "${PETSC_USES_DEBUG}x" = "x"; then
+					echo "Warning - Configuring for optimised build, but PETSC is in debug mode"
+				fi
+				;;
+			*)
+				# Don't know the check for it yet
+				;;
+		esac
+	fi
+	
+	setValueWithDefault PETSC_INCLUDES '-I${PETSC_INCDIR} -I${PETSC_BMAKEDIR}'
+
+	if test "${PETSC_BMAKEDIR_RESULT}x" != "x"; then
+		echo $PETSC_BMAKEDIR_RESULT
+	else	
+		if test "${MPI_DIR}x" = "x"; then
+			# MPI hasn't been set, try to get PETSc's
+			
+			if test "$PETSC_VERSION_MINOR" -lt "3"; then
+				PETSC_MPI_INCLUDE=`grep '^MPI_INCLUDE' ${PETSC_CONFIG_FILE} | cut -f 2 -d = | sed 's/ //g'`
+				setValueWithDefault MPI_INCLUDES "${PETSC_MPI_INCLUDE}"
+		
+				PETSC_MPI_LIB=`grep '^MPI_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d = | sed 's/ //g'`
+				setValueWithDefault MPI_LIBS "${PETSC_MPI_LIB}"
+		
+				PETSC_MPIRUN=`grep '^MPIRUN' ${PETSC_CONFIG_FILE} | cut -f 2 -d = | sed 's/ //g'`
+				setValueWithDefault MPI_RUN "${PETSC_MPIRUN}"
+
+				if test "${PETSC_MPI_INCLUDE}${PETSC_MPI_LIB}x" != "x"; then
+					setValueWithDefault PETSC_MPI '1'
+					setValueWithDefault MPI_DIR `echo $PETSC_MPIRUN | xargs dirname | xargs dirname`
+				fi
+			else
+				TMP_CC=$CC
+				getVariableFromMakefile CC $PETSC_CONFIG_FILE
+				if echo $CC | grep mpicc > /dev/null 2>&1; then
+					setValueWithDefault MPI_INCLUDES `$CC -show -c | sed 's/^.* //' | sed 's/ \-c//'`
+					setValueWithDefault MPI_LIB `$CC -show | sed 's/^.*\-L/\-L/'`
+				else
+					TMP_MPI_LIB=$MPI_LIB
+					TMP_MPI_INCLUDE=$MPI_INCLUDE
+					getVariableFromMakefile MPI_INCLUDE $PETSC_CONFIG_FILE
+					getVariableFromMakefile MPI_LIB $PETSC_CONFIG_FILE
+					setValueWithDefault MPI_INCLUDES "$MPI_INCLUDE"
+					setValueWithDefault MPI_LIBS "$MPI_LIB"
+					MPI_LIB=$TMP_MPI_LIB
+					MPI_INCLUDE=$TMP_MPI_INCLUDE
+				fi
+				getVariableFromMakefile MPIRUN $PETSC_CONFIG_FILE
+				setValueWithDefault MPI_RUN "$MPIRUN"
+				setValueWithDefault MPI_DIR `echo $MPIRUN | xargs dirname | xargs dirname`
+
+				setValueWithDefault PETSC_MPI '1'
+				CC=$TMP_CC
+			fi
+		fi
+		
+		BLAS_LIB__PACKAGES=`grep '^BLAS_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+		setValueWithDefault BLAS_LIB "${BLAS_LIB__PACKAGES}"
+
+		LAPACK_LIB__PACKAGES=`grep '^LAPACK_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+		setValueWithDefault LAPACK_LIB "${LAPACK_LIB__PACKAGES}"
+
+		LAPACK_BLAS_LIBS__PACKAGES=`grep '^BLASLAPACK_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+		setValueWithDefault LAPACK_BLAS_LIBS "${LAPACK_BLAS_LIBS__PACKAGES}"
+
+		PETSC_X11_LIBS__PACKAGES=`grep '^X11_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+		setValueWithDefault PETSC_X11_LIBS "${PETSC_X11_LIBS__PACKAGES}"
+
+		CLINKER_SLFLAG__FLAG=`grep '^C_CLINKER_SLFLAG' ${PETSC_VARIABLES_FILE} | cut -f 2 -d =`
+		setValueWithDefault CLINKER_SLFLAG "${CLINKER_SLFLAG__FLAG}"
+
+		MATLAB_LIB__PACKAGES=`grep '^MATLAB_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+		setValueWithDefault MATLAB_LIB "${MATLAB_LIB__PACKAGES}"
+
+		MUMPS_LIB__PACKAGES=`grep '^MUMPS_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d = | sed 's/ //g'`
+
+		if test ! "${MUMPS_LIB__PACKAGES}x" = "x"; then
+			# We are using MUMPS, so don't ignore white spaces 
+			MUMPS_LIB__PACKAGES=`grep '^MUMPS_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+
+			if test "${BLACS_LIB}x" = "x"; then
+				echo "Warning. You are using MUMPS and BLACS_LIB is unset." \
+					"List the BLACS library files with full path in BLACS_LIB to correctly compile."
+			fi
+			if test "${SCALAPACK_LIB}x" = "x"; then
+				echo "Warning. You are using MUMPS and SCALAPACK_LIB is unset." \
+					"Set the SCALAPACK library file to correctly compile."
+			fi
+			eval "MUMPS_LIB__PACKAGES=\"${MUMPS_LIB__PACKAGES} ${SCALAPACK_LIB} ${BLACS_LIB}\""
+			setValueWithDefault MUMPS_LIB "${MUMPS_LIB__PACKAGES}"
+		fi
+	fi
+
+	#Here we need to test which solver to use. Base it off the changes file in the docs dir
+	if test "2" -le "`grep '#define PETSC_VERSION_MINOR' ${PETSC_INCDIR}/petscversion.h | tr -s ' ' | cut -d ' ' -f 3`"; then
+		setValueWithDefault PETSC_SOLVER_LIB 'petscksp'
+	else	
+		setValueWithDefault PETSC_SOLVER_LIB 'petscsles'
+	fi
+
+	setValueWithDefault PETSC_LIBFILES '-l${PETSC_SOLVER_LIB} -lpetscdm -lpetscmat -lpetscvec -lpetsc -lpetscsnes ${MUMPS_LIB} ${LAPACK_BLAS_LIBS} ${MATLAB_LIB} ${PETSC_X11_LIBS} ${CC_FORTRAN_LFLAGS}'
+	
+	case ${SYSTEM} in
+		Darwin)
+			if test "${STGERMAIN_LIBDIR}x" = "x"; then
+				setValueWithDefault PETSC_LIBS '-L${LIB_DIR} -L${PETSC_LIBDIR} -lpetsc -lpetscsnes ${LAPACK_BLAS_LIBS} ${PETSC_X11_LIBS} ${CC_FORTRAN_LFLAGS}'
+			else 
+				setValueWithDefault PETSC_LIBS '-L${STGERMAIN_LIBDIR} -L${PETSC_LIBDIR} -lpetsc -lpetscsnes ${LAPACK_BLAS_LIBS} ${PETSC_X11_LIBS} ${CC_FORTRAN_LFLAGS}'
+			fi;;
+		*)
+			setValueWithDefault PETSC_LIBS '-L${PETSC_LIBDIR} ${PETSC_LIBFILES}';;
+	esac
+
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux|CYGWIN)
+					setValueWithDefault PETSC_RPATH '-Xlinker -rpath -Xlinker ${PETSC_LIBDIR}';;
+				Darwin)
+					# Darwin doesn't support RPATH... use INSTALL NAME instead
+					setValueWithDefault PETSC_RPATH '';;
+				OSF1)
+					setValueWithDefault PETSC_RRPATH '-Wl,-R,${PETSC_LIBDIR}';;
+				SunOS)
+					setValueWithDefault PETSC_RPATH '';; # Alan not conveinced it does it 
+				*)
+					echo "Warning: PETSC_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+			esac ;;
+		osf)
+			# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+			setValueWithDefault PETSC_RPATH '-rpath ${PETSC_LIBDIR}';;
+		intel)
+			setValueWithDefault PETSC_RPATH '-Xlinker -rpath -Xlinker ${PETSC_LIBDIR}';;
+		sparc)
+			setValueWithDefault PETSC_RPATH '-R ${PETSC_LIBDIR}';;
+		ibmxl)
+			setValueWithDefault PETSC_RPATH '-R ${PETSC_LIBDIR}';;
+		*)
+			echo "Warning: PETSC_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+	esac
+fi	
+
+
+# Need to source this dependency to make proper check
+. ./VMake/Config/mpi-config.sh
+
+if ! DoCompileConftest ./VMake/Config/PETSc; then
+	echo "*** Error: Configuration has failed because PETSc installation ${PETSC_DIR}, ${PETSC_ARCH} is invalid"
+	exitWithErrorIfNotOptional
+fi
+
+setValue HAVE_PETSC '1'


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,17 @@
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgFEM/StgFEM.h>
+#include "PICellerator/PICellerator.h"
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	StGermain_Init( &argc, &argv );
+	StgFEM_Init( &argc, &argv );
+	PICellerator_Init( &argc, &argv );
+
+	PICellerator_Finalise();
+	StgFEM_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = PICELLERATOR STGFEM STGERMAIN MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+setValueWithDefault PICELLERATOR_DIR '${BLD_DIR}'
+setValueWithDefault PICELLERATOR_INCDIR '${PICELLERATOR_DIR}/include'
+setValueWithDefault PICELLERATOR_INCLUDES '-I${PICELLERATOR_INCDIR}'
+setValueWithDefault PICELLERATOR_LIBDIR '${PICELLERATOR_DIR}/lib'
+setValueWithDefault PICELLERATOR_LIBS '-L${PICELLERATOR_LIBDIR} -lPICellerator'
+
+case $CC_TYPE in
+	gnu)
+		case $SYSTEM in
+			Linux|CYGWIN)
+				setValueWithDefault PICELLERATOR_RPATH '-Xlinker -rpath -Xlinker ${PICELLERATOR_LIBDIR}';;
+			Darwin)
+				# Darwin doesn't support RPATH... use INSTALL NAME instead
+				setValueWithDefault PICELLERATOR_RPATH '';;
+			OSF1)
+				setValueWithDefault PICELLERATOR_RPATH '-Wl,-rpath,${PICELLERATOR_LIBDIR}';;
+			*)
+				echo "Warning: PICELLERATOR_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+		esac ;;
+	osf)
+		# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+		setValueWithDefault PICELLERATOR_RPATH '-rpath ${PICELLERATOR_LIBDIR}';;
+	intel)
+		setValueWithDefault PICELLERATOR_RPATH '-Xlinker -rpath -Xlinker ${PICELLERATOR_LIBDIR}';;
+	sparc)
+		setValueWithDefault PICELLERATOR_RPATH '-R ${PICELLERATOR_LIBDIR}';;
+	ibmxl)
+		setValueWithDefault PICELLERATOR_RPATH '-R ${PICELLERATOR_LIBDIR}';;
+	*)
+		echo "Warning: PICELLERATOR_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+# Only warn if we're not building PICellerator as part of this build
+if test "${BUILDING_PICELLERATOR}" != "1"; then
+	warnIfNotValidFile ${PICELLERATOR_DIR} PICellerator PICellerator PICELLERATOR_DIR
+	warnIfNotValidFile ${PICELLERATOR_INCDIR}/PICellerator/PICellerator.h PICellerator PICELLERATOR_INCDIR "PICELLERATOR_DIR"
+	warnIfNotValidFile ${PICELLERATOR_LIBDIR}/libPICellerator.a PICellerator PICELLERATOR_LIBDIR "PICELLERATOR_DIR" 
+	if ! DoCompileConftest ./VMake/Config/PICellerator; then
+		exitWithErrorIfNotOptionalWithMessage PICellerator ${PICELLERATOR_DIR}
+	fi
+else
+	echo "    (PICellerator marked as being built, skipping tests)"
+fi
+
+setValueWithDefault HAVE_PICELLERATOR 1
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/SLEPC-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/SLEPC-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/SLEPC-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+# Scalable Library for Eigenvalue Problem Computations
+# http://www.grycap.upv.es/slepc
+
+parsePackageConfigOptions $@
+
+#Note: this is a hack, because the above function doesn't work, at least on Ubuntu, given that this file is
+# currently "sourced" rather than "run". --PatrickSunter, 28 Jan 2007.
+
+export PACKAGE_OPTIONAL=1
+
+# Check if we're allowed to use SLEPC
+if test "${NOSLEPC}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault SLEPC_DIR       '/sw/';;
+	*)
+		setValueWithDefault SLEPC_DIR       '/usr/';;
+esac
+
+if test "${SLEPC_ARCH}x" = "x"; then
+	NUM_ARCH=`find $SLEPC_DIR/lib -maxdepth 1 -mindepth 1 -type d | wc -l | sed 's/^[ ]*//'`
+	case ${NUM_ARCH} in
+		0)
+			if test "${PACKAGE_OPTIONAL}x" = "x"; then
+				echo "Error: No SLEPC_ARCH found in $SLEPC_DIR/lib"
+			fi
+			exitWithErrorIfNotOptional;;
+		1)
+			setValueWithDefault SLEPC_ARCH `find $SLEPC_DIR/lib -maxdepth 1 -mindepth 1 -type d | xargs basename`;;
+		*)
+			if test "${PACKAGE_OPTIONAL}x" = "x"; then
+				echo "Warning: More than one SLEPC_ARCH found in $SLEPC_DIR/lib and SLEPC_ARCH is unset. Please set a SLEPC_ARCH if you need this package."
+			fi
+			exitWithErrorIfNotOptional;;
+	esac
+fi
+
+setValueWithDefault SLEPC_INCDIR    '${SLEPC_DIR}/include'
+if test -r "${SLEPC_INCDIR}/slepc.h" ; then
+	setValueWithDefault SLEPC_INCLUDES   '-I${SLEPC_INCDIR} -DHAVE_SLEPC'
+	setValueWithDefault SLEPC_LIBDIR     '${SLEPC_DIR}/lib/${SLEPC_ARCH}'
+	setValueWithDefault SLEPC_LIBFILES   '-lslepc'
+	setValueWithDefault SLEPC_LIBS       '-L${SLEPC_LIBDIR} ${SLEPC_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault SLEPC_RPATH      '${RPATH_FLAG}${SLEPC_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_SLEPC       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/SLEPC-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Snark-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Snark-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Snark-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+# Snark Stuff 
+setValueWithDefault SNARK_DIR '${BLD_DIR}'
+setValueWithDefault SNARK_INCDIR '${SNARK_DIR}/include'
+setValueWithDefault SNARK_LIBDIR '${SNARK_DIR}/lib'
+
+# Only warn when Snark not build if its different to the common build dir
+if test "${SNARK_INCDIR}" != "${INC_DIR}"; then
+	warnIfNotValidFile "${SNARK_INCDIR}/Snark/Snark.h" Snark SNARK_INCDIR "SNARK_DIR"
+fi
+if test "${SNARK_LIBDIR}" != "${LIB_DIR}"; then
+	warnIfNotValidFile "${SNARK_LIBDIR}/libSnark.a" Snark SNARK_LIBDIR "SNARK_DIR"
+fi
+
+setValueWithDefault SNARK_LIBFILES '-lSnark -lpseudoStG_Framework'
+setValueWithDefault SNARK_LIBS '-L${SNARK_LIBDIR} ${SNARK_LIBFILES}'
+
+setValueWithDefault SNARK_INCLUDES '-I${STGERMAIN_INCDIR} -I${SNARK_INCDIR} -I${SNARK_INCDIR}/Snark -I${SNARK_INCDIR}/pseudoStG_Framework'
+
+case $CC_TYPE in
+        gnu)
+                case $SYSTEM in
+                        Linux|CYGWIN)
+                                setValueWithDefault SNARK_RPATH '-Xlinker -rpath -Xlinker ${SNARK_LIBDIR}';;
+                        Darwin)
+                                # Darwin doesn't support RPATH... use INSTALL NAME instead
+                                setValueWithDefault SNARK_RPATH '';;
+                        OSF1)
+                                setValueWithDefault STGErMAIN_RPATH '-Wl,-rpath,${SNARK_LIBDIR}';;
+                        SunOS)
+                                setValueWithDefault SNARK_RPATH '';; # Alan not convinced it does it                                                                                                                                     
+                        *)
+                                echo "Warning: SNARK_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+                esac ;;
+        osf)
+                # NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+                setValueWithDefault SNARK_RPATH '-rpath ${SNARK_LIBDIR}';;
+        intel)
+                setValueWithDefault SNARK_RPATH '-Xlinker -rpath -Xlinker ${SNARK_LIBDIR}';;
+        sparc)
+                setValueWithDefault SNARK_RPATH '-R ${SNARK_LIBDIR}';;
+        ibmxl)
+                setValueWithDefault SNARK_RPATH '-R ${SNARK_LIBDIR}';;
+        *)
+                echo "Warning: SNARK_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/Snark-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,11 @@
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	StGermain_Init( &argc, &argv );
+
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = STGERMAIN MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+#StGermain stuff
+setValueWithDefault STGERMAIN_DIR '${BLD_DIR}'
+setValueWithDefault STGERMAIN_INCDIR '${STGERMAIN_DIR}/include'
+setValueWithDefault STGERMAIN_INCLUDES '-I${STGERMAIN_INCDIR}'
+setValueWithDefault STGERMAIN_LIBDIR '${STGERMAIN_DIR}/lib'
+setValueWithDefault STGERMAIN_LIBS '-L${STGERMAIN_LIBDIR} -lStGermain -lStGermainDiscretisation -lStGermainBase ${CC_FORTRAN_LFLAGS}'
+
+case $CC_TYPE in
+	gnu)
+		case $SYSTEM in
+			Linux|CYGWIN)
+				setValueWithDefault STGERMAIN_RPATH '-Xlinker -rpath -Xlinker ${STGERMAIN_LIBDIR}';;
+			Darwin)
+				# Darwin doesn't support RPATH... use INSTALL NAME instead
+				setValueWithDefault STGERMAIN_RPATH '';;
+			OSF1)
+				setValueWithDefault STGERMAIN_RPATH '-Wl,-rpath,${STGERMAIN_LIBDIR}';;
+			SunOS)
+				setValueWithDefault STGERMAIN_RPATH '';; # Alan not convinced it does it				
+			*)
+				echo "Warning: STGERMAIN_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+		esac ;;
+	osf)
+		# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+		setValueWithDefault STGERMAIN_RPATH '-rpath ${STGERMAIN_LIBDIR}';;
+	intel)
+		setValueWithDefault STGERMAIN_RPATH '-Xlinker -rpath -Xlinker ${STGERMAIN_LIBDIR}';;
+	sparc)
+		setValueWithDefault STGERMAIN_RPATH '-R ${STGERMAIN_LIBDIR}';;		
+	ibmxl)
+		setValueWithDefault STGERMAIN_RPATH '-R ${STGERMAIN_LIBDIR}';;		
+	*)
+		echo "Warning: STGERMAIN_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+# Only warn if we're not building StGermain as part of this build
+if test "${BUILDING_STGERMAIN}" != "1"; then
+	warnIfNotValidFile ${STGERMAIN_DIR} StGermain StGermain STGERMAIN_DIR
+	warnIfNotValidFile ${STGERMAIN_INCDIR}/StGermain/StGermain.h StGermain STGERMAIN_INCDIR "STGERMAIN_DIR"
+	warnIfNotValidFile ${STGERMAIN_LIBDIR}/libStGermain.a StGermain STGERMAIN_LIBDIR "STGERMAIN_DIR" 
+	if ! DoCompileConftest ./VMake/Config/StGermain; then
+		exitWithErrorIfNotOptionalWithMessage StGermain ${STGERMAIN_DIR}
+	fi
+else
+	echo "    (StGermain marked as being built, skipping tests)"
+fi
+
+setValueWithDefault HAVE_STGERMAIN 1


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgFEM/StgFEM.h>
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	StGermain_Init( &argc, &argv );
+	StgFEM_Init( &argc, &argv );
+
+	StgFEM_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = STGFEM STGERMAIN MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,66 @@
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+setValueWithDefault STGFEM_DIR '${BLD_DIR}'
+setValueWithDefault STGFEM_INCDIR '${STGFEM_DIR}/include'
+setValueWithDefault STGFEM_INCLUDES '-I${STGFEM_INCDIR}'
+setValueWithDefault STGFEM_LIBDIR '${STGFEM_DIR}/lib'
+setValueWithDefault STGFEM_LIBS '-L${STGFEM_LIBDIR} -lStgFEM -lStgFEM_SLE_PETScLinearAlgebra'
+
+case $CC_TYPE in
+	gnu)
+		case $SYSTEM in
+			Linux|CYGWIN)
+				setValueWithDefault STGFEM_RPATH '-Xlinker -rpath -Xlinker ${STGFEM_LIBDIR}';;
+			Darwin)
+				# Darwin doesn't support RPATH... use INSTALL NAME instead
+				setValueWithDefault STGFEM_RPATH '';;
+			OSF1)
+				setValueWithDefault STGFEM_RPATH '-Wl,-rpath,${STGFEM_LIBDIR}';;
+			*)
+				echo "Warning: STGFEM_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+		esac ;;
+	osf)
+		# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+		setValueWithDefault STGFEM_RPATH '-rpath ${STGFEM_LIBDIR}';;
+	intel)
+		setValueWithDefault STGFEM_RPATH '-Xlinker -rpath -Xlinker ${STGFEM_LIBDIR}';;
+	sparc)
+		setValueWithDefault STGFEM_RPATH '-R ${STGFEM_LIBDIR}';;
+	ibmxl)
+		setValueWithDefault STGFEM_RPATH '-R ${STGFEM_LIBDIR}';;
+	*)
+		echo "Warning: STGFEM_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+# Only warn if we're not building StgFEM as part of this build
+if test "${BUILDING_STGFEM}" != "1"; then
+	warnIfNotValidFile ${STGFEM_DIR} StgFEM StgFEM STGFEM_DIR
+	warnIfNotValidFile ${STGFEM_INCDIR}/StgFEM/StgFEM.h StgFEM STGFEM_INCDIR "STGFEM_DIR"
+	warnIfNotValidFile ${STGFEM_LIBDIR}/libStgFEM.a StgFEM STGFEM_LIBDIR "STGFEM_DIR" 
+	if ! DoCompileConftest ./VMake/Config/StgFEM; then
+		exitWithErrorIfNotOptionalWithMessage StgFEM ${STGFEM_DIR}
+
+	fi
+else
+	echo "    (StgFEM marked as being built, skipping tests)"
+fi
+
+setValueWithDefault HAVE_STGFEM 1
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21 @@
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgFEM/StgFEM.h>
+#include <PICellerator/PICellerator.h>
+#include "Underworld/Underworld.h"
+
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	StGermain_Init( &argc, &argv );
+	StgFEM_Init( &argc, &argv );
+	PICellerator_Init( &argc, &argv );
+	Underworld_Init( &argc, &argv );
+
+	Underworld_Finalise();
+	PICellerator_Finalise();
+	StgFEM_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = UNDERWORLD PICELLERATOR STGFEM STGERMAIN MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+setValueWithDefault UNDERWORLD_DIR '${BLD_DIR}'
+setValueWithDefault UNDERWORLD_INCDIR '${UNDERWORLD_DIR}/include'
+setValueWithDefault UNDERWORLD_INCLUDES '-I${UNDERWORLD_INCDIR}'
+setValueWithDefault UNDERWORLD_LIBDIR '${UNDERWORLD_DIR}/lib'
+setValueWithDefault UNDERWORLD_LIBS '-L${UNDERWORLD_LIBDIR} -lUnderworld'
+
+case $CC_TYPE in
+	gnu)
+		case $SYSTEM in
+			Linux|CYGWIN)
+				setValueWithDefault UNDERWORLD_RPATH '-Xlinker -rpath -Xlinker ${UNDERWORLD_LIBDIR}';;
+			Darwin)
+				# Darwin doesn't support RPATH... use INSTALL NAME instead
+				setValueWithDefault UNDERWORLD_RPATH '';;
+			OSF1)
+				setValueWithDefault UNDERWORLD_RPATH '-Wl,-rpath,${UNDERWORLD_LIBDIR}';;
+			*)
+				echo "Warning: UNDERWORLD_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+		esac ;;
+	osf)
+		# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+		setValueWithDefault UNDERWORLD_RPATH '-rpath ${UNDERWORLD_LIBDIR}';;
+	intel)
+		setValueWithDefault UNDERWORLD_RPATH '-Xlinker -rpath -Xlinker ${UNDERWORLD_LIBDIR}';;
+	sparc)
+		setValueWithDefault UNDERWORLD_RPATH '-R ${UNDERWORLD_LIBDIR}';;
+	ibmxl)
+		setValueWithDefault UNDERWORLD_RPATH '-R ${UNDERWORLD_LIBDIR}';;
+	*)
+		echo "Warning: UNDERWORLD_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+# Only warn if we're not building Underworld as part of this build
+if test "${BUILDING_UNDERWORLD}" != "1"; then
+	warnIfNotValidFile ${UNDERWORLD_DIR} Underworld Underworld UNDERWORLD_DIR
+	warnIfNotValidFile ${UNDERWORLD_INCDIR}/Underworld/Underworld.h Underworld UNDERWORLD_INCDIR "UNDERWORLD_DIR"
+	warnIfNotValidFile ${UNDERWORLD_LIBDIR}/libUnderworld.a Underworld UNDERWORLD_LIBDIR "UNDERWORLD_DIR" 
+	if ! DoCompileConftest ./VMake/Config/Underworld; then
+		exitWithErrorIfNotOptionalWithMessage Underworld ${UNDERWORLD_DIR}
+	fi
+else
+	echo "    (Underworld marked as being built, skipping tests)"
+fi
+
+setValueWithDefault HAVE_UNDERWORLD 1
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/X11/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/X11/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/X11/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+#include <X11/Xlib.h>
+int main() {
+	void* display;
+	display = XOpenDisplay(NULL);
+        return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/X11/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/X11/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/X11/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = X11
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/X11-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/X11-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/X11-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# X11 Stuff
+
+# Check if we're allowed to use X11
+if test "${NOX11}" = "1" ; then
+	return 0
+fi
+
+setValueWithDefault X11_DIR '/usr/X11R6/'
+setValueWithDefault X11_INCDIR '${X11_DIR}/include/'
+
+warnIfNotValidFile "${X11_INCDIR}/X11/Xlib.h" X11 X11_INCDIR X11_DIR
+if test -r "${X11_INCDIR}/X11/Xlib.h" ; then
+
+	setValueWithDefault X11_LIBDIR '${X11_DIR}/lib/'
+	setValueWithDefault X11_LIBS '-L${X11_LIBDIR} -lX11 -lXmu'
+
+	case ${SYSTEM} in
+		Linux)
+			setValueWithDefault X11_INCLUDES '-I${X11_INCDIR}';;
+		Darwin)
+			setValueWithDefault OSSERVICES_INCDIR /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Headers
+			setValueWithDefault X11_INCLUDES '-I${X11_INCDIR} -I${OSSERVICES_INCDIR}';;
+	esac
+
+	if DoCompileConftest ./VMake/Config/X11; then
+		echo "X11_INCLUDES+= -DHAVE_X11" >> Makefile.system
+		setValue HAVE_X11 '1'
+	else
+		echo "    (X11 interactive rendering will be unavailable)"
+	fi
+fi


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/X11-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21 @@
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgFEM/StgFEM.h>
+#include <PICellerator/PICellerator.h>
+#include "Xanthus/Xanthus.h"
+
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	StGermain_Init( &argc, &argv );
+	StgFEM_Init( &argc, &argv );
+	PICellerator_Init( &argc, &argv );
+	Xanthus_Init( &argc, &argv );
+
+	Xanthus_Finalise();
+	PICellerator_Finalise();
+	StgFEM_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = XANTHUS PICELLERATOR STGFEM STGERMAIN MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+setValueWithDefault XANTHUS_DIR '${BLD_DIR}'
+setValueWithDefault XANTHUS_INCDIR '${XANTHUS_DIR}/include'
+setValueWithDefault XANTHUS_INCLUDES '-I${XANTHUS_INCDIR}'
+setValueWithDefault XANTHUS_LIBDIR '${XANTHUS_DIR}/lib'
+setValueWithDefault XANTHUS_LIBS '-L${XANTHUS_LIBDIR} -lXanthus'
+
+case $CC_TYPE in
+	gnu)
+		case $SYSTEM in
+			Linux|CYGWIN)
+				setValueWithDefault XANTHUS_RPATH '-Xlinker -rpath -Xlinker ${XANTHUS_LIBDIR}';;
+			Darwin)
+				# Darwin doesn't support RPATH... use INSTALL NAME instead
+				setValueWithDefault XANTHUS_RPATH '';;
+			OSF1)
+				setValueWithDefault XANTHUS_RPATH '-Wl,-rpath,${XANTHUS_LIBDIR}';;
+			*)
+				echo "Warning: XANTHUS_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+		esac ;;
+	osf)
+		# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+		setValueWithDefault XANTHUS_RPATH '-rpath ${XANTHUS_LIBDIR}';;
+	intel)
+		setValueWithDefault XANTHUS_RPATH '-Xlinker -rpath -Xlinker ${XANTHUS_LIBDIR}';;
+	sparc)
+		setValueWithDefault XANTHUS_RPATH '-R ${XANTHUS_LIBDIR}';;
+	ibmxl)
+		setValueWithDefault XANTHUS_RPATH '-R ${XANTHUS_LIBDIR}';;
+	*)
+		echo "Warning: XANTHUS_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+# Only warn if we're not building Xanthus as part of this build
+if test "${BUILDING_XANTHUS}" != "1"; then
+	warnIfNotValidFile ${XANTHUS_DIR} Xanthus Xanthus XANTHUS_DIR
+	warnIfNotValidFile ${XANTHUS_INCDIR}/Xanthus/Xanthus.h Xanthus XANTHUS_INCDIR "XANTHUS_DIR"
+	warnIfNotValidFile ${XANTHUS_LIBDIR}/libXanthus.a Xanthus XANTHUS_LIBDIR "XANTHUS_DIR" 
+	if ! DoCompileConftest ./VMake/Config/Xanthus; then
+		exitWithErrorIfNotOptionalWithMessage Xanthus ${XANTHUS_DIR}
+	fi
+else
+	echo "    (Xanthus marked as being built, skipping tests)"
+fi
+
+setValueWithDefault HAVE_XANTHUS 1
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/atk-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/atk-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/atk-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use ATK
+if test "${NOATK}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault ATK_DIR       '/sw/';;
+	*)
+		setValueWithDefault ATK_DIR       '/usr/';;
+esac
+
+setValueWithDefault ATK_INCDIR    '${ATK_DIR}/include/atk-1.0'
+if test -r "${ATK_INCDIR}/atk/atk.h" ; then
+	setValueWithDefault ATK_INCLUDES   '-I${ATK_INCDIR} -DHAVE_ATK'
+	setValueWithDefault ATK_LIBDIR     '${ATK_DIR}/lib'
+	setValueWithDefault ATK_LIBFILES   '-latk-1.0'
+	setValueWithDefault ATK_LIBS       '-L${ATK_LIBDIR} ${ATK_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault ATK_RPATH      '${RPATH_FLAG}${ATK_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_ATK       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/atk-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/blaslapack-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/blaslapack-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/blaslapack-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+if test "${USE_OPTIONAL_MATH}" = "1" ; then
+	echo "Using --options=optional_math. Complex full tensor math is enabled."
+	setValue USE_OPTIONAL_MATH 1
+	return 0
+fi
+	
+
+# Obtain math library information
+if test ! "${PETSC_CONFIG_FILE}x" = "x"; then 
+	LAPACK_BLAS_LIBS__PACKAGES=`grep '^BLASLAPACK_LIB' ${PETSC_CONFIG_FILE} | cut -f 2 -d =`
+	setValueWithDefault LAPACK_BLAS_LIBS "${LAPACK_BLAS_LIBS__PACKAGES}"
+	
+elif test ! "${CLAPACKHEADER_DIR}x" = "x"; then
+		setValueWithDefault BLASLAPACK_DIR "${CLAPACKHEADER_DIR}"
+		setValueWithDefault BLASLAPACK_INCDIR "${BLASLAPACK_DIR}"
+
+		warnIfNotValidFile "${BLASLAPACK_INCDIR}/clapack.h"    "Blas-Lapack Libraries" BLASLAPACK_INCDIR BLASLAPACK_DIR
+
+		setValueWithDefault BLASLAPACK_INCLUDES '-I${BLASLAPACK_INCDIR}'
+		setValueWithDefault BLASLAPACK_LIBDIR '${BLASLAPACK_DIR}'
+
+		case ${SYSTEM} in
+			Darwin)
+				setValueWithDefault BLASLAPACK_LIBS '-L${BLASLAPACK_LIBDIR} -lm -lmx';;
+			*)
+				setValueWithDefault BLASLAPACK_LIBS '-L${BLASLAPACK_LIBDIR} -lm';;
+		esac
+
+elif test ! "${CLAPACK_DIR}x" = "x"; then
+		setValueWithDefault F2C_DIR "${CLAPACK_DIR}/F2CLIBS"
+		setValueWithDefault F2C_INCDIR "${F2C_DIR}"
+	
+		warnIfNotValidFile "${F2C_INCDIR}/f2c.h"    "Blas-Lapack F2C Libraries" F2C_INCDIR F2C_DIR
+	
+		setValueWithDefault F2C_INCLUDES '-I${F2C_INCDIR}'
+		setValueWithDefault F2C_LIBDIR '${F2C_DIR}/lib'
+	
+		case ${SYSTEM} in
+			Darwin)
+				setValueWithDefault F2C_LIBS '-L${F2C_LIBDIR} -lm -lmx';;
+			*)
+				setValueWithDefault F2C_LIBS '-L${F2C_LIBDIR} -lm';;
+		esac
+else
+## Include a 4rd option - straight out Blas-lapack installation
+
+	setValueWithDefault BLASLAPACK_DIR '/usr'
+	setValueWithDefault BLASLAPACK_LIBDIR '${BLASLAPACK_DIR}/lib'
+	setValueWithDefault LAPACK_BLAS_LIBS '-L${BLASLAPACK_LIBDIR} -llapack -lblas -lg2c'
+
+fi


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/blaslapack-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/cairo-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/cairo-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/cairo-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Obtain libxml information
+CAIRO_CONFIG_DEFAULT=`${WHICH} pkg-config 2> /dev/null`
+if whichFailed "${CAIRO_CONFIG_DEFAULT}"; then
+	CAIRO_CONFIG_DEFAULT="/usr/bin/pkg-config"
+fi
+setValueWithDefault CAIRO_CONFIG "${CAIRO_CONFIG_DEFAULT}"
+assertValidExecutable "${CAIRO_CONFIG}" pkg-config
+
+#CAIRO_DIR_DEFAULT=`$CAIRO_CONFIG --prefix cairo`
+# cairo doesn't like --prefix
+CAIRO_DIR_DEFAULT=`$CAIRO_CONFIG cairo`
+setValueWithDefault CAIRO_DIR "${CAIRO_DIR_DEFAULT}"
+
+CAIRO_CFLAGS_DEFAULT=`$CAIRO_CONFIG --cflags cairo`
+setValueWithDefault CAIRO_CFLAGS "${CAIRO_CFLAGS_DEFAULT}"
+
+CAIRO_INCLUDES_DEFAULT=`$CAIRO_CONFIG --cflags cairo`
+setValueWithDefault CAIRO_INCLUDES "${CAIRO_CFLAGS_DEFAULT}"
+
+CAIRO_LIBS_DEFAULT=`$CAIRO_CONFIG --libs cairo`
+setValueWithDefault CAIRO_LIBS "${CAIRO_LIBS_DEFAULT}"


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/cairo-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/carbon-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/carbon-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/carbon-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Carbon - Mac Windowing API
+
+if test "${SYSTEM}" = "Darwin" ; then
+	setValueWithDefault CARBON_DIR '/System/Library/Frameworks/Carbon.framework'
+	setValueWithDefault CARBON_INCDIR '${CARBON_DIR}/Headers/'
+	
+	if test -r "${CARBON_INCDIR}/Carbon.h" ;  then
+		setValueWithDefault CARBON_INCLUDES '-I${CARBON_INCDIR} -DHAVE_CARBON'
+		setValueWithDefault HAVE_CARBON '1'
+		
+		setValueWithDefault CARBON_LIBS '-framework Carbon -framework AGL'
+	fi
+fi	


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/carbon-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/compiler-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/compiler-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/compiler-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Set warning and symbol level
+case ${CC_TYPE} in
+	gnu)
+		setValueWithDefault CC_SYMBOLLEVEL '-g'
+		setValueWithDefault CC_WARNINGLEVEL '-Wall';;
+	osf)
+		setValueWithDefault CC_SYMBOLLEVEL '-g3'
+		setValueWithDefault CC_WARNINGLEVEL "-msg_enable level3 -msg_disable unstructmem -msg_disable undefenum -msg_disable nonstandcast -msg_disable mixfuncvoid";;
+	intel)
+		setValueWithDefault CC_SYMBOLLEVEL '-g'
+		setValueWithDefault CC_WARNINGLEVEL '-w1';;
+	ibmxl)
+		setValueWithDefault CC_SYMBOLLEVEL '-g'
+		setValueWithDefault CC_WARNINGLEVEL '-qformat=all -qwarn64';;
+	sparc)
+		setValueWithDefault CC_SYMBOLLEVEL '-g'
+		setValueWithDefault CC_WARNINGLEVEL '';;
+	*)
+		echo "Warning: CC_WARNINGLEVEL for C compiler \"${CC_TYPE}\" unknown. Please set."
+		echo "Warning: CC_SYMBOLLEVEL for C compiler \"${CC_TYPE}\" unknown. Please set.";;  
+esac
+
+setValueWithDefault CC_DEBUGLEVEL "-DDEBUG -DQUERY_FP"


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/compiler-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/freetype-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/freetype-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/freetype-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use FREETYPE
+if test "${NOFREETYPE}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault FREETYPE_DIR       '/sw/';;
+	*)
+		setValueWithDefault FREETYPE_DIR       '/usr/';;
+esac
+
+setValueWithDefault FREETYPE_INCDIR    '${FREETYPE_DIR}/include/freetype'
+if test -r "${FREETYPE_INCDIR}/freetype.h" ; then
+	setValueWithDefault FREETYPE_INCLUDES   '-I${FREETYPE_INCDIR} -I${FREETYPE_INCDIR}/config -DHAVE_FREETYPE'
+	setValueWithDefault FREETYPE_LIBDIR     '${FREETYPE_DIR}/lib'
+	setValueWithDefault FREETYPE_LIBFILES   '-lttf'
+	setValueWithDefault FREETYPE_LIBS       '-L${FREETYPE_LIBDIR} ${FREETYPE_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault FREETYPE_RPATH      '${RPATH_FLAG}${FREETYPE_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_FREETYPE       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/freetype-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/gLucifer-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/gLucifer-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/gLucifer-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# gLucifer Stuff
+setValueWithDefault GLUCIFER_DIR      '${BLD_DIR}'
+setValueWithDefault GLUCIFER_INCDIR   '${GLUCIFER_DIR}/include'
+setValueWithDefault GLUCIFER_INCLUDES  '-I${GLUCIFER_INCDIR}'
+setValueWithDefault GLUCIFER_LIBDIR   '${GLUCIFER_DIR}/lib'
+setValueWithDefault GLUCIFER_LIBFILES '-lglucifer'
+setValueWithDefault GLUCIFER_LIBS     '-L${GLUCIFER_LIBDIR} ${GLUCIFER_LIBFILES}'
+
+case $CC_TYPE in
+        gnu)
+                case $SYSTEM in
+                        Linux|CYGWIN)
+                                setValueWithDefault GLUCIFER_RPATH '-Xlinker -rpath -Xlinker ${GLUCIFER_LIBDIR}';;
+                        Darwin)
+                                # Darwin doesn't support RPATH... use INSTALL NAME instead
+                                setValueWithDefault GLUCIFER_RPATH '';;
+                        OSF1)
+                                setValueWithDefault GLUCIFER_RPATH '-Wl,-rpath,${GLUCIFER_LIBDIR}';;
+                        *)
+                                echo "Warning: GLUCIFER_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+                esac ;;
+        osf)
+                # NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+                setValueWithDefault GLUCIFER_RPATH '-rpath ${GLUCIFER_LIBDIR}';;
+        intel)
+                setValueWithDefault GLUCIFER_RPATH '-Xlinker -rpath -Xlinker ${GLUCIFER_LIBDIR}';;
+        sparc)
+                setValueWithDefault GLUCIFER_RPATH '-R ${GLUCIFER_LIBDIR}';;
+        ibmxl)
+                setValueWithDefault GLUCIFER_RPATH '-R ${GLUCIFER_LIBDIR}';;
+        *)
+                echo "Warning: GLUCIFER_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+# Only warn if we're not building glucifer as part of this build
+if test "${BUILDING_GLUCIFER}" != "1"; then
+	warnIfNotValidFile ${GLUCIFER_DIR} glucifer glucifer GLUCIFER_DIR
+	warnIfNotValidFile ${GLUCIFER_INCDIR}/glucifer/glucifer.h glucifer GLUCIFER_INCDIR "GLUCIFER_DIR"
+	warnIfNotValidFile ${GLUCIFER_LIBDIR}/libglucifer.a glucifer GLUCIFER_LIBDIR "GLUCIFER_DIR" 
+	if ! DoCompileConftest ./VMake/Config/glucifer; then
+		exitWithErrorIfNotOptionalWithMessage glucifer ${GLUCIFER_DIR}
+	fi
+else
+	echo "    (glucifer marked as being built, skipping tests)"
+fi
+
+setValueWithDefault HAVE_GLUCIFER 1
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/gLucifer-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/glib2-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/glib2-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/glib2-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use GLIB2
+if test "${NOGLIB2}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault GLIB2_DIR       '/sw/';;
+	*)
+		setValueWithDefault GLIB2_DIR       '/usr/';;
+esac
+
+setValueWithDefault GLIB2_INCDIR    '${GLIB2_DIR}/include/glib-2.0'
+if test -r "${GLIB2_INCDIR}/glib.h" ; then
+	setValueWithDefault GLIB2_INCLUDES   '-I${GLIB2_INCDIR} -I${GLIB2_DIR}/lib/glib-2.0/include -DHAVE_GLIB2'
+	setValueWithDefault GLIB2_LIBDIR     '${GLIB2_DIR}/lib'
+	setValueWithDefault GLIB2_LIBFILES   '-lgobject-2.0 -lgmodule-2.0 -lglib-2.0'
+	setValueWithDefault GLIB2_LIBS       '-L${GLIB2_LIBDIR} ${GLIB2_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault GLIB2_RPATH      '${RPATH_FLAG}${GLIB2_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_GLIB2       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/glib2-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,17 @@
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StgFEM/StgFEM.h>
+#include "glucifer/glucifer.h"
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	StGermain_Init( &argc, &argv );
+	StgFEM_Init( &argc, &argv );
+	glucifer_Init();
+	
+	glucifer_Finalise();
+	StgFEM_Finalise();
+	StGermain_Finalise();
+	MPI_Finalize();
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = GLUCIFER STGFEM STGERMAIN MPI XML MATH DL
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/gtk2-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/gtk2-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/gtk2-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use GTK2
+if test "${NOGTK2}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault GTK2_DIR       '/sw/';;
+	*)
+		setValueWithDefault GTK2_DIR       '/usr/';;
+esac
+
+setValueWithDefault GTK2_INCDIR    '${GTK2_DIR}/include/gtk-2.0'
+if test -r "${GTK2_INCDIR}/gtk/gtk.h" ; then
+	setValueWithDefault GTK2_INCLUDES   '-I${GTK2_INCDIR} -I${GTK2_DIR}/lib/gtk-2.0/include -DHAVE_GTK2'
+	setValueWithDefault GTK2_LIBDIR     '${GTK2_DIR}/lib'
+	setValueWithDefault GTK2_LIBFILES   '-lgtk-x11-2.0 -lgdk-x11-2.0 -lgdk_pixbuf-2.0'
+	setValueWithDefault GTK2_LIBS       '-L${GTK2_LIBDIR} ${GTK2_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault GTK2_RPATH      '${RPATH_FLAG}${GTK2_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_GTK2       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/gtk2-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/hdf5-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/hdf5-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/hdf5-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use HDF5
+if test "${NOHDF5}" = "1" ; then
+	return 0
+fi
+
+# Obtain math library information
+setValueWithDefault HDF5_DIR '/usr'
+setValueWithDefault HDF5_INCDIR '${HDF5_DIR}/include'
+
+#warnIfNotValidFile "${HDF5_INCDIR}/hdf5.h" HDF5 HDF5_INCDIR
+
+setValueWithDefault HDF5_INCLUDES '-I${HDF5_INCLUDES}'
+setValueWithDefault HDF5_LIBDIR '${HDF5_LIBDIR}/lib'
+setValueWithDefault HDF5_LIBFILES '-lhdf5'
+setValueWithDefault HDF5_LIBS '-L${HDF5_LIBDIR} ${HDF5_LIBFILES}'
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/hdf5-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/libavcodec-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/libavcodec-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/libavcodec-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use LIBAVCODEC
+if test "${NOLIBAVCODEC}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+	Darwin)
+		setValueWithDefault LIBAVCODEC_DIR       '/sw';;
+	*)
+		setValueWithDefault LIBAVCODEC_DIR       '/usr';;
+esac
+
+PKG_CONFIG=`${WHICH} pkg-config 2> /dev/null`
+if whichFailed "${PKG_CONFIG}"; then
+	NO_PKG_CONFIG=1
+fi
+if test -r ${LIBAVCODEC_DIR}/lib/pkgconfig/libavcodec.pc; then
+	export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${LIBAVCODEC_DIR}/lib/pkgconfig"
+	if `${PKG_CONFIG} --exists libavcodec`; then
+		LIBAVCODEC_CFLAGS_DEFAULT=`$PKG_CONFIG --cflags libavcodec`
+		setValueWithDefault LIBAVCODEC_CFLAGS "${LIBAVCODEC_CFLAGS_DEFAULT}"
+
+		LIBAVCODEC_INCLUDES_DEFAULT=`$PKG_CONFIG --cflags libavcodec`
+		setValueWithDefault LIBAVCODEC_INCLUDES "${LIBAVCODEC_CFLAGS_DEFAULT}"
+
+		LIBAVCODEC_LIBS_DEFAULT=`$PKG_CONFIG --libs libavcodec`
+		setValueWithDefault LIBAVCODEC_LIBS "${LIBAVCODEC_LIBS_DEFAULT}"
+
+		LIBAVCODEC_LIBS_DIR=`$PKG_CONFIG --libs-only-L libavcodec | ${SED} 's/\-L//g'`
+		LIBAVCODEC_RPATH=""
+		for x in $LIBAVCODEC_LIBS_DIR
+		do
+			LIBAVCODEC_RPATH="${LIBAVCODEC_RPATH} ${RPATH_FLAG}${x}"
+		done
+		setValueWithDefault LIBAVCODEC_RPATH "${LIBAVCODEC_RPATH}"
+		
+		setValueWithDefault HAVE_LIBAVCODEC       '1'
+	else
+		echo "Warning: pkg-config does not know of libavcodec. Set LIBAVCODEC_DIR"
+	fi
+else
+	setValueWithDefault LIBAVCODEC_INCDIR    '${LIBAVCODEC_DIR}/include/'
+	if test -r "${LIBAVCODEC_INCDIR}/ffmpeg/avcodec.h" ; then
+		setValueWithDefault LIBAVCODEC_INCLUDES   '-I${LIBAVCODEC_INCDIR} -DHAVE_LIBAVCODEC'
+		setValueWithDefault LIBAVCODEC_LIBDIR     '${LIBAVCODEC_DIR}/lib'
+		setValueWithDefault LIBAVCODEC_LIBFILES   '-lavcodec'
+		setValueWithDefault LIBAVCODEC_LIBS       '-L${LIBAVCODEC_LIBDIR} ${LIBAVCODEC_LIBFILES}'
+		if test "${RPATH_FLAG}x" != "x" ; then
+			setValueWithDefault LIBAVCODEC_RPATH      '${RPATH_FLAG}${LIBAVCODEC_LIBDIR}'
+		fi
+		setValueWithDefault HAVE_LIBAVCODEC       '1'
+	fi
+fi


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/libavcodec-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/libfame-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/libfame-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/libfame-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use LIBFAME
+if test "${NOLIBFAME}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault LIBFAME_DIR       '/sw/';;
+	*)
+		setValueWithDefault LIBFAME_DIR       '/usr/';;
+esac
+
+setValueWithDefault LIBFAME_INCDIR    '${LIBFAME_DIR}/include'
+warnIfNotValidFile "${LIBFAME_INCDIR}/fame.h" LIBFAME LIBFAME_INCDIR
+
+if test -r "${LIBFAME_INCDIR}/fame.h" ; then
+	setValueWithDefault LIBFAME_INCLUDES   '-I${LIBFAME_INCDIR} -DHAVE_LIBFAME'
+	setValueWithDefault LIBFAME_LIBDIR     '${LIBFAME_DIR}/lib'
+	setValueWithDefault LIBFAME_LIBFILES   '-lfame'
+	setValueWithDefault LIBFAME_LIBS       '-L${LIBFAME_LIBDIR} ${LIBFAME_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault LIBFAME_RPATH      '${RPATH_FLAG}${LIBFAME_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_LIBFAME       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/libfame-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/makefile-shortcuts.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/makefile-shortcuts.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/makefile-shortcuts.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+setValueWithDefault FIND_SUBDIRS '${FIND} * -type d -follow -prune ! -name .svn'
+setValueWithDefault MAKEFILE_FIND_SUBDIRS '$(shell ${FIND_SUBDIRS})'
+
+setValueWithDefault GET_MODNAME 'basename `pwd | ${SED} s/src//g | ${SED} s/tests//g`'
+setValueWithDefault MAKEFILE_GET_MODNAME '$(shell ${GET_MODNAME})'
+
+setValueWithDefault 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 ) )'
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/makefile-shortcuts.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/math-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/math-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/math-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Obtain math library information
+setValueWithDefault MATH_DIR '/usr'
+setValueWithDefault MATH_INCDIR '${MATH_DIR}/include'
+
+warnIfNotValidFile "${MATH_INCDIR}/math.h"    "Math Libraries" MATH_INCDIR MATH_DIR
+
+setValueWithDefault MATH_INCLUDES '-I${MATH_INCDIR}'
+setValueWithDefault MATH_LIBDIR '${MATH_DIR}/lib'
+
+case ${SYSTEM} in
+	Darwin)
+		setValueWithDefault MATH_LIBS '-L${MATH_LIBDIR} -lm -lmx';;
+	*)
+		setValueWithDefault MATH_LIBS '-L${MATH_LIBDIR} -lm';;
+esac


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/math-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+#include <mpi.h>
+
+int main( int argc, char** argv ) {
+	MPI_Init( &argc, &argv );
+	MPI_Finalize();
+
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = MPI
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/mpi-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/mpi-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/mpi-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,219 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+#if ! test "${HAVE_MPI}x" = "x"; then
+#	unset HAVE_MPI
+#	return
+#fi
+
+# Obtain MPI information
+case ${SYSTEM} in
+	Linux|CYGWIN|Darwin|SunOS)
+		setValueWithDefault MPI_DIR   "/usr/";;
+	OSF1)
+		setValueWithDefault MPI_DIR   "/usr/";;
+	*)
+		if test "${MPI_DIR}x" = "x" ; then
+			echo "Warning: MPI_DIR for system \"${SYSTEM}\" unknown. Set the environment variable."
+		fi;;
+esac
+setValueWithDefault MPI_BINDIR   '${MPI_DIR}/bin'
+setValueWithDefault MPI_LIBDIR   '${MPI_DIR}/lib'
+setValueWithDefault MPI_INCDIR   '${MPI_DIR}/include'
+if test ! "${CC}x" = "mpiccx"; then
+	setValueWithDefault MPI_INCLUDES '-I${MPI_INCDIR}'
+else
+	setValueWithDefault MPI_INCLUDES ' '
+fi
+
+if test "${PETSC_MPI}x" = "x"; then
+	warnIfNotValidFile "${MPI_INCDIR}/mpi.h" MPI MPI_INCDIR MPI_DIR
+else
+	echo "Using PETSc's mpi configuration"
+fi
+
+if test -r "${MPI_INCDIR}/mpi.h"; then
+	if `grep "SILICON GRAPHICS, INC" ${MPI_INCDIR}/mpi.h > /dev/null 2>&1`; then
+		setValueWithDefault MPI_IMPLEMENTATION sgi
+	elif `grep "OPEN_MPI" ${MPI_INCDIR}/mpi.h > /dev/null 2>&1`; then
+		setValueWithDefault MPI_IMPLEMENTATION open_mpi
+	elif `grep "MPICH2" ${MPI_INCDIR}/mpi.h > /dev/null 2>&1`; then
+		setValueWithDefault MPI_IMPLEMENTATION mpich2
+#	elif `grep "Argonne National Laboratory" ${MPI_INCDIR}/mpi.h > /dev/null 2>&1`; then
+#		setValueWithDefault MPI_IMPLEMENTATION mpich
+	else
+		setValueWithDefault MPI_IMPLEMENTATION mpich
+	fi
+fi
+
+# set depending on system. on most systems, just default to mpich
+if test "${MPI_LIBFILES}x" = "x"; then
+	case ${SYSTEM} in
+		Linux|CYGWIN|Darwin|SunOS)
+			if test "${MPI_IMPLEMENTATION}" = "mpich2"; then
+				MPI_LIBFILES='-lmpich -lpmpich'
+				setValueWithDefault MPI_LIBRARY 'mpich'
+			elif test "${MPI_IMPLEMENTATION}" = "mpich"; then
+				MPI_LIBFILES='-lmpich -lpmpich'
+				setValueWithDefault MPI_LIBRARY 'mpich'
+			else
+				MPI_LIBFILES='-lmpi'
+				setValueWithDefault MPI_LIBRARY 'mpi'
+			fi;
+			;;
+		OSF1)
+			MPI_LIBFILES='-lmpi -lelan';
+			setValueWithDefault MPI_LIBRARY 'mpi'
+			;;
+		*)
+			if test "${MPI_DIR}x" = "x" ; then
+				echo "Warning: MPI_LIBFILES for system \"${SYSTEM}\" unknown. Set the environment variable."
+			fi;;
+		esac
+		resolveVariable MPI_LIBRARY_FILE "${MPI_LIBDIR}/lib${MPI_LIBRARY}.a"
+	if ! test -r ${MPI_LIBRARY_FILE}; then
+		resolveVariable MPI_LIBRARY_FILE "${MPI_LIBDIR}/lib${MPI_LIBRARY}.${SO_EXT}"
+	fi
+	if test -r ${MPI_LIBRARY_FILE}; then
+		if test "`${NM} ${MPI_LIBRARY_FILE} 2> /dev/null | ${GREP} -v SGI | ${GREP} -v sgi | ${GREP} -v gmon | ${GREP} _gm`x" != "x"; then
+			GM_MPI=1
+		fi
+	fi
+	if test "${GM_MPI}x" != "x"; then
+		# GM MPI stuff
+		if test "${GM_DIR}x" = "x"; then
+			setValueWithDefault GM_DIR '/usr/gm'
+		fi
+		if test "${USE_64BITS}x" = "x"; then
+			setValueWithDefault GM_LIBDIR '${GM_DIR}/lib'
+		else
+			setValueWithDefault GM_LIBDIR '${GM_DIR}/lib64'
+		fi
+		resolveVariable GM_LIBDIR "${GM_LIBDIR}"
+		if test -d "${GM_LIBDIR}"; then
+			MPI_LIBFILES="${MPI_LIBFILES} -L${GM_LIBDIR} -lgm"
+		else
+			echo "Warning: Using GM MPI but GM_DIR not set. Please set GM_DIR or GM_LIBDIR variable"
+		echo "         Try looking for a directory named /usr/GMxxxx (x is a number)"
+		fi
+			export MPI_LIBFILES
+	fi
+	if test "${MPI_IMPLEMENTATION}" = "mpich2"; then
+		MPI_BASE_LIB_LIST=`grep "^MPI_OTHERLIBS" ${MPI_DIR}/bin/mpicc 2> /dev/null | cut -f 2 -d = | sed 's/\"//g'`;
+		MPI_LIBFILES="${MPI_LIBFILES} ${MPI_BASE_LIB_LIST}"
+	elif test "${MPI_IMPLEMENTATION}" = "mpich"; then
+		MPI_BASE_LIB_LIST=`grep "^BASE_LIB_LIST" ${MPI_DIR}/bin/mpicc 2> /dev/null | cut -f 2 -d = | sed 's/\"//g'`;
+		MPI_LIBFILES="${MPI_LIBFILES} ${MPI_BASE_LIB_LIST}"
+	fi
+fi
+setValueWithDefault MPI_LIBFILES   "${MPI_LIBFILES}"
+
+case $CC_TYPE in
+	gnu)
+		case $SYSTEM in
+			Linux|CYGWIN)
+				setValueWithDefault MPI_RPATH '-Xlinker -rpath -Xlinker ${MPI_LIBDIR}';;
+			Darwin)
+				# Darwin doesn't support RPATH... use INSTALL NAME instead
+				setValueWithDefault MPI_RPATH '';;
+			OSF1)
+				setValueWithDefault MPI_RPATH '-Wl,-rpath,${MPI_LIBDIR}';;
+			SunOS)
+				setValueWithDefault MPI_RPATH '';; # Alan not conveienced it does it
+			*)
+				echo "Warning: MPI_RPATH for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";;
+		esac ;;
+	osf)
+		# NOTE: This may not work... I think only ONE rpath arguement is accepted/read.
+		setValueWithDefault MPI_RPATH '-rpath ${MPI_LIBDIR}';;
+	intel)
+		setValueWithDefault MPI_RPATH '-Xlinker -rpath -Xlinker ${MPI_LIBDIR}';;
+	sparc)
+		setValueWithDefault MPI_RPATH '-R ${MPI_LIBDIR}';;
+	ibmxl)
+		setValueWithDefault MPI_RPATH '-R ${MPI_LIBDIR}';;
+	*)
+		echo "Warning: MPI_RPATH for C compiler \"${CC_TYPE}\" unknown";;
+esac
+
+case ${SYSTEM} in
+	Darwin)
+		if test "${STGERMAIN_LIBDIR}x" = "x"; then
+			setValueWithDefault MPI_LIBS   '-L${LIB_DIR} -l${MPI_LIBRARY} -L${MPI_LIBDIR} ${MPI_LIBFILES} -L/sw/lib ${CC_FORTRAN_LFLAGS}'
+		else
+			setValueWithDefault MPI_LIBS   '-L${STGERMAIN_LIBDIR} -l${MPI_LIBRARY} -L${MPI_LIBDIR} ${MPI_LIBFILES} -L/sw/lib ${CC_FORTRAN_LFLAGS}'
+		fi;;
+	*)
+		setValueWithDefault MPI_LIBS   '-L${MPI_LIBDIR} ${MPI_LIBFILES}';;
+esac
+
+if test "${MPI_EXTERNAL_LIBS}x" = "x"; then
+	case ${SYSTEM} in
+		Darwin)
+			setValueWithDefault MPI_EXTERNAL_LIBS '${CC_FORTRAN_LFLAGS}'
+	esac
+fi
+
+case ${SYSTEM} in
+	Linux|CYGWIN|Darwin|SunOS)
+		setValueWithDefault MPI_RUN_COMMAND   'mpirun';;
+	OSF1)
+		setValueWithDefault MPI_RUN_COMMAND   'prun';;
+	*)
+		if test "${MPI_RUN_COMMAND}x" = "x" ; then
+			echo "Warning: MPI_RUN_COMMAND for system \"${SYSTEM}\" unknown. Set the environment variable."
+		fi;;
+esac
+
+if test "${PETSC_MPI}x" = "x"; then
+	if test "${MPI_RUN}x" = "x"; then
+		warnValidExecutable "${MPI_BINDIR}/${MPI_RUN_COMMAND}" mpi_run MPI_RUN "MPI_DIR & MPI_RUN_COMMAND"
+	else
+		warnValidExecutable "${MPI_RUN}" mpi_run MPI_RUN "The MPI_RUN you have set does not exists or is not executable"
+	fi
+else
+	warnValidExecutable "${MPI_RUN}" mpi_run MPI_RUN "PETSc's MPIRUN"
+fi
+
+setValueWithDefault MPI_RUN   '${MPI_BINDIR}/${MPI_RUN_COMMAND}'
+
+case ${SYSTEM} in
+	Linux|CYGWIN|Darwin|SunOS)
+		setValueWithDefault MPI_NPROC   '-np';;
+	OSF1)
+		setValueWithDefault MPI_NPROC   '-n';;
+	*)
+		if test "${MPI_NPROC}x" = "x" ; then
+			echo "Warning: MPI_NPROC for system \"${SYSTEM}\" unknown. Set the environment variable."
+		fi;;
+esac
+
+# Only add MPI_MACHINES to Makefile.system if specified, otherwise leave omitted
+if test "${MPI_MACHINES}x" != "x"; then
+	setValueWithDefault MPI_MACHINES "${MPI_MACHINES}"
+fi
+
+if ! DoCompileConftest ./VMake/Config/mpi; then
+	echo "*** Error: Configuration has failed because mpi installation ${MPI_DIR} is invalid"
+	exit 1
+fi
+
+setValue HAVE_MPI '1'


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/mpi-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/neon-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/neon-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/neon-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Obtain libxml information
+NEON_CONFIG_DEFAULT=`${WHICH} neon-config 2> /dev/null`
+if whichFailed "${NEON_CONFIG_DEFAULT}"; then
+	NEON_CONFIG_DEFAULT="/usr/bin/neon-config"
+fi
+if test -x ${NEON_CONFIG_DEFAULT}; then
+	setValueWithDefault NEON_CONFIG "${NEON_CONFIG_DEFAULT}"
+	assertValidExecutable "${NEON_CONFIG}" neon-config
+
+	NEON_DIR_DEFAULT=`$NEON_CONFIG --prefix`
+	setValueWithDefault NEON_DIR "${NEON_DIR_DEFAULT}"
+
+	NEON_CFLAGS_DEFAULT=`$NEON_CONFIG --cflags`
+	setValueWithDefault NEON_CFLAGS "${NEON_CFLAGS_DEFAULT}"
+
+	NEON_INCLUDES_DEFAULT=`$NEON_CONFIG --cflags`
+	setValueWithDefault NEON_INCLUDES "${NEON_CFLAGS_DEFAULT}"
+
+	NEON_LIBS_DEFAULT=`$NEON_CONFIG --libs`
+	setValueWithDefault NEON_LIBS "${NEON_LIBS_DEFAULT}"
+
+	setValue HAVE_NEON 1
+fi


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/neon-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/pango-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/pango-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/pango-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use PANGO
+if test "${NOPANGO}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		setValueWithDefault PANGO_DIR       '/sw/';;
+	*)
+		setValueWithDefault PANGO_DIR       '/usr/';;
+esac
+
+setValueWithDefault PANGO_INCDIR    '${PANGO_DIR}/include/pango-1.0'
+if test -r "${PANGO_INCDIR}/pango/pango.h" ; then
+	setValueWithDefault PANGO_INCLUDES   '-I${PANGO_INCDIR} -DHAVE_PANGO'
+	setValueWithDefault PANGO_LIBDIR     '${PANGO_DIR}/lib'
+	setValueWithDefault PANGO_LIBFILES   '-lpangoxft-1.0 -lpangox-1.0 -lpango-1.0'
+	setValueWithDefault PANGO_LIBS       '-L${PANGO_LIBDIR} ${PANGO_LIBFILES}'
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault PANGO_RPATH      '${RPATH_FLAG}${PANGO_LIBDIR}'
+	fi
+	setValueWithDefault HAVE_PANGO       '1'
+fi
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/pango-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/pdt-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/pdt-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/pdt-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+setValueWithDefault PDT_DIR '/usr/local/pdt'
+assertValidDirectory ${PDT_DIR} PDT PDT_DIR
+
+if test "${PDT_CONFIG_ARCH}x" = "x"; then
+	# Attempt to be smart and pickup the arch
+	NUM_ARCH=`find ${PDT_DIR} -maxdepth 1 -mindepth 1 -type d | grep -v man | grep -v include | grep -v etc | wc -l | sed 's/^[ ]*//'`
+	case ${NUM_ARCH} in
+		0)
+			echo "Error - No PDT_CONFIG_ARCH found in ${PDT_DIR}. Check that PDT has been installed properly."
+			exit 1
+			;;
+		1)
+			setValueWithDefault PDT_CONFIG_ARCH \
+				`find ${PDT_DIR} -maxdepth 1 -mindepth 1 -type d | grep -v man | grep -v include | grep -v etc | xargs basename`
+			;;
+		*)
+			echo "Error - More than one architecture found in ${PDT_DIR}. Please select and set PDT_CONFIG_ARCH and PDT_OPTIONS."
+			exit 1
+			;;
+	esac
+fi
+
+assertValidExecutable "$PDT_DIR/$PDT_CONFIG_ARCH/bin/cparse" "cparse"
+assertValidExecutable "$PDT_DIR/$PDT_CONFIG_ARCH/bin/cxxparse" "cxxparse"
+assertValidExecutable "$PDT_DIR/$PDT_CONFIG_ARCH/bin/f95parse" "f95parse"
+
+
+setValueWithDefault PDTPARSECXX "${PDT_DIR}/${PDT_CONFIG_ARCH}/bin/cxxparse"
+setValueWithDefault PDTPARSEC "${PDT_DIR}/${PDT_CONFIG_ARCH}/bin/cparse"
+setValueWithDefault PDTPARSEF "${PDT_DIR}/${PDT_CONFIG_ARCH}/bin/f95parse"
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/pdt-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/python/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/python/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/python/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+#include <Python.h>
+
+int main( int argc, char** argv ) {
+	return Py_Main( argc, argv );
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+SRCS = conftest.c
+
+packages = PYTHON
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+def Test():
+	return '0'
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,19 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+override USE_PDT=0
+
+override PYC_DIR := $(shell pwd)
+
+PYTHON_PACKAGE = conftest
+pyc = conftest.py
+
+packages = PYTHON
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/python-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/python-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/python-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use PYTHON
+if test "${NOPYTHON}" = "1" ; then
+	return 0
+fi
+
+# Obtain Python information
+case ${SYSTEM} in
+	Linux|CYGWIN|OSF1|SunOS)
+		setValueWithDefault PYTHON_DIR '/usr/';;
+	Darwin)
+		# the default python does not include the api
+		setValueWithDefault PYTHON_DIR '/sw/';;
+	*)
+		echo "Warning: PYTHON_DIR for system \"${SYSTEM}\" unknown. Set the environment variable if you have Python installed.";;
+esac
+
+setValueWithDefault PYTHON_VERSION   `python -V 2>&1 | ${SED} 's/Python //' | cut -f 1,2 -d '.'`
+setValueWithDefault PYTHON_INCDIR    '${PYTHON_DIR}/include/python${PYTHON_VERSION}'
+
+eval PYTHON_HEADER=${PYTHON_INCDIR}/Python.h
+
+if test -r "${PYTHON_HEADER}" ; then
+	setValueWithDefault PYTHON_INCLUDES  '-I${PYTHON_INCDIR} -DHAVE_PYTHON'
+	setValueWithDefault PYTHON_BINDIR '${PYTHON_DIR}/bin'
+	setValueWithDefault PYTHON        '${PYTHON_BINDIR}/python'
+	warnValidExecutable ${PYTHON} python PYTHON "PYTHON_DIR or PYTHON_BINDIR"
+
+	setValueWithDefault PYTHON_LIB 'python${PYTHON_VERSION}'
+
+	if test -x ${PYTHON_DIR}/lib/lib${PYTHON_LIB}.${SO_EXT}; then
+		setValueWithDefault PYTHON_LIBDIR '${PYTHON_DIR}/lib'
+		setValueWithDefault PYTHON_MODDIR '${PYTHON_LIBDIR}/python${PYTHON_VERSION}'
+		setValue PYTHON_HAVE_SO_LIB '1'
+	else
+		setValueWithDefault PYTHON_LIBDIR '${PYTHON_DIR}/lib/python${PYTHON_VERSION}'
+		setValueWithDefault PYTHON_MODDIR '${PYTHON_DIR}/lib/python${PYTHON_VERSION}'
+	fi
+	
+	setValueWithDefault PYTHON_COMPILEALL '${PYTHON} ${PYTHON_MODDIR}/compileall.py'
+
+	case ${SYSTEM} in
+		Linux)
+			setValueWithDefault PYTHON_EXTERNAL_LIBS '-lpthread -ldl -lutil';;
+		CYGWIN)
+			setValueWithDefault PYTHON_EXTERNAL_LIBS '-lpthread -lutil';;
+		OSF1)
+			setValueWithDefault PYTHON_EXTERNAL_LIBS '-lpthread';;
+		Darwin)
+			setValueWithDefault PYTHON_EXTERNAL_LIBS '-framework CoreServices';;
+		*)
+			echo "Warning: PYTHON_EXTERNAL_LIBS for system \"${SYSTEM}\" unknown. Set the PYTHON_EXTERNAL_LIBS environment variable.";;
+	esac
+	
+	setValueWithDefault PYTHON_LIBS       '-L${PYTHON_LIBDIR} -l${PYTHON_LIB} ${PYTHON_EXTERNAL_LIBS}'
+	
+	case ${SYSTEM} in
+		CYGWIN)
+			setValueWithDefault PYTHON_STATIC_LIB '${PYTHON_LIBDIR}/config/libpython${PYTHON_VERSION}.dll.a';;
+		*)
+			setValueWithDefault PYTHON_STATIC_LIB '${PYTHON_LIBDIR}/config/libpython${PYTHON_VERSION}.a';;
+	esac
+
+	if ! DoCompileConftest ./VMake/Config/python; then
+		exitWithErrorIfNotOptionalWithMessage python ${PYTHON_DIR}
+	fi
+
+	if ! DoCompileConftest ./VMake/Config/python-compile; then
+		exitWithErrorIfNotOptionalWithMessage python-compile ${PYTHON_COMPILEALL}
+	fi
+
+	setValueWithDefault HAVE_PYTHON 1
+fi


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/python-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/sdl-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/sdl-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/sdl-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+# SDL Simple Direct Media Layer pkg for manipulating windows, keyboard etc
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use SDL
+if test "${NOSDL}" = "1" ; then
+	return 0
+fi
+
+case ${SYSTEM} in
+        Darwin)
+		if test "${SDL_DIR}x" = "x"; then
+			if test -r "/sw/include/SDL/SDL.h" ; then
+				setValueWithDefault SDL_DIR       '/sw'
+			elif test -r "/Library/Frameworks/SDL.framework/Headers/SDL.h" ; then
+				setValueWithDefault SDL_DIR       '/Library/Frameworks/SDL.framework/'
+			else
+				setValueWithDefault SDL_DIR       '/usr'
+			fi
+		fi
+		;;
+        *)
+		setValueWithDefault SDL_DIR       '/usr';;
+esac
+if test -d "${SDL_DIR}/Headers"; then
+	export FRAMEWORK_SDL=1
+fi
+if test "${FRAMEWORK_SDL}x" = "x"; then
+	setValueWithDefault SDL_INCDIR    '${SDL_DIR}/include'
+	SDL_INCDIR_CHECK=`warnIfNotValidFile "${SDL_INCDIR}/SDL/SDL.h" SDL "SDL_INCDIR SDL_DIR"`
+else
+	setValueWithDefault SDL_INCDIR    '${SDL_DIR}/Headers'
+	SDL_INCDIR_CHECK=`warnIfNotValidFile "${SDL_INCDIR}/SDL.h" SDL "SDL_INCDIR SDL_DIR"`
+fi
+	
+
+if test "${SDL_INCDIR_CHECK}x" != "x"; then
+        echo $SDL_INCDIR_CHECK
+else
+	setValueWithDefault SDL_INCLUDES   '-I${SDL_INCDIR} -I${SDL_INCDIR}/SDL/'
+	if test "${FRAMEWORK_SDL}x" = "x"; then
+		appendVariableIfReadable SDL_INCLUDES "${SDL_INCDIR}/SDL/SDL.h" "-DHAVE_SDL -DSDL_INSTALLED"
+		setValueWithDefault SDL_LIBDIR    '${SDL_DIR}/lib/'
+	else
+		appendVariableIfReadable SDL_INCLUDES "${SDL_INCDIR}/SDL.h" "-DHAVE_SDL -DSDL_INSTALLED"
+		setValueWithDefault SDL_LIBDIR    '${SDL_DIR}/'
+	fi
+
+	case ${SYSTEM} in 
+		Darwin)
+			if test "${FRAMEWORK_SDL}x" = "x"; then
+				setValueWithDefault SDL_LIBFILES  '-lSDL -framework Cocoa'
+			else
+				setValueWithDefault SDL_LIBFILES  '-framework SDL -framework Cocoa'
+			fi
+			;;
+		*)
+			setValueWithDefault SDL_LIBFILES  '-lSDL';;
+	esac		
+
+	setValueWithDefault SDL_LIBS      '-L${SDL_LIBDIR} ${SDL_LIBFILES}'
+	setValueWithDefault SDL_MAIN_LIBS '-L${SDL_LIBDIR} -lSDLmain ${SDL_LIBFILES}'
+
+	setValueWithDefault HAVE_SDL '1'
+fi	


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/sdl-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/tau-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/tau-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/tau-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+setValueWithDefault TAU_DIR '/usr/local/tau'
+assertValidDirectory ${TAU_DIR} TAU TAU_DIR
+
+if test "${TAU_CONFIG_ARCH}${TAU_OPTIONS}x" = "x"; then
+	# Attempt to be smart and pickup the arch and options
+	NUM_ARCH=`find ${TAU_DIR} -maxdepth 1 -mindepth 1 -type d | grep -v man | grep -v include | wc -l | sed 's/^[ ]*//'`
+	case ${NUM_ARCH} in
+		0)
+			echo "Error - No TAU_CONFIG_ARCH found in ${TAU_DIR}. Check that TAU has been installed properly."
+			exit 1
+			;;
+		1)
+			setValueWithDefault TAU_CONFIG_ARCH \
+				`find ${TAU_DIR} -maxdepth 1 -mindepth 1 -type d | grep -v man | grep -v include | xargs basename`
+			NUM_OPTIONS=`find ${TAU_DIR}/${TAU_CONFIG_ARCH} -type f -name "Makefile.tau*" | wc -l`
+			if test "${NUM_OPTIONS}" -eq "1"; then
+				setValueWithDefault TAU_OPTIONS \
+				`find ${TAU_DIR}/${TAU_CONFIG_ARCH} -type f -name "Makefile.tau*"  | xargs basename | sed 's/Makefile.tau//'`
+			else
+				echo "Error - TAU_OPTIONS could not be found. Check that TAU has been installed properly and set TAU_OPTIONS"
+			fi
+			;;
+		*)
+			echo "Error - More than one architecture found in ${TAU_DIR}. Please select and set TAU_CONFIG_ARCH and TAU_OPTIONS."
+			exit 1
+			;;
+	esac
+fi
+
+assertValidExecutable "$TAU_DIR/$TAU_CONFIG_ARCH/bin/tau_instrumentor" "tau_instrumentor"
+
+setValueWithDefault TAUINSTR "${TAU_DIR}/${TAU_CONFIG_ARCH}/bin/tau_instrumentor"
+
+setValueWithDefault TAU_INCDIR '${TAU_DIR}/include'
+warnIfNotValidFile "${TAU_INCDIR}/TAU.h"    "TAU Libraries" TAU_INCDIR TAU_DIR
+
+getVariableFromMakefile TAU_INCLUDE $TAU_DIR/$TAU_CONFIG_ARCH/lib/Makefile.tau${TAU_OPTIONS}
+getVariableFromMakefile TAU_DEFS $TAU_DIR/$TAU_CONFIG_ARCH/lib/Makefile.tau${TAU_OPTIONS}
+getVariableFromMakefile TAU_MPI_INCLUDE $TAU_DIR/$TAU_CONFIG_ARCH/lib/Makefile.tau${TAU_OPTIONS}
+TAU_CFLAGS="${TAU_INCLUDE} ${TAU_DEFS} ${TAU_MPI_INCLUDE}"
+
+setValueWithDefault TAU_INCLUDES "${TAU_CFLAGS}"
+
+setValueWithDefault TAU_LIBDIR '${TAU_DIR}/${TAU_CONFIG_ARCH}/lib'
+
+getVariableFromMakefile TAU_MPI_LIBS $TAU_DIR/$TAU_CONFIG_ARCH/lib/Makefile.tau${TAU_OPTIONS}
+getVariableFromMakefile TAU_SHLIBS $TAU_DIR/$TAU_CONFIG_ARCH/lib/Makefile.tau${TAU_OPTIONS}
+TAU_LFLAGS="${TAU_MPI_LIBS} ${TAU_SHLIBS}"
+
+setValueWithDefault TAU_LIBS "${TAU_LFLAGS}"
+
+setValueWithDefault TAU_RPATH "${RPATH_FLAG}${TAU_LIBDIR}"
+
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/tau-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/tetgen-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/tetgen-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/tetgen-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+# Obtain tetgen library information
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use LIBAVCODEC
+if test "${NOTETGEN}" = "1" ; then
+	return 0
+fi
+
+TETGEN_URL=http://tetgen.berlios.de/
+
+setValueWithDefault TETGEN_DIR '/usr'
+setValueWithDefault TETGEN_INCDIR '${TETGEN_DIR}'
+setValueWithDefault TETGEN_LIBDIR '${TETGEN_DIR}/lib'
+
+warnIfNotValidFile "${TETGEN_INCDIR}/tetgen.h" "TetGen ${TETGEN_URL}" TETGEN_INCDIR TETGEN_DIR
+warnIfNotValidFile "${TETGEN_INCDIR}/libtet.a" "TetGen ${TETGEN_URL} (remember to do 'make libtet')" TETGEN_LIBDIR TETGEN_DIR
+
+setValueWithDefault TETGEN_INCLUDES '-I${TETGEN_INCDIR}'
+
+setValueWithDefault TETGEN_LIBS '-L${TETGEN_LIBDIR} -ltet'


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/tetgen-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/vtk-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/vtk-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/vtk-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Check if we're allowed to use VTK
+if test "${NOVTK}" = "1" ; then
+	return 0
+fi
+
+# VTK Stuff
+setValueWithDefault VTK_DIR       '/usr/local/'
+setValueWithDefault VTK_INCDIR    '${VTK_DIR}/include/vtk'
+
+if test -r "${VTK_INCDIR}/vtkRenderer.h" ; then
+	setValueWithDefault HAVE_VTK  '1'
+	setValueWithDefault VTK_INCLUDES   '-I${VTK_INCDIR} -DHAVE_VTK'
+
+	setValueWithDefault VTK_LIBDIR    '${VTK_DIR}/lib/vtk/'
+	setValueWithDefault VTK_LIBS      '-L${VTK_LIBDIR} ${VTK_LIBFILES}'
+
+	# Check vtk libs (not all may have been compiled by the user.)
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkParallel.so"   -lvtkParallel
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkPatented.so"   -lvtkPatented
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkHybrid.so"     -lvtkHybrid
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkRendering.so"  -lvtkRendering
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkIO.so"         -lvtkIO
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkImaging.so"    -lvtkImaging
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkGraphics.so"   -lvtkGraphics
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkFiltering.so"  -lvtkFiltering
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkCommon.so"     -lvtkCommon
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkfreetype.so"   -lvtkfreetype
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkexpat.so"      -lvtkexpat
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtktiff.so"       -lvtktiff
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkpng.so"        -lvtkpng
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkjpeg.so"       -lvtkjpeg
+	appendVariableIfReadable VTK_LIBFILES "${VTK_LIBDIR}/libvtkzlib.so"       -lvtkzlib
+	if test "${RPATH_FLAG}x" != "x" ; then
+		setValueWithDefault VTK_RPATH      '${RPATH_FLAG}${VTK_LIBDIR}'
+	fi
+fi
+
+
+
+


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/vtk-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Config/xml-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Config/xml-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Config/xml-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+##  Copyright (C) 2005 Victorian Partnership for Advanced Computing (VPAC) Ltd
+##  110 Victoria Street, Melbourne, 3053, Australia.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+parsePackageConfigOptions $@
+
+# Obtain libxml information
+XML2_CONFIG_DEFAULT=`${WHICH} xml2-config 2> /dev/null`
+if whichFailed "${XML2_CONFIG_DEFAULT}"; then
+	XML2_CONFIG_DEFAULT="/usr/bin/xml2-config"
+fi
+setValueWithDefault XML2_CONFIG "${XML2_CONFIG_DEFAULT}"
+assertValidExecutable "${XML2_CONFIG}" xml2-config
+
+XML_DIR_DEFAULT=`$XML2_CONFIG --prefix`
+setValueWithDefault XML_DIR "${XML_DIR_DEFAULT}"
+
+XML_CFLAGS_DEFAULT=`$XML2_CONFIG --cflags`
+setValueWithDefault XML_CFLAGS "${XML_CFLAGS_DEFAULT}"
+
+XML_INCLUDES_DEFAULT=`$XML2_CONFIG --cflags`
+setValueWithDefault XML_INCLUDES "${XML_CFLAGS_DEFAULT}"
+
+XML_LIBS_DEFAULT=`$XML2_CONFIG --libs`
+setValueWithDefault XML_LIBS "${XML_LIBS_DEFAULT}"


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/Config/xml-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/Initialise/BuildOptions.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Initialise/BuildOptions.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Initialise/BuildOptions.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: BuildOptions.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifdef USE_64BITS
+	PROJ_CFLAGS += ${CC_64}
+endif
+
+ifdef USE_CAUTIOUS
+	PROJ_CFLAGS += -DCAUTIOUS
+endif
+
+ifdef USE_DEBUG
+	PROJ_CFLAGS += -DDEBUG
+endif
+
+ifdef USE_MACRO_AS_FUNC
+	PROJ_CFLAGS += -DMACRO_AS_FUNC
+endif
+
+ifdef USE_MEMORY_STATS
+	PROJ_CFLAGS += -DMEMORY_STATS
+endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Initialise/DirectoryVariables.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Initialise/DirectoryVariables.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Initialise/DirectoryVariables.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: DirectoryVariables.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Make sure PROJ_ROOT is an absolute path.
+override PROJ_ROOT := $(shell cd ${PROJ_ROOT}; pwd)
+
+override CURRENT_DIR := $(shell pwd)
+
+override RELATIVE_DIR := $(strip $(subst ${PROJ_ROOT},,${CURRENT_DIR}))

Added: long/3D/SNAC/trunk/StGermain/VMake/Initialise/ProjectVariable.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Initialise/ProjectVariable.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Initialise/ProjectVariable.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: ProjectVariable.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Each project must have a value.
+ifndef PROJECT
+	PROJECT=$(shell cd ${PROJ_ROOT}; basename `pwd`)
+endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Initialise/Subversion.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Initialise/Subversion.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Initialise/Subversion.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Subversion.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Errors if the current directory is not a subversion checkout
+SVN_REPOSITORY := $(shell if test -d ${CURRENT_DIR}/.svn; then echo 1; else echo 0; fi)
+ifeq ($(strip ${SVN_REPOSITORY}),1)
+check_svn_repository:
+else
+check_svn_repository:
+	@echo ${error This is not a subversion checkout}
+endif
+
+# Errors if subverion is not on the system
+ifeq ($(strip ${HAVE_SVN}),1)
+check_have_svn:
+else
+check_have_svn:
+	@echo ${error svn is not available on this system. Please install subversion}
+endif
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Initialise/UserVariables.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Initialise/UserVariables.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Initialise/UserVariables.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: UserVariables.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Save user compiler flags
+ifeq (0,${MAKELEVEL})
+	export USER_CPPFLAGS := ${CPPFLAGS}
+	export USER_CFLAGS := ${CFLAGS}
+	export USER_FFLAGS := ${FFLAGS}
+	export USER_INCLUDES := ${INCLUDES}
+	export USER_LFLAGS := ${LFLAGS}
+	export USER_LDFLAGS := ${LDFLAGS}
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Initialise/VersionVariables.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Initialise/VersionVariables.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Initialise/VersionVariables.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: VersionVariables.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SVN_REPOSITORY := $(shell if test -d ${CURRENT_DIR}/.svn; then echo 1; else echo 0; fi)
+
+ifeq ($(strip ${HAVE_SVN}${SVN_REPOSITORY}),11)
+	# svn is on the system, and this is a repository
+	VERSION := $(strip $(shell ${SVN} info | ${GREP} Revision | cut -f 2 -d ':'))
+else
+	# Try the VERSION file if exists, or just set to zero
+	VERSION := $(strip \
+		$(shell if test -r ${PROJ_ROOT}/VERSION; then \
+			cat ${PROJ_ROOT}/VERSION; \
+		else \
+			echo "0"; \
+		fi))
+endif
+
+PROJ_CFLAGS += -DVERSION=\"${VERSION}\"

Added: long/3D/SNAC/trunk/StGermain/VMake/Makefile.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Makefile.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Makefile.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## Role:
+##	Contains rules and "engine" for building StGermain or a StGermain-based code.
+##	See csd.vpac.org/twiki/Stgermain/BuildSystem for an explanation of how
+##	the build system works.
+##
+## $Id: Makefile.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.PHONY: defaultrule
+
+defaultrule: all
+
+# Initialise
+include ${PROJ_ROOT}/VMake/Initialise/ProjectVariable.vmake
+include ${PROJ_ROOT}/VMake/Initialise/UserVariables.vmake
+include ${PROJ_ROOT}/VMake/Initialise/DirectoryVariables.vmake
+include ${PROJ_ROOT}/VMake/Initialise/Subversion.vmake
+include ${PROJ_ROOT}/VMake/Initialise/VersionVariables.vmake
+include ${PROJ_ROOT}/VMake/Initialise/BuildOptions.vmake
+
+# Rules
+include ${PROJ_ROOT}/VMake/Rules/subdirs.vmake		# Allows recursive processing with SUBDIRS
+
+include ${PROJ_ROOT}/VMake/Rules/tau.vmake		# TAU instrumentation phase
+include ${PROJ_ROOT}/VMake/Rules/meta.vmake		# Metadata compilation phase
+
+include ${PROJ_ROOT}/VMake/Rules/includes.vmake
+
+include ${PROJ_ROOT}/VMake/Rules/lib.vmake
+include ${PROJ_ROOT}/VMake/Rules/mod.vmake
+include ${PROJ_ROOT}/VMake/Rules/plugins.vmake
+include ${PROJ_ROOT}/VMake/Rules/pyb.vmake
+include ${PROJ_ROOT}/VMake/Rules/pyc.vmake
+include ${PROJ_ROOT}/VMake/Rules/tests.vmake
+include ${PROJ_ROOT}/VMake/Rules/bin.vmake
+include ${PROJ_ROOT}/VMake/Rules/apps_xml.vmake
+include ${PROJ_ROOT}/VMake/Rules/input_xml.vmake
+include ${PROJ_ROOT}/VMake/Rules/xmls.vmake
+
+
+include ${PROJ_ROOT}/VMake/Rules/checks.vmake
+
+include ${PROJ_ROOT}/VMake/Rules/packages.vmake
+
+
+include ${PROJ_ROOT}/VMake/Rules/source.vmake
+include ${PROJ_ROOT}/VMake/Rules/processflags.vmake
+include ${PROJ_ROOT}/VMake/Rules/compile.vmake
+
+
+include ${PROJ_ROOT}/VMake/Rules/makedirs.vmake
+include ${PROJ_ROOT}/VMake/Rules/intermediate.vmake
+
+# Commands
+
+
+include ${PROJ_ROOT}/VMake/Commands/all.vmake
+include ${PROJ_ROOT}/VMake/Commands/clean.vmake
+include ${PROJ_ROOT}/VMake/Commands/regresstor.vmake
+include ${PROJ_ROOT}/VMake/Commands/check.vmake
+include ${PROJ_ROOT}/VMake/Commands/long_check.vmake
+include ${PROJ_ROOT}/VMake/Commands/scibenchmark_check.vmake
+include ${PROJ_ROOT}/VMake/Commands/docs.vmake
+include ${PROJ_ROOT}/VMake/Commands/examples.vmake
+include ${PROJ_ROOT}/VMake/Commands/echo.vmake
+include ${PROJ_ROOT}/VMake/Commands/touch.vmake
+include ${PROJ_ROOT}/VMake/Commands/find_fail.vmake
+include ${PROJ_ROOT}/VMake/Commands/single_exe.vmake
+include ${PROJ_ROOT}/VMake/Commands/update.vmake
+include ${PROJ_ROOT}/VMake/Commands/version.vmake
+include ${PROJ_ROOT}/VMake/Commands/svncleanup.vmake
+
+include ${PROJ_ROOT}/VMake/Commands/errorhelp.vmake
+include ${PROJ_ROOT}/VMake/Commands/help.vmake
+
+
+# Unknown rule handler
+#%::
+#	@echo "doh" $@

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/apps_xml.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/apps_xml.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/apps_xml.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: apps_xml.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifdef apps_xml
+	APPS_XML_TARGET_DIR := ${APPS_XML_DIR}/${RELATIVE_DIR}
+	APPS_XML := $(addprefix ${APPS_XML_TARGET_DIR}/, ${apps_xml})
+
+	MAKE_DIRECTORIES += ${APPS_XML_TARGET_DIR}
+
+	TARGETS += ${APPS_XML}
+
+	RM_LIST += ${APPS_XML}
+
+${APPS_XML_TARGET_DIR}/%.xml: %.xml	
+	@(cp $< $@)
+
+endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/bin.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/bin.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/bin.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: bin.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# "bin" specfies the excutables to build. If specified, this triggers the event. You can only specify one binary to create, and it
+#   must be unique. "SCRS" specifies the input files.
+ifdef bin
+
+	bin := $(strip ${bin})
+
+	PROJ_CFLAGS += ${CC_WARNINGLEVEL} ${CC_SYMBOLLEVEL} ${CC_OPTIMISATIONLEVEL} -DCURR_MODULE_NAME=\"${bin}\"
+	PROJ_LFLAGS += -L${LIB_DIR}
+	
+	BIN = ${BIN_DIR}/${bin}
+	
+	COMPILE_DIRECTORY := ${TMP_DIR}/bin-${bin}
+	
+	BIN_OBJS =  ${addprefix ${COMPILE_DIRECTORY}/, ${addsuffix .o,      ${basename ${SRCS}}}}
+	LIBS +=     ${addprefix ${LIB_DIR}/, ${PROJ_LIBS}}
+	BIN_TMP =   ${TMP_DIR}/bin-${bin}/${bin}.
+
+	RM_LIST_TEMPS += ${BIN_OBJS} ${BIN_TMP}
+	RM_LIST += ${BIN} 
+
+	MAKE_DIRECTORIES += ${BIN_DIR}
+
+	TARGETS += ${BIN}
+
+# LD_CC is a bad name! Need to give it a proper standard name later
+# This is for fortran symbol compile code & intel
+ifndef LD_CC
+	LD_CC=${CC}
+endif
+
+${BIN_DIR}/${bin}: ${BIN_OBJS} ${LIBS} ${EXTERNAL_OBJS}
+	${LD_CC} ${CC_PIPE} ${CFLAGS} -o $@ ${BIN_OBJS} ${EXTERNAL_OBJS} ${RPATH_LFLAGS} ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS}
+
+endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/checks.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/checks.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/checks.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: checks.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# "checks" specifies the executables to run and check for a SUCCESS return value. If specified, this triggers the event.
+ifdef checks
+	CHECKS = ${checks}
+	PATCH_TESTS = $(addsuffix -patch,${checks})
+endif
+
+ifdef long_checks
+	LONG_CHECKS += ${long_checks}
+	LONG_PATCH_TESTS += $(addsuffix -patch,${long_checks})
+endif
+
+# "long_checks" are the list of tests which don't usually run unless --options=run_long_tests is specified
+# because these tests take too long
+ifdef USE_RUN_LONG_TESTS
+	CHECKS += ${LONG_CHECKS}
+	PATCH_TESTS += ${LONG_PATCH_TESTS}
+endif
+
+# Adding in a science benchmark checks option
+ifdef scibenchmark_checks
+	SCIBENCHMARK_CHECKS = = ${scibenchmark_checks}
+	SCIBENCHMARK_PATCH_TESTS += $(addsuffix -patch,${sccd scibenchmark_checks})
+endif
+
+# if science benchmark tests are run, the other test are not run.
+ifdef USE_RUN_SCIBENCHMARK_TESTS
+	CHECKS = ${SCIBENCHMARK_CHECKS}
+	PATCH_TESTS = ${SCIBENCHMARK_PATCH_TESTS}
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/compile.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/compile.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/compile.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: compile.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifneq (,${SRCS})
+
+ifndef PREPROCESS_FOR_HEADERS
+
+# grep should be faster than (pre)compiler
+CURRENT_HEADER_DEPS := $(shell \
+	grep '^\#include' ${SRCS} 2> /dev/null | cut -f 2 -d : | sed 's/^\#include//' \
+	| sed 's/\"//g' | sed 's/<//' | sed 's/>//' | sed 's/\.h.*/\.h/' | sort | uniq )
+	
+CURRENT_INCDIRS := $(shell echo $(filter -I%,${EXTERNAL_INCLUDES}) | sed 's/\-I//g')
+CURRENT_DEVELOP_INCDIRS := . $(filter ${BLD_DIR}%,${CURRENT_INCDIRS})
+
+FINAL_HEADER_DEPS := \
+	$(foreach file,${CURRENT_HEADER_DEPS}, \
+		$(foreach directory,${CURRENT_DEVELOP_INCDIRS}, \
+			$(shell if test -r ${directory}/${file}; then echo ${directory}/${file} ; fi) \
+		) \
+	)
+
+else
+
+CURRENT_HEADER_DEPS := $(shell \
+	${CC} -E ${INCLUDES} ${SRCS} 2> /dev/null | grep '^\#.*\.h' | sed 's/^.* \"//' | sed 's/\".*//' | sort | uniq )
+
+FINAL_HEADER_DEPS := $(filter ${BLD_DIR}%,${CURRENT_HEADER_DEPS})
+FINAL_HEADER_DEPS += \
+	$(foreach file,${CURRENT_HEADER_DEPS}, \
+		$(shell if test -r ./${file}; then echo ${file}; fi) \
+	)
+
+endif
+
+	
+endif
+
+
+HEADER_DEPENDANCY += ${FINAL_HEADER_DEPS}
+
+
+MAKE_DIRECTORIES += ${COMPILE_DIRECTORY}
+
+# C files
+${COMPILE_DIRECTORY}/%.o: %.c ${HEADER_DEPENDANCY}
+	${CC} ${CC_PIPE} ${CFLAGS} ${SO_CFLAGS} -c -o $@ ${INCLUDES} $<
+
+# Object C files
+${COMPILE_DIRECTORY}/%.o: %.m ${HEADER_DEPENDANCY}
+	${OBJCC} ${CC_PIPE} ${CFLAGS} ${SO_CFLAGS} -c -o $@ ${INCLUDES} $<
+
+# C++ files
+${COMPILE_DIRECTORY}/%.o: %.${CXX_EXT} ${HEADER_DEPENDANCY}
+	${CXX} ${CXX_PIPE} ${CFLAGS} ${SO_CFLAGS} -c -o $@ ${INCLUDES} $<
+
+# Fortran files
+${COMPILE_DIRECTORY}/%.o: %.f ${HEADER_DEPENDANCY}
+	${F77}  ${CFLAGS} ${SO_CFLAGS} -c -o $@ ${INCLUDES} $<
+
+${COMPILE_DIRECTORY}/%.o: %.F ${HEADER_DEPENDANCY}
+	${F77}  ${CFLAGS} ${SO_CFLAGS} -c -o $@ ${INCLUDES} $<
+
+
+
+
+
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/includes.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/includes.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/includes.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: includes.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Public
+## Role		: Perform the exporting of header files to prefix location
+
+# "includes" is where to export the header-files
+ifdef includes
+
+	includes := $(strip ${includes})
+	HEADERS = ${addprefix ${INC_DIR}/${includes}/, ${HDRS}}
+
+	MAKE_DIRECTORIES += ${INC_DIR}/${includes}
+
+	TARGETS += ${HEADERS}
+
+	RM_LIST += ${HEADERS}
+	
+
+### Rules ###
+
+${INC_DIR}/${includes}/%: %
+	@${CP_F} $< $@
+
+
+endif
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/input_xml.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/input_xml.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/input_xml.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: input_xml.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifdef input_xml
+	INPUT_XML_TARGET_DIR := ${INPUT_XML_DIR}/${RELATIVE_DIR}
+	INPUT_XML := $(addprefix ${INPUT_XML_TARGET_DIR}/, ${input_xml})
+
+	MAKE_DIRECTORIES += ${INPUT_XML_TARGET_DIR}
+
+	TARGETS += ${INPUT_XML}
+
+	RM_LIST += ${INPUT_XML}
+
+${INPUT_XML_TARGET_DIR}/%.xml: %.xml	
+	@(cp $< $@)
+
+endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/intermediate.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/intermediate.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/intermediate.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: intermediate.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Internal
+## Role		: Indicate to make what are the intermediate files. 
+##		  These are files which only exists (created and deleted) during the make process.
+
+.INTERMEDIATE: ${INTERMEDIATE_FILES}
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/lib.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/lib.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/lib.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: lib.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Public
+## Role		: Create a library static or dynamic
+
+# "lib" specifies the name of the library to be created
+# Set "libstatic" or "libdynamic" to yes to select what type of library is to be made
+ifdef lib
+	lib := $(strip ${lib})
+
+	# static lib setup
+	libstatic := $(strip ${libstatic})
+	ifeq (${libstatic},yes)
+		LIB_STATIC = ${LIB_DIR}/lib${lib}.a
+		LIB_STATIC_TMP = ${TMP_DIR}/lib-lib${lib}.a/lib${lib}.a.
+		MAKE_DIRECTORIES += ${TMP_DIR}/lib-lib${lib}.a
+	endif
+	
+	# dynamic lib setup
+	libdynamic := $(strip ${libdynamic})
+	ifeq (${libdynamic},yes)
+		LIB_DYNAMIC = ${LIB_DIR}/lib${lib}.${SO_EXT}
+		LIB_DYNAMIC_TMP = ${TMP_DIR}/lib-lib${lib}.${SO_EXT}/lib${lib}.${SO_EXT}.
+		MAKE_DIRECTORIES += ${TMP_DIR}/lib-lib${lib}.${SO_EXT}
+	endif
+
+	ifdef PROJ_OBJLISTS
+		OBJLISTS=$(addprefix ${TMP_DIR}/, $(addsuffix .objlist, ${PROJ_OBJLISTS}))
+		EXTERNAL_OBJS += $(foreach OBJLIST,${OBJLISTS},\
+			$(addprefix ${TMP_DIR}/,\
+				$(shell for i in ${OBJLIST}; do if test -r $$i; then cat $$i; fi; done; ) \
+			) \
+		)
+	endif
+
+	# Flags setup
+	PROJ_CFLAGS += -DCURR_MODULE_NAME=\"${lib}\"
+	PROJ_CFLAGS += ${CC_WARNINGLEVEL} ${CC_SYMBOLLEVEL} ${CC_OPTIMISATIONLEVEL} 
+	PROJ_LFLAGS += -L${LIB_DIR}
+
+	ifeq (Darwin,${SYSTEM})
+		INSTALL_NAME = -install_name ${LIB_DYNAMIC}
+	else
+		INSTALL_NAME =
+	endif
+
+
+	LIB_OBJS_IN_TMP = ${addprefix            lib-lib${lib}/, ${addsuffix .o,      ${basename ${SRCS}}}}
+	LIB_OBJS =        ${addprefix ${TMP_DIR}/lib-lib${lib}/, ${addsuffix .o,      ${basename ${SRCS}}}}
+	LIB_OBJLIST = ${TMP_DIR}/${lib}.objlist
+
+
+	LIB = ${LIB_STATIC} ${LIB_DYNAMIC}
+	TARGETS += ${LIB} ${LIB_OBJLIST}
+
+	# Directories to use
+	MAKE_DIRECTORIES +=  ${LIB_DIR} 
+	COMPILE_DIRECTORY := ${TMP_DIR}/lib-lib${lib}
+
+	RM_LIST_TEMPS += ${LIB_STATIC_TMP} ${LIB_DYNAMIC_TMP} ${LIB_OBJS} ${LIB_OBJLIST}
+	RM_LIST += ${LIB}
+
+
+### Rules ###
+
+${LIB_DIR}/lib${lib}.a: ${LIB_STATIC_TMP}
+	@${CP_F} $< $@
+
+${LIB_DIR}/lib${lib}.${SO_EXT}: ${LIB_DYNAMIC_TMP}
+	@${CP_F} $< $@
+
+${LIB_STATIC_TMP}: ${LIB_OBJS} ${EXTERNAL_OBJS}
+	@(if test -r $@; then ${RM_F} $@; fi)
+	${AR_C} $@ $^
+	${RANLIB} $@
+
+${LIB_DYNAMIC_TMP}: ${LIB_OBJS} ${EXTERNAL_OBJS}
+	@echo "Install name: ${INSTALL_NAME}"
+	${CC} ${CC_PIPE} ${CFLAGS} -o $@ ${SO_LFLAGS} ${RPATH_LFLAGS} $^ ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS} ${INSTALL_NAME}
+
+${LIB_OBJLIST}:
+	@echo ${LIB_OBJS_IN_TMP} > ${LIB_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} >> ${LIB_OBJLIST}; fi
+
+endif
+
+
+
+
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/makedirs.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/makedirs.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/makedirs.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makedirs.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Internal
+## Role		: Creates directories listed in MAKE_DIRECTORIES variable
+
+${MAKE_DIRECTORIES}:
+	@${MKDIR} $@
+
+# Directories are always created before the targets
+TARGETS := ${MAKE_DIRECTORIES} ${TARGETS}
+
+
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/meta.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/meta.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/meta.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,70 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: meta.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+META_XML := $(wildcard *.meta)
+META_C   := $(subst .meta,-meta.c,${META_XML})
+
+ifneq (${META_C},)
+	SRCS += ${META_C}
+endif
+
+INTERMEDIATE_FILES += ${META_C}
+
+
+### Rules ###
+
+${META_C}: %-meta.c: %.meta
+	@(echo Creating metadata $@ from $<)
+	@(echo '#define XML_METADATA \' > $@)
+	@(echo '"'`cat $< 2> /dev/null | tr -d '\n' | sed 's/\"/\\\"/g'`'"' >> $@)
+	@(echo '#define COMPONENT_NAME ' `grep "^<param name=\"Name\">" $< | ${SED} 's/<.*\">//' | ${SED} 's/<.*>//'` >> $@)
+	@(cat ${PROJ_ROOT}/VMake/meta-template.c >> $@)
+
+
+meta-errorhelp:
+	@if grep '_Type_GetMetadata' make${OPTIONS}.log > /dev/null 2>&1; then \
+		echo "$@:"; \
+		for word in `grep '_Type_GetMetadata' make${OPTIONS}.log`; do \
+			if echo $$word | grep _Type_GetMetadata > /dev/null 2>&1; then \
+				export WORD=`echo $$word | sed 's/_Type_GetMetadata//'`; \
+				echo "--- Compile error detected!!!"; \
+				echo "---   Error scope: Developer"; \
+				echo "--- Description: "; \
+				echo "---   Component $$WORD does not have a metadata file"; \
+				echo "---   Please ensure a metadata (.meta) file for $$WORD exists to fix this problem"; \
+				echo "--- Check: "; \
+				echo "---   1) .meta file exists. You may use VMake/Component-meta-template.xml for reference"; \
+				echo "---   2) The \"name\" param in the .meta is the same name for the component."; \
+			fi; \
+		done; \
+	fi \
+
+
+ERRORHELP += meta-errorhelp
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/mod.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/mod.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/mod.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: plugin.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# "mod" Creates a plugin/codelet module from all the source files in this directory.
+# "mod" is set to the name of the plugin to be created.
+ifdef mod
+	mod := $(strip ${mod})
+	PROJ_CFLAGS += -DCURR_MODULE_NAME=\"${mod}\"
+	PROJ_CFLAGS += -DPLUGIN_NAME=${mod}
+	PROJ_CFLAGS += ${CC_WARNINGLEVEL} ${CC_SYMBOLLEVEL} ${CC_OPTIMISATIONLEVEL}
+	PROJ_LFLAGS += -L${LIB_DIR}
+
+	MOD_DIR=${LIB_DIR}
+	MOD = ${MOD_DIR}/${mod}module.${MODULE_EXT}
+	MOD_OBJS =  ${addprefix ${TMP_DIR}/mod-${mod}module.${MODULE_EXT}/, ${addsuffix .o,      ${basename ${SRCS}}}}
+
+	MOD_TMP = ${TMP_DIR}/mod-${mod}module.${MODULE_EXT}/${mod}module.${MODULE_EXT}
+
+	RM_LIST_TEMPS += ${MOD_OBJS} ${MOD_TMP}
+	RM_LIST += ${MOD}
+
+
+	MAKE_DIRECTORIES += ${MOD_DIR}
+	COMPILE_DIRECTORY := ${TMP_DIR}/mod-${mod}module.${MODULE_EXT}
+
+
+### Rules ###
+
+${MOD_DIR}/${mod}module.${MODULE_EXT}: ${MOD_TMP}
+	${CP_F} $< $@
+
+${MOD_TMP}: ${MOD_OBJS} ${EXTERNAL_OBJS}
+	${CC} ${CC_PIPE} ${CFLAGS} -o $@ ${MOD_OBJS} ${EXTERNAL_OBJS} ${MODULE_LFLAGS} ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS}
+
+
+
+endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/packages.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/packages.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/packages.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: packages.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## "packages" automatically adds to EXTERNAL properties such as INCLUDE, LIBS and RPATH (later) the package listed
+ifdef packages
+	packages := $(strip ${packages} )
+	EXTERNAL_INCLUDES += $(foreach package, ${packages}, $($(package)_INCLUDES) )
+	EXTERNAL_LIBS += $(foreach package, ${packages}, $($(package)_LIBS) )
+	EXTERNAL_RPATHS += $(foreach package, ${packages}, $($(package)_RPATH) )
+	EXTERNAL_LIBS += ${EXTERNAL_RPATHS}
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/plugins.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/plugins.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/plugins.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,77 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: plugin.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+# Makes a plugin out of each listed plugin name (assumes extension) in the plugins variable.
+ifdef plugins
+
+	SRCS += ${plugins}
+	
+	plugins := $(subst .c,, ${plugins})
+	plugins := $(subst .f,, ${plugins})
+	plugins := $(subst .${CXX_EXT},, ${plugins})
+	plugins := $(subst .m,, ${plugins})
+	plugins := $(strip ${plugins})
+	
+	PLUGINS_DIR = ${LIB_DIR}
+	
+	PLUGIN := $(shell basename $(subst src,, ${CURRENT_DIR}))
+	PLUGINS_TMPDIR = ${TMP_DIR}/plugin-${PLUGIN}module.${MODULE_EXT}
+	PROJ_CFLAGS += -DCURR_MODULE_NAME=\"${PLUGIN}\"
+	
+	PROJ_CFLAGS += ${CC_WARNINGLEVEL} ${CC_SYMBOLLEVEL} ${CC_OPTIMISATIONLEVEL}
+
+	PLUGINS = ${addprefix ${PLUGINS_DIR}/, ${addsuffix module.${MODULE_EXT}, ${plugins}}}
+	#PLUGINS_OBJS = ${addprefix ${PLUGINS_TMPDIR}/, ${addsuffix .o,      ${basename ${plugins}}}}
+	PLUGINS_OBJS = ${addprefix ${PLUGINS_TMPDIR}/, ${addsuffix .o,      ${basename ${SRCS}}}}
+
+	RM_LIST_TEMPS += ${PLUGINS_OBJS}
+	RM_LIST += ${PLUGINS}
+
+	MAKE_DIRECTORIES += ${LIB_DIR}
+	COMPILE_DIRECTORY := ${TMP_DIR}/plugin-${PLUGIN}module.${MODULE_EXT}
+
+
+### Rules ###
+
+${PLUGINS_DIR}/%module.${MODULE_EXT}: ${PLUGINS_OBJS} ${EXTERNAL_OBJS}
+	${CC} ${CC_PIPE} ${CFLAGS} -o $@ ${TMP_DIR}/plugin-${PLUGIN}module.${MODULE_EXT}/$*.o $(if $(shell if test -r ${TMP_DIR}/plugin-${PLUGIN}module.${MODULE_EXT}/$*-meta.o; then echo exist; fi),${TMP_DIR}/plugin-${PLUGIN}module.${MODULE_EXT}/$*-meta.o) ${EXTERNAL_OBJS} ${MODULE_LFLAGS} ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS}
+
+endif
+
+
+
+
+
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/postmake.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/postmake.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/postmake.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: postmake.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+# "post_make" specifies a make file to run before executing the default run of this build system. If specified, this triggers the
+#   event. You can only specify one makefile.
+ifdef post_make
+	POST_MAKE = POST_MAKE
+	POST_MAKE_clean = POST_MAKE_clean
+	POST_MAKE_distclean = POST_MAKE_distlean
+	POST_MAKE_check = POST_MAKE_check
+endif
+
+
+ifdef post_make
+${POST_MAKE}:
+	@${MAKE} -f ${post_make}
+
+${POST_MAKE_clean}:
+	@${MAKE} -f ${post_make} clean
+
+${POST_MAKE_distclean}:
+	@${MAKE} -f ${post_make} distclean
+
+${POST_MAKE_check}:
+	@${MAKE} -f ${post_make} check
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/premake.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/premake.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/premake.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: premake.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# "pre_make" specifies a make file to run before executing the default run of this build system. If specified, this triggers the
+#   event. You can only specify one makefile.
+ifdef pre_make
+	PRE_MAKE = PRE_MAKE
+	PRE_MAKE_clean = PRE_MAKE_clean
+	PRE_MAKE_distclean = PRE_MAKE_distclean
+	PRE_MAKE_check = PRE_MAKE_check
+endif
+
+# pre- and post- make
+ifdef pre_make
+${PRE_MAKE}:
+	@${MAKE} -f ${pre_make}
+
+${PRE_MAKE_clean}:
+	@${MAKE} -f ${pre_make} clean
+
+${PRE_MAKE_distclean}:
+	@${MAKE} -f ${pre_make} distclean
+
+${PRE_MAKE_check}:
+	@${MAKE} -f ${pre_make} check
+
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/processflags.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/processflags.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/processflags.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: processflags.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+EXTERNAL_LIBS:=$(subst -L/usr/lib ,,${EXTERNAL_LIBS} )
+EXTERNAL_LIBS:=$(subst -L /usr/lib ,,${EXTERNAL_LIBS} )
+
+
+CFLAGS = ${USER_CFLAGS} ${PROJ_CFLAGS} ${EXTERNAL_CFLAGS}
+LFLAGS = ${USER_LFLAGS} ${PROJ_LFLAGS} ${EXTERNAL_LFLAGS}
+INCLUDES = -I${INC_DIR} ${USER_INCLUDES} ${PROJ_INCLUDES} ${EXTERNAL_INCLUDES}
+
+# Removes redundant includes of /usr/include
+INCLUDES:=$(subst -I/usr/include ,,${INCLUDES} )
+INCLUDES:=$(subst -I /usr/include ,,${INCLUDES} )
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/pyb.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/pyb.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/pyb.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: pyb.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+# "pyb" specifies the python-bindings module to create (i.e. the dynamic library linked against the python development library).
+#   If specified, this triggers the event. You can only specify one module to create and it must be unique. "SRCS" specifies the
+#   input files.
+ifdef pyb
+	PROJ_CFLAGS += ${CC_WARNINGLEVEL} ${CC_SYMBOLLEVEL} ${CC_OPTIMISATIONLEVEL}
+	PROJ_LFLAGS += -L${LIB_DIR}
+	
+	ifndef PYTHON_PACKAGE
+		PYTHON_PACKAGE=${pyb}
+	endif
+
+	PYB = ${PYB_DIR}/${PYTHON_PACKAGE}/${pyb}module.${MODULE_EXT}
+	PYB_OBJS =  ${addprefix ${TMP_DIR}/${PYTHON_PACKAGE}/pyb-${pyb}module.${MODULE_EXT}/, ${addsuffix .o,      ${basename ${SRCS}}}}
+	PYB_TMP = ${TMP_DIR}/${PYTHON_PACKAGE}/pyb-${pyb}module.${MODULE_EXT}/${pyb}module.${MODULE_EXT}
+	EXTERNAL_INCLUDES += -I${PYTHON_INCDIR}
+	EXTERNAL_LIBS += -L${PYTHON_LIBDIR}/config -L${PYTHON_LIBDIR} ${PYTHON_LIBS}
+
+	RM_LIST_TEMPS += ${PYB_OBJS} ${PYB_TMP}
+	RM_LIST += ${PYB}
+
+
+	MAKE_DIRECTORIES += ${PYB_DIR} ${PYB_DIR}/${PYTHON_PACKAGE}
+	COMPILE_DIRECTORY := ${TMP_DIR}/${PYTHON_PACKAGE}/pyb-${pyb}module.${MODULE_EXT}
+
+
+${PYB_DIR}/${PYTHON_PACKAGE}/${pyb}module.${MODULE_EXT}: ${PYB_TMP}
+	${CP_F} $< $@
+
+${PYB_TMP}: ${PYB_OBJS} ${EXTERNAL_OBJS}
+	@echo ${PYTHON_LIBS}
+	${CC} ${CC_PIPE} ${CFLAGS} -o $@ ${PYB_OBJS} ${EXTERNAL_OBJS} ${MODULE_LFLAGS} ${RPATH_LFLAGS} ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS}
+
+
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/pyc.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/pyc.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/pyc.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: pyc.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# "pyc" specifies python source files to compile into binaries. If specified, this triggers the event.
+ifdef pyc
+
+	ifndef PYTHON_PACKAGE
+		PYTHON_PACKAGE=${pyc}
+	endif
+	PYC = ${addprefix ${PYC_DIR}/${PYTHON_PACKAGE}/, ${addsuffix .pyc, ${basename ${pyc}}}}
+	PYC_TMP = ${addsuffix c, ${pyc}}
+
+	MAKE_DIRECTORIES += ${PYC_DIR}
+	COMPILE_DIRECTORY := ${PYC_DIR}/${PYTHON_PACKAGE}
+
+	RM_LIST_TEMPS += ${PYC_TMP}
+	RM_LIST += ${PYC}
+
+
+### Rules ###
+
+${PYC_DIR}/${PYTHON_PACKAGE}/%.pyc: ${pyc}
+	@${PYTHON_COMPILEALL} -l ${CURRENT_DIR}
+	@for i in ${PYC_TMP}; do echo ${MV_F} $$i ${PYC_DIR}/${PYTHON_PACKAGE}; ${MV_F} $$i ${PYC_DIR}/${PYTHON_PACKAGE}; done
+
+#${TMP_DIR}/pyc-${PYTHON_PACKAGE}/%.pyc.: %.py ${TMP_DIR}/pyc-${PYTHON_PACKAGE}
+#       @${PYTHON_COMPILEALL} -l ${CURRENT_DIR}
+#       @for i in `ls *.pyc`; do ${MV_F} $$i ${TMP_DIR}/pyc-${PYTHON_PACKAGE}/$$i.; done
+
+# NOTE: to use the following i need to invert the regular expression in the compileall line... dont know how
+#
+#${PYC_DIR}/${PYTHON_PACKAGE}/%.pyc: ${TMP_DIR}/pyc-${PYTHON_PACKAGE}/%.pyc.
+#       @if test ! -d ${PYC_DIR}; then ${MKDIR} ${PYC_DIR}; fi
+#       @if test ! -d ${PYC_DIR}/${PYTHON_PACKAGE}; then ${MKDIR} ${PYC_DIR}/${PYTHON_PACKAGE}; fi
+#       @${CP_F} $< $@
+#
+#%.pyc: %.py
+#       @${PYTHON_COMPILEALL} -l -x '($@)' ${CURRENT_DIR}
+#
+#${TMP_DIR}/pyc-${PYTHON_PACKAGE}/%.pyc.: %.pyc ${TMP_DIR}/pyc-${PYTHON_PACKAGE}
+#       @${MV_F} $< $@
+#
+#${TMP_DIR}/pyc-${PYTHON_PACKAGE}: ${TMP_DIR}
+#       @${MKDIR} $@
+
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/source.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/source.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/source.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,36 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##      Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##      Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##      Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##      Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##      Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##      Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: source.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Public
+## Role		: Add extra libraries to link against for when combining languages other than C
+
+# Objective C
+ifneq ($(findstring .m,${SRCS}),)
+	EXTERNAL_LIBS += ${OBJECTIVEC_LIBS}
+endif

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/subdirs.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/subdirs.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/subdirs.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: subdirs.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Public
+## Role		: Allow make recursion into sub directories using the 'subdirs' variable
+
+# "subdirs" is a list of subdirectories to traverse into 
+ifdef subdirs
+
+	SUBDIRS = ${addsuffix -dir, ${subdirs}}
+
+### Rules ###
+
+%-dir: %-dircheck
+	@(${CD} $* && ${MAKE} $(filter-out %-dir,${MAKECMDGOALS}))
+
+endif
+
+ifdef subproj
+	SUBDIRS = $(addsuffix -proj,${subproj})
+	
+%-proj: %-dircheck
+	@(${CD} $* && ${MAKE} $(filter-out %-proj,${MAKECMDGOALS}))
+
+endif
+
+%-dircheck:
+	$(if $(shell if test -d $*; then echo true; fi),, \
+		$(error Directory '$*' does not exists. Please check the subdirs variable in '${CURRENT_DIR}/makefile' ) \
+	)
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/tau.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/tau.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/tau.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: tau.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+## Scope	: Public
+## Role		: Adds the TAU instrumentation phase before compilation to allow TAU profiling
+
+ifeq (${USE_PDT}${USE_TAU},11)
+	# TAU instrumentation is only activated if both pdt and tau options are selected
+	export USE_PDTTAU := 1
+
+	# This flag is known to be required on linux platforms
+	PROJ_CFLAGS += -D__CHECKER__
+	
+	packages := TAU ${packages}
+	
+	ifneq (${SRCS},)
+		PDT_TMP := $(subst .c,.pdb, $(filter .c,${SRCS}))	# pdb file for each source
+		TAU_TMP := $(subst .c,-inst.c, $(filter .c,${SRCS}))	# instrumentation for each source
+
+		INTERMEDIATE_FILES += ${PDT_TMP} ${TAU_TMP}
+		
+		# Replace the usual source code with instrumented equivalents
+		SRCS := $(subst .c,-inst.c, ${SRCS})
+	endif
+
+	RM_LIST_TEMPS += ${PDT_TMP} ${TAU_TMP}
+	
+
+### Rules ###
+
+%.pdb: %.c
+	@echo PDT parse phase: Creating $@ for $<
+	${PDTPARSEC} $< ${CFLAGS} ${INCLUDES}
+
+%-inst.c: %.pdb %.c
+	@echo TAU instrumentation phase: Creating $@ from $^
+	${TAUINSTR} $^ -o $@
+
+
+endif
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/tests.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/tests.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/tests.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: tests.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# "tests" specifies to build an executable from each of the single-file-sources specified in "SRCS". The value of "tests" needs to
+#   be only one value and unique (used to create a temporary built location). If specified, this triggers the event.
+ifdef tests
+
+	# hack temp until metadata has their own extension
+	SRCS := $(filter-out %-meta.c, ${SRCS})
+
+	PROJ_CFLAGS+=${CC_WARNINGLEVEL} ${CC_SYMBOLLEVEL} ${CC_OPTIMISATIONLEVEL} -DCURR_MODULE_NAME=\"${tests}\"
+	PROJ_LFLAGS += -L${LIB_DIR}
+
+	TESTS = ${addprefix ${TST_DIR}/, ${basename ${SRCS}}}
+	TESTS_LINKS = ${basename ${SRCS}}
+	TEST_OBJS =  ${addprefix ${TMP_DIR}/test-${tests}/, ${addsuffix .o,      ${basename ${TEST_SUPPORT_SRCS}}}}
+	#LIBS +=      ${addprefix ${LIB_DIR}/, ${PROJ_LIBS}}
+
+	PATCH_TESTS = $(addsuffix -patch,${checks})
+
+	RM_LIST_TEMPS += ${TEST_OBJS}
+	RM_LIST += ${TESTS} ${TESTS_LINKS}
+
+
+COMPILE_DIRECTORY := ${TMP_DIR}/test-${tests}
+
+${TST_DIR}/%: %.c ${LIBS} ${EXTERNAL_OBJS} ${TEST_OBJS}
+	@if test ! -d ${TST_DIR}; then ${MKDIR} ${TST_DIR}; fi
+	${CC} ${CC_PIPE} ${CFLAGS} -o $@ ${TEST_OBJS} ${INCLUDES} $< ${EXTERNAL_OBJS} ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS}
+
+${TST_DIR}/%: %.m ${LIBS} ${EXTERNAL_OBJS} ${TEST_OBJS}
+	@if test ! -d ${TST_DIR}; then ${MKDIR} ${TST_DIR}; fi
+	${OBJCC} ${CC_PIPE} ${CFLAGS} -o $@ ${TEST_OBJS} ${INCLUDES} $< ${EXTERNAL_OBJS} ${LFLAGS} ${LIBS} ${EXTERNAL_LIBS}
+
+${TESTS_LINKS}: %: ${TESTS}
+	@ln -s ${TST_DIR}/$@
+
+## Implicit rule for patching a test:
+%.sh-patch:
+	@$(DUMP_VARS_TO_TMP_FILE) \
+		UPDATE_MODE="on" ${SH} ./${*}.sh; \
+		rm tmp.sh;
+
+
+	
+
+test-links: ${TESTS_LINKS}
+
+endif
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/VMake/Rules/xmls.vmake
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/Rules/xmls.vmake	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/Rules/xmls.vmake	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: input_xml.vmake 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifdef XMLS
+#	XMLS_TARGET_DIR := ${EXPORT_INCLUDES_DIR}/${RELATIVE_DIR}
+
+	# Remove these dirs as special case
+	# becuse we don't want to see these paths
+#	XMLS_TARGET_DIR := $(subst Apps/,, ${XMLS_TARGET_DIR})
+#	XMLS_TARGET_DIR := $(subst InputFiles/,, ${XMLS_TARGET_DIR})
+
+	XMLS_LIST := $(addprefix ${XMLS_TARGET_DIR}/, ${XMLS})
+
+	MAKE_DIRECTORIES += ${EXPORT_INCLUDE_DIR} ${XMLS_TARGET_DIR}
+
+	TARGETS += xmls-message ${XMLS_LIST}
+
+	RM_LIST += ${XMLS_LIST}
+
+xmls-message:
+	@echo ""
+	@echo "    [VMake]: Exporting input files to ${XMLS_TARGET_DIR}"
+	@echo ""
+
+${XMLS_TARGET_DIR}/%.xml: %.xml	
+	@(cp $< $@)
+
+endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,25 @@
+#include <stdio.h>
+int main() {
+	#if defined (__GNUC__) && !defined (__INTEL_COMPILER)
+		printf( "gnu\n" );
+		return 0;
+	#endif
+	#if defined (__INTEL_COMPILER)
+		printf( "intel\n" );
+		return 0;
+	#endif
+	#ifdef __osf__
+		printf( "osf\n" );
+		return 0;
+	#endif
+	#ifdef __xlc__
+		printf( "ibmxl\n" );
+		return 0;
+	#endif
+	#if ( defined( sparc ) || defined( __sparc ) || defined( __sparc__ ) ) && !defined(__GNUC__)
+		printf( "sparc\n" );
+		return 0;
+	#else
+		return 0;
+	#endif
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,20 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+override USE_PDT := 0
+
+SRCS = conftest.c
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/conftest.cxx
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/conftest.cxx	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/conftest.cxx	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+#include <stdio.h>
+int main() {
+	#if defined (__GNUC__) && !defined (__INTEL_COMPILER)
+		printf( "gnu\n" );
+		return 0;
+	#endif
+	#if defined (__INTEL_COMPILER)
+		printf( "intel\n" );
+		return 0;
+	#endif
+	#ifdef __osf__
+		printf( "osf\n" );
+		return 0;
+	#endif
+	#ifdef __xlC__
+		printf( "ibmxl\n" );
+		return 0;
+	#endif
+	#if ( defined( sparc ) || defined( __sparc ) || defined( __sparc__ ) ) && !defined(__GNUC__)
+		printf( "sparc\n" );
+		return 0;
+	#else
+		return 0;
+	#endif
+}
+

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+override CXX_EXT=cxx
+override CC=${CXX}
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+override USE_PDT := 0
+
+SRCS = conftest.cxx
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+int main() {
+	/* Are we little or big endian?  From Harbison&Steele. */
+	/* From PETSc configure source */
+	union
+	{
+		long l;
+		char c[sizeof(long)];
+	} u;
+	u.l = 1;
+	printf( "%d", u.c[sizeof(long) - 1] == 1 );
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,20 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+override USE_PDT := 0
+
+SRCS = conftest.c
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/conftest.F
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/conftest.F	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/conftest.F	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,26 @@
+      Program Conftest
+
+      implicit none
+      logical DONE
+
+      write(*,10)
+
+#ifdef __GNUC__
+#ifndef __INTEL_COMPILER
+   10 format('gnu')
+#endif
+#endif
+#ifdef __osf__
+   10 format('osf')
+#endif
+#ifdef __INTEL_COMPILER
+   10 format('intel')
+#endif 
+#ifndef __GNUC__
+#ifndef __INTEL_COMPILER
+#ifndef __osf__
+   10 format('unknown')
+#endif
+#endif
+#endif
+      END

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,25 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+override CC=${F77}
+
+# older g77 compiler dislikes having pedantic (because it uses -traditional in the preprocessor)
+CFLAGS := $(filter-out --pedantic,${CFLAGS})
+CFLAGS := $(filter-out -pedantic,${CFLAGS})
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+override USE_PDT := 0
+
+SRCS = conftest.F
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/conftest.F
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/conftest.F	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/conftest.F	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+      Program Conftest
+      external method
+      integer i
+      call method(i)
+      stop
+      end

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,25 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+override LD_CC=${F77}
+
+# older g77 compiler dislikes having pedantic (because it uses -traditional in the preprocessor)
+CFLAGS := $(filter-out --pedantic,${CFLAGS})
+CFLAGS := $(filter-out -pedantic,${CFLAGS})
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+override USE_PDT := 0
+
+SRCS = conftest.F symbol.c
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/symbol.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/symbol.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/symbol.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+void method( int *i )
+{
+   printf( "-DFORTRAN_NORMAL" );
+}
+
+void method_( int *i )
+{
+   printf( "-DFORTRAN_SINGLE_TRAILINGBAR" );
+}
+
+void method__( int *i )
+{
+   printf( "-DFORTRAN_DOUBLE_TRAILINGBAR" );
+}
+
+void METHOD( int *i )
+{
+   printf( "-DFORTRAN_UPPERCASE" );
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/conftest.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/conftest.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/conftest.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,5 @@
+#include <stdio.h>
+int main() {
+	printf( "%d", sizeof(unsigned long) );
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,20 @@
+SHELL := /bin/bash
+PROJ_ROOT := $(shell until test -d ./VMake ; do cd .. ; done ; pwd)
+
+ifeq ($(shell if test -r ${PROJ_ROOT}/Makefile.system; then echo true; fi),true)
+	include ${PROJ_ROOT}/Makefile.system
+endif
+
+override RM_F=rm -f
+
+bin = conftest 
+override BIN_DIR := $(shell pwd)
+override INC_DIR := $(shell pwd)
+override LIB_DIR := $(shell pwd)
+override TMP_DIR := $(shell pwd)
+
+override USE_PDT := 0
+
+SRCS = conftest.c
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/VMake/build-functions.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/build-functions.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/build-functions.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,461 @@
+#!/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: Makefile.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+#Set up the which command (used for all tests)
+if test "${WHICH}x" = "x"; then
+	WHICH="/usr/bin/which"
+	if test ! -x "${WHICH}"; then
+		echo "Error: default \"which\" command/default of \"$WHICH\" not found/executable. Set the WHICH variable."
+		exit 1
+	fi
+	export WHICH
+fi
+
+
+#Function to see if a "which" command failed to find a binary (needs to handle Os X where Stderr goes to Stdout
+# for which command)
+whichFailed() {
+	if test "${1}x" = "x"; then return 0; fi
+	#For Max OsX which implementation
+	if test `echo $1 | cut -f 1 -d' '` = "no"; then return 0; fi
+	if test `echo $1 | cut -f 3 -d' '` = "aliased"; then return 0; fi
+	#For OSF1 which implementation at ANU
+	if test `echo $1 | cut -f 2 -d' '` = "Cannot"; then return 0; fi
+	return 1;
+}
+
+#Set up the tr command (used for check functions below)
+if test "${TR}x" = "x"; then
+	TR=`${WHICH} tr 2> /dev/null`
+	if whichFailed "${TR}"; then
+		TR="/bin/tr"
+	fi
+	if test ! -x "${TR}"; then
+		echo "Error: default \"tr\" command of \"$TR\" not found/executable. Set the TR variable."
+		exit 1
+	fi
+	export TR
+else
+	if whichFailed `${WHICH} ${TR} 2> /dev/null`; then
+		echo "Error: given \"tr\" command of \"$TR\" not found/executable. Correct the TR variable."
+		exit 1
+	fi
+fi
+
+
+#Functions to check validity
+assertValidExecutable ()
+{
+	if test ! -x "${1}"; then
+		upperCommand=`echo ${2} | tr '[:lower:]' '[:upper:]'`
+		echo "Error: $2 binary \"$1\" not found in path, and defaults were not found/executable."
+		printf "Set the $upperCommand "
+		if test "${3}x" != "x"; then
+			printf "(or $3)"
+		fi
+		printf " environment variable/s, or modify your path appropriately.\n"
+		exitWithErrorIfNotOptional
+	fi
+}
+
+
+warnValidExecutable ()
+{
+	resolveVariable theExec ${1}
+	if test ! -x "${theExec}"; then
+		upperCommand=`echo ${2} | tr '[:lower:]' '[:upper:]'`
+		echo "Warning: $2 binary \"$theExec\" not found in path, and defaults were not found/executable."
+		printf "If you require this package, check it is installed, built, your path is correct, and that the $upperCommand "
+		if test "${4}x" != "x"; then
+			printf "(or $4)"
+		fi
+		printf " environment variable(s) are set.\n"
+		return 1
+	fi
+	return 0
+}
+
+assertValidExecutableInput ()
+{
+	testResult=`${WHICH} "$1" 2> /dev/null`
+	if whichFailed "$testResult"; then
+		upperCommand=`echo ${2} | tr '[:lower:]' '[:upper:]'`
+		echo "Error: Given name/path to $2 command of \"$1\" not found or not valid."
+		printf "Correct the $upperCommand "
+		if test "${3}x" != "x"; then
+			printf "(or $3)"
+		fi
+		printf " environment variable/s, or modify your path appropriately.\n"
+		exitWithErrorIfNotOptional
+	fi
+}
+
+warnValidExecutableInput ()
+{
+	testResult=`${WHICH} "$1" 2> /dev/null`
+	if whichFailed "$testResult"; then
+		upperCommand=`echo ${2} | tr '[:lower:]' '[:upper:]'`
+		echo "Warning: Given name/path to $2 command of \"$1\" not found or not valid."
+		printf "If needed, correct the $upperCommand "
+		if test "${3}x" != "x"; then
+			printf "(or $3)"
+		fi
+		printf " environment variable/s, or modify your path appropriately.\n"
+		return 1
+	fi
+	return 0
+}
+
+#Functions to check validity
+assertValidFile ()
+{
+	if test ! -r "${1}"; then
+		echo "Error: File/dir \"$1\" not found, meaning package $2 is not installed, not build, or some variables are wrong."
+		printf "Check the package is installed, built, and that the $3 "
+		if test "${4}x" != "x"; then
+			printf "(or $4)"
+		fi
+		printf " environment variable/s are set correctly.\n"
+		exitWithErrorIfNotOptional
+	fi
+}
+
+#Functions to check validity
+warnIfNotValidFile ()
+{
+	if test ! -r "${1}"; then
+		echo "Warning: File/dir \"$1\" not found, meaning package $2 is not installed, not build, or some environment variables are incorrect."
+		printf "If you require this package, check it is installed, built, and that the $3 "
+		if test "${4}x" != "x"; then
+			printf "(or $4)"
+		fi
+		printf " environment variable/s are set correctly.\n"
+	fi
+}
+
+assertValidDirectory ()
+{
+	if test ! -d "${1}"; then
+		echo "Error: Directory \"$1\" not found, meaning package $2 is not installed, not build, or some variables are wrong."
+		printf "Check the package is installed, built, and that the $3 "
+		if test "${4}x" != "x"; then
+			printf "(or $4)"
+		fi
+		printf " environment variable/s are set correctly.\n"
+		exitWithErrorIfNotOptional
+	fi
+}
+
+# Sets value in Makefile.system with value from environment or from default
+setValueWithDefault() {
+	echo "ifndef $1" >> Makefile.system
+	eval "INPUTVALUE=\"\$$1\""
+	
+	if test "${INPUTVALUE}x" = "x" ; then
+		echo "	$1=$2" >> Makefile.system
+		eval "$1=\"$2\"" 2> /dev/null &&
+		export ${1} 
+	else
+		echo "	$1=${INPUTVALUE}" >> Makefile.system
+	fi
+	echo "endif" >> Makefile.system
+}
+
+# Sets value in Makefile.system
+setValue() {
+	echo "$1=$2" >> Makefile.system
+	eval "$1=\"$2\"" 2> /dev/null &&
+	export ${1}
+}
+
+makePathAbsolute () {
+	eval "INPUTVALUE=\"\$$1\"" 
+	if test "${INPUTVALUE}" = "x" ; then
+		eval "${1}=`pwd`"
+	else
+		eval "${1}=`cd ${INPUTVALUE} ; pwd`"
+	fi
+	export ${1}
+}
+
+
+appendVariableIfReadable() {
+	if test -r ${2} ; then
+		echo "${1}+=${3}" >> Makefile.system
+		eval "$1=\"\$$1\"\ \"$3\"" 2> /dev/null &&
+		export ${1}
+	fi
+}
+
+getValueFromMakefile_System() {
+	MAKEFILE_SYSTEM=Makefile.system
+	until test -r ${MAKEFILE_SYSTEM} ; do 
+		MAKEFILE_SYSTEM=../${MAKEFILE_SYSTEM}
+	done
+
+	eval "INPUTVALUE=\"\$$1\"" 
+	if test "${INPUTVALUE}x" = "x" ; then
+		# The "head" filter is a bit of a hack due to a known problem of MPI info appearing in the Makefile.system
+		#  files twice at the moment. Once that's fixed, it really should be changed into a firewall such that
+		#  only one result comes back.
+		FOUND_VALUE=`grep "${1}=" ${MAKEFILE_SYSTEM} | head -n 1 | cut -d'=' -f2`
+		eval "${1}=\"${FOUND_VALUE}\"" 2> /dev/null
+	fi
+}
+
+getVariableFromMakefile() {
+	theVariable=$1
+	theMakefile=$2
+	echotemp="./echoMakefile"
+cat <<EOF > ${echotemp}
+ifdef TARGET_MAKEFILE
+	include \$(TARGET_MAKEFILE)
+endif
+echo-var:
+	@echo \$(\$(VAR))
+EOF
+	theValue=`make echo-var -f ${echotemp} TARGET_MAKEFILE=${theMakefile} VAR=${theVariable}`
+	rm ${echotemp}
+	eval "${theVariable}=\"${theValue}\"" 2> /dev/null
+}
+
+resolveVariable() {
+	theVar=$1
+	resolvedResult=$2
+	while test "`echo $resolvedResult | grep '[\$]'`x" != "x"
+	do
+		eval resolvedResult=$resolvedResult
+	done
+	eval $theVar=$resolvedResult
+}
+
+
+
+### For compiling & running code tests in configure
+
+cleanConftest() {
+	CONFTEST_DIR=$1
+	${MAKE} -C ${CONFTEST_DIR} clean > /dev/null 2>&1
+	return $?
+}
+compileConftest() {
+	CONFTEST_DIR=$1
+	cleanConftest ${CONFTEST_DIR}
+	echo "    Compiling config test ${CONFTEST_DIR} ..."
+	${MAKE} -C ${CONFTEST_DIR} > /dev/null 2>&1
+	if ! test -x ${CONFTEST_DIR}/conftest; then
+		echo "        ...Compile failed"
+		return 1
+	fi
+	return 0;
+}
+runConftest() {
+	CONFTEST_DIR=$1
+	RESULT_VAR=$2
+	echo "    Running   config test ${CONFTEST_DIR} ..."
+	if ! test -x ${CONFTEST_DIR}/conftest; then
+		EXIT_VALUE=1
+	else
+		RESULT_TEXT=`${CONFTEST_DIR}/conftest`
+		EXIT_VALUE=$?
+		eval "${RESULT_VAR}=$RESULT_TEXT"
+		return ${EXIT_VALUE}
+	fi
+	if ! test "${EXIT_VALUE}" = "0"; then
+		echo "        ...Run failed"
+		return ${EXIT_VALUE}
+	fi
+	return 0
+}
+DoCompileConftest() {
+	CONFTEST_DIR=$1
+	if ! compileConftest ${CONFTEST_DIR}; then
+		return 1
+	fi
+	cleanConftest ${CONFTEST_DIR}
+	return 0
+}
+DoCriticalCompileConftest() {
+	if ! DoCompileConftest $1; then
+		echo "Critical compile conftest failed, -> exiting configure process."
+		exit 1
+	fi
+}
+DoConftest() {
+	CONFTEST_DIR=$1
+	RESULT_VAR=$2
+	if ! compileConftest ${CONFTEST_DIR}; then
+		return 1
+	fi
+	if ! runConftest ${CONFTEST_DIR} ${RESULT_VAR}; then
+		return 1
+	fi
+	cleanConftest ${CONFTEST_DIR}
+
+	return 0
+}
+
+DoCritialConftest() {
+	if ! DoConftest $1 $2; then
+		echo "Critical compile conftest failed, -> exiting configure process."
+		exit 1
+	fi
+}
+
+
+parsePackageConfigOptions() {
+	# Unset all possible options for package configs
+	unset PACKAGE_OPTIONAL
+
+	while test $# -gt 0; do
+		case $1 in
+			--optional)
+				export PACKAGE_OPTIONAL=1;
+				;;
+#			*)
+#				echo "Unknown argument $1 for package config"
+#				;;
+		esac
+		shift
+	done
+}
+
+exitWithErrorIfNotOptional() {
+	if test "${PACKAGE_OPTIONAL}x" = "x"; then
+		exit 1
+	fi
+}
+
+exitWithErrorIfNotOptionalWithMessage() {
+	if test "${PACKAGE_OPTIONAL}x" = "x"; then
+		echo "    *** Error: Configuration has failed because $i installation $2 is invalid"
+		exit 1
+	else
+		echo "     ($1 will be unavailable)"
+	fi
+}
+
+dumpPkgConfigFile() {
+
+	dumpdir=$1
+	if ! test -d "${dumpdir}"; then
+		mkdir -p ${dumpdir}
+	fi
+
+	INC_VAR=`packages="PETSC MPI XML MATH DL HYPRE" make INCLUDES-echo | cut -f 2 -d =`
+	LIB_VAR=`packages="PETSC MPI XML MATH DL HYPRE" make EXTERNAL_LIBS-echo | cut -f 2 -d = | sed 's/\-Xlinker \-rpath \-Xlinker /\-Wl,\-rpath,/g'`
+
+	echo "    Creating $dumpdir/stgermain.pc"
+cat <<EOF > $dumpdir/stgermain.pc
+prefix=${EXPORT_DIR}
+exec_prefix=${EXPORT_DIR}/bin
+libdir=${EXPORT_DIR}/lib
+includedir=${EXPORT_DIR}/include
+
+Name: StGermain
+Description: The StGermain Framework
+Version: 0
+Requires:
+Libs: -L${EXPORT_DIR}/lib -lStGermain  ${LIB_VAR}
+Cflags: ${INC_VAR}
+EOF
+}
+
+markAsBuilding() {
+	echo "    $1 Marked as a project building built"
+cat <<EOF > ./create-env.tmp
+BUILDING_$1=1
+EOF
+	. ./create-env.tmp
+	rm create-env.tmp
+}
+
+
+executeProgramWithTimeOut() {
+	# Get my process id
+	myid=$$
+
+	# remove leading '-'
+	# on macs, bash is listed as '-bash' which grep does not like as an argument
+	myname=`echo $0 | sed 's/^\-//'`
+
+	if ! test $# -eq 2; then
+		echo "Usage:"
+		echo "./exec.sh (timeout) (program)"
+		return
+	fi
+
+	timeout=$1
+	if test $timeout -lt 0; then
+		echo "timeout must be greater than 0 seconds"
+		return
+	fi
+
+	commandline=$2
+	program=`echo $commandline | cut -f 1 -d ' '`
+
+	# Run the test as a background process
+	echo "Process id $myid Running program '$commandline'"
+	$commandline &
+
+	elapsedtime="0"
+	while [ $elapsedtime -lt $timeout ]
+	do
+		sleep 1
+
+		# Check alive
+		programid=`ps xo pid,ppid,command 2> /dev/null | grep $program | grep -v grep | grep -v $myname | grep $myid | sed 's/^[ ]*//' | cut -f 1 -d ' '`
+		if test "${programid}x" != "x"; then
+			elapsedtime=$[$elapsedtime+1]
+		else
+			# exit loop
+			finishtime=$[$elapsedtime+1]
+			elapsedtime=$timeout
+		fi
+	done
+
+	# Search for whether the test program has finished
+	# Explaination:
+	#    - Get processes
+	#    - Get matches of the of the program name
+	#         -> excluding grep
+	#         -> excluding this script (arguments)
+	#    - Which has this script id in it (the parent id)
+	#    - trim leading white space (mac ps adds this)
+	#    - Take the id value
+	programid=`ps xo pid,ppid,command 2> /dev/null | grep $program | grep -v grep | grep -v $myname | grep $myid | sed 's/^[ ]*//' | cut -f 1 -d ' '` 
+	if test "${programid}x" != "x"; then
+		echo "Process has not finished in $timeout seconds...killing"
+		kill -9 $programid > /dev/null 2>&1
+	else
+		echo "Process finished on its own in $finishtime seconds"
+	fi
+}

Added: long/3D/SNAC/trunk/StGermain/VMake/configure.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/configure.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/configure.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1873 @@
+#!/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)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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:
+##	Obtain the system configuration.
+##
+## Comments:
+##	The X_SH variables are used when the value of a variable is needed within
+##	the shell script.
+##
+## $Id: configure.sh 2586 2005-01-28 00:08:55Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# 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
+
+if test "${PROJ_ROOT}x" = "x"; then
+	PROJ_ROOT=`pwd`
+	export PROJ_ROOT
+fi
+
+# Store the configure command in the start of the configure log
+# Named Config.log (capital C) for tab-complete nice-ness
+echo "Configure command: " $0 $* > Config.log
+
+if test "${RUN_TEE}x" = "x"; then
+	echo "Doing general configuration in dir ${PROJ_ROOT}"
+else
+	echo "Doing general configuration in dir ${PROJ_ROOT}" >> Config.log
+fi
+
+#Get rid of all aliases (which screw up which's output)
+
+# for csh
+unalias * 2> /dev/null
+# for sh and bash
+unalias -a 2> /dev/null
+
+. './build-functions.sh'
+
+# Test for tee first so we can use it to create the Config.log
+if test "${TEE}x" = "x"; then
+	TEE=`${WHICH} tee 2> /dev/null`
+	if whichFailed "${TEE}"; then
+		TEE="usr/bin/tee"
+	fi
+	assertValidExecutable "${TEE}" tee 
+	export TEE
+else
+	assertValidExecutableInput "${TEE}" tee
+fi
+
+if test "${RUN_TEE}x" = "x"; then
+	export RUN_TEE=1
+	$0 $* 2>&1 | ${TEE} -a Config.log
+	exit
+fi
+
+# Obtain system information
+if test "${UNAME}x" = "x"; then
+	UNAME=`${WHICH} uname 2> /dev/null`
+	if whichFailed "${UNAME}"; then
+		UNAME="/bin/uname"
+		if test ! -x ${UNAME}; then
+			UNAME="/usr/bin/uname"
+		fi	
+	fi
+	export UNAME
+	assertValidExecutable "${UNAME}" uname
+else
+	assertValidExecutableInput "${UNAME}" uname
+fi
+
+# machine
+if test "${UNAME_M}x" = "x"; then
+	UNAME_M="${UNAME} -m"
+	export UNAME_M
+fi
+# kernel release
+if test "${UNAME_R}x" = "x"; then
+	UNAME_R="${UNAME} -r"
+	export UNAME_R
+fi
+if test "${MACHINE}x" = "x"; then
+	case `$UNAME_M` in 
+		*i686*) 
+			MACHINE=i686;; 
+		*x86_64*) # optron
+			MACHINE=x86_64;; 
+		*ia64*) # itanium
+			MACHINE=ia64;; 
+		*alpha*)
+			MACHINE=alpha;;
+		*Power*Macintosh*)
+			MACHINE=power;;
+		*ppc64*) # Power5
+			MACHINE=ppc64;;
+		*) 
+			MACHINE=Unknown;; 
+	esac
+	export MACHINE
+fi
+if test "${UNAME_S}x" = "x"; then
+	UNAME_S="${UNAME} -s"
+	export UNAME_S
+fi
+if test "${SYSTEM}x" = "x"; then
+	case `$UNAME_S` in 
+		*Linux*) 
+			SYSTEM=Linux;; 
+		*CYGWIN*) 
+			SYSTEM=CYGWIN;; 
+		*OSF1*) 
+			SYSTEM=OSF1;; 
+		*Darwin*)
+			SYSTEM=Darwin;;
+		*SunOS*)
+			SYSTEM=SunOS;;
+		*) 
+			SYSTEM=Unknown;; 
+	esac
+	export SYSTEM
+fi
+if test "${KERNEL_RELEASE}x" = "x"; then
+	KERNEL_RELEASE=`${UNAME_R}`
+	# The kernel release is general more important for macs so give meaningful name
+	if test "${SYSTEM}" = "Darwin"; then
+		case ${KERNEL_RELEASE} in
+			7.*)
+				KERNEL_RELEASE=Panther;;
+			8.*)
+				KERNEL_RELEASE=Tiger;;
+			*)
+				KERNEL_RELEASE=OtherCats;;
+		esac
+	fi
+fi
+
+# Obtain system tool information
+if test "${MAKE}x" = "x"; then
+	MAKE=`${WHICH} make 2> /dev/null`
+	if whichFailed "$MAKE"; then
+		MAKE="/usr/bin/make"
+	fi	
+	assertValidExecutable "${MAKE}" make
+	if ! ${MAKE} --version | grep GNU > /dev/null 2>&1; then
+		echo "Warning: GNU make not found, this is the recommended make implementation"
+	fi	
+	export MAKE
+else
+	assertValidExecutableInput "${MAKE}" make
+fi
+
+if test "${SH}x" = "x"; then
+	SH=`${WHICH} sh 2> /dev/null`
+	if whichFailed "${SH}"; then
+		SH="/bin/sh"
+	fi
+	assertValidExecutable "${SH}" sh
+	export SH
+else
+	assertValidExecutableInput "${SH}" sh
+fi
+
+if test "${FIND}x" = "x"; then
+	FIND=`${WHICH} find 2> /dev/null`
+	if whichFailed "${FIND}"; then
+		FIND="/usr/bin/find"
+	fi	
+	assertValidExecutable "${FIND}" find
+	export FIND
+else
+	assertValidExecutableInput "${FIND}" find
+fi
+
+if test "${RM}x" = "x"; then
+	RM=`${WHICH} rm 2> /dev/null`
+	if whichFailed "${RM}"; then
+		RM="/bin/rm"
+	fi	
+	assertValidExecutable "${RM}" rm
+	export RM
+else
+	assertValidExecutableInput "${RM}" rm
+fi
+
+if test "${RM_F}x" = "x"; then
+	RM_F="${RM} -rf"
+	export RM_F
+fi
+
+if test "${CD}x" = "x"; then
+	CD="cd"
+	export CD
+fi
+
+if test "${CP}x" = "x"; then
+	CP=`${WHICH} cp 2> /dev/null`
+	if whichFailed "${CP}"; then
+		CP="/bin/cp"
+	fi
+	assertValidExecutable "${CP}" cp
+	export CP
+else
+	assertValidExecutableInput "${CP}" cp
+fi
+
+if test "${CP_F}x" = "x"; then
+	CP_F="${CP} -f"
+	export CP_F
+fi
+
+if test "${MV}x" = "x"; then
+	MV="/bin/mv"
+	if test -x ${MV}; then
+		export MV
+	else
+		echo "Error: mv not found. Set the MV environment variable."
+		exit
+	fi
+fi
+
+if test "${MV_F}x" = "x"; then
+	MV_F="${MV} -f"
+	export MV_F
+fi
+
+if test "${MKDIR}x" = "x"; then
+	MKDIR="mkdir -p"
+	export MKDIR
+fi
+if test "${SED}x" = "x"; then
+	SED="/bin/sed"
+	if test -x ${SED}; then
+		export SED
+	else
+		SED="/usr/bin/sed"
+		if test -x ${SED}; then
+			export SED
+		else
+			echo "Error: sed not found. Set the SED environment variable."
+			exit
+		fi
+	fi
+fi
+if test "${LN}x" = "x"; then
+	LN="/bin/ln"
+	if test -x ${LN}; then
+		export LN
+	else
+		echo "Error: ln not found. Set the LN environment variable."
+		exit
+	fi
+fi
+if test "${LN_S}x" = "x"; then
+	LN_S="${LN} -fs"
+	export LN_S
+fi
+
+if test "${NM}x" = "x"; then
+	NM=`${WHICH} nm 2> /dev/null`
+	if whichFailed "${NM}"; then
+		NM="/usr/bin/nm"
+	fi
+	assertValidExecutable "${NM}" nm
+	export NM
+else
+	assertValidExecutable "${NM}" nm
+fi
+
+if test "${LS}x" = "x"; then
+	LS=`${WHICH} ls 2> /dev/null`
+	if whichFailed "${LS}"; then
+		LS="/bin/ls"
+	fi
+	assertValidExecutable "${LS}" ls
+	export LS
+else
+	assertValidExecutableInput "${LS}" ls
+fi
+
+# If this is a mac, having colours for 'ls' can mess up comparisons between strings given from the output of 'ls'
+# e.g. if test `ls $file` == /expected/filename ; then ...
+# If we unset these environment variables this will turn off colours for the mac
+unset CLICOLOR
+unset CLICOLOR_FORCE
+
+parseOptions() {
+	while test $# -gt 0; do
+		case $1 in
+			tau)
+				USE_TAU=1;
+				export USE_TAU=1;;
+			pdt)
+				USE_PDT=1;
+				export USE_PDT;;
+			optimised)
+				USE_OPTIMISED=1;
+				export USE_OPTIMISED;;
+			debug)
+				USE_DEBUG=1;
+				export USE_DEBUG;;
+			profile)
+				USE_PROFILE=1;
+				export USE_PROFILE;;
+			macro_as_func)
+				USE_MACRO_AS_FUNC=1;
+				export USE_MACRO_AS_FUNC;;
+			cautious)
+				USE_CAUTIOUS=1;
+				export USE_CAUTIOUS;;
+			memory_stats)
+				USE_MEMORY_STATS=1;
+				export USE_MEMORY_STATS;;
+			separate_build)
+				USE_SEPARATE_BUILD=1;
+				export USE_SEPARATE_BUILD;;
+			version)
+				USE_VERSION=1;
+				export USE_VERSION;;
+			nolog)
+				USE_NOLOG=1;
+				export USE_NOLOG;;
+			64bits)
+				USE_64BITS=1
+				export USE_64BITS;;
+			mpirecord)
+				USE_MPIRECORD=1
+				export USE_MPIRECORD;;
+			run_long_tests)
+				USE_RUN_LONG_TESTS=1
+				export USE_RUN_LONG_TESTS;;
+			optional_math)
+				USE_OPTIONAL_MATH=1
+				export USE_OPTIONAL_MATH;;
+			*)
+				echo "Unknown option \"$1\". Exiting."
+				exit;;
+		esac
+		
+		shift
+	done
+}
+
+parseArguements() {
+	OPTIONS=""
+	while test $# -gt 0; do
+		# Does the command line arguement take the right form (i.e --argumentName=value)?
+		case "$1" in
+			--*=*)
+				optarg="$1";;
+			--*)
+				optarg="$1";;
+			*)
+				optarg= ;;
+		esac
+		
+		# If the above is true, then check if it any of the valid arguements
+		case $optarg in
+			--options=*)
+				options=`echo $1 | $SED 's/[-_a-zA-Z0-9]*=//' | $SED 's/,/ /g'`
+				
+				# Save the "," delimited list of options
+				optionsTmp=${options}            
+				
+				# Rebuild the options into a nice string to append to dir
+
+				# First remove options which should not appear on dir string
+				optionsTmp="`echo ${optionsTmp} | $SED 's/separate_build//g'`" # Do not include this option string
+				optionsTmp="`echo ${optionsTmp} | $SED 's/version//g'`"        # Do not include this option string
+				optionsTmp="`echo ${optionsTmp} | $SED 's/nolog//g'`"        # Do not include this option string
+
+				# Reduce multi-spaces to one created by the removal of the above option text
+				optionsTmp="`echo ${optionsTmp} | $SED 's/ [ ]*/ /g'`"
+				OPTIONS="`echo ${optionsTmp} | $SED 's/ /-/g'`"
+
+				parseOptions $options;;
+			--prefix=*)
+				EXPORT_DIR=`echo $1 | $SED 's/[-_a-zA-Z0-9]*=//'`;;
+			--blddir=*)
+				BLD_DIR=`echo $1 | $SED 's/[-_a-zA-Z0-9]*=//'`;;
+			--without-*)
+				PACKAGE_NAME=`echo $1 | $SED 's/--without-//' | ${TR} '[:lower:]' '[:upper:]'`
+				ENVIRONMENT_VAR=NO${PACKAGE_NAME}
+				eval "$ENVIRONMENT_VAR=1" 2> /dev/null &&
+				export $ENVIRONMENT_VAR;;
+			--disable-shared)
+				# Hardcode without rule for now. Make generic disable in VMake2
+				NOSHARED=1
+				export NOSHARED;;
+			*)
+				echo "Warning: Unknown command line option \"$1\".";;
+		esac
+		
+		shift
+	done
+	export OPTIONS
+}
+
+# Obtain options
+parseArguements $@
+
+determineProjectVersion() {
+	if test "${USE_VERSION}x" != "x"; then
+		# Retrive version value
+		if test -d .svn; then
+			# This implies we in a checkout copy, and not in an export tarball
+			VERSION=`svn info | grep Revision | cut -f 2 -d : | $SED 's/ //g'`
+			echo ${VERSION} > VERSION
+		else
+			if test -r VERSION; then
+				VERSION=`cat VERSION`
+			fi
+		fi
+	fi
+}
+
+determineProjectVersion
+
+if test "${BLD_DIR}x" = "x"; then
+	# Add version number iff version option given and a value was retrived
+	if test "${USE_VERSION}x" = "x"; then
+		BLD_DIR=${PROJ_ROOT}/build
+	else
+		if test "${VERSION}x" != "x"; then
+			BLD_DIR=${PROJ_ROOT}/build-v${VERSION}
+		fi
+	fi
+	
+	# Add argumented options
+	if test "${OPTIONS}x" != "x"; then
+		BLD_DIR=${BLD_DIR}-${OPTIONS}
+	fi
+	
+	export BLD_DIR
+	BLD_BASE=${PROJ_ROOT}	# The build base dir for separate_build option
+else
+	BLD_BASE=${BLD_DIR}	# The build base dir for separate_build option
+fi
+
+if test "${EXPORT_DIR}x" = "x"; then
+	EXPORT_DIR=${BLD_DIR}
+	EXPORT_BASE=${BLD_DIR}	# The export base dir for separate_build option
+	export EXPORT_DIR EXPORT_BASE
+else
+	EXPORT_BASE=${EXPORT_DIR}
+	export EXPORT_BASE
+fi
+if test "${TMP_DIR}x" = "x"; then
+	TMP_DIR=${BLD_DIR}/tmp
+	export TMP_DIR
+fi
+if test "${BIN_DIR}x" = "x"; then
+	BIN_DIR=${EXPORT_DIR}/bin
+	export BIN_DIR
+fi
+if test "${LIB_DIR}x" = "x"; then
+	LIB_DIR=${EXPORT_DIR}/lib
+	export LIB_DIR
+fi
+if test "${INC_DIR}x" = "x"; then
+	INC_DIR=${EXPORT_DIR}/include
+	export INC_DIR
+fi
+if test "${TST_DIR}x" = "x"; then
+	TST_DIR=${BLD_DIR}/tests
+	export TST_DIR
+fi
+if test "${PYB_DIR}x" = "x"; then
+	PYB_DIR=${EXPORT_DIR}/Python
+	export PYB_DIR
+fi
+if test "${PYC_DIR}x" = "x"; then
+	PYC_DIR=${EXPORT_DIR}/Python
+	export PYC_DIR
+fi
+if test "${SHARE_DIR}x" = "x"; then
+	SHARE_DIR=${EXPORT_DIR}/share
+	export SHARE_DIR
+fi
+
+if test "${GREP}x" = "x"; then
+	GREP=`${WHICH} grep 2> /dev/null`
+	if whichFailed "${GREP}"; then
+		GREP="/bin/grep"
+	fi	
+	assertValidExecutable "${GREP}" grep
+	export GREP
+else
+	assertValidExecutableInput "${GREP}" grep
+fi
+
+if test "${AR}x" = "x"; then
+	AR="/usr/bin/ar"
+	if test -x ${AR}; then
+		export AR
+	else
+		echo "Error: ar not found. Set the AR environment variable."
+		exit
+	fi
+fi
+if test "${AR_C}x" = "x"; then
+	AR_C='${AR} -cru'
+	export AR_C
+fi
+if test "${RANLIB}x" = "x"; then
+	RANLIB="/usr/bin/ranlib"
+	if test -x ${RANLIB}; then
+		export RANLIB
+	else
+		echo "Error: ranlib not found. Set the RANLIB environment variable."
+		exit
+	fi
+fi
+
+if test "${CC}x" = "x"; then
+	CC=`${WHICH} cc 2> /dev/null`
+	if whichFailed "${CC}"; then
+		CC="/usr/bin/cc"
+		if test ! -x ${CC}; then
+			echo "Warning: cc not found, using gcc instead."
+			CC="/usr/bin/gcc"
+		fi	
+	fi
+	assertValidExecutable "${CC}" cc
+	export CC
+else
+	assertValidExecutableInput "${CC}" cc
+fi
+
+DoCritialConftest ./VMake/SystemTests/C-CompilerType CC_TYPE
+if test "${CC_TYPE}x" = "x"; then
+	echo "Warning: Unknown C compiler type \"${CC_TYPE}\"."
+	unset CC_TYPE
+else
+	export CC_TYPE
+fi
+
+if test "${CC_PIPE}x" = "x"; then
+	case ${CC_TYPE} in
+		gnu)
+			CC_PIPE="-pipe";;
+		osf)
+			CC_PIPE="";;
+		intel)
+			CC_PIPE="";;
+		sparc)
+			CC_PIPE="";;
+		ibmxl)
+			CC_PIPE="";;
+		*)
+			echo "Warning: CC_PIPE for C compiler \"${CC_TYPE}\" unknown. Please set.";;  
+	esac
+	export CC_PIPE
+fi
+
+# The additional flags (if any) for 64 bit compilation
+if test "${CC_64}x" = "x"; then
+	case ${CC_TYPE} in
+		gnu)
+			CC_64="-m64";;
+		osf)
+			CC_64="";; 
+		intel)
+			CC_64="";;
+		sparc)
+			CC_64="";;
+		ibmxl)
+			CC_64="-q64";;
+		*)
+			echo "Warning: CC_64 for C compiler \"${CC_TYPE}\" unknown. Please set if needed.";;  
+	esac
+	export CC_64
+fi
+
+DoCritialConftest ./VMake/SystemTests/LongSize SYSTEM_SIZEOF_LONG
+if test "${SYSTEM_SIZEOF_LONG}" = "8"; then
+	SYSTEM_64=1
+else
+	SYSTEM_64=0
+fi
+export SYSTEM_64
+
+if ! DoConftest ./VMake/SystemTests/Endian SYSTEM_BIG_ENDIAN; then
+	# Assume little (x86)
+	SYSTEM_BIG_ENDIAN=0
+fi
+export SYSTEM_BIG_ENDIAN
+
+if test "${OBJCC}x" = "x"; then
+	case ${CC_TYPE} in
+		gnu)
+			OBJCC="${CC} -x objective-c";;
+		*)
+			echo "Warning: OBJCC for C compiler \"${CC_TYPE}\" unknown. Please set if needed.";;  
+	esac
+	export OBJCC
+fi
+
+if test "${OBJECTIVEC_LIBS}x" = "x"; then
+	case ${CC_TYPE} in
+		gnu)
+			OBJECTIVEC_LIBS="-lobjc";;
+		*)
+			echo "Warning: OBJECTIVEC_LIBS for C compiler \"${CC_TYPE}\" unknown. Please set if needed.";;  
+	esac
+	export OBJCECTIVEC_LIBS
+fi
+
+	
+
+if test "${CXX_EXT}x" = "x"; then
+	CXX_EXT="cxx"
+	export CXX_EXT
+fi
+
+if test "${CXX}x" = "x"; then
+	CXX=`${WHICH} cxx 2> /dev/null`
+	if whichFailed "${CXX}"; then
+		case ${SYSTEM} in
+			Linux|Darwin|CYGWIN|SunOS)
+				CXX=`${WHICH} g++ 2> /dev/null`
+				if whichFailed "${CXX}"; then
+					CXX="/usr/bin/g++";
+				fi;;
+			OSF1)
+				CXX="/usr/bin/cxx";;
+			*)
+				CXX="";;
+		esac
+	fi	
+	export CXX
+	CXX_TEST=`warnValidExecutable ${CXX} cxx`
+else
+	CXX_TEST=`warnValidExecutableInput ${CXX} cxx`
+fi
+
+if test "${CXX_TEST}x" != "x"; then
+	echo ${CXX_TEST}
+else
+	DoCritialConftest ./VMake/SystemTests/CXX-CompilerType CXX_TYPE
+	if test "${CXX_TYPE}x" = "x"; then
+		echo "Warning: Unknown C compiler type \"${CXX_TYPE}\"."
+		unset CXX_TYPE
+	else
+		export CXX_TYPE
+	fi
+	
+	case $CC_TYPE in
+		gnu)
+			case $CXX_TYPE in
+				gnu)
+					CC_CXX_LFLAGS="-lstdc++";;
+				*)
+					echo "Warning: CC_CXX_LFLAGS for C compiler \"${CC_TYPE}\" unknown for C++ compiler \"${CXX_TYPE}\".";;
+			esac ;;
+		osf)
+			case $CXX_TYPE in
+				osf)
+					CC_CXX_LFLAGS="-lcxx";;
+				*)
+					echo "Warning: CC_CXX_LFLAGS for C compiler \"${CC_TYPE}\" unknown for C++ compiler \"${CXX_TYPE}\"";;
+			esac ;;
+		intel)
+			case $CXX_TYPE in
+				intel)
+					CC_CXX_LFLAGS="";;
+				*)
+					echo "Warning: CC_CXX_LFLAGS for C compiler \"${CC_TYPE}\" unknown for C++ compiler \"${CXX_TYPE}\".";;
+			esac ;;
+			
+		sparc)
+			case $CXX_TYPE in
+				gnu)
+					CC_CXX_LFLAGS="";;
+				sparc)
+					CC_CXX_LFLAGS="";;
+				*)
+					echo "Warning: CC_CXX_LFLAGS for C compiler \"${CC_TYPE}\" unknown for C++ compiler \"${CXX_TYPE}\".";;
+			esac ;;
+		ibmxl)
+			CC_CXX_LFLAGS="-L /usr/local/IBM_compilers/vacpp/7.0/lib64 -lxlopt -lxl -libmc++ -L /usr/lib64 -lstdc++ -R /usr/local/IBM_compilers/vacpp/7.0/lib64";;
+		*)
+			echo "Error: CC_CXX_LFLAGS for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+	export CC_CXX_LFLAGS
+fi	
+
+if test "${CXX_PIPE}x" = "x"; then
+	case ${CXX_TYPE} in
+		gnu)
+			CXX_PIPE="-pipe";;
+		osf)
+			CXX_PIPE="";;
+		intel)
+			CXX_PIPE="";;
+		sparc)
+			CXX_PIPE="";;
+		ibmxl)
+			CXX_PIPE="";;
+		*)
+			echo "Warning: CXX_PIPE for C compiler \"${CXX_TYPE}\" unknown. Please set.";;  
+	esac
+	export CXX_PIPE
+fi
+
+if test "${F77}x" = "x"; then
+	F77=`${WHICH} f77 2> /dev/null`
+	if whichFailed "${F77}"; then
+		F77="/usr/bin/f77"
+		if test ! -x ${F77}; then
+			echo "Warning: f77 not found, using g77 instead."
+			F77=`${WHICH} g77 2> /dev/null`
+			if whichFailed "${F77}"; then
+				if test "${SYSTEM}" = "Darwin"; then
+					if test -x "/usr/bin/g77"; then
+						F77="/usr/bin/g77"
+					else
+						F77="/sw/bin/g77"
+					fi
+				else
+					F77="/usr/bin/g77"
+				fi
+			fi	
+		fi
+	fi
+	F77_TEST=`warnValidExecutable ${F77} f77`
+	export F77
+else
+	F77_TEST=`warnValidExecutableInput ${F77} f77`
+fi
+
+if test "${F77_TEST}x" != "x"; then
+	echo ${F77_TEST}
+else
+	DoCritialConftest ./VMake/SystemTests/Fortran-CompilerType F77_TYPE
+	if test "${F77_TYPE}x" = "x"; then
+		echo "Warning: Unknown F77 compiler type \"${F77_TYPE}\"."
+		unset F77_TYPE
+	else
+		export F77_TYPE
+	fi
+
+	if test "${FORTRAN_COMPILER_LIBDIR}x" = "x"; then
+		case $F77_TYPE in
+			gnu)
+				case ${SYSTEM} in
+					Darwin)
+						FORTRAN_COMPILER_LIBDIR="/sw/lib";;
+					*)
+						#gcc can usually find it for systems...
+						FORTRAN_COMPILER_LIBDIR="/usr/lib";;
+				esac;;		
+			osf)
+				case ${SYSTEM} in
+					OSF1)
+						FORTRAN_COMPILER_LIBDIR="/usr/lib";;
+					*)
+						echo "Error: FORTRAN_COMPILER_LIBDIR for F77 compiler \"${F77_TYPE}\" unknown for system \"${SYSTEM}\"";
+						exit ;;
+				esac;;
+			intel)
+				IFORT_EXE=`which ifort`;
+				FORTRAN_COMPILER_LIBDIR=`${GREP} 'LD_LIBRARY_PATH=.*;' ${IFORT_EXE} | ${GREP} -v '\$LD_LIBRARY_PATH' | cut -f 2 -d = | sed 's/;//g'`
+				;;
+			sparc)
+				echo "Warning: FORTRAN_COMPILER_LIBDIR for F77 compiler \"${F77_TYPE}\" not able be determined automatically, please set as an environment variable.";;
+			esac	
+		export FORTRAN_COMPILER_LIBDIR
+	fi
+
+	if test "${EXTRA_FORTRAN_LIBS}x" = "x"; then
+		case $CC_TYPE in
+			gnu)
+				case $F77_TYPE in
+					gnu)
+						EXTRA_FORTRAN_LIBS="-lg2c";;
+					*)
+						echo "Warning: EXTRA_FORTRAN_LIBS for C compiler \"${CC_TYPE}\" unknown for F77 compiler \"${F77_TYPE}\".";
+				esac ;;
+			osf)
+				case $F77_TYPE in
+					osf)
+						EXTRA_FORTRAN_LIBS="-lfor";;
+					*)
+						echo "Error: EXTRA_FORTRAN_LIBS for C compiler \"${CC_TYPE}\" unknown for F77 compiler \"${F77_TYPE}\"";
+						exit ;;
+				esac ;;
+			intel)
+				case $F77_TYPE in
+					intel)
+						EXTRA_FORTRAN_LIBS="-lifport -lifcore";;
+					*)
+						echo "Warning: EXTRA_FORTRAN_LIBS for C compiler \"${CC_TYPE}\" unknown for F77 compiler \"${F77_TYPE}\".";
+				esac ;;
+			sparc)
+				case $F77_TYPE in
+					sparc)
+						EXTRA_FORTRAN_LIBS="";;
+					*)
+						echo "Warning: EXTRA_FORTRAN_LIBS for C compiler \"${CC_TYPE}\" unknown for F77 compiler \"${F77_TYPE}\".";
+				esac ;;
+			ibmxl)
+				EXTRA_FORTRAN_LIBS="";;	
+			*)
+				echo "Error: EXTRA_FORTRAN_LIBS for C compiler \"${CC_TYPE}\" unknown";
+				exit ;;
+		esac
+		export EXTRA_FORTRAN_LIBS
+	fi	
+
+	if test "${CC_FORTRAN_LFLAGS}x" = "x"; then
+		if test "${FORTRAN_COMPILER_LIBDIR}x" != "x"; then
+			CC_FORTRAN_LFLAGS='-L${FORTRAN_COMPILER_LIBDIR} ${EXTRA_FORTRAN_LIBS}'
+		else
+			CC_FORTRAN_LFLAGS='${EXTRA_FORTRAN_LIBS}'
+		fi
+		export CC_FORTRAN_LFLAGS
+	fi	
+
+	DoCritialConftest ./VMake/SystemTests/Fortran-Symbol F77_SYMBOL_TRANSLATION
+	export F77_SYMBOL_TRANSLATION
+fi	
+
+	
+if test "${LINKER}x" = "x"; then
+	LINKER=${CC}
+	export LINKER;
+fi
+
+# Note: pic capitalised to PIC below 17 August 2004 to work on Sun Sparc machines
+if test "${SO_CFLAGS}x" = "x"; then
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux)
+					SO_CFLAGS="-fPIC";;
+				CYGWIN|Darwin|OSF1)
+					SO_CFLAGS="";;
+				SunOS)
+					SO_CFLAGS="-fPIC";;
+				*)
+					echo "SO_CFLAGS for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";
+					exit ;;
+			esac ;;
+		osf)
+			SO_CFLAGS="-shared";;
+		intel)
+			SO_CFLAGS="-fPIC";;
+		sparc)
+			SO_CFLAGS="-shared";;
+		ibmxl)
+			SO_CFLAGS="-qpic";;
+		*)
+			echo "SO_CFLAGS for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+	export SO_CFLAGS
+fi
+
+if test "${SO_EXT}x" = "x"; then
+	# SO_EXT... extension of a dynamically linked library
+	# MODULE_EXT... extension a dynamucally loadable module (e.g. plugin). Necessary because this is different on 
+	#	Darwin to a dll.
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux|OSF1|SunOS)
+					SO_EXT="so";
+					MODULE_EXT='${SO_EXT}';;
+				Darwin)
+					SO_EXT="dylib";
+					MODULE_EXT="so";;
+				CYGWIN)
+					SO_EXT="dll";
+					MODULE_EXT='${SO_EXT}';;
+				*)
+					echo "Error: SO_EXT/MODULE_EXT for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";
+					exit ;;
+			esac ;;
+		osf)
+			SO_EXT="so";
+			MODULE_EXT='${SO_EXT}';;
+		intel)
+			SO_EXT="so";
+			MODULE_EXT='${SO_EXT}';;
+		sparc)
+			SO_EXT="so";
+			MODULE_EXT='${SO_EXT}';;
+		ibmxl)
+			SO_EXT="so";
+			MODULE_EXT='${SO_EXT}';;
+		*)
+			echo "Error: SO_EXT/MODULE_EXT for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+	export SO_EXT
+	export MODULE_EXT
+fi
+
+if test "${SO_LFLAGS}x" = "x"; then
+	# SO_LFLAGS... what to pass to the compiler to tell it to create a dynamically linked library
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux|CYGWIN|SunOS)
+					SO_LFLAGS="-shared";;
+				Darwin)
+					SO_LFLAGS="-dynamiclib -flat_namespace -undefined suppress -single_module";;
+				OSF1)
+					SO_LFLAGS="-Wl,-shared";;
+				*)
+					echo "Error: SO_LFLAGS for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";
+					exit ;;
+			esac ;;
+		osf)
+			SO_LFLAGS='-shared -check_registry ${LIB_DIR}/so_locations -update_registry ${LIB_DIR}/so_locations';;
+		intel)
+			SO_LFLAGS="-shared";;
+		sparc)
+			SO_LFLAGS="-G";;
+		ibmxl)
+			SO_LFLAGS="-qmkshrobj";;
+		*)
+			echo "Error: SO_LFLAGS for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+	export SO_LFLAGS
+fi
+
+if test "${MODULE_LFLAGS}x" = "x"; then
+	# MODULE_LFLAGS... what to pass to the compiler to tell is to create a dynamucally loadable module (e.g. plugin). Necessary
+	#	because this is built differently on Darwin to a dll.
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux|CYGWIN|SunOS)
+					MODULE_LFLAGS='${SO_LFLAGS}';;
+				OSF1)
+					MODULE_LFLAGS="";;
+				Darwin)
+					MODULE_LFLAGS="-bundle -flat_namespace -undefined suppress";;
+				*)
+					echo "Error: MODULE_LFLAGS for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";
+					exit ;;
+			esac ;;
+		osf)
+			MODULE_LFLAGS='${SO_LFLAGS}';;
+		intel)
+			MODULE_LFLAGS='${SO_LFLAGS}';;
+		sparc)
+			MODULE_LFLAGS='${SO_LFLAGS}';;
+		ibmxl)
+			MODULE_LFLAGS='${SO_LFLAGS}';;
+		*)
+			echo "Error: MODULE_LFLAGS for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+	export MODULE_LFLAGS
+fi
+export MODULE_LFLAGS
+
+if test "${RPATH_FLAG}x" = "x"; then
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux|CYGWIN)
+					RPATH_FLAG='-Xlinker -rpath -Xlinker '
+					;;
+				Darwin)
+					RPATH_FLAG="";;
+				SunOS)
+					RPATH_FLAG="";; # don't do it, because Alan doesn't thinks it works on rice anyway
+				OSF1)
+					RPATH_FLAG="-Wl,-rpath,";;
+				*)
+					echo "Error: RPATH_FLAG for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";
+					exit ;;
+			esac ;;
+		osf)
+			RPATH_FLAG='-rpath '
+			;;
+		intel)
+			RPATH_FLAG='-Xlinker -rpath -Xlinker '
+			;;
+		sparc)
+			RPATH_FLAG='-R'
+			;;
+		ibmxl)
+			RPATH_FLAG='-R '
+			;;
+		*)
+			echo "Error: RPATH_FLAG for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+fi
+
+if test "${RPATH_FLAG}x" != "x"; then
+	if test "${RPATH_LFLAGS}x" = "x"; then
+		RPATH_LFLAGS='${RPATH_FLAG}${LIB_DIR}'
+	else
+		case $CC_TYPE in
+			osf|sparc)
+				RPATH_FLAGS='${RPATH_FLAG}${LIB_DIR}:'"`echo ${RPATH} | ${SED} 's/-rpath //'`"
+				;;
+			*)
+				RPATH_LFLAGS='${RPATH_FLAG}${LIB_DIR} ${RPATH_LFLAGS}'
+				;;
+		esac
+	fi
+fi
+export RPATH_FLAG
+export RPATH_LFLAGS
+
+if test "${EXPORT_DYNAMIC_LFLAGS}x" = "x"; then
+	case $CC_TYPE in
+		gnu)
+			case $SYSTEM in
+				Linux|CYGWIN)
+					EXPORT_DYNAMIC_LFLAGS="-Xlinker -export-dynamic";;
+				Darwin)
+					EXPORT_DYNAMIC_LFLAGS="-u __dummy -framework System -framework CoreServices -framework Foundation";;
+				SunOS)
+					EXPORT_DYNAMIC_LFLAGS="-B dynamic";;
+				OSF1)
+					EXPORT_DYNAMIC_LFLAGS="";;
+				*)
+					echo "Error: EXPORT_DYNAMIC_LFLAGS for C compiler \"${CC_TYPE}\" unknown for system \"${SYSTEM}\"";
+					exit ;;
+			esac ;;
+		osf)
+			EXPORT_DYNAMIC_LFLAGS="";;
+		intel)
+			EXPORT_DYNAMIC_LFLAGS="";;
+		sparc)
+			EXPORT_DYNAMIC_LFLAGS="-B dynamic";;
+		ibmxl)
+			EXPORT_DYNAMIC_LFLAGS="-Wl,--export-dynamic";;
+		*)
+			echo "Error: EXPORT_DYNAMIC_LFLAGS for C compiler \"${CC_TYPE}\" unknown";
+			exit ;;
+	esac
+	export EXPORT_DYNAMIC_LFLAGS
+fi
+
+
+# Set warning level
+if test "${CC_WARNINGLEVEL}x" = "x"; then
+	case ${CC_TYPE} in
+		gnu)
+			CC_WARNINGLEVEL="-Wall";;
+		osf)
+			CC_WARNINGLEVEL="-msg_enable level3 -msg_disable unstructmem -msg_disable undefenum -msg_disable nonstandcast -msg_disable mixfuncvoid";;
+		intel)
+			CC_WARNINGLEVEL="-w1";;
+		sparc)
+			CC_WARNINGLEVEL="";;
+		ibmxl)
+			# theres no good equivalient to -Wall, turn on a few warnings at least
+			CC_WARNINGLEVEL="-qformat=all -qwarn64";; 
+		*)
+			echo "Warning: CC_WARNINGLEVEL for C compiler \"${CC_TYPE}\" unknown. Please set.";;  
+	esac
+	export CC_WARNINGLEVEL
+fi
+
+
+# Set symbol level
+if test "${CC_SYMBOLLEVEL}x" = "x"; then
+	if test "${USE_OPTIMISED}x" = "x"; then
+		case ${CC_TYPE} in
+			gnu)
+				CC_SYMBOLLEVEL="-g";;
+			osf)
+				CC_SYMBOLLEVEL="-g3";;
+			intel)
+				CC_SYMBOLLEVEL="-g";;
+			sparc)
+				CC_SYMBOLLEVEL="-g";;
+			ibmxl)
+				CC_SYMBOLLEVEL="-g";;
+			*)
+				echo "Warning: CC_SYMBOLLEVEL for C compiler \"${CC_TYPE}\" unknown. Please set.";;  
+		esac
+	else
+		CC_SYMBOLLEVEL=" "
+	fi
+	export CC_SYMBOLLEVEL
+fi
+
+# Set optimisation level
+if test "${CC_OPTIMISATIONLEVEL}x" = "x"; then
+	if test "${USE_OPTIMISED}x" = "x"; then
+		CC_OPTIMISATIONLEVEL=""
+	else
+		case ${MACHINE} in
+			i686)
+				CC_OPTIMISATIONLEVEL="-O3 -march=i686 -fomit-frame-pointer -funroll-loops";; #-fmove-all-movables";;
+			x86_64)
+				CC_OPTIMISATIONLEVEL="-O3 -march=athlon64";; #-fomit-frame-pointer -funroll-loops";;
+			ia64)
+				CC_OPTIMISATIONLEVEL=" ";;
+			alpha)
+				CC_OPTIMISATIONLEVEL=" ";;
+			power)
+				CC_OPTIMISATIONLEVEL="-O2 -faltivec";;
+			ppc64)
+				if test "${CC_TYPE}" = "ibmxl"; then
+					CC_OPTIMISATIONLEVEL="-O5 -qunroll"
+				else
+					CC_OPTIMISATIONLEVEL=" "
+				fi	;;
+			*)
+				echo "Warning: CC_OPTIMISATIONLEVEL for C compiler \"${CC_TYPE}\" unknown with USE_OPTIMISED enabled. Please set.";;  
+		esac
+		CC_OPTIMISATIONLEVEL="${CC_OPTIMISATIONLEVEL} -DNDEBUG"
+	fi
+	export CC_OPTIMISATIONLEVEL
+fi
+
+
+
+# Obtain dl information
+if test "${DL_DIR}x" = "x"; then
+	case ${SYSTEM} in
+		Linux|CYGWIN|OSF1|SunOS)
+			DL_DIR="/usr";;
+		Darwin)
+			DL_DIR="/sw";;
+		*)
+			echo "Warning: DL_DIR for system \"${SYSTEM}\" unknown. Set the environment variable.";;
+	esac
+	export DL_DIR
+fi
+if test "${DL_LIBDIR}x" = "x"; then
+	DL_LIBDIR=${DL_DIR}/lib
+	export DL_LIBDIR
+fi
+if test "${DL_LIBFILES}x" = "x"; then
+	case $SYSTEM in
+		Linux|Darwin|SunOS)
+			DL_LIBFILES="-ldl";;
+			# dlcompat package is required for darwin
+		CYGWIN|OSF1)
+			DL_LIBFILES="";;
+		*)
+			echo "Warning: DL_LIBFILES for system \"${SYSTEM}\" unknown. Set the DL_LIBFILES environment variable.";;
+	esac
+	export DL_LIBFILES
+fi
+if test "${DL_LIBS}x" = "x"; then
+	DL_LIBS='-L${DL_LIBDIR} ${DL_LIBFILES}'
+	export DL_LIBS
+fi
+case ${SYSTEM} in
+	CYGWIN|OSF1)
+		;;
+	*)
+		if test -r ${DL_LIBDIR}/libdl.a; then
+			:
+		elif test -r ${DL_LIBDIR}/libdl.so; then
+			:
+		elif test -r ${DL_LIBDIR}/libdl.dylib; then
+		        :
+		else
+			echo "Warning: ${DL_LIBDIR}/libdl.[a|so]  not found. Set the DL_DIR environment variables. Darwin requires the dlcompat package installed."
+		fi;;
+esac
+if test "${DL_INCDIR}x" = "x"; then
+	DL_INCDIR=${DL_DIR}/include
+	export DL_INCDIR
+fi
+if test -r ${DL_INCDIR}/dlfcn.h; then
+	:
+else
+	echo "Warning: ${DL_INCDIR}/dlfcn.h not found. Set the environment variables."
+fi
+if test "${DL_INCLUDES}x" = "x"; then
+	DL_INCLUDES="-I${DL_INCDIR}"
+	export DL_INCLUDES
+fi
+
+if test "${DOXYGEN}x" = "x"; then
+	DOXYGEN=`${WHICH} doxygen 2> /dev/null`
+	if whichFailed "${DOXYGEN}"; then
+		DOXYGEN="/usr/bin/doxygen"
+	fi
+	warnValidExecutable "${DOXYGEN}" doxygen
+	export DOXYGEN
+else
+	warnValidExecutableInput "${DOXYGEN}" doxygen
+fi
+
+
+if test "${SVN}x" = "x"; then
+	SVN=`${WHICH} svn 2> /dev/null`
+	if whichFailed "${SVN}"; then
+		SVN="/usr/bin/svn"
+	fi
+
+	warnValidExecutable "${SVN}" svn
+	resolveVariable SVN_EXEC ${SVN}
+	if test -x "${SVN_EXEC}"; then
+		HAVE_SVN=1
+	fi
+else
+	warnValidExecutableInput "${SVN}" svn
+	if test -x "${SVN}"; then
+		HAVE_SVN=1
+	fi
+fi
+
+if test "${CSOAP_DIR}x" = "x"; then
+	CSOAP_DIR="/usr/lib/libcsoap"
+	export CSOAP_DIR
+fi
+if test "${CSOAP_INCDIR}x" = "x"; then
+	CSOAP_INCDIR='${CSOAP_DIR}/include/libcsoap-1.0'
+	export CSOAP_INCDIR
+fi
+if test "${CSOAP_INCLUDES}x" = "x"; then
+	CSOAP_INCLUDES='-I${CSOAP_INCDIR}'
+	export CSOAP_INCLUDES
+fi
+if test "${CSOAP_LIBDIR}x" = "x"; then
+	CSOAP_LIBDIR='${CSOAP_DIR}/lib'
+	export CSOAP_LIBDIR
+fi
+if test "${CSOAP_LIBFILES}x" = "x"; then
+	CSOAP_LIBFILES="-lcsoap-1.0"
+	export CSOAP_LIBFILES
+fi
+if test "${CSOAP_LIBS}x" = "x"; then
+	CSOAP_LIBS='-L${CSOAP_LIBDIR} ${CSOAP_LIBFILES}'
+	export CSOAP_LIBS
+fi
+
+if test "${NANOHTTP_DIR}x" = "x"; then
+	NANOHTTP_DIR='${CSOAP_DIR}'		# Use the same nanohttp bundled with csoap
+	export NANOHTTP_DIR
+fi
+if test "${NANOHTTP_INCDIR}x" = "x"; then
+	NANOHTTP_INCDIR='${NANOHTTP_DIR}/include/nanohttp-1.0'
+	export NANOHTTP_INCDIR
+fi
+if test "${NANOHTTP_INCLUDES}x" = "x"; then
+	NANOHTTP_INCLUDES='-I${NANOHTTP_INCDIR}'
+	export NANOHTTP_INCLUDES
+fi
+if test "${NANOHTTP_LIBDIR}x" = "x"; then
+	NANOHTTP_LIBDIR='${NANOHTTP_DIR}/lib'
+	export NANOHTTP_LIBDIR
+fi
+if test "${NANOHTTP_LIBFILES}x" = "x"; then
+	NANOHTTP_LIBFILES="-lnanohttp-1.0"
+	export NANOHTTP_LIBFILES
+fi
+if test "${NANOHTTP_LIBS}x" = "x"; then
+	NANOHTTP_LIBS='-L${NANOHTTP_LIBDIR} ${NANOHTTP_LIBFILES}'
+	export NANOHTTP_LIBS
+fi
+
+if test -r `eval echo "${CSOAP_INCDIR}/libcsoap/soap-client.h"`; then
+	HAVE_SOAP=1;
+	export HAVE_SOAP
+fi
+
+if test "${REGRESSTOR_URL}x" = "x"; then
+	REGRESSTOR_URL="http://localhost/~alan/cgi-bin/RegresstorServices/Regresstor.cgi";
+	export REGRESSTOR_URL
+fi
+
+# Write out to Makefile.system
+cat << EOF > Makefile.system
+ifndef WHICH
+	WHICH=${WHICH}
+endif
+ifndef UNAME
+	UNAME=${UNAME}
+endif
+ifndef UNAME_M
+	UNAME_M=${UNAME_M}
+endif
+ifndef UNAME_R
+	UNAME_R=${UNAME_R}
+endif
+ifndef MACHINE
+	MACHINE=${MACHINE}
+endif
+ifndef KERNEL_RELEASE
+	KERNEL_RELEASE=${KERNEL_RELEASE}
+endif
+ifndef UNAME_S
+	UNAME_S=${UNAME_S}
+endif
+ifndef SYSTEM
+	SYSTEM=${SYSTEM}
+endif
+ifndef MAKE
+	MAKE=${MAKE}
+endif
+ifndef SH
+	SH=${SH}
+endif
+ifeq (default,\$(origin RM))
+	RM=${RM}
+endif
+ifndef RM
+	RM=${RM}
+endif
+ifndef RM_F
+	RM_F=${RM_F}
+endif
+ifndef CD
+	CD=${CD}
+endif
+ifndef CP
+	CP=${CP}
+endif
+ifndef CP_F
+	CP_F=${CP_F}
+endif
+ifndef MV
+	MV=${MV}
+endif
+ifndef MV_F
+	MV_F=${MV_F}
+endif
+ifndef MKDIR
+	MKDIR=${MKDIR}
+endif
+ifndef SED
+	SED=${SED}
+endif
+ifndef FIND
+	FIND=${FIND}
+endif
+ifndef LN
+	LN=${LN}
+endif
+ifndef LN_S
+	LN_S=${LN_S}
+endif
+ifndef TEE
+	TEE=${TEE}
+endif
+ifndef NM
+	NM=${NM}
+endif
+ifndef LS
+	LS=${LS}
+endif
+ifndef GREP
+	GREP=${GREP}
+endif
+ifndef AR
+	AR=${AR}
+endif
+ifndef AR_C
+	AR_C=${AR_C}
+endif
+ifndef RANLIB
+	RANLIB=${RANLIB}
+endif
+ifeq (default,\$(origin CC))
+	CC=${CC}
+endif
+ifndef CC
+	CC=${CC}
+endif
+ifndef CC_TYPE
+	CC_TYPE=${CC_TYPE}
+endif
+ifeq (default,\$(origin CXX))
+	CXX=${CXX}
+endif
+ifndef CC_PIPE
+	CC_PIPE=${CC_PIPE}
+endif
+ifndef CC_64
+	CC_64=${CC_64}
+endif
+ifndef SYSTEM_SIZEOF_LONG
+	SYSTEM_SIZEOF_LONG=${SYSTEM_SIZEOF_LONG}
+endif
+ifndef SYSTEM_64
+	SYSTEM_64=${SYSTEM_64}
+endif
+ifndef SYSTEM_BIG_ENDIAN
+	SYSTEM_BIG_ENDIAN=${SYSTEM_BIG_ENDIAN}
+endif
+ifndef OBJCC
+	OBJCC=${OBJCC}
+endif
+ifndef OBJECTIVEC_LIBS
+	OBJECTIVEC_LIBS=${OBJECTIVEC_LIBS}
+endif
+ifndef CXX_EXT
+	CXX_EXT=${CXX_EXT}
+endif
+ifndef CXX
+	CXX=${CXX}
+endif
+ifndef CXX_TYPE
+	CXX_TYPE=${CXX_TYPE}
+endif
+ifndef CXX_PIPE
+	CXX_PIPE=${CXX_PIPE}
+endif
+ifeq (default,\$(origin F77))
+	F77=${F77}
+endif
+ifndef F77
+	F77=${F77}
+endif
+ifndef F77_TYPE
+	F77_TYPE=${F77_TYPE}
+endif
+ifndef LINKER
+	LINKER=${LINKER}
+endif
+ifndef SO_EXT
+	SO_EXT=${SO_EXT}
+endif
+ifndef MODULE_EXT
+	MODULE_EXT=${MODULE_EXT}
+endif
+ifndef SO_CFLAGS
+	SO_CFLAGS=${SO_CFLAGS}
+endif
+ifndef SO_LFLAGS
+	SO_LFLAGS=${SO_LFLAGS}
+endif
+ifndef MODULE_LFLAGS
+	MODULE_LFLAGS=${MODULE_LFLAGS}
+endif
+ifndef RPATH_FLAG
+	RPATH_FLAG=${RPATH_FLAG}
+endif
+ifndef RPATH
+	RPATH=${RPATH}
+endif
+ifndef RPATH_LFLAGS
+	RPATH_LFLAGS=${RPATH_LFLAGS}
+endif
+ifndef EXPORT_DYNAMIC_LFLAGS
+	EXPORT_DYNAMIC_LFLAGS=${EXPORT_DYNAMIC_LFLAGS}
+endif
+ifndef CC_CXX_LFLAGS
+	CC_CXX_LFLAGS=${CC_CXX_LFLAGS}
+endif
+ifndef FORTRAN_COMPILER_LIBDIR
+	FORTRAN_COMPILER_LIBDIR=${FORTRAN_COMPILER_LIBDIR}
+endif
+ifndef EXTRA_FORTRAN_LIBS
+	EXTRA_FORTRAN_LIBS=${EXTRA_FORTRAN_LIBS}
+endif
+ifndef CC_FORTRAN_LFLAGS
+	CC_FORTRAN_LFLAGS=${CC_FORTRAN_LFLAGS}
+endif
+ifndef F77_LIBS
+	F77_LIBS=${F77_LIBS}
+endif
+ifndef F77_SYMBOL_TRANSLATION
+	F77_SYMBOL_TRANSLATION=${F77_SYMBOL_TRANSLATION}
+endif
+ifndef CC_WARNINGLEVEL
+	CC_WARNINGLEVEL=${CC_WARNINGLEVEL}
+endif
+ifndef CC_SYMBOLLEVEL
+	CC_SYMBOLLEVEL=${CC_SYMBOLLEVEL}
+endif
+ifndef CC_OPTIMISATIONLEVEL
+	CC_OPTIMISATIONLEVEL=${CC_OPTIMISATIONLEVEL}
+endif
+ifndef NOSHARED
+	NOSHARED=${NOSHARED}
+endif
+ifndef DL_DIR
+	DL_DIR=${DL_DIR}
+endif
+ifndef DL_LIBDIR
+	DL_LIBDIR=${DL_LIBDIR}
+endif
+ifndef DL_LIBFILES
+	DL_LIBFILES=${DL_LIBFILES}
+endif
+ifndef DL_LIBS
+	DL_LIBS=${DL_LIBS}
+endif
+ifndef DL_INCDIR
+	DL_INCDIR=${DL_INCDIR}
+endif
+ifndef DL_INCLUDES
+	DL_INCLUDES=${DL_INCLUDES}
+endif
+ifndef NOPYTHON
+	NOPYTHON=${NOPYTHON}
+endif
+ifndef DOXYGEN
+	DOXYGEN=${DOXYGEN}
+endif
+ifndef SVN
+	SVN=${SVN}
+endif
+ifndef HAVE_SVN
+	HAVE_SVN=${HAVE_SVN}
+endif
+ifndef CSOAP_DIR
+	CSOAP_DIR=${CSOAP_DIR}
+endif
+ifndef CSOAP_INCDIR
+	CSOAP_INCDIR=${CSOAP_INCDIR}
+endif
+ifndef CSOAP_INCLUDES
+	CSOAP_INCLUDES=${CSOAP_INCLUDES}
+endif
+ifndef CSOAP_LIBDIR
+	CSOAP_LIBDIR=${CSOAP_LIBDIR}
+endif
+ifndef CSOAP_LIBFILES
+	CSOAP_LIBFILES=${CSOAP_LIBFILES}
+endif
+ifndef CSOAP_LIBS
+	CSOAP_LIBS=${CSOAP_LIBS}
+endif
+ifndef NANOHTTP_DIR
+	NANOHTTP_DIR=${NANOHTTP_DIR}
+endif
+ifndef NANOHTTP_INCDIR
+	NANOHTTP_INCDIR=${NANOHTTP_INCDIR}
+endif
+ifndef NANOHTTP_INCLUDES
+	NANOHTTP_INCLUDES=${NANOHTTP_INCLUDES}
+endif
+ifndef NANOHTTP_LIBDIR
+	NANOHTTP_LIBDIR=${NANOHTTP_LIBDIR}
+endif
+ifndef NANOHTTP_LIBFILES
+	NANOHTTP_LIBFILES=${NANOHTTP_LIBFILES}
+endif
+ifndef NANOHTTP_LIBS
+	NANOHTTP_LIBS=${NANOHTTP_LIBS}
+endif
+ifndef HAVE_SOAP
+	HAVE_SOAP=${HAVE_SOAP}
+endif
+ifndef REGRESSTOR_URL
+	REGRESSTOR_URL=${REGRESSTOR_URL}
+endif
+EOF
+
+
+if test ! "${USE_OPTIMISED}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_OPTIMISED=${USE_OPTIMISED}
+EOF
+fi
+
+if test ! "${USE_DEBUG}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_DEBUG=${USE_DEBUG}
+EOF
+fi
+
+if test ! "${USE_PROFILE}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_PROFILE=${USE_PROFILE}
+CFLAGS += -DUSE_PROFILE=1
+EOF
+fi
+
+if test ! "${USE_TAU}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_TAU=${USE_TAU}
+EOF
+fi
+
+
+if test ! "${USE_PDT}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_PDT=${USE_PDT}
+EOF
+fi
+
+if test ! "${USE_MACRO_AS_FUNC}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_MACRO_AS_FUNC=${USE_MACRO_AS_FUNC}
+EOF
+fi
+
+if test ! "${USE_CAUTIOUS}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_CAUTIOUS=${USE_CAUTIOUS}
+EOF
+fi
+
+if test ! "${USE_MEMORY_STATS}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_MEMORY_STATS=${USE_MEMORY_STATS}
+EOF
+fi
+
+if test ! "${USE_NOLOG}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_NOLOG=${USE_NOLOG}
+EOF
+fi
+
+if test ! "${USE_64BITS}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_64BITS=${USE_64BITS}
+EOF
+fi
+
+if test ! "${USE_MPIRECORD}x" = "x"; then
+cat << EOF >> Makefile.system
+USE_MPIRECORD=${USE_MPIRECORD}
+EOF
+fi
+
+# PDT
+if test ! "${USE_PDT}x" = "x"; then
+	. ./VMake/Config/pdt-config.sh
+fi
+
+# TAU
+if test ! "${USE_TAU}x" = "x"; then
+	. ./VMake/Config/tau-config.sh
+fi
+
+addLocationInfoTo() {
+cat << EOF >> $1
+ifndef OPTIONS
+	OPTIONS=${OPTIONS}
+endif
+ifndef USE_RUN_LONG_TESTS
+	USE_RUN_LONG_TESTS=${USE_RUN_LONG_TESTS}
+endif
+ifndef PROJ_ROOT
+	PROJ_ROOT=${PROJ_ROOT}/${dir}
+endif
+ifndef BLD_DIR
+	BLD_DIR=${BLD_DIR}
+endif
+ifndef EXPORT_DIR
+	EXPORT_DIR=${EXPORT_DIR}
+endif
+ifndef TMP_DIR
+	TMP_DIR=${TMP_DIR}
+endif
+ifndef BIN_DIR
+	BIN_DIR=${BIN_DIR}
+endif
+ifndef LIB_DIR
+	LIB_DIR=${LIB_DIR}
+endif
+ifndef INC_DIR
+	INC_DIR=${INC_DIR}
+endif
+ifndef TST_DIR
+	TST_DIR=${TST_DIR}
+endif
+ifndef PYB_DIR
+	PYB_DIR=${PYB_DIR}
+endif
+ifndef PYC_DIR
+	PYC_DIR=${PYC_DIR}
+endif
+ifndef SHARE_DIR
+	SHARE_DIR=${SHARE_DIR}
+endif
+EOF
+}
+
+addProjectExportTo() {
+cat << EOF >> $1
+ifndef ${projectName}_DIR
+	${projectName}_DIR=${EXPORT_DIR}
+endif
+EOF
+}
+
+addToMakefileThisVariableAndValue() {
+cat << EOF >> $1
+ifndef $2
+	$2=$3
+endif
+EOF
+}
+
+addToMakefileThisVariableAndValueNoIf() {
+cat << EOF >> $1
+	$2=$3
+EOF
+}
+
+# Obtain project specific configurations - need to do subdirectories first so the project-config.sh in the
+#	current directory doesn't add its stuff to Makefile.system too early
+currdir=${PROJ_ROOT}
+
+# Do the config in the order they are listed in Makefile.def
+if test -r makefile; then
+	getVariableFromMakefile subproj makefile
+	makeDirectories="$subproj ."
+else
+	makeDirectories="."
+fi
+
+for dir in $makeDirectories; do
+	# Check if the directory is a project
+	if test "`ls ${dir}/configure.sh 2> /dev/null`X" = "${dir}/configure.sh""X" ; then
+		if test ${dir} != "."; then
+			${CP_F} Makefile.system ${dir}
+		fi
+		cd ${dir};
+		if test "${USE_SEPARATE_BUILD}x" != "x"; then
+			determineProjectVersion
+			# If using separate_build, just set the variables, ignoring environment set ones for now
+				
+			# Add version number iff version option given and a value was retrived
+			if test "${USE_VERSION}x" = "x"; then
+				BLD_DIR=${BLD_BASE}/${dir}
+				EXPORT_DIR=${EXPORT_BASE}/${dir}
+			else
+				if test "${VERSION}x" != "x"; then
+					BLD_DIR=${BLD_BASE}/${dir}-v${VERSION}
+					EXPORT_DIR=${EXPORT_BASE}/${dir}-v${VERSION}
+				fi
+			fi
+
+			# Add argumented options
+			if test "${OPTIONS}x" != "x"; then
+				BLD_DIR=${BLD_DIR}-${OPTIONS}
+				EXPORT_DIR=${EXPORT_DIR}-${OPTIONS}
+			fi
+			
+			export BLD_DIR
+			TMP_DIR=${BLD_DIR}/tmp
+			export TMP_DIR
+			BIN_DIR=${EXPORT_DIR}/bin
+			export BIN_DIR
+			LIB_DIR=${EXPORT_DIR}/lib
+			export LIB_DIR
+			INC_DIR=${EXPORT_DIR}/include
+			export INC_DIR
+			TST_DIR=${BLD_DIR}/tests
+			export TST_DIR
+			PYB_DIR=${EXPORT_DIR}/Python
+			export PYB_DIR
+			PYC_DIR=${EXPORT_DIR}/Python
+			export PYC_DIR
+			SHARE_DIR=${EXPORT_DIR}/share
+			export SHARE_DIR
+			EXAMPLES_DIR=${SHARE_DIR}/examples
+			export EXAMPLES_DIR
+
+		fi	# End separate_build
+
+		addLocationInfoTo Makefile.system
+
+		if test -x project-config.sh; then
+			echo "Doing project configuration in $dir"
+			# Source the project config to retrive values it obtains from config scripts
+			. ./project-config.sh
+			if ! test $? = "0" ; then
+				# project-config.sh for this project has failed
+				exit 1
+			fi
+			# Fetch the project name back from Makefile.system and make it uppercase
+			projectName=`grep 'PROJECT\=' Makefile.system | cut -f 2 -d'='`
+			if test "${projectName}x" = "x"; then
+				projectName=${dir}
+			fi
+			projectNameLowerCase=${projectName}
+			projectName=`echo ${projectName} | <&0 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ >&1`
+
+			# add env variables
+			eval "${projectName}_DIR=${EXPORT_DIR}"
+			export "${projectName}_DIR"
+			
+			# Set these new dirs. TODO: move to more organised location
+			APPS_XML_DIR=${EXPORT_DIR}/lib/${projectName}
+			export APPS_XML_DIR
+			addToMakefileThisVariableAndValue Makefile.system APPS_XML_DIR ${APPS_XML_DIR}
+
+			EXPORT_INCLUDE_DIR=${STG_INCLUDE_PATH}/${projectNameLowerCase}
+			export EXPORT_INCLUDE_DIR
+			addToMakefileThisVariableAndValueNoIf Makefile.system EXPORT_INCLUDE_DIR ${EXPORT_INCLUDE_DIR}
+
+			EXAMPLES_DIR=${SHARE_DIR}/${projectNameLowerCase}
+			export EXAMPLES_DIR
+			addToMakefileThisVariableAndValueNoIf Makefile.system EXAMPLES_DIR ${EXAMPLES_DIR}
+
+			if test "${USE_VERSION}" = "1"; then
+				if test "${STGERMAIN_VERSION}x" = "x"; then
+					getVariableFromMakefile VERSION makefile
+					MODEL_PATH_PREFIX=${projectNameLowerCase}-v${VERSION}
+				else 
+					MODEL_PATH_PREFIX=StGermain-v${STGERMAIN_VERSION}
+				fi
+			else
+				if test "${STGERMAIN_DIR}x" = "x"; then
+					MODEL_PATH_PREFIX=${projectNameLowerCase}
+				else
+					MODEL_PATH_PREFIX=StGermain
+				fi
+			fi
+
+			STG_INCLUDE_PATH=${EXPORT_DIR}/lib/${MODEL_PATH_PREFIX}
+			export STG_INCLUDE_PATH
+			addToMakefileThisVariableAndValueNoIf Makefile.system STG_INCLUDE_PATH ${STG_INCLUDE_PATH}
+
+			EXPORT_INCLUDE_DIR=${STG_INCLUDE_PATH}/${projectNameLowerCase}
+			export EXPORT_INCLUDE_DIR
+			addToMakefileThisVariableAndValueNoIf Makefile.system EXPORT_INCLUDE_DIR ${EXPORT_INCLUDE_DIR}
+
+			if ! test -d ${EXPORT_DIR}; then
+				mkdir -p ${EXPORT_DIR}
+			fi
+			# export the Makefile.system
+			${CP_F} Makefile.system ${EXPORT_DIR}/${projectName}.system
+
+			
+		elif ! test "${dir}" = "."; then
+			echo "Project $dir does not contain a project-config.sh"
+			echo "Please create a project-config.sh or remove this directory from the 'subproj' variable in makefile"
+			exit 1
+		fi
+
+		# Mark this this sub project is being built as part of this project. This variable wont be exported. Can be used to relax validification checks of files.
+		markAsBuilding ${projectName}
+
+		cd ${currdir};
+		if test ${dir} != "."; then
+			addProjectExportTo Makefile.system
+		fi
+	fi
+done
+
+echo "Configure complete."
+echo "Record of configuration in 'Config.log'"


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/configure.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/executableTester.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/executableTester.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/executableTester.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,675 @@
+#!/bin/sh
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## California Institute of Technology (Caltech), USA
+## (C) 2003 All Rights Reserved
+##
+## Authors:
+## 	Stevan M. Quenette, Senior Software Engineer, VPAC.
+##	Stevan M. Quenette, Visitor in Geophysics, Caltech.
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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:
+## 	Functions used in testing
+##
+## Assumptions:
+##	MPI_DIR environment variable is set, else defaults to "/usr/local/mpich"
+##	MPI_BINDIR environment variable is set, else defaults to "${MPI_DIR}/bin"
+##	MPI_RUN environment variable is set, else defaults to "mpirun"
+##	MPI_NPROC environment variable is set, else defaults to "-np"
+##
+## Comments:
+##	None as yet.
+##
+## $Id: executableTester.sh 364 2007-04-24 04:51:11Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# system info
+if test -r './tmp.sh'; then
+	. './tmp.sh'
+fi
+
+if test "${LOG_DIR}x" = "x"; then
+	LOG_DIR="."
+	export LOG_DIR
+fi
+
+cleanFileOfNonDeterministics() {
+	file="$1"
+	fileCleaned="$2"
+	getValueFromMakefile_System GREP
+	getValueFromMakefile_System SED
+	cat ${file} | ${GREP} -v "TODO" | ${GREP} -v "(ptr)" | ${GREP} -v "(func ptr)" | ${GREP} -v "(context ptr)" | ${GREP} -v "Process" |  ${GREP} -v "sizeOfSelf" | ${GREP} -v "(version)" | ${GREP} -v "(path)" | ${GREP} -v "(secs)" | ${GREP} -v "(mins)" | ${GREP} -v "(hrs)" | ${GREP} -v "(time)" | ${SED} 's/ revision [0-9]*//g' > ${fileCleaned}
+
+	# Test if grep thought that the file was binary, if so, then don't worry about cleaning the file
+	if test "`cat ${fileCleaned}`" = "Binary file (standard input) matches" ; then
+		cp ${file} ${fileCleaned}
+	fi
+}
+
+runTest() {
+	testname=$1
+	shift;
+	command="$@"
+
+	# set soft time limit to 10 minutes
+	ulimit -t 600
+
+	# Set mpi dir. This is required on SGI implementations
+	MPI_DIR=`pwd`
+	# run the test
+	if ! $command > ${output} 2> ${error}; then
+		if test "${UPDATE_MODE}x" = "onx"; then
+			printf "`$testname`: ";
+		fi	
+		echo "*Failed to run*"
+		echo "  command was $command";
+		echo "  Output stored in $output";
+		echo "  Stderr stored in ${error}";
+		return 1;
+	fi
+	rm -f ${error}
+}
+
+handleTestResult() {
+	result=$1
+
+	if test ! "${UPDATE_MODE}x" = "onx"; then
+		printf "\tChecking output file $result: "
+	fi
+	if test ! -r $result; then
+		echo "*Error*:- file doesn't exist:- abandoning test.";
+		return 1;
+	fi
+	
+	expected=$2
+	singletest=`basename ${expected} .expected`
+	diffs="${LOG_DIR}/${singletest}.diffs"
+	savedResult="${LOG_DIR}/${singletest}.actual"
+	mv -f $result $savedResult
+
+	if test ! -r $expected; then
+		if test "${UPDATE_MODE}x" = "onx"; then
+			# update the expected value
+			echo "No expected result -> creating $expected"
+			mv $savedResult $expected
+			return 0
+		else
+			echo "*Error*:- expected file doesn't exist:- abandoning test.";
+			return 1;
+		fi	
+	fi
+
+	# Clean Expected file
+	expectedCleaned=${expected}.clean
+	cleanFileOfNonDeterministics $expected $expectedCleaned
+	
+	# Clean Result File 
+	savedResultCleaned=${savedResult}.clean
+	cleanFileOfNonDeterministics $savedResult $savedResultCleaned
+
+	# Check if the diff environment variable has been set
+	if test "${DIFF}x" = "x" ; then
+		# THIS SHOULD REALLY BE SET BY THE MAKEFILE.SYSTEM
+		DIFF=diff
+		export DIFF
+	fi
+	
+	# check the outputs
+	if ${DIFF} ${expectedCleaned} ${savedResultCleaned} > ${diffs}; then
+		rm -f ${diffs} ${savedResult} ${expectedCleaned} ${savedResultCleaned};
+		if test ! "${UPDATE_MODE}x" = "onx"; then
+			echo "OK."
+		fi
+		return 0;
+	else
+		if test "${UPDATE_MODE}x" = "onx"; then
+			# update the expected value
+			echo "*Failed* - Patching expected file: $expected"
+			mv $savedResult $expected
+			rm -f $diffs ${savedResult} ${expectedCleaned} ${savedResultCleaned}
+		else
+			echo "*Failed*";
+			printf "\t\tOutput stored in $savedResult\n";
+			printf "\t\tDiffs with expected stored in ${diffs}\n";
+			rm -f ${expectedCleaned} ${savedResultCleaned}
+	                if test ! "${REGRESSION_RUN}x" = "x"; then
+	                        if test -x ${BLD_DIR}/bin/regresstorCheckDiff; then
+        	                        ${BLD_DIR}/bin/regresstorCheckDiff \
+                	                        RunID=${RUNID} \
+                        	                TestName=${singletest} \
+                                	        URL=${REGRESSTOR_URL} \
+                                        	Passed=0 \
+	                                        OutputLocation=${diffs} \
+        	                                UnitName=Unknown
+                	        fi
+	                fi
+			return 1;
+		fi
+	fi
+}
+
+
+handleStdOutTest() {
+	stdOutFile=$1
+
+	if test ! "${UPDATE_MODE}x" = "onx"; then
+		printf "\tChecking standard output: "
+	fi
+	if test ! -r $stdOutFile; then
+		echo "*Error*:- file doesn't exist:- abandoning test.";
+		return 1;
+	fi
+	
+	expected=$2
+	singletest=`basename ${expected} .expected`
+	diffs="${LOG_DIR}/${singletest}.diffs"
+
+	if test ! -r $expected; then
+		if test "${UPDATE_MODE}x" = "onx"; then
+			# update the expected value
+			echo "No expected stdOutFile -> creating $expected"
+			mv $stdOutFile $expected
+			return 0
+		else
+			echo "*Error*:- expected file doesn't exist:- abandoning test.";
+			return 1;
+		fi	
+	fi
+
+	# Clean Expected file
+	expectedCleaned=${expected}.clean
+	cleanFileOfNonDeterministics $expected $expectedCleaned
+	# Clean Result File 
+	stdOutFileCleaned=${stdOutFile}.clean
+	cleanFileOfNonDeterministics $stdOutFile $stdOutFileCleaned
+
+	# Check if the diff environment variable has been set
+	if test "${DIFF}x" = "x" ; then
+		# THIS SHOULD REALLY BE SET BY THE MAKEFILE.SYSTEM
+		DIFF=diff
+		export DIFF
+	fi
+
+	# check the outputs
+	if ${DIFF} ${expectedCleaned} ${stdOutFileCleaned} > ${diffs}; then
+		rm -f ${diffs} ${stdOutFile} ${expectedCleaned} ${stdOutFileCleaned};
+		if test ! "${UPDATE_MODE}x" = "onx"; then
+			echo "OK."
+		fi
+		return 0;
+	else
+		if test "${UPDATE_MODE}x" = "onx"; then
+			# update the expected value
+			echo "*Failed* - Patching expected file: $expected"
+			mv $stdOutFile $expected
+			rm -f $diffs  ${expectedCleaned} ${stdOutFileCleaned}
+		else
+			echo "*Failed*";
+			printf "\t\tOutput stored in $stdOutFile\n";
+			printf "\t\tDiffs with expected stored in ${diffs}\n";
+			rm -f ${expectedCleaned} ${stdOutFileCleaned}
+	                if test ! "${REGRESSION_RUN}x" = "x"; then
+	                        if test -x ${BLD_DIR}/bin/regresstorCheckDiff; then
+        	                        ${BLD_DIR}/bin/regresstorCheckDiff \
+                	                        RunID=${RUNID} \
+                        	                TestName=${singletest} \
+                                	        URL=${REGRESSTOR_URL} \
+                                        	Passed=0 \
+	                                        OutputLocation=${diffs} \
+        	                                UnitName=Unknown
+                	        fi
+	                fi
+			return 1;
+		fi
+	fi
+}
+
+setUpdateModeFromArg() {
+	if test "${UPDATE_MODE}" = "on" || test "`echo ${1} | cut -c -5`" = "patch" ; then
+		UPDATE_MODE="on"
+	else
+		UPDATE_MODE="off"
+	fi
+	export UPDATE_MODE
+}
+
+
+# Note: this function assumes several Makefile.system variables are available
+runAndHandleSystemTest() {
+	testname=`basename $2 .sh`
+	executable=`echo $1 | cut -f 1 -d ' '`
+	#if there are more than one arguments (i.e. there is a space) everything after the executable goes into execInput
+	if test "`echo $1 | grep ' '`" = "`echo $1`" ; then
+		execInput=`echo $1 | cut -f 2- -d ' '`
+	fi 
+
+	# Set UPDATE_MODE flag if this is supposed to patch the tests
+	setUpdateModeFromArg ${3}
+
+	nproc=`echo ${testname} | cut -d . -f 2 | cut -d f -f 2`
+	procToWatch=`echo ${testname} | cut -d . -f 2 | cut -f 1 -d 'o'`
+
+	execInput="$procToWatch $execInput"
+
+	# Finds Base Functions Script 
+	BUILD_FUNCTIONS=build-functions.sh
+	until test -r ${BUILD_FUNCTIONS} ; do 
+		BUILD_FUNCTIONS=../${BUILD_FUNCTIONS}
+	done
+	. ${BUILD_FUNCTIONS}
+
+	if test "${OUTPUT_DIR}x" = "x"; then
+		 OUTPUT_DIR="./"
+		 export OUTPUT_DIR
+	fi
+	if test "${EXPECTED_DIR}x" = "x"; then
+		 EXPECTED_DIR="./"
+		 export EXPECTED_DIR
+	fi
+	if test "${LOG_DIR}x" = "x"; then
+		LOG_DIR="./"
+		export LOG_DIR
+	fi
+
+	makePathAbsolute OUTPUT_DIR
+	makePathAbsolute EXPECTED_DIR
+	makePathAbsolute LOG_DIR
+
+	# Gets Values from Makefile.system
+	getValueFromMakefile_System BIN_DIR
+	getValueFromMakefile_System TST_DIR
+	getValueFromMakefile_System BLD_DIR
+	getValueFromMakefile_System MPI_DIR
+	getValueFromMakefile_System MPI_BINDIR
+	getValueFromMakefile_System MPI_RUN_COMMAND
+	getValueFromMakefile_System MPI_RUN
+	getValueFromMakefile_System MPI_MACHINES
+	getValueFromMakefile_System MPI_NPROC
+
+	if test "${nproc}x" = "x"; then
+		nproc=1
+	fi
+
+	error=${LOG_DIR}/${testname}.error
+	output=${LOG_DIR}/${testname}.out
+	export error
+	export output
+
+	if test ! "${UPDATE_MODE}x" = "onx"; then
+		printf "$testname: running using ${nproc} procs...\n";
+	fi
+	
+	# put call to softlink builder here
+	
+	# need to do this softlink so that MPI can find the executable...it doesn't
+
+	if ! createSoftlinkToExecutable ${executable}; then
+		echo 'create Softlink Failed'
+		if test ! "${REGRESSION_RUN}x" = "x"; then
+			if test -x ${BLD_DIR}/bin/regresstorCheckExecution; then
+				echo "Error: requested test executable \"${executable}\" not found in neither BIN_DIR ${BIN_DIR} nor TST_DIR ${TST_DIR}" > ${error}
+				${BLD_DIR}/bin/regresstorCheckExecution \
+					RunID=${RUNID} \
+					TestName=${testname} \
+					URL=${REGRESSTOR_URL} \
+					Passed=0 \
+					OutputLocation=${error} \
+					UnitName=Unknown
+				rm ${error}
+			fi
+		fi;
+		exit 1
+	fi
+		# To run on SGI machines:
+	getValueFromMakefile_System MPI_IMPLEMENTATION
+	if test ! "`echo $MPI_IMPLEMENTATION | grep 'sgi'`x" = "x"; then
+			MPI_SGIIMPLEMENT=" -d `pwd` "
+	else
+			MPI_SGIIMPLEMENT=""		
+	fi	
+	
+		MPI_EXEC="${MPI_RUN} ${MPI_SGIIMPLEMENT} ${MPI_MACHINES} ${MPI_NPROC} ${nproc}"
+
+	if runTest $testname "${MPI_EXEC} $softlink" $execInput; then
+		retValue=0
+		passed="true"
+		expectedFileFound="false"
+		
+		# Try the normal .expected (stdout) to test - only compares if file is found
+		if test -r ${EXPECTED_DIR}/${testname}.expected ; then
+			if ! handleStdOutTest ${LOG_DIR}/${testname}.out ${EXPECTED_DIR}/${testname}.expected ; then
+				passed="false";
+				if test ! "${UPDATE_MODE}x" = "onx"; then
+					printf "\tResult: *Failed*\n";
+				fi	
+				rm -f ${softlink}
+				exit 1
+			fi
+			expectedFileFound="true"
+		fi
+		
+		# Try all other .expected files
+		for fullCheckFile in `ls -1 ${EXPECTED_DIR}/${testname}.*.expected 2> /dev/null` ; do
+			intermediateCheckFile=`basename $fullCheckFile .expected`
+			checkFile=`echo $intermediateCheckFile | sed "s/${testname}.//"`
+			
+			if ! handleTestResult ${OUTPUT_DIR}/${checkFile} $fullCheckFile ; then
+				passed="false";
+				if test ! "${UPDATE_MODE}x" = "onx"; then
+					printf "\tResult: *Failed*\n";
+				fi	
+				rm -f ${softlink}
+				exit 1
+			fi
+			expectedFileFound="true"
+		done
+
+		# Check if no expected files found
+		if test $expectedFileFound = "false"; then
+			passed="false"
+			#if update mode, then ask user for each of the output files
+			if test "${UPDATE_MODE}" = "on"; then
+				echo "No expected files found for ${testname}: patching"
+				echo "Do you want stdout to be made an expected file? [y/n]"
+				read -e MAKE_EXPECTED
+				if test "$MAKE_EXPECTED" = "y" ; then
+					expectedFile=${EXPECTED_DIR}/${testname}.expected
+					echo "Creating ${expectedFile}"
+					cp ${LOG_DIR}/${testname}.out ${expectedFile}
+				fi				
+			
+				for outputFile in `ls -1 ${OUTPUT_DIR}/ 2> /dev/null` ; do
+					echo "Do you want \"$outputFile\" to be made an expected file? [y/n]"
+					read -e MAKE_EXPECTED
+					if test "$MAKE_EXPECTED" = "y" ; then
+						expectedFile=${EXPECTED_DIR}/${testname}.${outputFile}.expected
+						echo "Creating ${expectedFile}"
+						mv ${OUTPUT_DIR}/$outputFile ${expectedFile}
+					fi
+				done
+			else 
+				printf "\tNo expected files found: *Failed*\n";
+			fi
+			rm -f ${softlink}
+			exit 1
+		fi
+		
+		if $passed = "true"; then
+			if test ! "${UPDATE_MODE}x" = "onx"; then
+				printf "\tResult: *Passed*\n";
+				if test ! "${REGRESSION_RUN}x" = "x"; then
+					if test -x ${BLD_DIR}/bin/regresstorCheckDiff; then
+						${BLD_DIR}/bin/regresstorCheckDiff \
+							RunID=${RUNID} \
+							TestName=${testname} \
+							URL=${REGRESSTOR_URL} \
+							Passed=1 \
+							OutputLocation=none\
+							UnitName=Unknown
+					fi
+				fi
+			fi
+			rm -f ${LOG_DIR}/$testname.out;
+		fi
+	else # (test failed to run)
+		retValue=1
+		if test ! "${REGRESSION_RUN}x" = "x"; then
+			if test -x ${BLD_DIR}/bin/regresstorCheckExecution; then
+				${BLD_DIR}/bin/regresstorCheckExecution \
+					RunID=${RUNID} \
+					TestName=${testname} \
+					URL=${REGRESSTOR_URL} \
+					Passed=0 \
+					OutputLocation=${error}\
+					UnitName=Unknown
+			fi
+		fi
+	fi	
+
+	rm -f ${softlink}
+
+	return ${retValue}
+}
+
+runAndHandleSystemTestStdLocations() {
+	EXPECTED_DIR="./expected"
+	LOG_DIR="./log"
+	OUTPUT_DIR="./output"
+
+	export EXPECTED_DIR
+	export LOG_DIR
+	export OUTPUT_DIR
+
+	runAndHandleSystemTest "$1" "$2" "$3" 
+}
+
+# Creating a shell script that creates a softlink to an executable in the 
+# bin or test directory
+createSoftlinkToExecutable() {
+	# Define executable name
+	executable=${1}
+	# VMAKE_DIR is optional, and has to point directly to /VMake/ directory
+	VMAKE_DIR=${2}
+	# Finds Base Functions Script
+	if test "${VMAKE_DIR}x" = "x"; then
+		BUILD_FUNCTIONS=build-functions.sh
+		until test -r ${BUILD_FUNCTIONS} ; do 
+			BUILD_FUNCTIONS=../${BUILD_FUNCTIONS}
+		done
+		. ${BUILD_FUNCTIONS}
+	elif test -d ${VMAKE_DIR}; then
+	    . ${VMAKE_DIR}/build-functions.sh
+	else
+		echo "Error in createSoftlinkToExecutable():"
+		echo "${VMAKE_DIR} not a directory."
+		echo "Either remove or change to reference to VMake directory"
+		return 1		
+	fi
+	
+	# Gets Values from Makefile.system
+	if test "${VMAKE_DIR}x" = "x"; then	
+		getValueFromMakefile_System BIN_DIR 
+		getValueFromMakefile_System TST_DIR 
+	else
+		# This line assumes that there will be a Makefile.system
+		# file in the directory below the VMake directory.
+		getVariableFromMakefile BIN_DIR ${VMAKE_DIR}/../Makefile.system
+		getVariableFromMakefile TST_DIR ${VMAKE_DIR}/../Makefile.system
+	fi		
+	# need to do this softlink so that MPI can find the executable
+	export softlink="./${executable}-softlink"
+	if test -x ./${executable} && ! test -h ./${executable}; then
+		# for consistency reasons
+		ln -sf ./${executable} ${softlink}
+	elif test -x ${BIN_DIR}/${executable}; then
+		ln -sf ${BIN_DIR}/${executable} ${softlink}
+	elif test -x ${TST_DIR}/${executable}; then
+		ln -sf ${TST_DIR}/${executable} ${softlink}
+	else
+		echo "  Error: requested test executable \"${executable}\" not found in neither BIN_DIR ${BIN_DIR} nor TST_DIR ${TST_DIR}"
+	## TODO maybe add in exit conditions here
+		return 1	
+	fi
+	return 0
+}
+
+removeSoftlinkToExecutable() {
+	executable=${1}
+
+	export softlink="./${executable}-softlink"
+	if test -x ${softlink}; then
+		rm -f ${softlink}
+	fi
+
+}
+
+softlinkCreateOrRemove() {
+	executable=${1}
+	action=${2}
+	#VMAKE_DIR is optional, and has to point into a /VMake/ directory.
+	VMAKE_DIR=${3}
+	# Check whether values have been input
+	if test "${executable}x" != "x" && test "${action}x" != "x"; then
+		executable=${1}
+		action=${2}
+		
+		# Either create or remove link based on input arguments
+		if [ ${action} = create ] ; then
+			if ! createSoftlinkToExecutable ${executable} ${VMAKE_DIR}; then
+				return 1
+				
+			fi
+		else
+			if [ ${action} = remove ] ; then
+				removeSoftlinkToExecutable ${executable}
+			else
+				echo 'Cannot execute action: '${action}
+				echo 'Please enter in format:'
+				echo '$ softlinkCreateOrRemove ${executable} ${action [create/remove]}'
+				return 1
+			fi		
+		fi
+	else
+		echo 'Missing inputs to softlinkCreateOrRemove'
+		echo 'Please enter in format:'
+		echo '$ softlinkCreateOrRemove ${executable} ${action [create/remove]}'	
+		return 1
+	fi
+	return 0
+}
+
+RunMPICommand() {
+# Executes command with form: {testfilename} {executable} {commandsToExecutable}
+
+	BUILD_FUNCTIONS=build-functions.sh
+	until test -r ${BUILD_FUNCTIONS} ; do 
+		BUILD_FUNCTIONS=../${BUILD_FUNCTIONS}
+	done
+	. ${BUILD_FUNCTIONS}
+ 
+	#Extract out name of file and remove from string/
+	testname=${1}
+	#echo "testname = $testname"
+	shift;
+	executableName=${1}
+	#echo "executableName = $executableName"
+	shift;
+	command="$@"
+
+	# Create softlink
+	softlinkCreateOrRemove ${executableName} 'create'
+
+	#Extract out the processor info from testname
+	nproc=`echo ${testname} | cut -d . -f 2 | cut -d f -f 2`
+	procToWatch=`echo ${testname} | cut -d . -f 2 | cut -f 1 -d 'o'`
+	
+	#Get variables to run mpi
+	getValueFromMakefile_System MPI_RUN
+	getValueFromMakefile_System MPI_MACHINES
+	getValueFromMakefile_System MPI_NPROC
+	# To run on SGI machines:
+	getValueFromMakefile_System MPI_IMPLEMENTATION
+	if test ! "`echo $MPI_IMPLEMENTATION | grep 'sgi'`x" = "x"; then
+			MPI_SGIIMPLEMENT=" -d `pwd` "
+	else
+			MPI_SGIIMPLEMENT=""		
+	fi	
+
+	MPI_EXEC="${MPI_RUN} ${MPI_SGIIMPLEMENT} ${MPI_MACHINES} ${MPI_NPROC} ${nproc}"
+	echo ${MPI_EXEC}
+	# run command
+	${MPI_EXEC} ./${executableName}-softlink ${procToWatch} ${command}
+
+	# /Remove softlink
+	softlinkCreateOrRemove ${executableName} 'remove'
+
+}
+
+RunScienceTestCheck() {
+
+	getValueFromMakefile_System REGRESSTOR_URL
+	getValueFromMakefile_System REGRESSION_RUN
+	getValueFromMakefile_System BLD_DIR
+	getValueFromMakefile_System RUNID
+
+	outputFileName=${1}
+	expectedFileName=${2}
+	testname=${3}
+	
+	if ! test -r ${expectedFileName} ; then
+		passed="false"
+		printf "\tResult: *Failed*\n";
+		printf "\tCan't find expected file ${expectedFileName}\n"
+		if test ! "${REGRESSION_RUN}x" = "x"; then
+			 if test -x ${BLD_DIR}/bin/regresstorCheckDiff; then
+				 ${BLD_DIR}/bin/regresstorCheckDiff \
+					 RunID=${RUNID} \
+					 TestName=${singletest} \
+					 URL=${REGRESSTOR_URL} \
+					 Passed=0 \
+					 OutputLocation=${diffs} \
+					 UnitName=Unknown
+			 fi
+	   fi		
+	else
+	
+		if ! handleTestResult "${outputFileName}" "${expectedFileName}" ; then
+			passed="false"
+		else 
+			passed="true"	
+		fi
+	fi		
+	if $passed = "true"; then
+		printf "\tResult: *Passed*\n";
+		if test ! "${REGRESSION_RUN}x" = "x"; then
+			if test -x ${BLD_DIR}/bin/regresstorCheckDiff; then
+				${BLD_DIR}/bin/regresstorCheckDiff \
+					RunID=${RUNID} \
+					TestName=${testname} \
+					URL=${REGRESSTOR_URL} \
+					Passed=1 \
+					OutputLocation=none\
+					UnitName=Unknown
+			fi
+		fi
+		echo ${LOG_DIR}
+		rm -f ${LOG_DIR}/$testname.out;
+		rm -f ${LOG_DIR}/$testname.error;
+	fi
+}
+
+RunScienceTestCheckStdLocations() {
+
+	testName=${1}
+	resultsFilename=${2}
+
+	getValueFromMakefile_System MACHINE
+	
+	EXPECTED_DIR="./expected/${testName}"
+	LOG_DIR="./log"
+	OUTPUT_DIR="./output/${testName}/$MACHINE"
+
+	export EXPECTED_DIR
+	export LOG_DIR
+	export OUTPUT_DIR
+
+	RunScienceTestCheck "${OUTPUT_DIR}/${resultsFilename}" "${EXPECTED_DIR}/${resultsFilename}.expected" "${testName}"
+}


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/executableTester.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/VMake/meta-template.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/meta-template.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/meta-template.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* !!! This is an automatically generated file
+ * !!! Do not make modifications here or they will be overwritten
+ */
+#define Stg_Component_Stringify( str ) #str
+
+/* Note: Two macros are used to resolve the the extra macro level */
+#define Stg_Component_Metadata_Create( name ) Stg_Component_Metadata_Create_Macro( name )
+#define Stg_Component_Metadata_Create_Macro( name ) \
+	const char* name ##_Meta = XML_METADATA; \
+	const char* name ##_Name = #name; \
+	const char* name ##_Version = VERSION; \
+	const char* name ##_Type_GetMetadata() { /* hack...won't be needed when hierarchy rollout is done */\
+		return name ##_Meta; \
+	} \
+	const char* name ##_GetMetadata() { \
+		return name ##_Meta; \
+	} \
+	const char* name ##_GetName() { \
+		return name ##_Name; \
+	} \
+	const char* name ##_GetVersion() { \
+		return name ##_Version; \
+	}
+
+
+#if defined(COMPONENT_NAME) && defined(VERSION) && defined(XML_METADATA)
+
+	Stg_Component_Metadata_Create( COMPONENT_NAME )
+
+#endif
+

Added: long/3D/SNAC/trunk/StGermain/VMake/profile.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/profile.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/profile.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+##
+## This program is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by the
+## Free Software Foundation; either version 2, or (at your option) any
+## later version.
+## 
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+## 
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+##
+## Role:
+##	Set up a sh/bash environment for using StGermain built things.
+##
+## $Id: profile.sh 15 2005-03-16 03:35:39Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+readDefinedPath() {
+	if test "$1x" != "x"; then
+		echo $1
+	elif test -r ./Makefile.system; then
+		grep "$2=" ./Makefile.system | cut -d'=' -f2
+	else
+		echo "`pwd`/$3"
+	fi	
+	return 0
+}
+
+export PATH=`readDefinedPath "$BIN_DIR" BIN_DIR build/bin`:$PATH
+export PYTHONPATH=`readDefinedPath "$PYC_DIR" PYC_DIR build/Python`:$PYTHONPATH
+export LD_LIBRARY_PATH=`readDefinedPath "$LIB_DIR" LIB_DIR build/lib`:$LD_LIBRARY_PATH
+export DYLD_LIBRARY_PATH=`readDefinedPath "$LIB_DIR" LIB_DIR build/lib`:$DYLD_LIBRARY_PATH

Added: long/3D/SNAC/trunk/StGermain/VMake/softlinker.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/VMake/softlinker.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/VMake/softlinker.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,98 @@
+# shell script function assumes input of:
+# ${1} - executable 
+# ${2} - action
+#
+# And has optional values:
+# ${3} - ClubStGermainDir [default current dir]
+# 		 NB. Does not have to be base directory, as long as directory
+#    	 is inside a StGermain based project.
+# ${4} - softlink location [default current dir]
+
+
+# record current directory
+lngermain () {
+	CURR_DIR=`pwd`
+
+	# record input
+	executable=${1}
+	action=${2}
+	clubStGermainDir=${3}
+	location=${4}
+		
+	# Check for any inputs.
+	# Function needs at least an executable and an action 
+	
+	if test "${executable}x" != "x"; then
+		if test "${action}x" != "x"; then
+			# check for dir inputs
+			# if none, assume current directory
+			if test "${clubStGermainDir}x" = "x"; then
+				 echo "Assuming script run from within StGermain based project."
+				 clubStGermainDir=$CURR_DIR
+				 location=$CURR_DIR
+			fi 
+			
+			if test "${clubStGermainDir}x" = ".x"; then
+				 clubStGermainDir=$CURR_DIR
+			fi	 
+			
+			if test "${location}x" = "x"; then
+				 echo "Assuming softlink's directory"
+				 location=$CURR_DIR
+			fi
+			
+			if test "${location}x" = ".x"; then
+				 location=$CURR_DIR
+			fi	 
+			#Run programs if $3 and $4 are directories
+			if test -d ${clubStGermainDir}; then
+				if test -d ${location}; then
+					cd ${clubStGermainDir}
+					
+					# find executableTester in the local VMAKE dir
+					TEST_SCRIPT=./VMake/executableTester.sh
+					DOWN_LVL=.
+					until test -r ${TEST_SCRIPT} ; do
+							TEST_SCRIPT=../${TEST_SCRIPT}
+							DOWN_LVL=../$DOWN_LVL
+							# If there is no VMake directory detected by root dir,
+							# stop and exit.						
+							if test -d ${DOWN_LVL}/${CURR_DIR}; then
+								echo "No VMake directory detected. Root directory reached. Stopping script."
+								exit
+							fi	
+					done
+					# Change to softlink location 
+					cd ${location}
+					# Source shell-script in directory VMAKE 
+					source ${clubStGermainDir}/${TEST_SCRIPT}
+					
+					# Create or remove softlink
+					softlinkCreateOrRemove ${executable}  ${action} `dirname ${clubStGermainDir}/${TEST_SCRIPT}`
+					
+					# Return to original directory and finish
+					cd $CURR_DIR
+				else
+					# Error for bad softink location
+					echo "Error in softlinker.sh: ${location} is not a directory"
+					echo "Input format should be:"
+					echo 'lngermain ${executable} ${action=create/remove} [${ClubStGermain dir} ${softlink location dir} ]'				
+				fi 
+			else		 
+				# error for bad StGermain based code location
+				echo "Error in softlinker.sh: ${clubStGermainDir} is not a directory"
+				echo "Input format should be:"
+				echo 'lngermain ${executable} ${action=create/remove} [${ClubStGermain dir} ${softlink location dir} ]'
+			fi			
+		else 
+			# Error for incorrect/missing action to perform
+			echo "Error: missing action input. Input format should be:"
+			echo 'lngermain ${executable} ${action=[create/remove]} [${ClubStGermain dir} ${softlink location dir}]'
+	
+		fi
+	else 
+		# Error for bad/missing executable name
+		echo "Error: missing executable input. Input format should be:"
+		echo 'lngermain ${executable} ${action=create/remove} [${ClubStGermain dir} ${softlink location dir} ]'
+	fi
+}


Property changes on: long/3D/SNAC/trunk/StGermain/VMake/softlinker.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Viewers/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = Viewers
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifeq (true,$(shell if test -r $(GL_INCDIR)/gl.h -o -r $(GL_INCDIR)/GL/gl.h; then echo true; fi ))
+	def_sub = MeshLayoutViewer MeshViewer
+else
+	WARN := $(shell echo "MeshLayoutViewer & MeshViewer not being built as OpenGl include files not found in {GL_INCDIR} \"${GL_INCDIR}\" or \"${GL_INCDIR}\\GL\"" 1>&2 )
+endif

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/MLGen.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/MLGen.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/MLGen.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,443 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MLGen.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Stg_Class/Stg_Class.h"
+#include "Base/IO/IO.h"
+#include "Base/Set/Set.h"
+#include "Base/Geometry/Geometry.h"
+#include "Base/Mesh/Mesh.h"
+#include "Base/Utils/Utils.h"
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+#include "string.h"
+
+
+struct _Node {
+	struct { __Advectable };
+	double temp;
+};
+
+struct _Element {
+	struct { __Advectable };
+	double temp;
+};
+
+
+IJK		ijk = {2, 2, 2};
+ShadowIndex	shadowDepth = 0;
+Bool		useIrregular = False;
+Bool		allowPartitionOnNode = True;
+Bool		allowPartitionOnElement = True;
+Bool		allowUnbalancing = False;
+
+
+void dumpGLMesh(int numProcessors, int rank, MeshLayout *ml, FILE *fp)
+{
+	Node_GlobalIndex	*nltg, *nstg, *ndtg;
+	Node_GlobalIndex	*ngtl, *ngts, *ngtd;
+	Element_GlobalIndex	*eltg, *estg, *edtg;
+	Element_GlobalIndex	*egtl, *egts, *egtd;
+	Node_GlobalIndex	ngc;
+	Node_LocalIndex		*nlc;
+	Node_ShadowIndex	*nsc;
+	Node_DomainIndex	*ndc;
+	Element_GlobalIndex	egc;
+	Element_LocalIndex	*elc;
+	Element_ShadowIndex	*esc;
+	Element_DomainIndex	*edc;
+	Index			i;
+	
+	ngc = ml->decomp->nodeGlobalCount;
+	nlc = Memory_Alloc_Array( Node_LocalIndex, numProcessors, "nlc" );
+	nsc = Memory_Alloc_Array( Node_LocalIndex, numProcessors, "nsc" );
+	ndc = Memory_Alloc_Array( Node_LocalIndex, numProcessors, "ndc" );
+	ngtl = Memory_Alloc_Array( Node_GlobalIndex, ngc*numProcessors, "ngtl" );
+	ngts = Memory_Alloc_Array( Node_GlobalIndex, ngc*numProcessors, "ngts" );
+	ngtd = Memory_Alloc_Array( Node_GlobalIndex, ngc*numProcessors, "ngtd" );
+	nltg = Memory_Alloc_Array( Node_GlobalIndex, ngc*numProcessors, "nltg" );
+	nstg = Memory_Alloc_Array( Node_GlobalIndex, ngc*numProcessors, "nstg" );
+	ndtg = Memory_Alloc_Array( Node_GlobalIndex, ngc*numProcessors, "ndtg" );
+	egc = ml->decomp->elementGlobalCount;
+	elc = Memory_Alloc_Array( Element_LocalIndex, numProcessors, "elc" );
+	esc = Memory_Alloc_Array( Element_LocalIndex, numProcessors, "esc" );
+	edc = Memory_Alloc_Array( Element_LocalIndex, numProcessors, "edc" );
+	egtl = Memory_Alloc_Array( Element_GlobalIndex, egc*numProcessors, "egtl" );
+	egts = Memory_Alloc_Array( Element_GlobalIndex, egc*numProcessors, "egts" );
+	egtd = Memory_Alloc_Array( Element_GlobalIndex, egc*numProcessors, "egtd" );
+	eltg = Memory_Alloc_Array( Element_GlobalIndex, egc*numProcessors, "eltg" );
+	estg = Memory_Alloc_Array( Element_GlobalIndex, egc*numProcessors, "estg" );
+	edtg = Memory_Alloc_Array( Element_GlobalIndex, egc*numProcessors, "edtg" );
+	
+	nlc[rank] = ml->decomp->nodeLocalCount;
+	nsc[rank] = ml->decomp->nodeShadowCount;
+	ndc[rank] = ml->decomp->nodeDomainCount;
+	for (i = 0; i < ngc; i++)
+	{
+		ngtl[rank*ngc + i] = ml->decomp->nodeMapGlobalToLocal(ml->decomp, i);
+		ngts[rank*ngc + i] = ml->decomp->nodeMapGlobalToShadow(ml->decomp, i);
+		ngtd[rank*ngc + i] = ml->decomp->nodeMapGlobalToDomain(ml->decomp, i);
+		nltg[rank*ngc + i] = ml->decomp->nodeMapLocalToGlobal(ml->decomp, i);
+		nstg[rank*ngc + i] = ml->decomp->nodeMapShadowToGlobal(ml->decomp, i);
+		ndtg[rank*ngc + i] = ml->decomp->nodeMapDomainToGlobal(ml->decomp, i);
+	}
+	elc[rank] = ml->decomp->elementLocalCount;
+	esc[rank] = ml->decomp->elementShadowCount;
+	edc[rank] = ml->decomp->elementDomainCount;
+	for (i = 0; i < egc; i++)
+	{
+		egtl[rank*egc + i] = ml->decomp->elementMapGlobalToLocal(ml->decomp, i);
+		egts[rank*egc + i] = ml->decomp->elementMapGlobalToShadow(ml->decomp, i);
+		egtd[rank*egc + i] = ml->decomp->elementMapGlobalToDomain(ml->decomp, i);
+		eltg[rank*egc + i] = ml->decomp->elementMapLocalToGlobal(ml->decomp, i);
+		estg[rank*egc + i] = ml->decomp->elementMapShadowToGlobal(ml->decomp, i);
+		edtg[rank*egc + i] = ml->decomp->elementMapDomainToGlobal(ml->decomp, i);
+	}
+	
+	MPI_Gather(&nlc[rank], 1, MPI_UNSIGNED, nlc, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&nsc[rank], 1, MPI_UNSIGNED, nsc, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&ndc[rank], 1, MPI_UNSIGNED, ndc, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&ngtl[rank*ngc], ngc, MPI_UNSIGNED, ngtl, ngc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&ngts[rank*ngc], ngc, MPI_UNSIGNED, ngts, ngc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&ngtd[rank*ngc], ngc, MPI_UNSIGNED, ngtd, ngc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&nltg[rank*ngc], ngc, MPI_UNSIGNED, nltg, ngc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&nstg[rank*ngc], ngc, MPI_UNSIGNED, nstg, ngc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&ndtg[rank*ngc], ngc, MPI_UNSIGNED, ndtg, ngc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&elc[rank], 1, MPI_UNSIGNED, elc, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&esc[rank], 1, MPI_UNSIGNED, esc, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&edc[rank], 1, MPI_UNSIGNED, edc, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&egtl[rank*egc], egc, MPI_UNSIGNED, egtl, egc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&egts[rank*egc], egc, MPI_UNSIGNED, egts, egc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&egtd[rank*egc], egc, MPI_UNSIGNED, egtd, egc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&eltg[rank*egc], egc, MPI_UNSIGNED, eltg, egc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&estg[rank*egc], egc, MPI_UNSIGNED, estg, egc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	MPI_Gather(&edtg[rank*egc], egc, MPI_UNSIGNED, edtg, egc, MPI_UNSIGNED, 0, MPI_COMM_WORLD);
+	
+	/* Dump GLMeshLayout file */
+	if (rank == 0)
+	{
+		Node_GlobalIndex ngi;
+		Element_GlobalIndex egi;
+		Partition_Index pi;
+	
+		fprintf(fp, "%u\n", ngc);
+		for (ngi = 0; ngi < ngc; ngi++)
+		{
+			Coord point;
+
+			ml->geometry->nodeAt(ml->geometry, ngi, point);
+			fprintf(fp, "%lf %lf %lf\n", point[0], point[1], point[2]);
+		}
+		
+		for (pi = 0; pi < numProcessors; pi++)
+		{
+			fprintf(fp, "%u %u %u", nlc[pi], nsc[pi], ndc[pi]);
+			for (ngi = 0; ngi < ngc; ngi++)
+				fprintf(fp, " %u %u %u", ngtl[pi*ngc + ngi], ngts[pi*ngc + ngi], ngtd[pi*ngc + ngi]);
+			for (ngi = 0; ngi < nlc[pi]; ngi++)
+				fprintf(fp, " %u", nltg[pi*ngc + ngi]);
+			for (ngi = 0; ngi < nsc[pi]; ngi++)
+				fprintf(fp, " %u", nstg[pi*ngc + ngi]);
+			for (ngi = 0; ngi < ndc[pi]; ngi++)
+				fprintf(fp, " %u", ndtg[pi*ngc + ngi]);
+			fprintf(fp, "\n");
+		}
+		
+		for (ngi = 0; ngi < ngc; ngi++)
+		{
+			Node_NeighbourIndex nbrCnt = ml->topology->nodeNeighbourCount(ml->topology, ngi);
+			Node_Neighbours nbr = Memory_Alloc_Array( Node_DomainIndex, nbrCnt, "nbr" );
+			
+			ml->topology->nodeBuildNeighbours(ml->topology, ngi, nbr);
+			fprintf(fp, "%u", nbrCnt);
+			for (i = 0; i < nbrCnt; i++)
+				fprintf(fp, " %u", nbr[i]);
+			fprintf(fp, "\n");
+			
+			if (nbr) Memory_Free(nbr);
+		}
+		
+		fprintf(fp, "%u\n", egc);
+		
+		for (pi = 0; pi < numProcessors; pi++)
+		{
+			fprintf(fp, "%u %u %u", elc[pi], esc[pi], edc[pi]);
+			for (egi = 0; egi < egc; egi++)
+				fprintf(fp, " %u %u %u", egtl[pi*egc + egi], egts[pi*egc + egi], egtd[pi*egc + egi]);
+			for (egi = 0; egi < elc[pi]; egi++)
+				fprintf(fp, " %u", eltg[pi*egc + egi]);
+			for (egi = 0; egi < esc[pi]; egi++)
+				fprintf(fp, " %u", estg[pi*egc + egi]);
+			for (egi = 0; egi < edc[pi]; egi++)
+				fprintf(fp, " %u", edtg[pi*egc + egi]);
+			fprintf(fp, "\n");
+		}
+		
+		for (egi = 0; egi < egc; egi++)
+		{
+			Element_NodeIndex nodeCnt = ml->topology->elementNodeCount(ml->topology, egi);
+			Element_Nodes nodes = Memory_Alloc_Array( Node_DomainIndex, nodeCnt, "nodes" );
+			
+			ml->topology->elementBuildNodes(ml->topology, egi, nodes);
+			fprintf(fp, "%u", nodeCnt);
+			for (i = 0; i < nodeCnt; i++)
+				fprintf(fp, " %u", nodes[i]);
+			fprintf(fp, "\n");
+			
+			if (nodes) Memory_Free(nodes);
+		}
+	}
+
+	if (nlc) Memory_Free(nlc);
+	if (nsc) Memory_Free(nsc);
+	if (ndc) Memory_Free(ndc);
+	if (ngtl) Memory_Free(ngtl);
+	if (ngts) Memory_Free(ngts);
+	if (ngts) Memory_Free(ngtd);
+	if (nltg) Memory_Free(nltg);
+	if (nstg) Memory_Free(nstg);
+	if (ndtg) Memory_Free(ndtg);
+	if (elc) Memory_Free(elc);
+	if (esc) Memory_Free(esc);
+	if (edc) Memory_Free(edc);
+	if (egtl) Memory_Free(egtl);
+	if (egts) Memory_Free(egts);
+	if (egts) Memory_Free(egtd);
+	if (eltg) Memory_Free(eltg);
+	if (estg) Memory_Free(estg);
+	if (edtg) Memory_Free(edtg);
+}
+
+
+void printHelp(void)
+{
+	printf("Incorrect arguments given.\n");
+	printf("Current format:\n");
+	printf("\t-d <isize>,<jsize>,<ksize> : Generate a regular mesh "
+		"with given dimensions.\n" );
+	printf("\t-s <shadow depth> : specify shadow depth.\n " );
+	printf("\t-Pn+ : set allowPartitionOnNode = True.\n " );
+	printf("\t-Pn- : set allowPartitionOnNode = False.\n " );
+	printf("\t-Pe+ : set allowPartitionOnElement = True.\n " );
+	printf("\t-Pe- : set allowPartitionOnElement = False.\n " );
+	printf("\t-U+ : set allowUnbalancing = True.\n " );
+	printf("\t-U- : set allowUnbalancing = False.\n " );
+}
+
+
+Bool parseCmdLine(int argc, char **argv)
+{
+	unsigned i;
+
+	for (i = 1; i < argc; i++)
+	{
+		switch (argv[i][0])
+		{
+			case '-':
+				if (argv[i][1] == 'd' && (i + 1) < argc)
+				{
+					if (sscanf(argv[++i], "%u,%u,%u", &ijk[0], &ijk[1], &ijk[2]) != EOF &&
+					    ijk[0]*ijk[1]*ijk[2] > 0)
+						break;
+						
+					printf("Error: invalid mesh dimensions\n");
+					return False;
+				}
+				else if (argv[i][1] == 's' && (i + 1) < argc)
+				{
+					if (sscanf(argv[++i], "%u", &shadowDepth) != EOF)
+						break;
+						
+					printf("Error: invalid shadow depth\n");
+					return False;
+				}
+				else if (argv[i][1] == 'i')
+				{
+					useIrregular = True;
+					break;
+				}
+				else if (!strcmp(&argv[i][1], "Pn+"))
+				{
+					allowPartitionOnNode = True;
+					break;
+				}
+				else if (!strcmp(&argv[i][1], "Pn-"))
+				{
+					allowPartitionOnNode = False;
+					break;
+				}
+				else if (!strcmp(&argv[i][1], "Pe+"))
+				{
+					allowPartitionOnElement = True;
+					break;
+				}
+				else if (!strcmp(&argv[i][1], "Pe-"))
+				{
+					allowPartitionOnElement = False;
+					break;
+				}
+				else if (!strcmp(&argv[i][1], "U+"))
+				{
+					allowUnbalancing = True;
+					break;
+				}
+				else if (!strcmp(&argv[i][1], "U-"))
+				{
+					allowUnbalancing = False;
+					break;
+				}
+			
+			default:
+				printHelp();
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+
+int main(int argc, char **argv)
+{
+	XML_IO_Handler 		*io_handler = XML_IO_Handler_New();
+	MPI_Comm		CommWorld;
+	int			rank;
+	int			numProcessors;
+	Dictionary		*dictionary;
+	MeshTopology		*mt, *imt;
+	MeshGeometry		*mg, *img;
+	MeshDecomp		*md, *imd;
+	MeshLayout		*rml, *iml;
+	FILE			*fp;
+	
+	/* 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);
+	
+	if (!parseCmdLine(argc, argv))
+	{
+		MPI_Finalize();
+		return 0;
+	}
+	
+	if (!allowPartitionOnNode && !allowPartitionOnElement)
+	{
+		printf("Error: invalid combination of partition switches\n");
+		MPI_Finalize();
+		return 0;
+	}
+	
+	/* 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( ijk[0] ) );
+	Dictionary_Add( dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt( ijk[1] ) );
+	Dictionary_Add( dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt( ijk[2] ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( True ) );
+	Dictionary_Add( dictionary, "allowPartitionOnElement", Dictionary_Entry_Value_FromBool( allowPartitionOnElement ) );
+	Dictionary_Add( dictionary, "allowPartitionOnNode", Dictionary_Entry_Value_FromBool( allowPartitionOnNode ) );
+	Dictionary_Add( dictionary, "allowUnbalancing", Dictionary_Entry_Value_FromBool( allowUnbalancing ) );
+	Dictionary_Add( dictionary, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( shadowDepth ) );
+	IO_Handler_ReadAllFromFile(io_handler, "data/surface.xml", dictionary);
+
+	mt = (MeshTopology *)HexaMeshTopology_New(dictionary);
+	mg = (MeshGeometry *)HexaMeshGeometry_New(dictionary);
+	md = (MeshDecomp *)RegularMeshDecomp_New(dictionary, MPI_COMM_WORLD, (HexaMeshTopology *)mt);
+	rml = MeshLayout_New( mt, mg, md );
+	
+	if (!rank)
+	{
+		fp = fopen("ml.1", "wt");
+		fprintf(fp, "%u\n", numProcessors);
+	}
+
+	dumpGLMesh(numProcessors, rank, rml, fp);
+	
+	if (useIrregular)
+	{
+		Element_GlobalIndex	esCnt, *intersect;
+		EmbeddedSurface		*es;
+		Mesh*			mesh;
+		ExtensionManager_Register*	extensionMgr_Register;
+		Index			i;
+		
+		if (!rank) fprintf(fp, "1\n");
+		imt = (MeshTopology *)TriSurfTopology_New(dictionary, "imElements");
+		img = (MeshGeometry *)TriSurfGeometry_New(dictionary, "imNodes");
+		imd = (MeshDecomp *)IrregularMeshDecomp_New_FromMeshLayout(dictionary, MPI_COMM_WORLD, imt, img, rml);
+		iml = MeshLayout_New( imt, img, imd );
+		dumpGLMesh(numProcessors, rank, iml, fp);
+		
+		extensionMgr_Register = ExtensionManager_Register_New( );
+		mesh = Mesh_New( iml, sizeof(Node), sizeof(Element), extensionMgr_Register, dictionary );
+		Build( mesh, 0, False );
+		Initialise( mesh, 0, False );
+		
+		if (!rank)
+		{
+			es = EmbeddedSurface_New(mesh);
+
+			intersect = Memory_Alloc_Array( Element_GlobalIndex, ES_IntersectionMax(es), "intersect" );
+			esCnt = EmbeddedSurface_BuildIntersection(es, intersect);
+			fprintf(fp, "%u\n", esCnt);
+			for (i = 0; i < esCnt; i++)
+				fprintf(fp, "%u ", intersect[i]);
+			if (intersect) Memory_Free(intersect);
+		}
+		
+		Stg_Class_Delete(es);
+		Stg_Class_Delete(mesh);
+		Stg_Class_Delete(iml);
+		Stg_Class_Delete(imd);
+		Stg_Class_Delete(img);
+		Stg_Class_Delete(imt);
+	}
+	else
+		if (!rank) fprintf(fp, "0\n");
+		
+	if (!rank)
+		fclose(fp);
+
+	/* Destroy stuff */
+	Stg_Class_Delete(rml);
+	Stg_Class_Delete(md);
+	Stg_Class_Delete(mg);
+	Stg_Class_Delete(mt);
+	Stg_Class_Delete( dictionary );
+
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = ${def_bin}
+
+#hack
+DL_INCDIR=/usr/include
+DL_LIBDIR=/usr/lib
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_BIN = $(BLD_BINDIR)/$(PACKAGE)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_BIN)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\"
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` -L${DL_LIBDIR} ${DL_LIBS}
+
+EXPORT_BINS = $(PROJ_BIN)
+PROJ_BINDIR = $(EXPORT_BINDIR)
+
+PROJ_SRCS = ${def_srcs}
+
+all: $(PROJ_BIN) export
+
+export:: export-binaries
+
+$(PROJ_BIN): $(PROJ_SRCS)
+	${CC} -o $@ $< $(CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) -I$(PROJ_INCDIR) $(LCFLAGS) $(LIBS)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,36 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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_bin = MLGen
+
+def_srcs = \
+	MLGen.c
+
+def_libs = libBase.a

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: GLMeshLayout.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <gl.h>
+#include "GLMeshLayout.h"
+
+
+void loadGLMesh(FILE *fp, unsigned procCnt, GLMesh *mesh)
+{
+	unsigned i;
+
+	fscanf(fp, "%u", &mesh->nodeCnt);
+	mesh->node = Memory_Alloc_Array( GLdouble, mesh->nodeCnt*3, "mesh->node");
+	for (i = 0; i < mesh->nodeCnt; i++)
+		fscanf(fp, "%lf %lf %lf", &mesh->node[i*3], &mesh->node[i*3 + 1], &mesh->node[i*3 + 2]);
+		
+	mesh->nodeLocalCnt = Memory_Alloc_Array( unsigned, procCnt, "mesh->nodeLocalCnt" );
+	mesh->nodeShadowCnt = Memory_Alloc_Array( unsigned, procCnt, "mesh->nodeShadowCnt" );
+	mesh->nodeDomainCnt = Memory_Alloc_Array( unsigned, procCnt, "mesh->nodeDomainCnt" );
+	mesh->nodeGlobalToLocal = Memory_Alloc_2DArray( unsigned, procCnt, mesh->nodeCnt, "mesh->nodeGlobalToLocal" );
+	mesh->nodeGlobalToShadow = Memory_Alloc_2DArray( unsigned, procCnt, mesh->nodeCnt, "mesh->nodeGlobalToDomain" );
+	mesh->nodeGlobalToDomain = Memory_Alloc_2DArray( unsigned, procCnt, mesh->nodeCnt, "mesh->nodeGlobalToDomain" );
+	mesh->nodeLocalToGlobal = Memory_Alloc_Array( unsigned*, procCnt, "mesh->nodeLocalToGlobal" );
+	mesh->nodeShadowToGlobal = Memory_Alloc_Array( unsigned*, procCnt, "mesh->nodeShadowToGlobal" );
+	mesh->nodeDomainToGlobal = Memory_Alloc_Array( unsigned *, procCnt, "mesh->nodeDomainToGlobal" );
+	for (i = 0; i < procCnt; i++)
+	{
+		unsigned j;
+		
+		fscanf(fp, "%u", &mesh->nodeLocalCnt[i]);
+		fscanf(fp, "%u", &mesh->nodeShadowCnt[i]);
+		fscanf(fp, "%u", &mesh->nodeDomainCnt[i]);
+
+		mesh->nodeLocalToGlobal[i] = Memory_Alloc_Array( unsigned, mesh->nodeLocalCnt[i], "mesh->nodeLocalToGlobal[]" );
+		mesh->nodeShadowToGlobal[i] = Memory_Alloc_Array( unsigned, mesh->nodeShadowCnt[i], "mesh->nodeShadowToGlobal[]" );
+		mesh->nodeDomainToGlobal[i] = Memory_Alloc_Array( unsigned, mesh->nodeDomainCnt[i], "mesh->nodeDomainToGlobal[]" );
+		
+		for (j = 0; j < mesh->nodeCnt; j++)
+		{
+			fscanf(fp, "%u", &mesh->nodeGlobalToLocal[i][j]);
+			fscanf(fp, "%u", &mesh->nodeGlobalToShadow[i][j]);
+			fscanf(fp, "%u", &mesh->nodeGlobalToDomain[i][j]);
+		}
+		for (j = 0; j < mesh->nodeLocalCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->nodeLocalToGlobal[i][j]);
+		for (j = 0; j < mesh->nodeShadowCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->nodeShadowToGlobal[i][j]);
+		for (j = 0; j < mesh->nodeDomainCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->nodeDomainToGlobal[i][j]);
+	}
+	
+	mesh->nodeNeighbourCnt = Memory_Alloc_Array( unsigned, mesh->nodeCnt, "mesh->nodeNeighbourCnt" );
+	mesh->nodeNeighbour = Memory_Alloc_Array( unsigned*, mesh->nodeCnt, "mesh->nodeNeighbour" );
+	for (i = 0; i < mesh->nodeCnt; i++)
+	{
+		unsigned j;
+	
+		fscanf(fp, "%u", &mesh->nodeNeighbourCnt[i]);
+		mesh->nodeNeighbour[i] = Memory_Alloc_Array( unsigned, mesh->nodeNeighbourCnt[i], "mesh->nodeNeighbour[]" );
+		for (j = 0; j < mesh->nodeNeighbourCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->nodeNeighbour[i][j]);
+	}
+		
+	mesh->edgeCnt = 0;
+	mesh->edge = NULL;
+	for (i = 0; i < mesh->nodeCnt; i++)
+	{
+		unsigned j;
+		
+		for (j = 0; j < mesh->nodeNeighbourCnt[i]; j++)
+		{
+			unsigned k;
+				
+			if (mesh->nodeNeighbour[i][j] >= mesh->nodeCnt) continue;
+				
+			for (k = 0; k < mesh->edgeCnt; k++)
+				if ((mesh->edge[k*2] == mesh->nodeNeighbour[i][j] && mesh->edge[k*2 + 1] == i) ||
+				    (mesh->edge[k*2] == i && mesh->edge[k*2 + 1] == mesh->nodeNeighbour[i][j]))
+				{
+					break;
+				}
+			if (k < mesh->edgeCnt) continue;
+			
+			mesh->edge = Memory_Alloc_Array(mesh->edge, unsigned, (mesh->edgeCnt + 1)*2 );
+			mesh->edge[mesh->edgeCnt*2] = i;
+			mesh->edge[mesh->edgeCnt*2 + 1] = mesh->nodeNeighbour[i][j];
+			mesh->edgeCnt++;
+		}
+	}
+	
+	fscanf(fp, "%u", &mesh->elementCnt);
+	mesh->elementLocalCnt = Memory_Alloc_Array( unsigned, procCnt, "mesh->elementLocalCnt" );
+	mesh->elementShadowCnt = Memory_Alloc_Array( unsigned, procCnt, "mesh->elementShadowCnt" );
+	mesh->elementDomainCnt = Memory_Alloc_Array( unsigned, procCnt, "mesh->elementDomainCnt" );
+	mesh->elementGlobalToLocal = Memory_Alloc_2DArray( unsigned, procCnt, mesh->elementCnt, "mesh->elementGlobalToLocal" );
+	mesh->elementGlobalToShadow = Memory_Alloc_2DArray( unsigned, procCnt, mesh->elementCnt, "mesh->elementGlobalToShadow" );
+	mesh->elementGlobalToDomain = Memory_Alloc_2DArray(unsigned, procCnt, mesh->elementCnt, "mesh->elementGlobalToDomain" );
+	mesh->elementLocalToGlobal = Memory_Alloc_Array( unsigned*, procCnt, "mesh->elementLocalToGlobal" );
+	mesh->elementShadowToGlobal = Memory_Alloc_Array( unsigned*, procCnt, "mesh->elementShadowToGlobal" );
+	mesh->elementDomainToGlobal = Memory_Alloc_Array( unsigned*, procCnt, "mesh->elementDomainToGlobal" );
+	for (i = 0; i < procCnt; i++)
+	{
+		unsigned j;
+		
+		fscanf(fp, "%u", &mesh->elementLocalCnt[i]);
+		fscanf(fp, "%u", &mesh->elementShadowCnt[i]);
+		fscanf(fp, "%u", &mesh->elementDomainCnt[i]);
+
+		mesh->elementLocalToGlobal[i] = Memory_Alloc_Array( unsigned*, mesh->elementLocalCnt[i],
+			"mesh->elementLocalToGlobal[]" );
+		mesh->elementShadowToGlobal[i] = Memory_Alloc_Array( unsigned*, mesh->elementShadowCnt[i],
+			"mesh->elementShadowToGlobal[]" );
+		mesh->elementDomainToGlobal[i] = Memory_Alloc_Array( unsigned*, mesh->elementDomainCnt[i],
+			"mesh->elementDomainToGlobal[]" );
+		
+		for (j = 0; j < mesh->elementCnt; j++)
+		{
+			fscanf(fp, "%u", &mesh->elementGlobalToLocal[i][j]);
+			fscanf(fp, "%u", &mesh->elementGlobalToShadow[i][j]);
+			fscanf(fp, "%u", &mesh->elementGlobalToDomain[i][j]);
+		}
+		for (j = 0; j < mesh->elementLocalCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->elementLocalToGlobal[i][j]);
+		for (j = 0; j < mesh->elementShadowCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->elementShadowToGlobal[i][j]);
+		foy (j = 0; j < mesh->elementDomainCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->elementDomainToGlobal[i][j]);
+	}
+	
+	mesh->elementNodeCnt = Memory_Alloc_Array( unsigned, mesh->elementCnt, "mesh->elementNodeCnt" );
+	mesh->elementEdgeCnt = Memory_Alloc_Array( unsigned, mesh->elementCnt, "mesh->elementEdgeCnt" );
+	mesh->elementNode = Memory_Alloc_Array( unsigned*, mesh->elementCnt, "mesh->elementNode" );
+	mesh->elementEdge = Memory_Alloc_Array( unsigned*, mesh->elementCnt, "mesh->elementEdge" );
+	for (i = 0; i < mesh->elementCnt; i++)
+	{
+		unsigned j;
+	
+		fscanf(fp, "%u", &mesh->elementNodeCnt[i]);
+		mesh->elementNode[i] = Memory_Alloc_Array( unsigned, mesh->elementNodeCnt[i], "mesh->elementNode[]" );
+		for (j = 0; j < mesh->elementNodeCnt[i]; j++)
+			fscanf(fp, "%u", &mesh->elementNode[i][j]);
+		
+		mesh->elementEdgeCnt[i] = 0;
+		mesh->elementEdge[i] = NULL;
+		for (j = 0; j < mesh->edgeCnt; j++)
+		{
+			unsigned k, valid = 0;
+			
+			for (k = 0; k < mesh->elementNodeCnt[i]; k++)
+			{
+				if (mesh->edge[j*2] == mesh->elementNode[i][k] || mesh->edge[j*2 + 1] == mesh->elementNode[i][k])
+				{
+					if (++valid == 2)
+					{
+						mesh->elementEdge[i] = Memory_Realloc_Array( mesh->elementEdge[i], unsigned,
+							(mesh->elementEdgeCnt[i] + 1) );
+						mesh->elementEdge[i][mesh->elementEdgeCnt[i]] = j;
+						mesh->elementEdgeCnt[i]++;
+					}
+				}
+			}
+		}
+	}
+}
+
+
+void loadGLMeshLayout(char *filename, GLMeshLayout *glm)
+{
+	FILE *fp = fopen(filename, "rt");
+	
+	if (!fp)
+	{
+		printf("Error: couldn't locate %s\n", filename);
+		memset(glm, 0, sizeof(GLMeshLayout));
+		return;
+	}
+	
+	fscanf(fp, "%u", &glm->procCnt);
+	loadGLMesh(fp, glm->procCnt, &glm->baseMesh);
+	glm->baseMesh.intersectCnt = 0;
+	glm->baseMesh.intersect = NULL;
+
+	fscanf(fp, "%u", &glm->childMeshCnt);
+	if (glm->childMeshCnt)
+	{
+		unsigned i, j;
+
+		glm->childMesh = Memory_Alloc_Array( GLMesh, glm->childMeshCnt, "glm->childMesh" );
+		for (i = 0; i < glm->childMeshCnt; i++)
+		{
+			loadGLMesh(fp, glm->procCnt, &glm->childMesh[i]);
+			
+			fscanf(fp, "%u", &glm->childMesh[i].intersectCnt);
+			glm->childMesh[i].intersect = Memory_Alloc_Array( unsigned,glm->childMesh[i].intersectCnt,
+				"glm->childMesh[]" );
+			for (j = 0; j < glm->childMesh[i].intersectCnt; j++)
+				fscanf(fp, "%u", &glm->childMesh[i].intersect[j]);
+		}
+			
+	}
+	else
+		glm->childMesh = NULL;
+
+	fclose(fp);
+}
+
+
+void unloadGLMesh(GLMesh *mesh, unsigned procCnt)
+{
+	unsigned i;
+
+	for (i = 0; i < procCnt; i++)
+	{
+		if (mesh->nodeGlobalToLocal[i]) Memory_Free(mesh->nodeGlobalToLocal[i]);
+		if (mesh->nodeGlobalToShadow[i]) Memory_Free(mesh->nodeGlobalToShadow[i]);
+		if (mesh->nodeGlobalToDomain[i]) Memory_Free(mesh->nodeGlobalToDomain[i]);
+		if (mesh->nodeLocalToGlobal[i]) Memory_Free(mesh->nodeLocalToGlobal[i]);
+		if (mesh->nodeShadowToGlobal[i]) Memory_Free(mesh->nodeShadowToGlobal[i]);
+		if (mesh->nodeDomainToGlobal[i]) Memory_Free(mesh->nodeDomainToGlobal[i]);
+		if (mesh->elementGlobalToLocal[i]) Memory_Free(mesh->elementGlobalToLocal[i]);
+		if (mesh->elementGlobalToShadow[i]) Memory_Free(mesh->elementGlobalToShadow[i]);
+		if (mesh->elementGlobalToDomain[i]) Memory_Free(mesh->elementGlobalToDomain[i]);
+		if (mesh->elementLocalToGlobal[i]) Memory_Free(mesh->elementLocalToGlobal[i]);
+		if (mesh->elementShadowToGlobal[i]) Memory_Free(mesh->elementShadowToGlobal[i]);
+		if (mesh->elementDomainToGlobal[i]) Memory_Free(mesh->elementDomainToGlobal[i]);
+	}
+	for (i = 0; i < mesh->nodeCnt; i++)
+	{
+		if (mesh->nodeNeighbour[i]) Memory_Free(mesh->nodeNeighbour[i]);
+	}
+	for (i = 0; i < mesh->elementCnt; i++)
+	{
+		if (mesh->elementNode[i]) Memory_Free(mesh->elementNode[i]);
+		if (mesh->elementEdge[i]) Memory_Free(mesh->elementEdge[i]);
+	}
+	if (mesh->nodeLocalCnt) Memory_Free(mesh->nodeLocalCnt);
+	if (mesh->nodeShadowCnt) Memory_Free(mesh->nodeShadowCnt);
+	if (mesh->nodeDomainCnt) Memory_Free(mesh->nodeDomainCnt);
+	if (mesh->nodeGlobalToLocal) Memory_Free(mesh->nodeGlobalToLocal);
+	if (mesh->nodeGlobalToShadow) Memory_Free(mesh->nodeGlobalToShadow);
+	if (mesh->nodeGlobalToDomain) Memory_Free(mesh->nodeGlobalToDomain);
+	if (mesh->nodeLocalToGlobal) Memory_Free(mesh->nodeLocalToGlobal);
+	if (mesh->nodeShadowToGlobal) Memory_Free(mesh->nodeShadowToGlobal);
+	if (mesh->nodeDomainToGlobal) Memory_Free(mesh->nodeDomainToGlobal);
+	if (mesh->nodeNeighbourCnt) Memory_Free(mesh->nodeNeighbourCnt);
+	if (mesh->nodeNeighbour) Memory_Free(mesh->nodeNeighbour);
+	if (mesh->node) Memory_Free(mesh->node);
+	if (mesh->elementLocalCnt) Memory_Free(mesh->elementLocalCnt);
+	if (mesh->elementShadowCnt) Memory_Free(mesh->elementShadowCnt);
+	if (mesh->elementDomainCnt) Memory_Free(mesh->elementDomainCnt);
+	if (mesh->elementGlobalToLocal) Memory_Free(mesh->elementGlobalToLocal);
+	if (mesh->elementGlobalToShadow) Memory_Free(mesh->elementGlobalToShadow);
+	if (mesh->elementGlobalToDomain) Memory_Free(mesh->elementGlobalToDomain);
+	if (mesh->elementLocalToGlobal) Memory_Free(mesh->elementLocalToGlobal);
+	if (mesh->elementShadowToGlobal) Memory_Free(mesh->elementShadowToGlobal);
+	if (mesh->elementDomainToGlobal) Memory_Free(mesh->elementDomainToGlobal);
+	if (mesh->elementNodeCnt) Memory_Free(mesh->elementNodeCnt);
+	if (mesh->elementNode) Memory_Free(mesh->elementNode);
+	if (mesh->elementEdgeCnt) Memory_Free(mesh->elementEdgeCnt);
+	if (mesh->elementEdge) Memory_Free(mesh->elementEdge);
+	if (mesh->edge) Memory_Free(mesh->edge);
+	if (mesh->intersect) Memory_Free(mesh->intersect);
+}
+
+
+void unloadGLMeshLayout(GLMeshLayout *glm)
+{
+	unsigned i;
+
+	unloadGLMesh(&glm->baseMesh, glm->procCnt);
+	for (i = 0; i < glm->childMeshCnt; i++)
+		unloadGLMesh(&glm->childMesh[i], glm->procCnt);
+}

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: GLMeshLayout.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __GLMeshLayout_h__
+#define __GLMeshLayout_h__
+
+
+struct _GLMesh
+{
+	unsigned	nodeCnt;
+	unsigned	*nodeLocalCnt;
+	unsigned	*nodeShadowCnt;
+	unsigned	*nodeDomainCnt;
+
+	unsigned	**nodeGlobalToLocal;
+	unsigned	**nodeGlobalToShadow;
+	unsigned	**nodeGlobalToDomain;
+	unsigned	**nodeLocalToGlobal;
+	unsigned	**nodeShadowToGlobal;
+	unsigned	**nodeDomainToGlobal;
+
+	unsigned	*nodeNeighbourCnt;
+	unsigned	**nodeNeighbour;
+	
+	GLdouble	*node;
+
+	unsigned	elementCnt;
+	unsigned	*elementLocalCnt;
+	unsigned	*elementShadowCnt;
+	unsigned	*elementDomainCnt;
+
+	unsigned	**elementGlobalToLocal;
+	unsigned	**elementGlobalToShadow;
+	unsigned	**elementGlobalToDomain;
+	unsigned	**elementLocalToGlobal;
+	unsigned	**elementShadowToGlobal;
+	unsigned	**elementDomainToGlobal;
+	
+	unsigned	*elementNodeCnt;
+	unsigned	**elementNode;
+	unsigned	*elementEdgeCnt;
+	unsigned	**elementEdge;
+
+	unsigned	edgeCnt;
+	unsigned	*edge;
+	
+	unsigned	intersectCnt;
+	unsigned	*intersect;
+};
+typedef struct _GLMesh GLMesh;
+
+
+struct _GLMeshLayout
+{
+	unsigned	procCnt;
+	GLMesh		baseMesh;
+	unsigned	childMeshCnt;
+	GLMesh		*childMesh;
+};
+typedef struct _GLMeshLayout GLMeshLayout;
+
+
+void loadGLMeshLayout(char *filename, GLMeshLayout *glm);
+void unloadGLMeshLayout(GLMeshLayout *glm);
+
+
+#endif

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/MLView.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/MLView.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/MLView.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,452 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: MLView.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <glut.h>
+#include "GLMeshLayout.h"
+
+
+enum _MeshScope
+{
+	localScope,
+	shadowScope,
+	domainScope
+};
+typedef enum _MeshScope MeshScope;
+
+
+struct _GLMeshInstance
+{
+	unsigned char	*nodeIndex;
+	unsigned char	*edgeIndex;
+	unsigned	proc;
+	MeshScope	scope;
+	
+	GLMesh		*mesh;
+};
+typedef struct _GLMeshInstance GLMeshInstance;
+
+
+GLMeshLayout	meshLayout;
+GLMeshInstance	*instance;
+
+unsigned	instCnt = 0;
+unsigned	curInst = 0;
+GLdouble	oldx, oldy;
+GLdouble	xrot = 0.0, yrot = 0.0;
+
+GLuint		fontBase;
+int 		scrWidth, scrHeight;
+
+
+void glPrintf(char *fmt, ...)
+{
+	va_list args;
+	char str[255];
+	
+	va_start(args, fmt);
+	vsprintf(str, fmt, args);
+	va_end(args);
+
+	glListBase(fontBase);
+	glCallLists(strlen(str), GL_UNSIGNED_BYTE, str);
+}
+
+
+void initGL(void)
+{
+//	GLfloat pda[3] = {0.0, 0.3, 0.0};
+	int i;
+
+	glClearColor(0.3, 0.3, 0.3, 1.0);
+	glEnable(GL_CULL_FACE);
+	glShadeModel(GL_SMOOTH);
+	glEnable(GL_DEPTH_TEST);
+	glDepthFunc(GL_LEQUAL);
+	glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
+	
+	glPointSize(5.0);
+//	glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION, pda);
+
+	fontBase = glGenLists(127);
+	for (i = 0; i < 127; i++)
+	{
+		glNewList(fontBase + i, GL_COMPILE);
+		glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, i);
+		glEndList();
+	}
+}
+
+
+void displayHandler(void)
+{
+	unsigned i, inst;
+	unsigned cnt, *edge;
+	GLdouble *node;
+
+	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+	glEnable(GL_DEPTH_TEST);
+	glMatrixMode(GL_MODELVIEW);
+	glLoadIdentity();
+	glTranslated(0.0, 0.0, -2.5);
+	glRotated(xrot, 0.0, 1.0, 0.0);
+	glRotated(yrot, 1.0, 0.0, 0.0);
+	glTranslated(-0.5, -0.5, -0.5);
+	
+	for (inst = 0; inst < instCnt; inst++)
+	{
+		node = instance[inst].mesh->node;
+		edge = instance[inst].mesh->edge;
+
+		cnt = instance[inst].mesh->nodeCnt;
+		for (i = 0; i < cnt; i++)
+		{
+			if (instance[inst].nodeIndex[i])
+			{
+				glColor3f(1.0, 1.0, 1.0);
+				glDisable(GL_BLEND);
+			}
+			else
+			{
+				glColor3f(0.2, 0.2, 0.2);
+				glEnable(GL_BLEND);
+			}
+
+			glBegin(GL_POINTS);
+			glVertex3d(node[i*3], node[i*3 + 1], node[i*3 + 2]);
+			glEnd();
+			
+			glRasterPos3d(node[i*3] - 0.04, node[i*3 + 1] + 0.01, node[i*3 + 2] + 0.01);
+			glPrintf("%03d", i);
+		}
+		
+		cnt = instance[inst].mesh->edgeCnt;
+		for (i = 0; i < cnt; i++)
+		{
+			if (instance[inst].edgeIndex[i])
+			{
+				glColor3f(0.0, 0.0, 1.0);
+				glDisable(GL_BLEND);
+			}
+			else
+			{
+				glColor3f(0.2, 0.2, 0.2);
+				glEnable(GL_BLEND);
+			}
+
+			glBegin(GL_LINES);
+			glVertex3d(node[edge[i*2]*3], node[edge[i*2]*3 + 1], node[edge[i*2]*3 + 2]);
+			glVertex3d(node[edge[i*2 + 1]*3], node[edge[i*2 + 1]*3 + 1], node[edge[i*2 + 1]*3 + 2]);
+			glEnd();
+		}
+	}
+	
+	/* Display all text stuff */
+	glDisable(GL_DEPTH_TEST);
+	glDisable(GL_BLEND);
+	glLoadIdentity();
+	glMatrixMode(GL_PROJECTION);
+	glPushMatrix();
+	glLoadIdentity();
+	gluOrtho2D(0, scrWidth, 0, scrHeight);
+
+	glColor3f(1.0, 1.0, 1.0);
+	glRasterPos2i(10, scrHeight - 22);
+	glPrintf("Mesh: ");
+	switch (curInst)
+	{
+		case 0:
+			glPrintf("base");
+			break;
+			
+		default:
+			glPrintf("child %u", curInst);
+			break;
+	}
+	
+	glRasterPos2i(10, scrHeight - 34);
+	glPrintf("Scope: ");
+	switch (instance[curInst].scope)
+	{
+		case (localScope):
+			glPrintf("local");
+			break;
+		
+		case (shadowScope):
+			glPrintf("shadow");
+			break;
+		
+		case (domainScope):
+			glPrintf("domain");
+			break;
+	}
+	
+	glRasterPos2i(10, scrHeight - 46);
+	glPrintf("Processor: ");
+	if (instance[curInst].proc == meshLayout.procCnt)
+		glPrintf("-");
+	else
+		glPrintf("%u", instance[curInst].proc);
+	
+	glPopMatrix();
+
+	glutSwapBuffers();
+}
+
+
+void reshapeHandler(int width, int height)
+{
+	scrWidth = width;
+	scrHeight = height;
+
+	glViewport(0, 0, width, height);
+	glMatrixMode(GL_PROJECTION);
+	glLoadIdentity();
+	gluPerspective(45.0, (GLdouble)width/(GLdouble)height, 0.5, 30.0);
+}
+
+
+void keyboardHandler(unsigned char key, int x, int y)
+{
+	int redraw = 0;
+	unsigned i, j;
+
+	switch (key)
+	{
+		case 'i':
+			if (meshLayout.childMeshCnt)
+			{
+				for (i = 0; i < meshLayout.childMesh[0].intersectCnt; i++)
+				{
+					for (j = 0; j < meshLayout.baseMesh.elementNodeCnt[meshLayout.childMesh[0].intersect[i]]; j++)
+					{
+						instance[0].nodeIndex[meshLayout.baseMesh.elementNode[meshLayout.childMesh[0].intersect[i]][j]] = 1;
+					}
+					
+					for (j = 0; j < meshLayout.baseMesh.elementEdgeCnt[meshLayout.childMesh[0].intersect[i]]; j++)
+					{
+						instance[0].edgeIndex[meshLayout.baseMesh.elementEdge[meshLayout.childMesh[0].intersect[i]][j]] = 1;
+					}
+				}
+			}
+			glutPostRedisplay();
+			break;
+			
+		case ')':
+		case '0':
+			curInst = (curInst + 1)%(meshLayout.childMeshCnt + 1);
+			glutPostRedisplay();
+			break;
+			
+		case '(':
+		case '9':
+			curInst = curInst == 0 ? meshLayout.childMeshCnt : curInst - 1;
+			glutPostRedisplay();
+			break;
+
+		case '}':
+		case ']':
+			instance[curInst].scope = instance[curInst].scope == localScope ? shadowScope :
+						  instance[curInst].scope == shadowScope ? domainScope :
+						  localScope;
+			redraw = 1;
+			break;
+			
+		case '{':
+		case '[':
+			instance[curInst].scope = instance[curInst].scope == localScope ? domainScope :
+						  instance[curInst].scope == shadowScope ? localScope :
+						  shadowScope;
+			redraw = 1;
+			break;
+		
+		case '>':
+		case '.':
+			instance[curInst].proc = (instance[curInst].proc + 1)%(meshLayout.procCnt + 1);
+			redraw = 1;
+			break;
+			
+		case '<':
+		case ',':
+			instance[curInst].proc = instance[curInst].proc == 0 ? meshLayout.procCnt : instance[curInst].proc - 1;
+			redraw = 1;
+			break;
+	}
+	
+	if (redraw)
+	{
+		memset(instance[curInst].nodeIndex, 0, sizeof(unsigned char)*instance[curInst].mesh->nodeCnt);
+		memset(instance[curInst].edgeIndex, 0, sizeof(unsigned char)*instance[curInst].mesh->edgeCnt);
+	
+		if (instance[curInst].proc < meshLayout.procCnt)
+		{
+			unsigned nodeCnt, elementCnt, *nodeMap, *elementMap;
+			unsigned i;
+			
+			switch (instance[curInst].scope)
+			{
+				case 0:
+					nodeCnt = instance[curInst].mesh->nodeLocalCnt[instance[curInst].proc];
+					nodeMap = instance[curInst].mesh->nodeLocalToGlobal[instance[curInst].proc];
+					elementCnt = instance[curInst].mesh->elementLocalCnt[instance[curInst].proc];
+					elementMap = instance[curInst].mesh->elementLocalToGlobal[instance[curInst].proc];
+					break;
+					
+				case 1:
+					nodeCnt = instance[curInst].mesh->nodeShadowCnt[instance[curInst].proc];
+					nodeMap = instance[curInst].mesh->nodeShadowToGlobal[instance[curInst].proc];
+					elementCnt = instance[curInst].mesh->elementShadowCnt[instance[curInst].proc];
+					elementMap = instance[curInst].mesh->elementShadowToGlobal[instance[curInst].proc];
+					break;
+			
+				case 2:
+					nodeCnt = instance[curInst].mesh->nodeDomainCnt[instance[curInst].proc];
+					nodeMap = instance[curInst].mesh->nodeDomainToGlobal[instance[curInst].proc];
+					elementCnt = instance[curInst].mesh->elementDomainCnt[instance[curInst].proc];
+					elementMap = instance[curInst].mesh->elementDomainToGlobal[instance[curInst].proc];
+					break;
+				break;
+			}
+			
+			for (i = 0; i < nodeCnt; i++)
+				instance[curInst].nodeIndex[nodeMap[i]] = 1;
+			for (i = 0; i < elementCnt; i++)
+			{
+				unsigned j;
+		
+				for (j = 0; j < instance[curInst].mesh->elementEdgeCnt[elementMap[i]]; j++)
+					instance[curInst].edgeIndex[instance[curInst].mesh->elementEdge[elementMap[i]][j]] = 1;
+			}
+		}
+		
+		glutPostRedisplay();
+	}
+}
+
+
+void specialHandler(int key, int x, int y)
+{
+}
+
+
+void mouseHandler(int button, int state, int x, int y)
+{
+	oldx = x;
+	oldy = y;
+}
+
+
+void motionHandler(int x, int y)
+{
+	int dx = x - oldx, dy = y - oldy;
+		
+	xrot += dx;
+	yrot += dy;
+	oldx = x;
+	oldy = y;
+	
+	glutPostRedisplay();
+}
+
+
+int main(int argc, char **argv)
+{
+	int glutWin;
+	unsigned i;
+	
+	/* Init GLUT */
+	glutInit(&argc, argv);
+	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
+	glutWin = glutCreateWindow("MeshLayout Viewer");
+
+	glutDisplayFunc(displayHandler);
+	glutReshapeFunc(reshapeHandler);
+	glutKeyboardFunc(keyboardHandler);
+//	glutSpecialFunc(specialHandler);
+	glutMouseFunc(mouseHandler);
+	glutMotionFunc(motionHandler);
+	
+	/* Init OpenGL */
+	initGL();
+	
+	/* Load mesh layout */
+	if (argc > 1)
+	{
+		loadGLMeshLayout(argv[1], &meshLayout);
+		
+		instCnt = meshLayout.childMeshCnt + 1;
+		instancy = Memory_Alloc_Array( GLMeshInstance, instCnt, "instance" );
+		instance[0].nodeIndex = Memory_Alloc_Array( unsigned char, meshLayout.baseMesh.nodeCnt, "instance[0].nodeIndex" );
+		memset(instance[0].nodeIndex, 0, sizeof(unsigned char)*meshLayout.baseMesh.nodeCnt);
+		instance[0].edgeIndex = Memory_Alloc_Array( unsigned char, meshLayout.baseMesh.edgeCnt, "instance[0].edgeIndex" );
+		memset(instance[0].edgeIndex, 0, sizeof(unsigned char)*meshLayout.baseMesh.edgeCnt);
+		instance[0].proc = meshLayout.procCnt;
+		instance[0].scope = localScope;
+		for (i = 1; i < instCnt; i++)
+		{
+			instance[i].nodeIndex = Memory_Alloc_Array( unsigned char, meshLayout.childMesh[i - 1].nodeCnt,
+				"instance[i].nodeIndex" );
+			memset(instance[i].nodeIndex, 0, sizeof(unsigned char)*meshLayout.childMesh[i - 1].nodeCnt);
+			instance[i].edgeIndex = Memory_Alloc_Array( unsigned char, meshLayout.childMesh[i - 1].edgeCnt,
+				"instance[i].edgeIndex" );
+			memset(instance[i].edgeIndex, 0, sizeof(unsigned char)*meshLayout.childMesh[i - 1].edgeCnt);
+			instance[i].proc = meshLayout.procCnt;
+			instance[i].scope = localScope;
+		}
+		instance[0].mesh = &meshLayout.baseMesh;
+		for (i = 0; i < meshLayout.childMeshCnt; i++)
+			instance[i + 1].mesh = &meshLayout.childMesh[i];
+	}
+	else
+	{
+		printf("Error: no GLMeshLayout file specified\n");
+		glutDestroyWindow(glutWin);
+		return 0;
+	}
+
+	glutMainLoop();
+
+	glutDestroyWindow(glutWin);
+		
+	/* Stg_Class_Delete stuff */
+	for (i = 0; i < instCnt; i++)
+	{
+		if (instance[i].nodeIndex) Memory_Free(instance[i].nodeIndex);
+		if (instance[i].edgeIndex) Memory_Free(instance[i].edgeIndex);
+	}
+	if (instance) Memory_Free(instance);
+	unloadGLMeshLayout(&meshLayout);
+	glDeleteLists(fontBase, 127);
+	
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include GLUT/default.def
+
+PROJECT = StGermain
+PACKAGE = ${def_bin}
+
+#hack
+DL_INCDIR=/usr/include
+DL_LIBDIR=/usr/lib
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_BIN = $(BLD_BINDIR)/$(PACKAGE)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_BIN)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\"
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` -L${DL_LIBDIR} ${DL_LIBS}
+
+EXPORT_BINS = $(PROJ_BIN)
+PROJ_BINDIR = $(EXPORT_BINDIR)
+
+PROJ_SRCS = ${def_srcs}
+
+all: $(PROJ_BIN) export
+
+export:: export-binaries
+
+$(PROJ_BIN): $(PROJ_OBJS)
+	${CC} -o $@ $(PROJ_OBJS) $(CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) -I$(PROJ_INCDIR) $(LCFLAGS) $(LIBS)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = MLView
+
+def_hdrs = \
+	GLMeshLayout.h
+
+def_srcs = \
+	MLView.c \
+	GLMeshLayout.c
+
+def_libs = libBase.a

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH GLUT GL
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = ViewersMeshLayoutViewer
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifeq (true,$(shell if test -r "${SDL_INCDIR}/SDL/SDL.h"; then echo true; fi ))
+	def_sub = src
+endif

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+subdirs = ${def_sub}
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include GLUT/default.def
+
+PROJECT = StGermain
+PACKAGE = ${def_bin}
+
+#hack
+DL_INCDIR=/usr/include
+DL_LIBDIR=/usr/lib
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_BIN = $(BLD_BINDIR)/$(PACKAGE)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_BIN)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\" -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` -L${DL_LIBDIR} ${DL_LIBS}
+
+EXPORT_BINS = $(PROJ_BIN)
+PROJ_BINDIR = $(EXPORT_BINDIR)
+
+PROJ_SRCS = ${def_srcs}
+
+all: $(PROJ_BIN) export
+
+export:: export-binaries
+
+$(PROJ_BIN): $(PROJ_OBJS)
+	${CC} -o $@ $(PROJ_OBJS) $(CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) -I$(PROJ_INCDIR) $(LCFLAGS) $(LIBS)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = mlv
+
+def_hdrs = \
+
+def_srcs = \
+	main.cxx
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/main.cxx
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/main.cxx	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/main.cxx	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,504 @@
+#include <stdlib.h>
+#include <math.h>
+
+#include <mpi.h>
+
+/* This file was renamed to a C++ file because of this header under PDT-TAU */
+extern "C" {
+#include <StGermain/StGermain.h>
+}
+
+#if defined(__APPLE__) && defined(__MACH__)
+	#include <OpenGL/gl.h>	// Header File For The OpenGL32 Library
+	#include <OpenGL/glu.h>	// Header File For The GLu32 Library
+#else
+	#include <GL/gl.h>	// Header File For The OpenGL32 Library
+	#include <GL/glu.h>	// Header File For The GLu32 Library
+#endif
+#include <SDL/SDL.h>	
+
+#define WIDTH 600
+#define HEIGHT 400
+unsigned int quit = 0;
+
+typedef void    (BuildFunction)		( PartitionIndex proc );
+
+
+void buildLocalEdges( Partition_Index proc );
+
+
+/* StGermain globals */
+Dictionary*     dictionary;
+MeshLayout*     meshLayout;
+
+IndexSet*       litEdges = NULL;
+IndexSet*       litNodes = NULL;
+BuildFunction*  build = buildLocalEdges;
+Partition_Index viewProc = 0;
+
+Coord		origin;
+Coord		orient = { 0.0, 0.0, 0.0 };
+Coord		bboxMin;
+Coord		bboxMax;
+
+Bool		rotate = False;
+GLdouble	oldx, oldy;
+GLdouble	xrot = 0.0, yrot = 0.0;
+
+
+void display( void ) {
+	Index			edge_I;
+	Index			indexCnt;
+	Index*			indices;
+	Node_Index		node_I;
+	
+	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT  );
+	
+	glPushMatrix();
+	glRotated( orient[0], 0.0, 1.0, 0.0 );
+	glRotated( orient[1], 1.0, 0.0, 0.0 );
+	
+	/* Draw elements */
+	IndexSet_GetMembers( litEdges, &indexCnt, &indices );
+	if( indexCnt ) {
+		glBegin( GL_LINES );
+		glColor3d( 0.9, 0.9, 0.9 );
+		for( edge_I = 0; edge_I < indexCnt; edge_I++ ) {
+			Coord   point;
+			Edge    edge;
+			
+			meshLayout->elementLayout->edgeAt( meshLayout->elementLayout, indices[edge_I], edge );
+			meshLayout->elementLayout->geometry->pointAt( meshLayout->elementLayout->geometry, edge[0], point );
+			glVertex3d( point[0] + origin[0], point[1] + origin[1], point[2] + origin[2] );
+			meshLayout->elementLayout->geometry->pointAt( meshLayout->elementLayout->geometry, edge[1], point );
+			glVertex3d( point[0] + origin[0], point[1] + origin[1], point[2] + origin[2] );
+		}
+		glEnd();
+	}
+	if( indices )
+		Memory_Free( indices );
+	
+	IndexSet_GetVacancies( litEdges, &indexCnt, &indices );
+	if( indexCnt ) {
+		glBegin( GL_LINES );
+		glColor3d( 0.5, 0.5, 0.5 );
+		for( edge_I = 0; edge_I < indexCnt; edge_I++ ) {
+			Coord   point;
+			Edge    edge;
+			
+			meshLayout->elementLayout->edgeAt( meshLayout->elementLayout, indices[edge_I], edge );
+			meshLayout->elementLayout->geometry->pointAt( meshLayout->elementLayout->geometry, edge[0], point );
+			glVertex3d( point[0] + origin[0], point[1] + origin[1], point[2] + origin[2] );
+			meshLayout->elementLayout->geometry->pointAt( meshLayout->elementLayout->geometry, edge[1], point );
+			glVertex3d( point[0] + origin[0], point[1] + origin[1], point[2] + origin[2] );
+		}
+		glEnd();
+	}
+	if( indices )
+		Memory_Free( indices );
+	
+	/* Draw nodes */
+	IndexSet_GetMembers( litNodes, &indexCnt, &indices );
+	if( indexCnt ) {
+		glBegin( GL_POINTS );
+		glColor3d( 0.9, 0.9, 0.9 );
+		for( node_I = 0; node_I < indexCnt; node_I++ ) {
+			Coord   point;
+			
+			meshLayout->nodeLayout->nodeCoordAt( meshLayout->nodeLayout, indices[node_I], point );
+			glVertex3d( point[0] + origin[0], point[1] + origin[1], point[2] + origin[2] );
+		}
+		glEnd();
+	}
+	if( indices )
+		Memory_Free( indices );
+	
+	IndexSet_GetVacancies( litNodes, &indexCnt, &indices );
+	if( indexCnt ) {
+		glBegin( GL_POINTS );
+		glColor3d( 0.5, 0.5, 0.5 );
+		for( node_I = 0; node_I < indexCnt; node_I++ ) {
+			Coord   point;
+			
+			meshLayout->nodeLayout->nodeCoordAt( meshLayout->nodeLayout, indices[node_I], point );
+			glVertex3d( point[0] + origin[0], point[1] + origin[1], point[2] + origin[2] );
+		}
+		glEnd();
+	}
+	if( indices )
+		Memory_Free( indices );
+	
+	glPopMatrix();
+
+	SDL_GL_SwapBuffers();
+}
+
+
+void reshape( int width, int height ) {
+	double  maxDepth;
+	
+	glMatrixMode( GL_PROJECTION );
+	glLoadIdentity();
+	maxDepth = sqrt( bboxMin[0] * bboxMin[0] + bboxMax[2] * bboxMax[2] ) + 1.0;
+	gluPerspective( 45.0, (double)width / (double)height, 1.0, 3.0 * maxDepth );
+	glMatrixMode( GL_MODELVIEW );
+	glViewport( 0, 0, width, height );
+	glLoadIdentity();
+	glTranslated( 0.0, 0.0, -1.0 * ( maxDepth + 2.0 ) );
+	
+	display();
+}
+
+
+void buildStGermain( void ) {
+	Topology*		nTopology;
+	ElementLayout*		eLayout;
+	NodeLayout*		nLayout;
+	MeshDecomp*		decomp;
+	
+	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, "shadowDepth", Dictionary_Entry_Value_FromUnsignedInt( 1 ) );
+	Dictionary_Add( dictionary, "selfStorage", Dictionary_Entry_Value_FromString( "storeAll" ) );
+	Dictionary_Add( dictionary, "allowUnusedCPUs", Dictionary_Entry_Value_FromBool( True ) );
+	
+	nTopology = (Topology*)IJK6Topology_New( "topology", dictionary );
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "elementLayout", 3, dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "nodeLayout", dictionary, eLayout, nTopology );
+	decomp = (MeshDecomp*)HexaMD_New_All( "decomp", dictionary, MPI_COMM_WORLD, eLayout, nLayout, 2 );
+	meshLayout = MeshLayout_New( "meshLayout", eLayout, nLayout, decomp );
+}
+
+
+void cleanUp( void ) {
+	if( meshLayout ) {
+		Stg_Class_Delete( meshLayout->decomp );
+		Stg_Class_Delete( meshLayout->nodeLayout->topology );
+		Stg_Class_Delete( meshLayout->nodeLayout );
+		Stg_Class_Delete( meshLayout->elementLayout );
+		Stg_Class_Delete( meshLayout );
+	}
+	
+	if( dictionary )
+		Stg_Class_Delete( dictionary );
+	
+	if( litEdges )
+		Stg_Class_Delete( litEdges );
+	
+}
+
+
+void calcOrigin( void ) {
+	Node_GlobalIndex	gNode_I;
+	
+	origin[0] = 0.0;
+	origin[1] = 0.0;
+	origin[2] = 0.0;
+	
+	for( gNode_I = 0; gNode_I < meshLayout->nodeLayout->nodeCount; gNode_I++ ) {
+		Coord   point;
+		
+		meshLayout->nodeLayout->nodeCoordAt( meshLayout->nodeLayout, gNode_I, point );
+		origin[0] -= point[0];
+		origin[1] -= point[1];
+		origin[2] -= point[2];
+	}
+	
+	origin[0] /= (double)meshLayout->nodeLayout->nodeCount;
+	origin[1] /= (double)meshLayout->nodeLayout->nodeCount;
+	origin[2] /= (double)meshLayout->nodeLayout->nodeCount;
+}
+
+
+void calcBBox( void ) {
+	Node_GlobalIndex	gNode_I;
+	
+	bboxMin[0] = 0.0;
+	bboxMin[1] = 0.0;
+	bboxMin[2] = 0.0;
+	bboxMax[0] = 0.0;
+	bboxMax[1] = 0.0;
+	bboxMax[2] = 0.0;
+	
+	for( gNode_I = 0; gNode_I < meshLayout->nodeLayout->nodeCount; gNode_I++ ) {
+		Coord   point;
+		
+		meshLayout->nodeLayout->nodeCoordAt( meshLayout->nodeLayout, gNode_I, point );
+		
+		if( point[0] < bboxMin[0] )
+			bboxMin[0] = point[0];
+		else if( point[0] > bboxMax[0] )
+			bboxMax[0] = point[0];
+		
+		if( point[1] < bboxMin[1] )
+			bboxMin[1] = point[1];
+		else if( point[1] > bboxMax[1] )
+			bboxMax[1] = point[1];
+		
+		if( point[2] < bboxMin[2] )
+			bboxMin[2] = point[2];
+		else if( point[2] > bboxMax[2] )
+			bboxMax[2] = point[2];
+	}
+	
+	bboxMin[0] += origin[0];
+	bboxMax[0] += origin[0];
+	bboxMin[1] += origin[1];
+	bboxMax[1] += origin[1];
+	bboxMin[2] += origin[2];
+	bboxMax[2] += origin[2];
+}
+
+
+void mouseClick( int button, int state, int x, int y ) {
+	if( button == SDL_BUTTON_LEFT ) {
+		
+		if( state == SDL_PRESSED ) {
+			oldx = (double) x;
+			oldy = (double) y;
+			rotate = True;
+		}
+		
+		if ( state == SDL_RELEASED ){
+			rotate = False;
+		}
+	}
+}
+
+
+void mouseMotion( int x, int y ) {
+
+	if( rotate ) {
+		orient[0] += (double)(x - oldx) / 2.0;
+		orient[1] += (double)(y - oldy) / 2.0;
+		
+		oldx = (double) x;
+		oldy = (double) y;
+
+		display();
+	}
+}
+
+
+void buildLocalEdges( Partition_Index proc ) {
+	Index   indexCnt;
+	Index*  indices;
+	
+	IndexSet_RemoveAll( litEdges );
+	IndexSet_GetMembers( meshLayout->decomp->localElementSets[proc], &indexCnt, &indices );
+	if( indexCnt ) {
+		Index   edgeCnt;
+		Index*  edges;
+		Index   edge_I;
+		
+		edgeCnt = ElementLayout_BuildEdgeSubset( meshLayout->elementLayout, indexCnt, indices, &edges );
+		for( edge_I = 0; edge_I < edgeCnt; edge_I++ )
+			IndexSet_Add( litEdges, edges[edge_I] );
+		
+		if( edges )
+			Memory_Free( edges );
+	}
+	Memory_Free( indices );
+	
+	litNodes = meshLayout->decomp->localNodeSets[proc];
+}
+
+
+void buildShadowEdges( Partition_Index proc ) {
+	Index   indexCnt;
+	Index*  indices;
+
+	if( !meshLayout->decomp->shadowElementSets )
+		return;
+	
+	IndexSet_RemoveAll( litEdges );
+	IndexSet_GetMembers( meshLayout->decomp->shadowElementSets[proc], &indexCnt, &indices );
+	if( indexCnt ) {
+		Index   edgeCnt;
+		Index*  edges;
+		Index   edge_I;
+		
+		edgeCnt = ElementLayout_BuildEdgeSubset( meshLayout->elementLayout, indexCnt, indices, &edges );
+		for( edge_I = 0; edge_I < edgeCnt; edge_I++ )
+			IndexSet_Add( litEdges, edges[edge_I] );
+		
+		if( edges )
+			Memory_Free( edges );
+	}
+	Memory_Free( indices );
+	
+	litNodes = meshLayout->decomp->shadowNodeSets[proc];
+}
+
+
+void keyboard( void ) {
+	SDL_Event event;
+	
+	if ( SDL_PollEvent(&event) )
+	{
+		switch( event.type ){
+			
+			case SDL_QUIT:{
+				quit = 1;  
+			}
+			break;
+
+			case SDL_VIDEORESIZE:{
+				reshape( event.resize.w, event.resize.h );					 
+			}
+			break;
+
+			case SDL_KEYDOWN:{
+
+				switch (event.key.keysym.sym){
+					
+					case SDLK_ESCAPE:
+					{
+						quit = 1;
+					}
+					break;
+			
+					case ']':
+					{
+						if( ++viewProc >= meshLayout->decomp->procsInUse )
+							viewProc = meshLayout->decomp->procsInUse - 1;
+						build( viewProc );
+
+						display();
+					}
+					break;
+				
+					case '[':
+					{
+						if( --viewProc >= meshLayout->decomp->procsInUse )
+							viewProc = 0;
+						build( viewProc );
+
+						display();
+					}
+					break;
+				
+					case SDLK_f:
+					{
+						build = (build == buildLocalEdges) ? buildShadowEdges : buildLocalEdges;
+						build( viewProc );
+
+						display();
+					}
+					break;
+
+					default:
+					{
+					
+					}
+					break;
+				}
+						 
+			}
+			break;
+
+			case SDL_MOUSEMOTION:{
+				mouseMotion( event.motion.x, event.motion.y );
+			}
+			break;
+			
+			case SDL_MOUSEBUTTONDOWN:{
+				mouseClick( event.button.button, event.button.state, event.button.x, event.button.y );
+			}
+			break;
+			
+			case SDL_MOUSEBUTTONUP:{
+				mouseClick( event.button.button, event.button.state, event.button.x, event.button.y );
+			}
+			
+			default:
+			{
+				
+			}
+			break;
+		}
+	}
+}
+
+
+int main( int argc, char* argv[] ) {
+	int     rank;
+	
+	/* Initialise MPI */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+
+	// parse cmd-line params
+	
+	/* Build StGermain constructs */
+	Base_Init( &argc, &argv );
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	
+	buildStGermain();
+	
+	if( rank == 0 ) {
+		/* Root process, handles visualisation */
+
+		/* Initialize SDL for video output */
+		if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
+			fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
+			exit(1);
+		}
+
+		/* Create a 640x480 OpenGL screen */
+		if ( SDL_SetVideoMode(WIDTH, HEIGHT, 0, SDL_OPENGL) == NULL ) {
+			fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
+			SDL_Quit();
+			exit(2);
+		}
+		
+		/* Initialise GLUT */
+		/*glutInit( &argc, argv );
+		glutInitDisplayMode( GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE );
+		glutCreateWindow( "vis2" );
+		glutDisplayFunc( display );
+		glutInitWindowPosition( 200, 0 );
+		glutInitWindowSize( 300, 300 );
+		glutReshapeFunc( reshape );
+		glutKeyboardFunc( keyboard );
+		glutMouseFunc( mouseClick );
+		glutMotionFunc( mouseMotion );*/
+		
+		/* Initialise OpenGL */
+		glShadeModel( GL_SMOOTH );
+		glFrontFace( GL_CCW );
+		glEnable( GL_DEPTH_TEST );
+		glClearColor( 0.3, 0.3, 0.3, 1.0 );
+		glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+		glPointSize( 5.0 );
+		
+		/* Convert StGermain to OpenGL */
+		calcOrigin();
+		calcBBox();
+		litEdges = IndexSet_New( meshLayout->elementLayout->edgeCount );
+		litNodes = IndexSet_New( meshLayout->nodeLayout->nodeCount );
+		buildLocalEdges( 0 );
+		
+		//atexit( cleanUp );
+		//glutMainLoop();
+		while (!quit){
+			keyboard();
+			display();		
+		}
+		
+		cleanUp();
+	}
+	
+	// Destroy StGermain constructs, finalize
+	DiscretisationMesh_Finalise();
+	DiscretisationGeometry_Finalise();
+	Base_Finalise();
+
+	MPI_Finalize();
+
+	return EXIT_SUCCESS;
+}
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+
+# This will double up with the SDL libs for now. SDL_MAIN_LIBS contain -lSDLmain
+
+EXTERNAL_LIBS = ${SDL_MAIN_LIBS} ${CC_CXX_LFLAGS} -L${LIB_DIR} -lStGermainDiscretisation -lStGermainBase
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML GL GLX SDL
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = ViewersMeshLayoutViewer
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifeq (true,$(shell if test -r "${SDL_INCDIR}/SDL/SDL.h"; then echo true; fi ))
+	def_sub = src
+endif

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+subdirs = ${def_sub}
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.cxx
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.cxx	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.cxx	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,551 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (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: GLMesh.c 2453 2004-12-21 04:49:34Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+
+/* This file was renamed to a C++ file because of this header under PDT-TAU */
+extern "C" {
+#include <StGermain/StGermain.h>
+}
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#if defined(__APPLE__) && defined(__MACH__)
+	#include <OpenGL/gl.h>	// Header File For The OpenGL32 Library
+	#include <OpenGL/glu.h>	// Header File For The GLu32 Library
+#else
+	#include <GL/gl.h>	// Header File For The OpenGL32 Library
+	#include <GL/glu.h>	// Header File For The GLu32 Library
+#endif
+
+#include "types.h"
+#include "GLMesh.h"
+
+
+/* Textual name of this class */
+const Type GLMesh_Type = "GLMesh";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+GLMesh* GLMesh_New( void ) {
+	return _GLMesh_New( 
+		sizeof(GLMesh), 
+		GLMesh_Type, 
+		_GLMesh_Delete, 
+		_GLMesh_Print,
+		NULL );
+}
+
+
+void GLMesh_Init(
+		GLMesh*						self )
+{
+	/* General info */
+	self->type = GLMesh_Type;
+	self->_sizeOfSelf = sizeof(GLMesh);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _GLMesh_Delete;
+	self->_print = _GLMesh_Print;
+	self->_copy = NULL;
+	
+	/* GLMesh info */
+	_GLMesh_Init( self );
+}
+
+
+GLMesh* _GLMesh_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy )
+{
+	GLMesh* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(GLMesh) );
+	self = (GLMesh*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	/* General info */
+	
+	/* Virtual info */
+	
+	/* GLMesh info */
+	_GLMesh_Init( self );
+	
+	return self;
+}
+
+void _GLMesh_Init(
+		GLMesh*						self )
+{
+	self->vertCnt = 0;
+	self->verts = NULL;
+	self->edgeCnt = 0;
+	self->edges = NULL;
+	
+	self->rankCnt = 0;
+	self->localEdgeCnts = NULL;
+	self->localEdges = NULL;
+	self->shadowEdgeCnts = NULL;
+	self->shadowEdges = NULL;
+	self->vacantEdgeCnts = NULL;
+	self->vacantEdges = NULL;
+	
+	self->localColor[0] = 0.0;
+	self->localColor[1] = 0.0;
+	self->localColor[2] = 1.0;
+	self->shadowColor[0] = 0.2;
+	self->shadowColor[1] = 0.2;
+	self->shadowColor[2] = 0.6;
+	self->vacantColor[0] = 0.6;
+	self->vacantColor[1] = 0.6;
+	self->vacantColor[2] = 0.6;
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _GLMesh_Delete( void* glMesh ) {
+	GLMesh* self = (GLMesh*)glMesh;
+	
+	_GLMesh_Destroy( self );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+
+void _GLMesh_Print( void* glMesh, Stream* stream ) {
+	GLMesh* self = (GLMesh*)glMesh;
+	
+	/* Set the Journal for printing informations */
+	Stream* glMeshStream = Journal_Register( InfoStream_Type, "GLMeshStream" );
+
+	/* Print parent */
+	_Stg_Class_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( glMeshStream, "GLMesh (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* GLMesh info */
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public member functions
+*/
+
+void GLMesh_BuildFromMesh( void* glMesh, MeshLayout* mesh ) {
+	GLMesh*			self = (GLMesh*)glMesh;
+	Geometry*		geometry;
+	Node_GlobalIndex	point_I;
+	Edge_Index		edge_I;
+	ElementLayout*		elementLayout;
+	Partition_Index		rank_I;
+	
+	/* Ensure everything is already freed */
+	_GLMesh_Destroy( self );
+	
+	/* Copy the vertices */
+	self->vertCnt = mesh->nodeLayout->nodeCount;
+	self->verts = Memory_Alloc_Array( GLdouble, self->vertCnt * 3, "GLMesh->verts" );
+	assert( self->verts );
+	
+	geometry = mesh->elementLayout->geometry;
+	for( point_I = 0; point_I < mesh->nodeLayout->nodeCount; point_I++ ) {
+		unsigned	vert_I = point_I * 3;
+		Coord		point;
+		
+		geometry->pointAt( geometry, point_I, point );
+		self->verts[vert_I] = (GLdouble)point[0] - 0.5;
+		self->verts[vert_I + 1] = (GLdouble)point[1] - 0.5;
+		self->verts[vert_I + 2] = (GLdouble)point[2] - 0.5;
+	}
+	
+	/* Build the edges */
+	elementLayout = mesh->elementLayout;
+	self->edgeCnt = elementLayout->edgeCount;
+	self->edges = Memory_Alloc_Array( unsigned, self->edgeCnt * 2, "GLMesh->edges" );
+	assert( self->edges );
+
+	for( edge_I = 0; edge_I < elementLayout->edgeCount; edge_I++ ) {
+		unsigned	glEdge_I = edge_I * 2;
+		Edge		edge;
+		
+		elementLayout->edgeAt( elementLayout, edge_I, edge );
+		self->edges[glEdge_I] = (unsigned)edge[0];
+		self->edges[glEdge_I + 1] = (unsigned)edge[1];
+	}
+	
+	/* Build local edge indices */
+	self->rankCnt = mesh->decomp->procsInUse;
+	self->localEdgeCnts = Memory_Alloc_Array( unsigned, self->rankCnt, "GLMesh->localEdgeCnts" );
+	memset( self->localEdgeCnts, 0, sizeof(unsigned) * self->rankCnt );
+	self->localEdges = Memory_Alloc_Array( unsigned*, self->rankCnt, "GLMesh->localEdges" );
+	memset( self->localEdges, 0, sizeof(unsigned*) * self->rankCnt );
+	self->shadowEdgeCnts = Memory_Alloc_Array( unsigned, self->rankCnt, "GLMesh->localEdges" );
+	memset( self->shadowEdgeCnts, 0, sizeof(unsigned) * self->rankCnt );
+	self->shadowEdges = Memory_Alloc_Array( unsigned*, self->rankCnt, "GLMesh->shadowEdges" );
+	memset( self->shadowEdges, 0, sizeof(unsigned*) * self->rankCnt );
+	self->vacantEdgeCnts = Memory_Alloc_Array( unsigned, self->rankCnt, "GLMesh->vacantEdgeCnts" );
+	memset( self->vacantEdgeCnts, 0, sizeof(unsigned) * self->rankCnt );
+	self->vacantEdges = Memory_Alloc_Array( unsigned*, self->rankCnt, "GLMesh->vacantEdges" );
+	memset( self->vacantEdges, 0, sizeof(unsigned*) * self->rankCnt );
+	
+	for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
+		_GLMesh_BuildLocalEdges( self, mesh, rank_I );
+		_GLMesh_BuildShadowEdges( self, mesh, rank_I );
+		_GLMesh_BuildVacantEdges( self, mesh, rank_I );
+	}
+}
+
+
+void GLMesh_RenderGlobal( void* glMesh ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	unsigned	edge_I;
+	unsigned	vert_I;
+	
+	glColor3f( self->localColor[0], self->localColor[1], self->localColor[2] );
+	
+	/* Render vertices */
+	glBegin( GL_POINTS );
+	for( vert_I = 0; vert_I < self->vertCnt * 3; vert_I += 3 ) {
+		glVertex3dv( &self->verts[vert_I] );
+	}
+	glEnd();
+	
+	/* Render edges */
+	glBegin( GL_LINES );
+	for( edge_I = 0; edge_I < self->edgeCnt * 2; edge_I += 2 ) {
+		unsigned	vert_I = self->edges[edge_I] * 3;
+		unsigned	vert_J = self->edges[edge_I + 1] * 3;
+		
+		glVertex3dv( &self->verts[vert_I] );
+		glVertex3dv( &self->verts[vert_J] );
+	}
+	glEnd();
+}
+
+
+void GLMesh_RenderLocal( void* glMesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	unsigned	lEdge_I;
+	
+	assert( rank < self->rankCnt );
+	
+	if( !self->localEdgeCnts[rank] || !self->localEdges[rank] ) {
+		return;
+	}
+	
+	glColor3f( self->localColor[0], self->localColor[1], self->localColor[2] );
+	
+	/* Render vertices */
+	/*glBegin( GL_POINTS );
+	for( vert_I = 0; vert_I < self->vertCnt * 3; vert_I += 3 ) {
+		glVertex3dv( &self->verts[vert_I] );
+	}
+	glEnd();*/
+	
+	/* Render edges */
+	glBegin( GL_LINES );
+	for( lEdge_I = 0; lEdge_I < self->localEdgeCnts[rank]; lEdge_I++ ) {
+		unsigned	edge_I = self->localEdges[rank][lEdge_I] * 2;
+		unsigned	vert_I = self->edges[edge_I] * 3;
+		unsigned	vert_J = self->edges[edge_I + 1] * 3;
+		
+		glVertex3dv( &self->verts[vert_I] );
+		glVertex3dv( &self->verts[vert_J] );
+	}
+	glEnd();
+}
+
+
+void GLMesh_RenderShadow( void* glMesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	unsigned	sEdge_I;
+	
+	assert( rank < self->rankCnt );
+	
+	if( !self->shadowEdgeCnts[rank] || !self->shadowEdges[rank] ) {
+		return;
+	}
+	
+	glColor3f( self->shadowColor[0], self->shadowColor[1], self->shadowColor[2] );
+	
+	/* Render vertices */
+	/*glBegin( GL_POINTS );
+	for( vert_I = 0; vert_I < self->vertCnt * 3; vert_I += 3 ) {
+		glVertex3dv( &self->verts[vert_I] );
+	}
+	glEnd();*/
+	
+	/* Render edges */
+	glBegin( GL_LINES );
+	for( sEdge_I = 0; sEdge_I < self->shadowEdgeCnts[rank]; sEdge_I++ ) {
+		unsigned	edge_I = self->shadowEdges[rank][sEdge_I] * 2;
+		unsigned	vert_I = self->edges[edge_I] * 3;
+		unsigned	vert_J = self->edges[edge_I + 1] * 3;
+		
+		glVertex3dv( &self->verts[vert_I] );
+		glVertex3dv( &self->verts[vert_J] );
+	}
+	glEnd();
+}
+
+
+void GLMesh_RenderVacant( void* glMesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	unsigned	vEdge_I;
+	
+	assert( rank < self->rankCnt );
+	
+	if( !self->vacantEdgeCnts || !self->vacantEdgeCnts[rank] || !self->vacantEdges || !self->vacantEdges[rank] ) {
+		return;
+	}
+	
+	glColor3f( self->vacantColor[0], self->vacantColor[1], self->vacantColor[2] );
+	
+	/* Render vertices */
+	/*glBegin( GL_POINTS );
+	for( vert_I = 0; vert_I < self->vertCnt * 3; vert_I += 3 ) {
+		glVertex3dv( &self->verts[vert_I] );
+	}
+	glEnd();*/
+	
+	/* Render edges */
+	glBegin( GL_LINES );
+	for( vEdge_I = 0; vEdge_I < self->vacantEdgeCnts[rank]; vEdge_I++ ) {
+		unsigned	edge_I = self->vacantEdges[rank][vEdge_I] * 2;
+		unsigned	vert_I = self->edges[edge_I] * 3;
+		unsigned	vert_J = self->edges[edge_I + 1] * 3;
+		
+		glVertex3dv( &self->verts[vert_I] );
+		glVertex3dv( &self->verts[vert_J] );
+	}
+	glEnd();
+}
+
+
+void GLMesh_RenderRank( void* glMesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	
+	GLMesh_RenderLocal( self, rank );
+	GLMesh_RenderShadow( self, rank );
+	GLMesh_RenderVacant( self, rank );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Private Member functions
+*/
+
+void _GLMesh_BuildLocalEdges( void* glMesh, MeshLayout* mesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	Index		localElementCnt;
+	Index*		localElementSet;
+	
+	IndexSet_GetMembers( mesh->decomp->localElementSets[rank], &localElementCnt, &localElementSet );
+	
+	if( localElementCnt ) {
+		if( self->localEdges[rank] ) {
+			Memory_Free( self->localEdges );
+		}
+		
+		self->localEdgeCnts[rank] = ElementLayout_BuildEdgeSubset( mesh->elementLayout, 
+									   localElementCnt, 
+									   localElementSet, 
+									   &self->localEdges[rank] );
+	}
+	
+	Memory_Free( localElementSet );
+}
+
+
+void _GLMesh_BuildShadowEdges( void* glMesh, MeshLayout* mesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	Index		shadowElementCnt;
+	Index*		shadowElementSet;
+	
+	if( !mesh->decomp->shadowElementSets || !mesh->decomp->shadowElementSets[rank] ) {
+		return;
+	}
+	
+	IndexSet_GetMembers( mesh->decomp->shadowElementSets[rank], &shadowElementCnt, &shadowElementSet );
+	
+	if( shadowElementCnt ) {
+		IndexSet*	localEdgeSet;
+		IndexSet*	shadowEdgeSet;
+		Index		lEdge_I;
+		Index		sEdge_I;
+		
+		localEdgeSet = IndexSet_New( mesh->decomp->elementLayout->edgeCount );
+		for( lEdge_I = 0; lEdge_I < self->localEdgeCnts[rank]; lEdge_I++ ) {
+			IndexSet_Add( localEdgeSet, self->localEdges[rank][lEdge_I] );
+		}
+		
+		if( self->shadowEdges[rank] ) {
+			Memory_Free( self->shadowEdges );
+		}
+		self->shadowEdgeCnts[rank] = ElementLayout_BuildEdgeSubset( mesh->elementLayout, 
+									   shadowElementCnt, 
+									   shadowElementSet, 
+									   &self->shadowEdges[rank] );
+		shadowEdgeSet = IndexSet_New( mesh->decomp->elementLayout->edgeCount );
+		for( sEdge_I = 0; sEdge_I < self->shadowEdgeCnts[rank]; sEdge_I++ ) {
+			if( !IndexSet_IsMember( localEdgeSet, self->shadowEdges[rank][sEdge_I] ) ) {
+				IndexSet_Add( shadowEdgeSet, self->shadowEdges[rank][sEdge_I] );
+			}
+		}
+		
+		Memory_Free( self->shadowEdges[rank] );
+		IndexSet_GetMembers( shadowEdgeSet, &self->shadowEdgeCnts[rank], &self->shadowEdges[rank] );
+		Stg_Class_Delete( shadowEdgeSet );
+	}
+	
+	Memory_Free( shadowElementSet );
+}
+
+
+void _GLMesh_BuildVacantEdges( void* glMesh, MeshLayout* mesh, Partition_Index rank ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	ElementLayout*	elementLayout = mesh->decomp->elementLayout;
+	IndexSet*	domainEdgeSet;
+	IndexSet*	vacantEdgeSet;
+	Index		gEdge_I;
+	
+	domainEdgeSet = IndexSet_New( elementLayout->edgeCount );
+	
+	if( self->localEdgeCnts && self->localEdgeCnts[rank] ) {
+		unsigned	lEdge_I;
+		
+		for( lEdge_I = 0; lEdge_I < self->localEdgeCnts[rank]; lEdge_I++ ) {
+			IndexSet_Add( domainEdgeSet, self->localEdges[rank][lEdge_I] );
+		}
+	}
+	
+	if( self->shadowEdgeCnts && self->shadowEdgeCnts[rank] ) {
+		unsigned	sEdge_I;
+		
+		for( sEdge_I = 0; sEdge_I < self->shadowEdgeCnts[rank]; sEdge_I++ ) {
+			IndexSet_Add( domainEdgeSet, self->shadowEdges[rank][sEdge_I] );
+		}
+	}
+	
+	vacantEdgeSet = IndexSet_New( elementLayout->edgeCount );
+	
+	for( gEdge_I = 0; gEdge_I < elementLayout->edgeCount; gEdge_I++ ) {
+		if( !IndexSet_IsMember( domainEdgeSet, gEdge_I ) ) {
+			IndexSet_Add( vacantEdgeSet, gEdge_I );
+		}
+	}
+	
+	IndexSet_GetMembers( vacantEdgeSet, &self->vacantEdgeCnts[rank], &self->vacantEdges[rank] );
+	
+	Stg_Class_Delete( domainEdgeSet );
+	Stg_Class_Delete( vacantEdgeSet );
+}
+
+
+void _GLMesh_Destroy( void* glMesh ) {
+	GLMesh*		self = (GLMesh*)glMesh;
+	
+	if( self->verts ) {
+		Memory_Free( self->verts );
+		self->verts = NULL;
+	}
+	
+	if( self->edges ) {
+		Memory_Free( self->edges );
+		self->edges = NULL;
+	}
+	
+	if( self->localEdgeCnts ) {
+		Memory_Free( self->localEdgeCnts );
+		self->localEdgeCnts = NULL;
+	}
+	
+	if( self->localEdges ) {
+		Partition_Index		rank_I;
+		
+		for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
+			if( self->localEdges[rank_I] ) {
+				Memory_Free( self->localEdges[rank_I] );
+			}
+		}
+		Memory_Free( self->localEdges );
+		self->localEdges = NULL;
+	}
+	
+	if( self->shadowEdgeCnts ) {
+		Memory_Free( self->shadowEdgeCnts );
+		self->shadowEdgeCnts = NULL;
+	}
+	
+	if( self->shadowEdges ) {
+		Partition_Index		rank_I;
+		
+		for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
+			if( self->shadowEdges[rank_I] ) {
+				Memory_Free( self->shadowEdges[rank_I] );
+			}
+		}
+		Memory_Free( self->shadowEdges );
+		self->shadowEdges = NULL;
+	}
+	
+	if( self->vacantEdgeCnts ) {
+		Memory_Free( self->vacantEdgeCnts );
+		self->vacantEdgeCnts = NULL;
+	}
+	
+	if( self->vacantEdges ) {
+		Partition_Index		rank_I;
+		
+		for( rank_I = 0; rank_I < self->rankCnt; rank_I++ ) {
+			if( self->vacantEdges[rank_I] ) {
+				Memory_Free( self->vacantEdges[rank_I] );
+			}
+		}
+		Memory_Free( self->vacantEdges );
+		self->vacantEdges = NULL;
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Concrete IJKTopology class for element or node with 6 neighbours
+**	(only fully adjoining directions, no diagonals).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: GLMesh.h 2453 2004-12-21 04:49:34Z LukeHodkinson $
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Viewers_MeshViewer_GLMesh_h__
+#define __Viewers_MeshViewer_GLMesh_h__
+
+	/* Virtual function types */
+	
+	/* Textual name of this class */
+	extern const Type GLMesh_Type;
+
+	/** GLMesh class contents */
+	#define __GLMesh \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Stg_Class info */ \
+		unsigned		vertCnt; \
+		GLdouble*		verts; \
+		unsigned		edgeCnt; \
+		unsigned*		edges; \
+		\
+		unsigned		rankCnt; \
+		unsigned*		localEdgeCnts; \
+		unsigned**		localEdges; \
+		unsigned*		shadowEdgeCnts; \
+		unsigned**		shadowEdges; \
+		unsigned*		vacantEdgeCnts; \
+		unsigned**		vacantEdges; \
+		\
+		GLfloat			localColor[3]; \
+		GLfloat			shadowColor[3]; \
+		GLfloat			vacantColor[3]; \
+
+	struct _GLMesh { __GLMesh };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Create an GLMesh */
+	GLMesh* GLMesh_New( void );
+	
+	/** Initialise an GLMesh */
+	void GLMesh_Init(
+		GLMesh*						self );
+	
+	/** Creation implementation */
+	GLMesh* _GLMesh_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy );
+	
+	/** Initialisation implementation */
+	void _GLMesh_Init(
+		GLMesh*						self );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete() implementation */
+	void _GLMesh_Delete( void* glMesh );
+	
+	/** Stg_Class_Print() implementation */
+	void _GLMesh_Print( void* glMesh, Stream* stream );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public member functions
+	*/
+	
+	void GLMesh_BuildFromMesh( void* glMesh, MeshLayout* mesh );
+	
+	void GLMesh_RenderGlobal( void* glMesh );
+	
+	void GLMesh_RenderLocal( void* glMesh, Partition_Index rank );
+	
+	void GLMesh_RenderShadow( void* glMesh, Partition_Index rank );
+	
+	void GLMesh_RenderVacant( void* glMesh, Partition_Index rank );
+	
+	void GLMesh_RenderRank( void* glMesh, Partition_Index rank );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions
+	*/
+	
+	void _GLMesh_BuildLocalEdges( void* glMesh, MeshLayout* mesh, Partition_Index rank );
+	
+	void _GLMesh_BuildShadowEdges( void* glMesh, MeshLayout* mesh, Partition_Index rank );
+	
+	void _GLMesh_BuildVacantEdges( void* glMesh, MeshLayout* mesh, Partition_Index rank );
+	
+	void _GLMesh_Destroy( void* glMesh );
+	
+	
+#endif /* __Viewers_MeshViewer_GLMesh_h__ */

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include GLUT/default.def
+
+PROJECT = StGermain
+PACKAGE = ${def_bin}
+
+#hack
+DL_INCDIR=/usr/include
+DL_LIBDIR=/usr/lib
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_BIN = $(BLD_BINDIR)/$(PACKAGE)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_BIN)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) -I$(BLD_INCDIR)/StGermain `xml2-config --cflags` -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\" -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` -L${DL_LIBDIR} ${DL_LIBS}
+
+EXPORT_BINS = $(PROJ_BIN)
+PROJ_BINDIR = $(EXPORT_BINDIR)
+
+PROJ_SRCS = ${def_srcs}
+
+all: $(PROJ_BIN) export
+
+export:: export-binaries
+
+$(PROJ_BIN): $(PROJ_OBJS)
+	${CC} -o $@ $(PROJ_OBJS) $(CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) -I$(PROJ_INCDIR) $(LCFLAGS) $(LIBS)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_bin = mview
+
+def_hdrs = \
+	GLMesh.h \
+
+def_srcs = \
+	main.cxx \
+	GLMesh.cxx \
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/input.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/input.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/input.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<!-- don't touch the 2 parameters below... -->
+	<param name="allowUnbalancing"> True </param>
+	<param name="selfStorage"> storeAll </param>
+
+	<!-- key decomp info -->
+	<param name="decompDims"> 3 </param>
+	<param name="shadowDepth"> 1 </param>
+
+	<!-- Mesh size -->
+	<param name="meshSizeI"> 5 </param>
+	<param name="meshSizeJ"> 5 </param>
+	<param name="meshSizeK"> 5 </param>
+
+	<!-- mesh position -->
+	<param name="minX"> 0 </param>
+	<param name="maxX"> 2 </param>
+	<param name="minY"> 0 </param>
+	<param name="maxY"> 1 </param>
+	<param name="minZ"> 0 </param>
+	<param name="maxZ"> 0.5 </param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/main.cxx
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/main.cxx	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/main.cxx	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,345 @@
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <mpi.h>
+
+/* This file was renamed to a C++ file because of this header under PDT-TAU */
+extern "C" {
+#include <StGermain/StGermain.h>
+}
+
+#include <SDL/SDL.h>
+
+#if defined(__APPLE__) && defined(__MACH__)
+	#include <OpenGL/gl.h>	// Header File For The OpenGL32 Library
+	#include <OpenGL/glu.h>	// Header File For The GLu32 Library
+#else
+	#include <GL/gl.h>	// Header File For The OpenGL32 Library
+	#include <GL/glu.h>	// Header File For The GLu32 Library
+#endif
+
+#include "types.h"
+#include "GLMesh.h"
+
+
+/*
+** Constants
+*/
+
+#define MAX_GL_STRING_LEN 255
+
+
+/*
+** Global variables
+*/
+
+GLMesh*			glMesh = NULL;
+int			scrWidth;
+int			scrHeight;
+int			quit = 0;
+int			mpiInitialised = 0;
+int			stgInitialised = 0;
+int			sdlInitialised = 0;
+GLuint			fontBase = 0;
+int			rank = 0;
+Partition_Index		viewRank = 0;
+Partition_Index		maxRank = 0;
+int			oldMouseX;
+int			oldMouseY;
+GLdouble		xRot = 0.0;
+GLdouble		yRot = 0.0;
+int			motionOn = 0;
+
+
+/*
+** Function prototypes
+*/
+
+void		terminate( void );
+void		buildStGermain( int argc, char* argv[] );
+/*void		glPrintf( char *fmt, ... );*/
+void		initGL( void );
+void		display( void );
+void		reshape( int width, int height );
+void		mouseClick( int button, int state, int x, int y );
+void		mouseMotion( int x, int y );
+void		eventHandler( void );
+
+
+int main( int argc, char* argv[] ) {
+	/* Register termination function */
+	atexit( terminate );
+	
+	/* Initialise MPI */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	mpiInitialised = 1;
+
+	/* Build StGermain constructs */
+	Base_Init( &argc, &argv );
+	DiscretisationGeometry_Init( &argc, &argv );
+	DiscretisationMesh_Init( &argc, &argv );
+	buildStGermain( argc, argv );
+	stgInitialised = 1;
+	
+	if( rank == 0 ) {
+		/* Root process, handles visualisation */
+
+		/* Initialize SDL for video output */
+		if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
+			fprintf( stderr, "Unable to initialize SDL: %s\n", SDL_GetError() );
+			exit( 1 );
+		}
+		else {
+			sdlInitialised = 1;
+		}
+
+		/* Create a 640x480 OpenGL screen */
+		if( SDL_SetVideoMode( 640, 480, 0, SDL_OPENGL ) == NULL ) {
+			fprintf( stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError() );
+			exit( 2 );
+		}
+		
+		/* Initialise OpenGL */
+		initGL();
+		reshape( 640, 480 );
+
+		/* Enter main loop */
+		while( !quit ) {
+			eventHandler();
+			display();		
+		}
+	}
+	
+	return EXIT_SUCCESS;
+}
+
+
+void terminate( void ) {
+	if( glMesh ) {
+		Stg_Class_Delete( glMesh );
+	}
+
+	if( fontBase ) {
+		glDeleteLists( fontBase, 127 );
+	}
+	
+	if( sdlInitialised ) {
+		SDL_Quit();
+	}
+	
+	if( stgInitialised ) {
+		DiscretisationMesh_Finalise();
+		DiscretisationGeometry_Finalise();
+		Base_Finalise();
+	}
+	
+	if( mpiInitialised ) {
+		MPI_Finalize();
+	}
+}
+
+
+void buildStGermain( int argc, char* argv[] ) {
+	Dictionary*		dictionary;
+	Topology*		nTopology;
+	ElementLayout*		eLayout;
+	NodeLayout*		nLayout;
+	MeshDecomp*		decomp;
+	MeshLayout*		meshLayout;
+	XML_IO_Handler*		ioHandler;
+	char*			filename;
+	Dimension_Index		numPartitionedDims;
+	
+	dictionary = Dictionary_New();
+	
+	ioHandler = XML_IO_Handler_New();
+	if( argc >= 2 ) {
+		filename = strdup( argv[1] );
+	}
+	else {
+		filename = strdup( "input.xml" );
+	}
+	
+	if( IO_Handler_ReadAllFromFile( ioHandler, filename, dictionary ) == False ) {
+		printf( "Failed to open input XML file.\n" );
+		exit( EXIT_FAILURE );
+	}
+	
+	nTopology = (Topology*)IJK6Topology_New( "Topology", dictionary );
+	eLayout = (ElementLayout*)ParallelPipedHexaEL_New( "elementLayout", 3, dictionary );
+	nLayout = (NodeLayout*)CornerNL_New( "nodeLayout", dictionary, eLayout, nTopology );
+	numPartitionedDims = Dictionary_GetUnsignedInt_WithDefault( dictionary, "decompDims", 2 );
+	/* Make sure "StoreAll" is set so proc 0 can get all info */
+	decomp = (MeshDecomp*)HexaMD_New_All( "decomp", dictionary, MPI_COMM_WORLD, eLayout, nLayout, numPartitionedDims );
+	meshLayout = MeshLayout_New( "meshLayout", eLayout, nLayout, decomp );
+	
+	maxRank = decomp->procsInUse;
+	
+	if( rank == 0 ) {
+		glMesh = GLMesh_New();
+		GLMesh_BuildFromMesh( glMesh, meshLayout );
+	}
+	
+	Stg_Class_Delete( meshLayout );
+	Stg_Class_Delete( decomp );
+	Stg_Class_Delete( nLayout );
+	Stg_Class_Delete( eLayout );
+	Stg_Class_Delete( nTopology );
+	Stg_Class_Delete( dictionary );
+}
+
+
+/*void glPrintf( char *fmt, ... ) {
+	va_list		args;
+	char		str[MAX_GL_STRING_LEN];
+	
+	va_start( args, fmt );
+	vsprintf( str, fmt, args );
+	va_end( args );
+
+	glListBase( fontBase );
+	glCallLists( strlen( str ), GL_UNSIGNED_BYTE, str );
+}*/
+
+
+void initGL( void ) {
+	/*GLfloat		pda[3] = { 0.0, 0.3, 0.0 };*/
+
+	/* Set the background color */
+	glClearColor( 0.3, 0.3, 0.3, 1.0 );
+	
+	/* Enable back-face culling */
+	glEnable( GL_CULL_FACE );
+	
+	/* Set the shading model to smooth */
+	glShadeModel( GL_SMOOTH );
+	
+	/* Enable depth testing */
+	glEnable( GL_DEPTH_TEST );
+	glDepthFunc( GL_LEQUAL );
+	
+	glFrontFace( GL_CCW );
+	glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+	
+	/* Set the initial point thickness */
+	glPointSize( 5.0 );
+	/*glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION, pda);*/
+	
+	/* Build the font lists for text rendering */
+	/*fontBase = glGenLists( 127 );
+	for( glyph_I = 0; glyph_I < 127; glyph_I++ ) {
+		glNewList( fontBase + i, GL_COMPILE );
+		glutBitmapCharacter( GLUT_BITMAP_HELVETICA_12, i );
+		glEndList();
+	}*/
+	
+	glFlush();
+}
+
+
+void display( void ) {
+	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+	glMatrixMode( GL_MODELVIEW );
+	glLoadIdentity();
+	glTranslated( 0.0, 0.0, -3.0 );
+	glRotated( xRot, 0.0, 1.0, 0.0 );
+	glRotated( yRot, 1.0, 0.0, 0.0 );
+	
+	if( glMesh ) {
+		GLMesh_RenderRank( glMesh, viewRank );
+	}
+	
+	SDL_GL_SwapBuffers();
+}
+
+
+void reshape( int width, int height ) {
+	scrWidth = width;
+	scrHeight = height ? height : 1;
+
+	glViewport( 0, 0, scrWidth, scrHeight );
+	glMatrixMode( GL_PROJECTION );
+	glLoadIdentity();
+	gluPerspective( 45.0, (GLdouble)scrWidth / (GLdouble)scrHeight, 0.5, 30.0 );
+}
+
+
+void mouseClick( int button, int state, int x, int y ) {
+	if( button == SDL_BUTTON_LEFT ) {
+		if( state == SDL_PRESSED ) {
+			oldMouseX = x;
+			oldMouseY = y;
+			motionOn = 1;
+		}
+		else if ( state == SDL_RELEASED ) {
+			motionOn = 0;
+		}
+	}
+}
+
+
+void mouseMotion( int x, int y ) {
+	if( motionOn ) {
+		int	dx = x - oldMouseX;
+		int	dy = y - oldMouseY;
+		
+		xRot += (GLdouble)dx * 0.3;
+		yRot += (GLdouble)dy * 0.3;
+		
+		oldMouseX = x;
+		oldMouseY = y;
+	}
+}
+
+
+void eventHandler( void ) {
+	SDL_Event	event;
+	
+	if( SDL_PollEvent( &event ) ) {
+		switch( event.type ) {
+			case SDL_QUIT:
+				quit = 1;
+				break;
+			
+			case SDL_VIDEORESIZE:
+				reshape( event.resize.w, event.resize.h );
+				break;
+			
+			case SDL_KEYDOWN:
+				switch( event.key.keysym.sym ) {
+					case SDLK_ESCAPE:
+						quit = 1;
+						break;
+					
+					case SDLK_c:
+						xRot = 0.0;
+						yRot = 0.0;
+						break;
+					
+					case SDLK_r:
+						viewRank = (viewRank + 1) % maxRank;
+						break;
+
+					default:
+						break;
+				}
+				break;
+
+			case SDL_MOUSEMOTION:
+				mouseMotion( event.motion.x, event.motion.y );
+				break;
+			
+			case SDL_MOUSEBUTTONDOWN:
+				mouseClick( event.button.button, event.button.state, event.button.x, event.button.y );
+				break;
+			
+			case SDL_MOUSEBUTTONUP:
+				mouseClick( event.button.button, event.button.state, event.button.x, event.button.y );
+				break;
+			
+			default:
+				break;
+		}
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Makefile.def 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+bin = ${def_bin}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+
+# This will double up with SDL package for now. SDL_MAIN_LIBS contain -lSDLmain
+EXTERNAL_LIBS = ${SDL_MAIN_LIBS} ${CC_CXX_LFLAGS} -L${LIB_DIR} -lStGermainDiscretisation -lStGermainBase
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML GL GLX SDL
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Basic framework types.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 2258 2004-10-28 08:14:52Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Viewers_MeshViewer_types_h__
+#define __Viewers_MeshViewer_types_h__
+
+
+	typedef struct _GLMesh		GLMesh;
+
+	
+#endif /* __Viewers_MeshViewer_types_h__ */
+

Added: long/3D/SNAC/trunk/StGermain/Viewers/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Viewers/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Viewers/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+PROJ_ROOT = ..
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/build-functions.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/build-functions.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/build-functions.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+link VMake/build-functions.sh
\ No newline at end of file


Property changes on: long/3D/SNAC/trunk/StGermain/build-functions.sh
___________________________________________________________________
Name: svn:special
   + *

Added: long/3D/SNAC/trunk/StGermain/compatibility/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = compatibility
+
+RECURSE_DIRS = ${def_sub}
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+	@if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+

Added: long/3D/SNAC/trunk/StGermain/compatibility/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,32 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = libmpi libpmpich libpetsc libpython mpipython
+def_sub = libmpi libpetsc libpython mpipython

Added: long/3D/SNAC/trunk/StGermain/compatibility/libmpi/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libmpi/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libmpi/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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_lib = mpich
+
+def_srcs =
+
+def_unar = $(shell for i in $$(echo "-lmpich" | sed 's/-l//g'); do echo "${MPI_LIBDIR}/lib$$i.a"; done )

Added: long/3D/SNAC/trunk/StGermain/compatibility/libmpi/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libmpi/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libmpi/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3529 2006-04-20 05:25:22Z 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
+include Makefile.def
+
+# Only build this on Darwin systems
+ifeq (Darwin-mpich,${SYSTEM}-${MPI_IMPLEMENTATION})
+	lib = ${def_lib}
+	libdynamic = yes
+	
+	SRCS = ${def_srcs}
+	
+	EXTERNAL_LIBS = ${MPI_EXTERNAL_LIBS}
+	
+	# TODO: the following would be better if it dwas done in a way that the un-ar-ing of libpython2.2.a was not done every time this makefile is called, but rather as a dependancy
+	createMPI_LibDir = ${TMP_DIR}/lib-lib${lib}.${SO_EXT}
+	
+	# Create Directory if it hasn't already been made
+	create := $(shell if test ! -d ${createMPI_LibDir}; then ${MKDIR} ${createMPI_LibDir} ; fi ))
+
+	# Store current working directory
+	cwd := $(shell echo `pwd`)
+
+	newMPI_LibObjs := $(shell \
+		for i in ${def_unar}; do \
+			curLib=`echo $$i | $(SED) 's/\///g'`; \
+			if test ! -d ${createMPI_LibDir}/$$curLib ; then \
+				${MKDIR} ${createMPI_LibDir}/$$curLib; \
+				${CD} ${createMPI_LibDir}/$$curLib; \
+				${AR} -x $$i; \
+				for j in `ls *.o`; do \
+					$(CP) $$j ${createMPI_LibDir}/$$curLib.$$j; \
+				done; \
+				${CD} ${createMPI_LibDir}; \
+			fi; \
+			for j in `ls ${createMPI_LibDir}/$$curLib.*.o`; do \
+				echo $$j; \
+			done; \
+		done; \
+		${CD} ${cwd} ) 
+
+	EXTERNAL_OBJS += ${newMPI_LibObjs}
+	PROJ_CLEAN += ${createMPI_LibDir}
+
+	RM_LIST_TEMPS += ${createMPI_LibDir}/*.o 
+	RM_LIST_TEMPS += $(shell \
+		for i in ${def_unar}; do \
+			curLib=`echo $$i | $(SED) 's/\///g'`; \
+			echo ${createMPI_LibDir}/$$curLib; \
+		done; )
+
+else
+	WARN := $(shell echo libmpi \(proxy lib\) isn't being built as this system doesn't need it. 1>&2 )
+endif
+
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_inc = StGermain/compatibility
+def_lib = petsc
+
+def_hdrs = petsccompat.h
+
+def_srcs =
+
+def_unar = $(shell for i in $$(echo ${PETSC_LIBFILES} | sed 's/-l//g'); do echo "${PETSC_LIBDIR}/lib$$i.a"; done )

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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
+
+includes = ${def_inc}
+
+HDRS = ${def_hdrs}
+
+# Only build this on Darwin systems
+ifeq (Darwin,$(SYSTEM))
+# Only build this if PETSc is available
+ifeq (true,$(shell if test -r ${PETSC_INCDIR}/petsc.h; then echo true; fi ))
+	lib = ${def_lib}
+	libdynamic = yes
+	
+	SRCS = ${def_srcs}
+	
+	EXTERNAL_LIBS = ${MPI_EXTERNAL_LIBS}
+	
+	createExternal_LibDir = ${TMP_DIR}/lib-lib${lib}.${SO_EXT}
+	ifeq (nonexistent, $(shell if test "x$$(ls ${createExternal_LibDir} 2> /dev/null)" = "x"; then echo "nonexistent"; fi ))
+		create := $(shell ${MKDIR} ${createExternal_LibDir}; cwd=`pwd`; for i in ${def_unar}; do curLib=`echo $$i | $(SED) 's/\///g'`; echo $$curLib; ${MKDIR} ${createExternal_LibDir}/$$curLib; ${CD} ${createExternal_LibDir}/$$curLib; ${AR} -x $$i; for j in `ls *.o`; do $(CP) $$j ${createExternal_LibDir}/$$curLib.$$j; done; done; ${CD} ${cwd} ) 
+	endif
+	
+	newExternal_LibObjs := $(wildcard ${createExternal_LibDir}/*.o)
+	EXTERNAL_OBJS += ${newExternal_LibObjs}
+else
+	WARN := $(shell echo libpetsc \(proxy lib\) isn't being built as PETSc isn't detected. 1>&2 )
+endif
+else
+	WARN := $(shell echo libpetsc \(proxy lib\) isn't being built as this system doesn't need it. 1>&2 )
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/petsccompat.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/petsccompat.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/petsccompat.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,298 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Interface between StGermain and different versions of PETSc, so we can modify default
+**	PETSc functionality where appropriate, and also allow users with slightly out-of-date
+**	versions of PETSc to keep using the code.
+**
+** Assumptions:
+**
+** Comments:
+**	Please add new macros to the appropriate section: modifications for desired functionality,
+**	backward compatibility or forward compatibility. Please also add a comment about the 
+**	purpose of the macro where this isn't fairly obvious, and the versions of PETSc it applies
+**	to.
+**	It is intended we will refactor the Linear Algebra module soon to always use the latest
+**	PETSc interface, thereby removing the need for the forward compatibility section.
+**
+**
+** $Id: petsccompat.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __PETSCCOMPAT_H
+#define __PETSCCOMPAT_H
+
+/**************************               PETSC INCLUDES            ******************************************/
+
+/* Need to make sure these are first, so we don't try and over-ride the symbols within PETSc itself */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR >= 2 )) || ( PETSC_VERSION_MAJOR > 2 )
+	#include <petscksp.h>
+#else	
+	#include <petscsles.h>
+#endif	
+
+/************************** MODIFICATIONS FOR DESIRED FUNCTIONALITY ******************************************/
+
+/* Specific modifications needed for desired functionality: PETSc 2.3.0 and onwards */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR >= 3 )) || ( PETSC_VERSION_MAJOR > 2 )
+	/* PetscLogInfo compatibility between for 2.3.0 and previous -- AlanLo */
+	#undef PetscLogInfo
+	#if defined(PETSC_USE_DEBUG)
+		#define PetscLogInfo(...) PetscLogInfo_Private( __VA_ARGS__ )
+	#else
+		#define PetscLogInfo(...)
+	#endif
+
+#endif
+
+/* Specific modifications needed for desired functionality: PETSc 2.2.0 and onwards */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR >= 2 )) || ( PETSC_VERSION_MAJOR > 2 )
+	/* Being specific about Matrix creation, since the internal rules behind this changed after 2.2 :
+		"This was needed for petsc 2.2.1 when building matrices (in a finite amount of time) 
+		for use wih either MUMPs or SuperLU" -- DavidMay */
+	#define MatCreateMPIAIJ( MPI, globalRow, globalCol, localRow, localCol, maxPerRow, diag, maxPerCol, offDiag, mat ) 	\
+		do {										\
+			int numProcs = 0; \
+			MatCreate( MPI, globalRow, globalCol, localRow, localCol, mat ); 					\
+			MatSetFromOptions( *mat ); 										\
+			MPI_Comm_size( MPI_COMM_WORLD, &numProcs );								\
+			if( numProcs > 1 ) {											\
+				MatMPIAIJSetPreallocation( *mat, maxPerRow, diag, maxPerCol, offDiag );				\
+			}													\
+			else {													\
+				MatSeqAIJSetPreallocation( *mat, maxPerRow, diag );						\
+			} \
+		} \
+		while( 0 )
+
+#endif		
+/*---------------------------------------------------------------------------------------------------*/
+
+
+/************************** BACKWARD COMPATIBILITY ****************************************************/
+
+/* For PETSc 2.2.x and earlier: backward compatibility for needed functions from 2.3.x onwards */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR <= 2 )) 
+
+	/* Backward compatibility from current -> old interface */
+	#define PetscMallocGetCurrentUsage( space )\
+			PetscTrSpace( (space), NULL, NULL )
+
+	#define PetscMallocGetMaximumUsage( maxs )\
+			PetscTrSpace( NULL, NULL, (maxs) )
+
+	/* These macros for non-essential functions allow a PETSc 2.2.x or earlier user to compile
+	   the code, but not to run the multigrid component, which requires the following new
+	   functions from PETSc 2.3.0 onwards */
+	#define MatMatMult( a1, a2, a3, a4, a5 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define MatPtAP( a1, a2, a3, a4, a5 )					\
+		fprintf( stderr, "Must use at least PETSc 2.3.0 for 'MatPtAP'.\n" );
+
+	#define PCMGSetLevels( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetType( a1, a2 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetNumberSmoothUp( a1, a2 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetNumberSmoothDown( a1, a2 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGGetSmoother( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGGetSmootherDown( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGGetSmootherUp( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetResidual( a1, a2, a3, a4 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetRestriction( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetInterpolate( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetRhs( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetX( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetR( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGSetCyclesOnLevel( a1, a2, a3 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define PCMGGetLevels( a1, a2 ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+	#define VecGetValues( vector, nInds, inds, array ) \
+		fprintf( stderr, "Must use at least PETSc 2.3.0.\n" )
+
+#endif	/* (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR < 3 )) */
+
+/* For PETSc 2.1.x and earlier: backward compatibility for features from newer PETSc versions we want to use */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR <= 1 ))
+
+	/* These typedefs don't appear till 2.2... */
+	typedef int PetscErrorCode;
+	typedef int PetscInt;
+
+	#define PETSC_FILE_RDONLY	PETSC_BINARY_RDONLY
+	#define PETSC_FILE_WRONLY	PETSC_BINARY_WRONLY
+	#define PETSC_FILE_CREATE	PETSC_BINARY_CREATE
+
+	#define KSPGetOperators(ksp,Amat,Pmat,flag )			\
+		do {										\
+			PC	__pc;							\
+												\
+			KSPGetPC( (ksp), &__pc );				\
+			PCGetOperators( __pc, Amat, Pmat, flag );	\
+		}										\
+		while( 0 )
+	
+	/* Functions only necessary for multigrid */
+	#define PCBJacobiGetSubKSP( a, b, c, d )					\
+		fprintf( stderr, "Must at least PETSc version 2.2.0.\n" )
+
+#endif
+/*---------------------------------------------------------------------------------------------------*/
+
+
+/************************** FORWARD COMPATIBILITY ****************************************************/
+
+/* We keep using the interface as at 2.3.0 until 2.3.1 is released with the new interface */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR == 3 ) && (PETSC_VERSION_SUBMINOR == 0 ) && (PETSC_VERSION_PATCH >= 44 )) \
+    || (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR == 3 ) && (PETSC_VERSION_SUBMINOR > 0 )) \
+    || (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR > 3 )) \
+	|| ( PETSC_VERSION_MAJOR > 2 )
+	
+	#define PETSC_FILE_RDONLY	FILE_MODE_READ
+	#define PETSC_FILE_WRONLY	FILE_MODE_APPEND
+	#define PETSC_FILE_CREATE	FILE_MODE_WRITE
+	
+#endif
+
+
+/* Forward compatibility from 2.1.x to PETSc 2.2.x and greater */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR >= 2 )) || ( PETSC_VERSION_MAJOR > 2 )
+
+	/* Forward compatibility: we use the old SLES interface in the Linear Algebra code, so the newer 
+	   versions need to convert to use it */
+
+	/* Object */
+	#define SLES KSP
+
+	/* Methods */
+	#define SLESCreate KSPCreate
+	#define SLESSetUp KSPSetUp
+	#define SLESSolveTranspose KSPSolveTranspose
+	#define SLESDestroy KSPDestroy
+	#define SLESGetTolerances KSPGetTolerances
+	#define SLESSetTolerances KSPSetTolerances
+	#define SLESSetInitialGuessNonzero KSPSetInitialGuessNonzero
+	#define SLESGetRhs KSPGetRhs
+	#define SLESGetSolution KSPGetSolution
+	#define SLESSetPC KSPSetPC
+	#define SLESGetPC KSPGetPC
+	#define SLESSetMonitor KSPSetMonitor
+	#define SLESClearMonitor KSPClearMonitor
+	#define SLESGetMonitorContext KSPGetMonitorContext
+	#define SLESSetConvergenceTest KSPSetConvergenceTest
+	#define SLESGetConvergenceContext KSPGetConvergenceContext
+	#define SLESSetOperators KSPSetOperators
+	#define SLESSetFromOptions KSPSetFromOptions
+	#define SLESGetIterationNumber KSPGetIterationNumber
+
+	#define SLESGetKSP( sles, kspPtr ) \
+		( (*(kspPtr)) = (sles) )
+
+	/* Special rule for PETSc 2.2.0, thereafter it changed */
+	#if (PETSC_VERSION_MAJOR == 2) && (PETSC_VERSION_MINOR == 2) && (PETSC_VERSION_SUBMINOR == 0)
+		#define SLESSolve(s,b,u,its) KSPSetRhs(s,b);KSPSetSolution(s,u);KSPSolve(s);KSPGetIterationNumber(s,its)
+	#else	
+		#define SLESSolve(s,b,u,its) KSPSolve(s,b,u);KSPGetIterationNumber(s,its)
+	#endif
+
+	/* In Snark2, we use the old MatMerge interface */
+	#define MatMerge( comm, inMat, outMatPtr ) \
+		MatMerge( comm, inMat, PETSC_DECIDE, MAT_INITIAL_MATRIX, outMatPtr )
+
+#endif
+
+
+/* Additional forward compatibility to 2.3.x and greater */
+#if (( PETSC_VERSION_MAJOR == 2 ) && ( PETSC_VERSION_MINOR >= 3 )) || ( PETSC_VERSION_MAJOR > 2 )
+
+	#define VecSet( value, vec ) \
+			VecSet( vec, *value )
+
+	#define PetscObjectGetName( obj, name ) \
+			PetscObjectGetName( obj, (const char**)name )
+
+	#define VecScale( value, vec ) \
+			VecScale( vec, *value )
+
+	#define VecAXPY( a, x, y ) \
+			VecAXPY( y, *a, x )
+
+	#define VecAYPX( a, x, y ) \
+			VecAYPX( y, *a, x )
+
+	#define MatCreate( comm, rowLocal, colLocal, rowGlobal, colGlobal, mat ) \
+			MatCreate( comm, mat ); MatSetSizes( *mat, rowLocal, colLocal, rowGlobal, colGlobal )
+
+	#define VecPointwiseDivide( dividend, denominator, destination ) \
+			VecPointwiseDivide( destination, dividend, denominator )
+
+	#define MatAXPY( a, x, y, matStructure ) \
+			MatAXPY( y, *a, x, matStructure )
+
+	#define MatAYPX( a, x, y ) \
+			MatAYPX( y, *a, x )
+	
+	#define MatScale( v, m ) \
+		MatScale( m, *v )
+
+#endif
+
+
+
+#endif /* ndef __PETSCCOMPAT_H */
+

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2746 2005-03-06 00:29:00Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = pmpich
+
+def_srcs =
+
+def_unar = $(shell for i in $$(echo "-lpmpich" | sed 's/-l//g'); do echo "${MPI_LIBDIR}/lib$$i.a"; done )

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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.rules 2746 2005-03-06 00:29:00Z 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
+
+# Only build this on Darwin systems
+ifeq (Darwin,$(SYSTEM))
+ifeq (Tiger,$(KERNEL_RELEASE)) # So far only on Tiger's we need this
+	lib = ${def_lib}
+	libdynamic = yes
+	
+	SRCS = ${def_srcs}
+	
+	EXTERNAL_LIBS = ${MPI_EXTERNAL_LIBS}
+	
+	# TODO: the following would be better if it dwas done in a way that the un-ar-ing of libpython2.2.a was not done every time this makefile is called, but rather as a dependancy
+	createMPI_LibDir = ${TMP_DIR}/lib-lib${lib}.${SO_EXT}
+	ifeq (nonexistent, $(shell if test "x$$(ls ${createMPI_LibDir} 2> /dev/null)" = "x"; then echo "nonexistent"; fi ))
+		create := $(shell ${MKDIR} ${createMPI_LibDir}; cwd=`pwd`; for i in ${def_unar}; do curLib=`echo $$i | $(SED) 's/\///g'`; echo $$curLib; ${MKDIR} ${createMPI_LibDir}/$$curLib; ${CD} ${createMPI_LibDir}/$$curLib; ${AR} -x $$i; for j in `ls *.o`; do $(CP) $$j ${createMPI_LibDir}/$$curLib.$$j; done; done; ${CD} ${cwd} ) 
+	endif
+
+	newMPI_LibObjs := $(wildcard ${createMPI_LibDir}/*.o)
+	EXTERNAL_OBJS += ${newMPI_LibObjs}
+	PROJ_CLEAN += ${createMPI_LibDir}
+else
+	WARN := $(shell echo libpmpich \(proxy lib\) isn't being built as this system doesn't need it. 1>&2 )
+endif
+else
+	WARN := $(shell echo libpmpich \(proxy lib\) isn't being built as this system doesn't need it. 1>&2 )
+endif
+
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpython/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpython/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpython/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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_lib = ${PYTHON_LIB}
+
+def_srcs =
+
+def_unar = ${PYTHON_STATIC_LIB}

Added: long/3D/SNAC/trunk/StGermain/compatibility/libpython/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/libpython/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/libpython/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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
+ifndef PYTHON_MAC_DEFAULT
+ifndef PYTHON_HAVE_SO_LIB
+
+	ifeq (true,$(shell if test "${PYTHON_STATIC_LIB}x" != "x" -a -r "${PYTHON_STATIC_LIB}"; then echo true; fi ))
+		lib = ${def_lib}
+		libdynamic = yes
+
+		SRCS = ${def_srcs}
+
+		EXTERNAL_LIBS = ${PYTHON_EXTERNAL_LIBS} ${MATH_LIBS}
+
+		# TODO: the following would be better if it dwas done in a way that the un-ar-ing of libpython2.2.a was not done every time this makefile is called, but rather as a dependancy
+		createPyLibDir = ${TMP_DIR}/lib-lib${lib}.${SO_EXT}
+		testfile = ${createPyLibDir}/object.o
+		ifeq (nonexistent, $(shell if test ! -r ${testfile}; then echo nonexistent; fi ))
+			create := $(shell if test ! -d ${createPyLibDir}; then ${MKDIR} ${createPyLibDir}; fi; cwd=`pwd`; ${CD} ${createPyLibDir}; ${AR} -x ${def_unar}; ${CD} ${cwd} )
+		endif
+
+		newPyLibObjs := $(wildcard ${createPyLibDir}/*.o)
+		EXTERNAL_OBJS += ${newPyLibObjs}
+	else
+		WARN := $(shell echo libpython \(proxy lib\) isn't being built as Python isn't detected. 1>&2 )
+	endif
+endif
+endif
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/compatibility/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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} 
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/compatibility/mpipython/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/mpipython/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/mpipython/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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_bin = mpipython
+
+def_srcs = \
+	main.c

Added: long/3D/SNAC/trunk/StGermain/compatibility/mpipython/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/mpipython/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/mpipython/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: main.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+#include <stdio.h>
+#include <mpi.h>
+
+DL_EXPORT(int) Py_Main( int, char ** );
+
+int main( int argc, char **argv ) {
+	int status;
+	
+	status = MPI_Init( &argc, &argv );
+	if( status != MPI_SUCCESS ) {
+		printf( "%s: MPI_Init failed! Exiting ...\n", argv[0] );
+		return status;
+	}
+
+	status = Py_Main( argc, argv );
+
+	MPI_Finalize();
+
+	return status;
+}

Added: long/3D/SNAC/trunk/StGermain/compatibility/mpipython/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/compatibility/mpipython/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/compatibility/mpipython/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3866 2006-10-16 12:19:52Z 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
+	bin = ${def_bin}
+
+	SRCS = ${def_srcs}
+
+	EXTERNAL_LIBS = ${EXPORT_DYNAMIC_LFLAGS}
+
+	packages = MPI PYTHON MATH 
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/configure.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/configure.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/configure.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+link VMake/configure.sh
\ No newline at end of file


Property changes on: long/3D/SNAC/trunk/StGermain/configure.sh
___________________________________________________________________
Name: svn:special
   + *

Added: long/3D/SNAC/trunk/StGermain/doc/C_full.doxyconf.in
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/C_full.doxyconf.in	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/C_full.doxyconf.in	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1098 @@
+# Doxyfile 1.3.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = StGermain
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, 
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is used 
+# as the annotated text. Otherwise, the brief description is used as-is. If left 
+# blank, the following values are used ("$name" is automatically replaced with the 
+# name of the entity): "The $name class" "The $name widget" "The $name file" 
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS          = *.c *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = build
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = *Python* JournalDummy.* JournalWrappers.*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 3
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = _
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = YES
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = DEBUG 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse the 
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = StGermain.doxytag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 800
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes that 
+# lay further from the root node will be omitted. Note that setting this option to 
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+# note that a graph may be further truncated if the graph's image dimensions are 
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO

Added: long/3D/SNAC/trunk/StGermain/doc/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 2338 2004-11-19 04:51:11Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_doxinputs = C_full.doxyconf.in

Added: long/3D/SNAC/trunk/StGermain/doc/doxygen.css
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/doxygen.css	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/doxygen.css	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,260 @@
+div.header {
+	background: #DFDFFF;
+	border: 1px solid #9595B5;
+	color: #000000;
+	font-size: small;
+	font-family: sans-serif;
+	font-style: normal;
+	margin-bottom: 1em;
+	padding-top: 3px;
+	padding-bottom: 3px;
+	padding-left: 10px;
+	text-align: left;
+}
+div.hnav {
+	float: left;
+}
+div.hindex {
+	padding-right: 10px;
+	text-align: right;
+}
+A.header{
+       color: #252e78;
+}
+A.header:visited {
+       color: #25782e;
+}
+A.header:hover {
+	background-color: #DFDFFF;
+}
+div.footer{
+	background: #DFDFFF;
+	border: 1px solid #9595B5;
+	color: #000000;
+	font-size: small;
+	font-family: sans-serif;
+	font-style: normal;
+	margin-top: 5em;
+	padding-top: 3px;
+	padding-bottom: 3px;
+	text-align: center;
+}
+
+H1 {
+	text-align: center;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+H2 {
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+	width: 100%;
+	background-color: #eeeeff;
+	border: 1px solid #B0B0B0;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 120%;
+}
+
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+       padding: 2px;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+       padding: 2px;
+}
+A.qindex:hover {
+	text-decoration: none;
+	background-color: #ddddff;
+	padding: 2px;
+}
+A.qindexHL {
+	text-decoration: none;
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	padding: 2px 6px;
+	border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+	text-decoration: none;
+	background-color: #6666cc;
+	color: #ffffff;
+	padding: 2px 6px;
+}
+
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #1A419D}
+A.codeRef { font-weight: normal; color: #1A419D}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	padding: 6px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 14px }
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #eeeeff;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+	background-color: #eeeeff;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 14px;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 14px;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-style: solid;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	font-size: 12px;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-style: solid;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	font-size: 13px;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #eeeeff;
+}
+TD.tiny      { font-size: 75%;
+}
+a {
+	color: #252E78;
+}
+a:visited {
+	color: #3D2185;
+}

Added: long/3D/SNAC/trunk/StGermain/doc/footer.html
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/footer.html	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/footer.html	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+<div class="footer">
+$projectname documentation generated by <a href="http://www.doxygen.org">doxygen</a> at $datetime
+</div>
+
+</body>
+</html>

Added: long/3D/SNAC/trunk/StGermain/doc/generateForWeb.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/generateForWeb.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/generateForWeb.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+export PROJ_ROOT=`pwd | sed 's/doc$//'`
+export REVLINE=`svn info | grep Revision`
+
+# Find the "INPUT" field and add the root project dir to it
+cat "web.doxyconf.in" | sed 's:\(^[ \t]*INPUT[ \t]*=\):\1 '"${PROJ_ROOT}:"  > "web.doxyconf.in.1"
+
+# Find the "STRIP_FROM_PATH" field and add the root project dir to it
+cat "web.doxyconf.in.1" | sed 's:\(^[ \t]*STRIP_FROM_PATH[ \t]*=\):\1 '"${PROJ_ROOT}:"  > "web.doxyconf.in.2"
+
+# Find the "PROJECT_NUMBER" field and add the project revision to it
+cat "web.doxyconf.in.2" | sed 's+\(^[ \t]*PROJECT_NUMBER[ \t]*=\)+\1 '"${REVLINE}+"  > "web.doxyconf.in.3"
+
+# Run doxygen
+doxygen "web.doxyconf.in.3"
+
+
+# Clean up
+rm -f "web.doxyconf.in.1" "web.doxyconf.in.2" "web.doxyconf.in.3"
+


Property changes on: long/3D/SNAC/trunk/StGermain/doc/generateForWeb.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/doc/header.html
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/header.html	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/header.html	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,22 @@
+<html>
+<body>
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+		<title>$title</title>
+		<link href="doxygen.css" rel="stylesheet" type="text/css">
+	</head>
+<body>
+<div class="header">
+	<div class="hnav">
+		<a class="header" href="http://csd.vpac.org">VPAC - Computational Software Development</a>
+	</div>
+	<div class="hindex">
+		<a class="header" href="main.html">Main</a> |
+		<a class="header" href="http://csd.vpac.org/twiki/bin/view/Stgermain/WebHome">StGermain FrameWork</a> |
+		<a class="header" href="http://csd.vpac.org/twiki/bin/view/Stgermain/InstallationGuide">Installation Guide</a> |
+		<a class="header" href="http://csd.vpac.org/twiki/bin/view/Stgermain/ProgrammersGuide">Programmers Guide</a> |
+		<a class="header" href="http://csd.vpac.org/twiki/bin/view/Stgermain/StGermainTutorials">Tutorials</a>
+	</div>
+</div>
+

Added: long/3D/SNAC/trunk/StGermain/doc/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 2338 2004-11-19 04:51:11Z 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
+
+# test that Doxygen is installed and working 
+
+
+include Makefile.def
+DOXINPUTS = ${def_doxinputs}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/doc/web.doxyconf.in
===================================================================
--- long/3D/SNAC/trunk/StGermain/doc/web.doxyconf.in	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/doc/web.doxyconf.in	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1098 @@
+# Doxyfile 1.3.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = StGermain
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, 
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is used 
+# as the annotated text. Otherwise, the brief description is used as-is. If left 
+# blank, the following values are used ("$name" is automatically replaced with the 
+# name of the entity): "The $name class" "The $name widget" "The $name file" 
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS          = *.c *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = build
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = *Python* JournalDummy.* JournalWrappers.*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 3
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = _
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man_api
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = DEBUG 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse the 
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = StGermain.doxytag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 800
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes that 
+# lay further from the root node will be omitted. Note that setting this option to 
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+# note that a graph may be further truncated if the graph's image dimensions are 
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermain
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 = src static dynamic tests testsDynamic Python

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 955 2004-03-04 18:43:37Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermain -lStGermainDiscretisation -lStGermainBase `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS)
+LCCFLAGS =
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 662 2004-01-20 12:34:17Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_pyb = General
+def_pyb_package = StGermain/Bindings
+
+def_srcs = \
+	misc.c \
+	bindings.c \
+	init.c
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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.h"
+#include <limits.h>
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef General_Python_Methods[] = {
+	{ General_Python_copyright__name__,	General_Python_copyright,		METH_VARARGS, General_Python_copyright__doc__	},
+	{ General_Python_Initialise__name__,	General_Python_Initialise,	METH_VARARGS, General_Python_Initialise__doc__	},
+	{ 0, 0, 0, 0 }
+};
+
+/* "Initialise" member */
+char General_Python_Initialise__doc__[] = "Initialise all StGermain C modules";
+char General_Python_Initialise__name__[] = "Initialise";
+PyObject* General_Python_Initialise( PyObject* self, PyObject* args ) {
+	int result = 0;
+	int argc = 0;
+	char **argv = NULL;
+	
+	/*
+	TODO: grab the argc and argv values to pass in correctly
+	*/
+	/* Obtain arguements */
+	#if 0
+	if( !PyArg_ParseTuple( args, "iO:", &, &len ) ) {
+		return NULL;
+	}
+	#endif
+
+	result = StGermain_Init( &argc, &argv );
+	return Py_BuildValue("i", result);
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+*/
+/** \file
+**  Role:
+**	Build the binding table(s).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: bindings.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __General_Python_bindings_h__
+#define __General_Python_bindings_h__
+	
+	extern struct PyMethodDef General_Python_Methods[];
+
+	extern char General_Python_Initialise__name__[];
+	extern char General_Python_Initialise__doc__[];
+	PyObject* General_Python_Initialise( PyObject* self, PyObject* args );
+	
+#endif /* __General_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 General_Python__doc__[] = "This module is for general StGermain bindings, such as initialisation.";
+
+void initGeneral() {
+	Py_InitModule4( "General", General_Python_Methods, General_Python__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "Can't initialize module General" );
+	}
+	return;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.rules 1792 2004-07-30 05:42:39Z 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
+
+pyb = ${def_pyb}
+
+SRCS = ${def_srcs}
+PYTHON_PACKAGE = ${def_pyb_package}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_LIBS = -lStGermain
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 General_Python_copyright__doc__[] = "";
+char General_Python_copyright__name__[] = "copyright";
+
+PyObject* General_Python_copyright( PyObject* self, PyObject* args ) {
+	return Py_BuildValue( "s", "StGermain.Bindings.General Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __General_Python_misc_h__
+#define __General_Python_misc_h__
+	
+	/* "copyright" member */
+	extern char General_Python_copyright__name__[];
+	extern char General_Python_copyright__doc__[];
+	PyObject* General_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __General_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermain `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS)
+LCCFLAGS =
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = MPI
+def_pyb_package = StGermain/Bindings
+
+def_srcs = \
+	misc.c \
+	bindings.c \
+	init.c
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,91 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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.h"
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef MPI_Python_Methods[] = {
+	{ MPI_Python_copyright__name__,		MPI_Python_copyright,	METH_VARARGS, MPI_Python_copyright__doc__	},
+	{ MPI_Python_COMM_WORLD__name__,	MPI_Python_COMM_WORLD,	METH_VARARGS, MPI_Python_COMM_WORLD__doc__	},
+	{ MPI_Python_Comm_size__name__,		MPI_Python_Comm_size,	METH_VARARGS, MPI_Python_Comm_size__doc__	},
+	{ MPI_Python_Comm_rank__name__,		MPI_Python_Comm_rank,	METH_VARARGS, MPI_Python_Comm_rank__doc__	},
+	{ 0, 0, 0, 0 }
+};
+
+
+/* "COMM_WORLD" member */
+char MPI_Python_COMM_WORLD__doc__[] = "Get the world communicator";
+char MPI_Python_COMM_WORLD__name__[] = "COMM_WORLD";
+PyObject* MPI_Python_COMM_WORLD( PyObject* self, PyObject* args ) {
+	return Py_BuildValue( "i", MPI_COMM_WORLD );
+}
+
+
+/* "Comm_size" member */
+char MPI_Python_Comm_size__doc__[] = "Get the size of the communicator";
+char MPI_Python_Comm_size__name__[] = "Comm_size";
+PyObject* MPI_Python_Comm_size( PyObject* self, PyObject* args ) {
+	MPI_Comm	communicator;
+	int		size;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "i:", &communicator ) ) {
+		return NULL;
+	}
+	
+	/* Run function */
+	MPI_Comm_size( communicator, &size );
+	
+	/* Return */
+	return Py_BuildValue( "i", size );
+}
+
+/* "Comm_rank" member */
+char MPI_Python_Comm_rank__doc__[] = "Get the rank of this processor in this communicator";
+char MPI_Python_Comm_rank__name__[] = "Comm_rank";
+PyObject* MPI_Python_Comm_rank( PyObject* self, PyObject* args ) {
+	MPI_Comm	communicator;
+	int		rank;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "i:", &communicator ) ) {
+		return NULL;
+	}
+	
+	/* Run function */
+	MPI_Comm_rank( communicator, &rank );
+	
+	/* Return */
+	return Py_BuildValue( "i", rank );
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Build the binding table(s).
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: bindings.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __MPI_Python_bindings_h__
+#define __MPI_Python_bindings_h__
+
+	extern struct PyMethodDef MPI_Python_Methods[];
+
+	extern char MPI_Python_COMM_WORLD__name__[];
+	extern char MPI_Python_COMM_WORLD__doc__[];
+	PyObject* MPI_Python_COMM_WORLD( PyObject* self, PyObject* args );
+
+	extern char MPI_Python_Comm_size__name__[];
+	extern char MPI_Python_Comm_size__doc__[];
+	PyObject* MPI_Python_Comm_size( PyObject* self, PyObject* args );
+
+	extern char MPI_Python_Comm_rank__name__[];
+	extern char MPI_Python_Comm_rank__doc__[];
+	PyObject* MPI_Python_Comm_rank( PyObject* self, PyObject* args );
+
+#endif /* __MPI_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 MPI_Python_module__doc__[] = "Context doc";
+
+void initMPI() {
+	Py_InitModule4( "MPI", MPI_Python_Methods, MPI_Python_module__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "Can't initialize module MPI" );
+	}
+
+	return;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = -lStGermain
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 MPI_Python_copyright__doc__[] = "";
+char MPI_Python_copyright__name__[] = "copyright";
+
+PyObject* MPI_Python_copyright( PyObject* self, PyObject* args ) {
+    return Py_BuildValue( "s", "StGermain.Bindings.MPI Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __MPI_Python_misc_h__
+#define __MPI_Python_misc_h__
+
+	/* "copyright" member */
+	extern char MPI_Python_copyright__name__[];
+	extern char MPI_Python_copyright__doc__[];
+	PyObject* MPI_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __MPI_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain/Bindings
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = MPI General
+
+def_pyc_package = StGermain/Bindings
+def_pyc = __init__.py

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.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 $"

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+def_pyc = __init__.py

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,42 @@
+#!/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 Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+def initialise():
+	import sys
+	import Bindings.General
+	result = Bindings.General.Initialise( sys.argv, len(sys.argv) )
+	return result
+
+# version
+__id__ = "$Id: __init__.py 3462 2006-02-19 06:53:24Z WalterLandry $"

Added: long/3D/SNAC/trunk/StGermain/libStGermain/Python/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/Python/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/Python/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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

Added: long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+SO_EXT = $(EXT_SO)
+#PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) `xml2-config --cflags`
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = -L$(BLD_LIBDIR) -lStGermainDiscretisation -lStGermainBase $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+#all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+all: DLL export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(LCC_SOFLAGS) $(LCFLAGS) $(LIBS)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermain
+def_inc = StGermain
+
+def_srcs = \
+	dummy.c
+
+def_hdrs = \
+
+def_libs = 
+def_objlists = StGermain_

Added: long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/dummy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/dummy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/dummy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: dummy.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* exists only such that MM doesn't fail to create an empty ".a" */
+                                                                                
+										/* dummy function so that Tru64 CC doesn't complain about doing nothing */
+const int StGermain_Dummy = 0;
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $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
+include Makefile.def
+
+lib = ${def_lib}
+#libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainDiscretisation -lStGermainBase ${RPATH_LFLAGS} ${LAPACK_BLAS_LIBS}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+
+packages = MPI XML MATH 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+#include "Discretisation/Discretisation.h"
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StGermain_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	Discretisation_Finalise();
+	Base_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Finaliseialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Finalise_h__
+#define __StGermain_Finalise_h__
+
+	Bool StGermain_Finalise();
+
+#endif /* __StGermain_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+#include "Discretisation/Discretisation.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool StGermain_Init( int* argc, char** argv[] ) {
+	Base_Init( argc, argv );
+	
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	Discretisation_Init( argc, argv );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_Init_h__
+#define __StGermain_Init_h__
+
+	Bool StGermain_Init( int* argc, char** argv[] );
+
+#endif /* __StGermain_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm  $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)  `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(LCC_SOFLAGS) $(LCFLAGS) $(LIBS)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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_lib = StGermain_
+def_inc = StGermain
+
+def_srcs = \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	Init.h \
+	Finalise.h \
+	StGermain.h
+
+def_libs =
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/StGermain.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/StGermain.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/StGermain.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: StGermain.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermain_StGermain_h__
+#define __StGermain_StGermain_h__
+
+	#define EP_APPLICATIONS_FINALISE "StGermain_EP_ApplicationsFinalise"
+// TODO: ensure safe to remove (i.e. evertthing compiles). Shoud just append the context's contruct
+//	#define EP_APPLICATIONS_POST_COMPONENTS_CONSTRUCT "StGermain_EP_ApplicationsPostComponentsConstruct"
+
+	#include "Base/Base.h"
+	#include "Discretisation/Discretisation.h"
+	
+	#include "Init.h"
+	#include "Finalise.h"
+
+#endif /* __StGermain_StGermain_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermain/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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
+
+lib = ${def_lib}
+libstatic = yes
+#libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+ifdef HAVE_PYTHON
+        packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/static/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/static/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/static/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) `xml2-config --cflags`
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(LCC_SOFLAGS) $(LCFLAGS) $(LIBS)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/libStGermain/static/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/static/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/static/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermain
+def_inc = StGermain
+
+def_srcs = \
+	dummy.c
+
+def_hdrs = \
+
+def_libs =
+def_objlists = StGermain_ StGermainDiscretisation StGermainBase

Added: long/3D/SNAC/trunk/StGermain/libStGermain/static/dummy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/static/dummy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/static/dummy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: dummy.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* exists only such that MM doesn't fail to create an empty ".a" */
+                                                                                
+										/* dummy function so that Tru64 CC doesn't complain about doing nothing */
+const int StGermain_Dummy = 0;
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/static/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/static/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/static/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $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
+
+lib = ${def_lib}
+libstatic = yes
+#libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = ${LAPACK_BLAS_LIBS}
+
+packages = MPI XML MATH DL
+
+ifdef HAVE_PYTHON
+        packages += PYTHON
+endif
+	
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+#hack ... need to add a "libdl" external to MM and smarts to know that a dll's extension is called a "dylib" on a mac.
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` ${DL_LIBS}
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/libStGermain/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3492 2006-03-17 04:16:46Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermain
+
+def_srcs = \
+	testLibStGermain.c
+
+def_checks = \
+	testLibStGermain.0of1.sh
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3865 2006-10-16 09:33:43Z 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
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS=${LIB_DIR}/libStGermain.a
+
+packages = MPI XML MATH DL 
+
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+# Must have this here for wasabi.maths.monash.edu.au to work
+# 2005-12-6, Alan
+ifeq (Darwin,$(SYSTEM))
+        EXTERNAL_LFLAGS += -flat_namespace
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibStGermain " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibStGermain.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+#include "StGermain.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 ) ) {
+		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 );
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+#hack ... need to add a "libdl" external to MM and smarts to know that a dll's extension is called a "dylib" on a mac.
+DL_LIBS=-ldl
+MODULE_EXT=$(EXT_SO)
+SO_EXT=$(EXT_SO)
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` ${DL_LIBS}
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags`
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = libStGermainDynamic
+
+def_srcs = \
+	testLibStGermainDynamic.c
+
+def_checks = \
+	testLibStGermainDynamic.0of1.sh
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: makefile 3680 2006-07-16 23:59:51Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain 
+EXTERNAL_LIBS = -lStGermain ${RPATH_LFLAGS}
+
+packages = PETSC MPI XML MATH DL
+
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibStGermainDynamic " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibStGermainDynamic.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+#include "StGermain.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 ) ) {
+		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 );
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainAll
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifeq (true,$(shell if test -r $(PETSC_INCDIR)/petsc.h; then echo true; fi ))
+	def_sub = src static dynamic tests testsDynamic
+endif	

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "FD/FD.h"
+#include "FE/FE.h"
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StGermainAll_Finalise( void ) {
+	Journal_Printf( (void*) stream, "In: %s\n", __func__ );
+	
+	FE_Finalise();
+	FD_Finalise();
+	StGermain_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Finaliseialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_FinaliseAll_h__
+#define __StGermainAll_FinaliseAll_h__
+
+	Bool StGermainAll_Finalise();
+
+#endif /* __StGermainAll_FinaliseAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "FD/FD.h"
+#include "FE/FE.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool StGermainAll_Init( int* argc, char** argv[] ) {
+	Journal_Printf( (void*) stream, "In: %s\n", __func__ );
+	
+	StGermain_Init( argc, argv );
+	FD_Init( argc, argv );
+	FE_Init( argc, argv );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_InitAll_h__
+#define __StGermainAll_InitAll_h__
+
+	Bool StGermainAll_Init( int* argc, char** argv[] );
+
+#endif /* __StGermainAll_InitAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+#hack
+DL_INCDIR=/usr/include
+DL_LIBDIR=/usr/lib
+DL_LIBS=-ldl
+MODULE_EXT=$(EXT_SO)
+SO_EXT=$(EXT_SO)
+
+#PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) `xml2-config --cflags` -I${DL_INCDIR} -DMODULE_EXT=\"${MODULE_EXT}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = -L$(BLD_LIBDIR) -lStGermainFE -lStGermainFD -lStGermain -lStGermainDiscretisation -lStGermainBase $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` -L${DL_LIBDIR} ${DL_LIBS}
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+#all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+all: DLL export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(LCC_SOFLAGS) $(LCFLAGS) $(LIBS)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainAll
+def_inc = StGermain
+
+def_srcs = \
+	dummy.c
+
+def_hdrs = \
+
+def_libs = 
+def_objlists = StGermainAll_

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/StGermain.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/StGermain.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/StGermain.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: StGermain.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_StGermainAll_h__
+#define __StGermainAll_StGermainAll_h__
+
+	#include "StGermain/StGermain.h"
+	#include "FE/FE.h"
+	
+	#include "InitAll.h"
+	#include "FinaliseAll.h"
+
+#endif /* __StGermainAll_StGermainAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/dummy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/dummy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/dummy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: dummy.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* exists only such that MM doesn't fail to create an empty ".a" */
+                                                                                
+										/* dummy function so that Tru64 CC doesn't complain about doing nothing */
+const int StGermainAll_Dummy = 0;
+

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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
+
+lib = ${def_lib}
+#libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainFD -lStGermain -lStGermainDiscretisation -lStGermainBase
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: 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}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: FinaliseAll.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "FD/FD.h"
+#include "FE/FE.h"
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StGermainAll_Finalise( void ) {
+	FE_Finalise();
+	FD_Finalise();
+	StGermain_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Finaliseialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: FinaliseAll.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_FinaliseAll_h__
+#define __StGermainAll_FinaliseAll_h__
+
+	Bool StGermainAll_Finalise();
+
+#endif /* __StGermainAll_FinaliseAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: InitAll.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "FD/FD.h"
+#include "FE/FE.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool StGermainAll_Init( int* argc, char** argv[] ) {
+	StGermain_Init( argc, argv );
+	FD_Init( argc, argv );
+	FE_Init( argc, argv );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: InitAll.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_InitAll_h__
+#define __StGermainAll_InitAll_h__
+
+	Bool StGermainAll_Init( int* argc, char** argv[] );
+
+#endif /* __StGermainAll_InitAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+# if PROJ_DLL is not NULL, include DLL target.
+# all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+all: $(PROJ_LIB) createObjList appendSubLibs export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(LCC_SOFLAGS) $(LCFLAGS) $(LIBS)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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_lib = StGermainAll_
+def_inc = StGermain
+
+def_srcs = \
+	InitAll.c \
+	FinaliseAll.c
+
+def_hdrs = \
+	InitAll.h \
+	FinaliseAll.h \
+	StGermainAll.h
+
+def_libs =
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/StGermainAll.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/StGermainAll.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/StGermainAll.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: StGermainAll.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_StGermainAll_h__
+#define __StGermainAll_StGermainAll_h__
+
+	#include "StGermain/StGermain.h"
+	#include "FE/FE.h"
+	
+	#include "InitAll.h"
+	#include "FinaliseAll.h"
+
+#endif /* __StGermainAll_StGermainAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+#libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Finalise.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "FD/FD.h"
+#include "FE/FE.h"
+
+#include "Finalise.h"
+
+#include <stdio.h>
+
+Bool StGermainAll_Finalise( void ) {
+	Journal_Printf( (void*) stream, "In: %s\n", __func__ );
+	
+	FE_Finalise();
+	FD_Finalise();
+	StGermain_Finalise();
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Finaliseialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_FinaliseAll_h__
+#define __StGermainAll_FinaliseAll_h__
+
+	Bool StGermainAll_Finalise();
+
+#endif /* __StGermainAll_FinaliseAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** $Id: Init.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermain/StGermain.h"
+#include "FD/FD.h"
+#include "FE/FE.h"
+
+#include "Init.h"
+
+#include <stdio.h>
+
+Bool StGermainAll_Init( int* argc, char** argv[] ) {
+	Journal_Printf( (void*) stream, "In: %s\n", __func__ );
+	
+	StGermain_Init( argc, argv );
+	FD_Init( argc, argv );
+	FE_Init( argc, argv );
+	
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_InitAll_h__
+#define __StGermainAll_InitAll_h__
+
+	Bool StGermainAll_Init( int* argc, char** argv[] );
+
+#endif /* __StGermainAll_InitAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/$(PROJECT) `xml2-config --cflags`
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+
+PROJ_SRCS = ${def_srcs}
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename ${PROJ_SRCS}}}}
+PROJ_OBJLIST = ${BLD_TMPDIR}/${PROJECT}.${PACKAGE}.objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+
+# if PROJ_DLL is not NULL, include DLL target
+# all: $(PROJ_LIB) createObjList appendSubLibs DLL export
+all: $(PROJ_LIB) createObjList appendSubLibs export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(LCC_SOFLAGS) $(LCFLAGS) $(LIBS)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainAll
+def_inc = StGermain
+
+def_srcs = \
+	dummy.c
+
+def_hdrs = \
+
+def_libs =
+def_objlists = StGermainAll_ StGermainFD StGermain

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/StGermain.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/StGermain.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/StGermain.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,51 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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:
+**	Initialises StGermain
+**
+** Assumptions:
+**	Non as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: StGermain.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __StGermainAll_StGermainAll_h__
+#define __StGermainAll_StGermainAll_h__
+
+	#include "StGermain/StGermain.h"
+	#include "FE/FE.h"
+	
+	#include "InitAll.h"
+	#include "FinaliseAll.h"
+
+#endif /* __StGermainAll_StGermainAll_h__ */

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/dummy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/dummy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/dummy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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: dummy.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* exists only such that MM doesn't fail to create an empty ".a" */
+                                                                                
+										/* dummy function so that Tru64 CC doesn't complain about doing nothing */
+const int StGermainAll_Dummy = 0;
+

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/static/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/static/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/static/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+#libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+PROJ_LIBS = ${def_libs}
+PROJ_OBJLISTS = ${def_objlists}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+
+packages = MPI XML MATH
+
+# 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 ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include petsc/default.def
+
+PROJECT = StGermain
+
+#hack ... need to add a "libdl" external to MM and smarts to know that a dll's extension is called a "dylib" on a mac.
+DL_LIBS=-ldl
+MODULE_EXT=so
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` ${DL_LIBS}
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainAll
+
+def_srcs = \
+	testLibStGermainAll.c
+
+def_checks = \
+	testLibStGermainAll.0of1.sh
+
+def_libs = libStGermainAll.a

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3492 2006-03-17 04:16:46Z 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
+include Makefile.def
+
+ifeq (true,$(shell if test -r ${PETSC_INCDIR}/petsc.h; then echo true; fi ))
+	tests = ${def_tst}
+
+	checks = ${def_checks}
+
+	SRCS = ${def_srcs}
+
+	EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain ${PETSC_INCLUDES}
+	EXTERNAL_LIBS = ${LIB_DIR}/libStGermainAll.a
+	
+	packages = MATH PETSC MPI XML
+else
+	WARN := $(shell echo StGermainAll tests are being omitted as PETSc isn't detected. 1>&2 )
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+StGermain SLE Library. Copyright (C) 2003-2005 VPAC.
+StGermain Finite Element Framework. Copyright (C) 2003-2005 VPAC.
+StGermain PETSc-LinearAlgebra Interface. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibStGermainAll " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibStGermainAll.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermainAll.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( !StGermainAll_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 );
+	
+	StGermainAll_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+include petsc/default.def
+
+PROJECT = StGermain
+
+#hack ... need to add a "libdl" external to MM and smarts to know that a dll's extension is called a "dylib" on a mac.
+DL_LIBS=-ldl
+MODULE_EXT=$(EXT_SO)
+SO_EXT=$(EXT_SO)
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs` ${DL_LIBS}
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags`
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,37 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3492 2006-03-17 04:16:46Z AlanLo $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainAllDynamic
+
+def_srcs = \
+	testLibStGermainAllDynamic.c
+
+def_checks = \
+	testLibStGermainAllDynamic.0of1.sh

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 3492 2006-03-17 04:16:46Z 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
+include Makefile.def
+
+ifeq (true,$(shell if test -r ${PETSC_INCDIR}/petsc.h; then echo true; fi ))
+	tests = ${def_tst}
+	
+	checks = ${def_checks}
+	
+	SRCS = ${def_srcs}
+	
+	EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+	EXTERNAL_LIBS = -lStGermainAll
+	
+	packages = PETSC MPI XML MATH
+else
+	WARN := $(shell echo StGermainAll tests are being omitted as PETSc isn't detected. 1>&2 )
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,3 @@
+In: StGermain_Init
+Watching rank: 0
+In: StGermain_Finalise

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibStGermain " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibStGermain.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpi.h"
+
+#include "StGermain.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 ) ) {
+		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 );
+	
+	StGermain_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}
+
+Bool FE_LinearAlgebra_Init( int* argc, char** argv[] ) {
+	return True;
+}
+
+Bool FE_LinearAlgebra_Finalise( void ) {
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,6 @@
+StGermain Framework. Copyright (C) 2003-2005 VPAC.
+StGermain Discretisation Library. Copyright (C) 2003-2005 VPAC.
+StGermain SLE Library. Copyright (C) 2003-2005 VPAC.
+StGermain Finite Element Framework. Copyright (C) 2003-2005 VPAC.
+StGermain PETSc-LinearAlgebra Interface. Copyright (C) 2003-2005 VPAC.
+Watching rank: 0

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 "testLibStGermainAllDynamic " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+**
+** Role:
+**	Tests EntryPoint in the most basic sence... creation on default values, run with hooks added, and delete.
+**
+** $Id: testLibStGermainAllDynamic.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "StGermainAll.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( !StGermainAll_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 );
+	
+	StGermainAll_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+override PROJ_ROOT = .
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+subdirs = ${def_sub}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/project-config.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/project-config.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/project-config.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,59 @@
+#!/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 3864 2006-10-16 09:21:03Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# 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 'StGermain'
+getVariableFromMakefile VERSION makefile
+export STGERMAIN_VERSION=${VERSION}
+
+# Setup Makefile shortcuts
+. ./VMake/Config/makefile-shortcuts.sh
+
+. ./VMake/Config/compiler-config.sh
+. ./VMake/Config/math-config.sh
+. ./VMake/Config/xml-config.sh
+. ./VMake/Config/PETSc-config.sh
+. ./VMake/Config/mpi-config.sh
+. ./VMake/Config/python-config.sh --optional
+. ./VMake/Config/OpenGl-config.sh
+. ./VMake/Config/sdl-config.sh
+. ./VMake/Config/hdf5-config.sh
+. ./VMake/Config/neon-config.sh
+
+dumpPkgConfigFile ${BLD_DIR}/lib/pkgconfig


Property changes on: long/3D/SNAC/trunk/StGermain/project-config.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/pyre/Application.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Application.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Application.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,137 @@
+#!/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: Application.py 3698 2006-07-20 21:09:56Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import journal
+import mpi,sys
+from mpi.Application import Application as mpiApplication
+import StGermain.Base.IO.Dictionary
+from StGermain.Base.IO.Dictionary import Dictionary
+import StGermain.pyre.Dictionary as PyreDictionary
+
+
+class Application( mpiApplication ):
+	def __init__( self, name ):
+		mpiApplication.__init__( self, name )
+
+		# This holds the root dictionary
+		self._dictionarySource = None
+		self._dictionary = Dictionary( StGermain.Base.IO.Dictionary.new() )
+
+		self.comm = None
+		self.rank = None
+		self.nodes = None
+		self.solver = None
+		#ccccc
+		self.controller = None
+
+		self._context = None
+
+		return
+
+	def main(self, *args, **kwds):
+		self.initialize()
+		self.reportConfiguration()
+		self.launch()
+		return
+
+	def getContext( self ):
+		if not self._context:
+			self._context = self.BuildContext()
+		return self._context
+
+	def configure( self, registry ):
+		report = mpiApplication.configure( self, registry )
+		self._dictionary = PyreDictionary.addProperties( self, registry )
+		PyreDictionary.linkComponentDictionaries( self )
+		return report
+
+
+	def initialize( self ):
+		self._dictionary.LoadFromFile( self.inventory.inputFilename )
+
+		self.inventory.layout.initialize( self )
+		self.comm = self.inventory.layout.comm
+		self.rank = self.inventory.layout.rank
+		self.nodes = self.inventory.layout.nodes
+		self.findLayout( self.inventory.layout )
+		## self.inventory.controller.initialize( self )
+		## assumes findLayout always defines self.controller
+		self.controller.initialize( self )
+		return
+
+	def launch( self ):
+##		self.inventory.controller.launch( self )
+##		self.inventory.controller.march( steps = self.inventory.steps, totalTime = self.inventory.stop )
+		self.controller.launch( self )
+		self.controller.march( totalTime = self.inventory.stop, steps = self.inventory.steps )
+		return
+
+	def findLayout( self, layout ):
+		self.solverCommunicator = self.comm
+		self.solver = self.inventory.solver
+		self.controller = self.inventory.controller
+		return
+
+	def reportConfiguration( self ):
+		rank = mpi.world().rank
+
+		if rank != 0:
+			return
+
+		self._info.line("configuration:" )
+#		self._info.line("  properties:" )
+#		self._info.line("     name: %r" % self.inventory.name )
+#		self._info.line("     full name: %r" % self.inventory.fullname )
+
+		self._info.line( "  facilities:" )
+		self._info.line( "    journal: %r" % self.inventory.journal.name )
+		self._info.line( "    launcher: %r" % self.inventory.launcher.name )
+
+		self._info.line( "    solver: %r" % self.inventory.solver.name )
+		self._info.line( "    controller: %r" % self.inventory.controller.name )
+		self._info.line( "    layout: %r" % self.inventory.controller.name )
+		return
+
+	class Inventory( mpiApplication.Inventory ):
+		import pyre.inventory
+
+		import StGermain.pyre.Solver as Solver
+		import StGermain.pyre.Controller as Controller
+		import StGermain.pyre.Layout as Layout
+
+		inputFilename = pyre.inventory.str( name = "inputFilename", default = "./input.xml" )
+		solver = pyre.inventory.facility( name = "solver", factory = Solver.solver )
+		controller = pyre.inventory.facility( name = "controller", factory = Controller.controller )
+		layout = pyre.inventory.facility( name = "layout", factory = Layout.layout )
+		steps = pyre.inventory.int( "steps", default=0 )
+		stop = pyre.inventory.float( "stop", default=1e20 )
+
+

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 962 2004-03-05 20:10:22Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = ${def_pyc_package}
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 962 2004-03-05 20:10:22Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = pyre
+
+def_pyc_package = StGermain/pyre/Bindings
+def_pyc = __init__.py

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,38 @@
+#!/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: Make.mm 1923 2004-08-23 02:00:24Z SteveQuenette $
+##
+## $Id: __init__.py 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def copyright():
+	return "StGermain.pyre.Bindings Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+# version
+__id__ = "$Id: __init__.py 663 2004-01-20 12:38:41Z PatrickSunter $"

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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.rules 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# 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

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+include Makefile.def
+include Python/default.def
+
+PROJECT = StGermain
+PYTHON_PACKAGE = ${def_pyb_package}
+PACKAGE = ${def_pyb}module
+
+BLD_MODDIR = $(EXPORT_ROOT)/modules/$(PYTHON_PACKAGE)
+PROJ_DLL = $(BLD_MODDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_DLL)
+
+PROJ_SRCS = ${def_srcs}
+PROJ_CC_FLAGS += -I$(BLD_INCDIR)/StGermain -I$(PYTHIA_INCDIR) `xml2-config --cflags`
+PROJ_LIBRARIES = -L$(BLD_LIBDIR) -lStGermain `xml2-config --libs` $(MPI_LIBPATH) $(MPI_LIBS) -L$(PYTHIA_LIBDIR) -ljournal $(PYTHIA_DIR)/modules/mpi/mpimodule.so 
+LCCFLAGS =
+EXTERNAL_INCLUDES += $(PYTHIA_DIR)/include $(PYTHIA_INCDIR) $(EXCHANGER_INCDIR)
+
+# hack to ensure dir is built by product_dirs
+BLD_BINDIR = $(BLD_MODDIR)
+
+all: DLL
+
+DLL: product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES) $(EXTERNAL_LIBPATH) $(EXTERNAL_LIBS)

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 = pyre
+def_pyb_package = StGermain/pyre/Bindings
+
+def_srcs = \
+	misc.cc \
+	bindings.cc \
+	init.cc
+
+def_hdrs = \
+	misc.h \
+	bindings.h
+

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.cc
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.cc	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.cc	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,75 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+** (C) 2003 All Rights Reserved
+**
+** California Institute of Technology (Caltech), USA
+** (C) 2003 All Rights Reserved
+**
+** Authors:
+** 	Stevan M. Quenette, Senior Software Engineer, VPAC.
+**	Stevan M. Quenette, Visitor in Geophysics, Caltech.
+**
+** <copyright-release-tag>
+**
+** $Id: bindings.cc 3127 2005-07-26 02:35:37Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "mpi/Communicator.h"
+#include <Python.h>
+#include "bindings.h"
+#include "misc.h"
+
+struct PyMethodDef pyre_Python_Methods[] = {
+	{ pyre_Python_copyright__name__,			pyre_Python_copyright,			METH_VARARGS,	pyre_Python_copyright__doc__			},
+	{ pyre_Python_ConvertFromPyreComm__name__,		pyre_Python_ConvertFromPyreComm,	METH_VARARGS,	pyre_Python_ConvertFromPyreComm__doc__		},
+	{ pyre_Python_ConvertFromPyreCommHandle__name__,	pyre_Python_ConvertFromPyreCommHandle,	METH_VARARGS,	pyre_Python_ConvertFromPyreCommHandle__doc__	},
+	{ 0, 0, 0, 0 }
+};
+
+
+/* "ConvertFromPyreComm" member */
+char pyre_Python_ConvertFromPyreComm__doc__[] = "Convert the pyre communicator (Python class) to a StGermain (MPI-C/C-integer) communicator.";
+char pyre_Python_ConvertFromPyreComm__name__[] = "ConvertFromPyreComm";
+PyObject* pyre_Python_ConvertFromPyreComm( PyObject* self, PyObject* args ) {
+	PyObject*		pyrePythonComm;
+	PyObject*		pyrePythonCommHandle;
+	mpi::Communicator*	pyreCppCommunicator;
+	MPI_Comm		communicator;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyrePythonComm ) ) {
+		return NULL;
+	}
+	pyrePythonCommHandle = PyObject_GetAttrString( pyrePythonComm, "_handle" );
+	pyreCppCommunicator = (mpi::Communicator*)PyCObject_AsVoidPtr( pyrePythonCommHandle );
+	
+	/* Convert */
+	communicator = pyreCppCommunicator->handle();
+	
+	/* Return */
+	return Py_BuildValue( "i", communicator );
+}
+
+/* "ConvertFromPyreCommHandle" member */
+char pyre_Python_ConvertFromPyreCommHandle__doc__[] = "Convert the pyre communicator (C++ binding) to a StGermain (MPI-C/C-integer) communicator.";
+char pyre_Python_ConvertFromPyreCommHandle__name__[] = "ConvertFromPyreCommHandle";
+PyObject* pyre_Python_ConvertFromPyreCommHandle( PyObject* self, PyObject* args ) {
+	PyObject*		pyrePythonCommHandle;
+	mpi::Communicator*	pyreCppCommunicator;
+	MPI_Comm		communicator;
+	
+	/* Obtain arguements */
+	if( !PyArg_ParseTuple( args, "O:", &pyrePythonCommHandle ) ) {
+		return NULL;
+	}
+	pyreCppCommunicator = (mpi::Communicator*)PyCObject_AsVoidPtr( pyrePythonCommHandle );
+	
+	/* Convert */
+	communicator = pyreCppCommunicator->handle();
+	
+	/* Return */
+	return Py_BuildValue( "i", communicator );
+}

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  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 __MPI_Python_bindings_h__
+#define __MPI_Python_bindings_h__
+	
+	extern struct PyMethodDef pyre_Python_Methods[];
+	
+	extern char pyre_Python_ConvertFromPyreComm__name__[];
+	extern char pyre_Python_ConvertFromPyreComm__doc__[];
+	extern "C" PyObject* pyre_Python_ConvertFromPyreComm( PyObject* self, PyObject* args );
+	
+	extern char pyre_Python_ConvertFromPyreCommHandle__name__[];
+	extern char pyre_Python_ConvertFromPyreCommHandle__doc__[];
+	extern "C" PyObject* pyre_Python_ConvertFromPyreCommHandle( PyObject* self, PyObject* args );
+	
+#endif /* __MPI_Python_bindings_h__ */

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/init.cc
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/init.cc	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/init.cc	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,33 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+** (C) 2003 All Rights Reserved
+**
+** California Institute of Technology (Caltech), USA
+** (C) 2003 All Rights Reserved
+**
+** Authors:
+** 	Stevan M. Quenette, Senior Software Engineer, VPAC.
+**	Stevan M. Quenette, Visitor in Geophysics, Caltech.
+**
+** <copyright-release-tag>
+**
+** $Id: init.cc 3127 2005-07-26 02:35:37Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+#include "bindings.h"
+#include "misc.h"
+
+char pyre_Python_module__doc__[] = "Bindings to pyre objects for use in StGermain.";
+
+extern "C" void initpyre() {
+	Py_InitModule4( "pyre", pyre_Python_Methods, pyre_Python_module__doc__, 0, PYTHON_API_VERSION );
+	if( PyErr_Occurred() ) {
+		Py_FatalError( "Can't initialize module pyre" );
+	}
+
+	return;
+}
+

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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
+##
+## $Id: makefile 3698 2006-07-20 21:09:56Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# 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}
+
+CXX_EXT=cc
+SRCS = ${def_srcs}
+PYTHON_PACKAGE = ${def_pyb_package}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_LIBS = -L$(PYTHIA_LIBDIR) -l_mpimodule -ljournal   -lStGermain
+EXTERNAL_INCLUDES = -I${PYTHIA_INCDIR} -I${INC_DIR}/StGermain 
+
+packages = MPI XML MATH
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.cc
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.cc	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.cc	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+** (C) 2003 All Rights Reserved
+**
+** California Institute of Technology (Caltech), USA
+** (C) 2003 All Rights Reserved
+**
+** Authors:
+** 	Stevan M. Quenette, Senior Software Engineer, VPAC.
+**	Stevan M. Quenette, Visitor in Geophysics, Caltech.
+**
+** <copyright-release-tag>
+**
+** $Id: misc.cc 3127 2005-07-26 02:35:37Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <Python.h>
+#include "misc.h"
+
+
+char pyre_Python_copyright__doc__[] = "";
+char pyre_Python_copyright__name__[] = "copyright";
+
+PyObject* pyre_Python_copyright( PyObject* self, PyObject* args ) {
+    return Py_BuildValue( "s", "StGermain Python Bindings pyre module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia." );
+}

Added: long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 __MPI_Python_misc_h__
+#define __MPI_Python_misc_h__
+
+	/* "copyright" member */
+	extern char pyre_Python_copyright__name__[];
+	extern char pyre_Python_copyright__doc__[];
+	extern "C" PyObject* pyre_Python_copyright( PyObject* self, PyObject* args );
+	
+#endif /* __MPI_Python_misc_h__ */

Added: long/3D/SNAC/trunk/StGermain/pyre/Component.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Component.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Component.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,50 @@
+#!/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: Application.py 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import journal
+from pyre.components.Component import Component as PyreComponent
+from StGermain.Base.IO.Dictionary import Dictionary
+import StGermain.pyre.Dictionary as PyreDictionary
+
+
+class Component( PyreComponent ):
+	def __init__( self, name, facility ):
+		PyreComponent.__init__( self, name, facility )
+		self._dictionary = None
+		self._dictionarySource = None
+		return
+
+	def initialize( self, Module, all_variables ):
+		self._dictionary = PyreDictionary.addProperties( self, registry )
+		return report
+
+	def setProperties(self):
+		return

Added: long/3D/SNAC/trunk/StGermain/pyre/Controller.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Controller.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Controller.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,156 @@
+#!/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
+##
+## Role:
+##	The pyre interface to control a StGermain application.
+##
+## Assumptions:
+##	None as yet.
+##
+## Comments:
+##	Based off CitcomS' implementation.
+##
+## $Id: Controller.py 3698 2006-07-20 21:09:56Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def controller(name="controller", facility="controller"):
+    return Controller(name, facility)
+
+from pyre.simulations.SimulationController import SimulationController
+import journal
+import sys
+
+class Controller( SimulationController ):
+
+
+	def __init__( self, name, facility ):
+		SimulationController.__init__( self, name, facility )
+
+		self.step = 0
+		self.clock = 0.0
+		self._context = None
+		self.done = False
+		self.solver = None
+		return
+
+
+	def initialize( self, application ):
+		self._context = application.getContext()
+		self.solver = application.solver
+		self.solver.initialize( application )
+		return
+
+
+	def launch( self, application ):
+		# 0th step
+		self.solver.launch( application )
+
+		# do io for 0th step
+		self.save()
+		return
+	'''
+	def setClock( self, time ):
+		if self._context:
+			self._context.time = time
+		self.__clock = time
+
+	def getClock( self ):
+		return self.__clock
+
+	clock = property( getClock, setClock, doc="Current sim clock time." )
+
+	def setStep( self, step ):
+		if self._context:
+			self._context.step = step
+		self.__step = step
+
+	def getStep( self ):
+		return self.__step
+
+	step = property( getStep, setStep, doc="Current sim step." )
+	'''
+
+
+	def march( self, totalTime = 0, steps = 0 ):
+		"""explicit time loop"""
+
+		self.step = 1
+
+		if( steps == 0 and totalTime == 0 ):
+			self.endSimulation()
+			return
+
+		while 1:
+			# notify solvers we are starting a new timestep
+			self.startTimestep()
+
+			# compute an acceptable timestep
+			dt = self.stableTimestep()
+
+			# advance
+			self.advance( dt )
+
+			# update smulation clock and step number
+			self.clock += dt
+			self.step += 1
+
+			# notify solver we finished a timestep
+			self.endTimestep( totalTime, steps )
+
+			# do io
+			self.save()
+
+			# are we done?
+			if self.done:
+				break
+
+		# Notify solver we are done
+		self.endSimulation()
+
+		return
+
+	def endTimestep( self, totalTime, steps ):
+		# are we done?
+		if steps and self.step >= steps:
+			self.done = True
+		if totalTime and self.clock >= totalTime:
+			self.done = True
+
+		# solver can terminate time marching by returning True
+		self.done = self.solver.endTimestep( self.clock, self.step, self.done )
+		return
+
+	def endSimulation( self ):
+		self.solver.endSimulation( self.step )
+		return
+
+	def save( self ):
+		#TODO: Controller::save
+		#if not ( step % self.inventory.monitoringFrequency ):
+		self.solver.save( self.step )
+		return

Added: long/3D/SNAC/trunk/StGermain/pyre/Debug.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Debug.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Debug.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,91 @@
+#!/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$
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+def indent( level ):
+	str = ''
+	for i in range( level ):
+		str += '\t'
+	return  str
+
+
+def _printRegistry( registry, level ):
+	print indent( level ) + 'Properties are:'
+	print indent( level + 1 ) + '---'
+	for name, descriptor in registry.properties.iteritems():
+		print indent( level + 1 ) + 'name: ' + name
+		print indent( level + 1 ) + 'value: ' + descriptor.value
+		print indent( level + 1 ) + '---'
+
+	print indent( level ) + 'Components are:'
+	print indent( level + 1 ) + '---'
+	for name, value in registry.facilities.iteritems():
+		print indent( level + 1 ) + 'name: ' + name
+		print indent( level + 1 ) + 'value: {'
+		_printRegistry( value, level + 2 )
+		print indent( level + 1 ) + '}'
+		print indent( level + 1 ) + '---'
+
+
+def printRegistry( application, level = 0 ):
+	print indent( level ) + 'Input Registry:'
+	_printRegistry( application.registry, level + 1 )
+
+
+def _printInventory( inventory, level ):
+	print indent( level ) + 'Properties are:'
+	print indent( level + 1 ) + '---'
+	for name, _value in inventory._traitRegistry.iteritems():
+		print indent( level + 1 ) + 'name: ' + name
+		# The raw value itself is stored on the inventory. _value is
+		# the pyre property of the value.
+		print indent( level + 1 ) + 'type: ' + _value.type
+		print indent( level + 1 ) + 'value: ', _value.__get__(inventory)
+		print indent( level + 1 ) + '---'
+
+	print indent( level ) + 'Components are:'
+	print indent( level + 1 ) + '---'
+	for name, _value in inventory._facilityRegistry.iteritems():
+		print indent( level + 1 ) + 'facility name: ' + name
+
+		# The raw value itself (i.e. the component) is stored on the
+		# inventory. _value is the facility of the value.
+		value = inventory.__getattribute__( name )
+		print indent( level + 1 ) + 'component name: ' + value.name
+		print indent( level + 1 ) + 'value: {'
+		_printInventory( value.inventory, level + 2 )
+		print indent( level + 1 ) + '}'
+		print indent( level + 1 ) + '---'
+
+
+def printInventory( application, level = 0 ):
+	print indent( level ) + 'Inventory:'
+	_printInventory( application.inventory, level + 1 )

Added: long/3D/SNAC/trunk/StGermain/pyre/Dictionary.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Dictionary.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Dictionary.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+#!/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: Application.py 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import journal
+from StGermain.Base.IO.Dictionary import Dictionary
+
+
+# Fill in the dictionary with the inventory's properties
+def addProperties( object, registry ):
+	if object._dictionary == None:
+		if object._dictionarySource == None:
+			dictionary = Dictionary()
+		else:
+			dictionary = object._dictionarySource._dictionary
+	else:
+		dictionary = object._dictionary
+
+	for name, _value in object.inventory._propertyRegistry.iteritems():
+		value = object.inventory.__getattribute__( name )
+		dictionary.add( name, value.__str__() );
+
+	return dictionary
+
+# Fill in the dictionary with the inventory's component dictionaries, recursive
+def linkComponentDictionaries( object ):
+	dictionary = object._dictionary
+	for name, _value in object.inventory._facilityRegistry.iteritems():
+		component = object.inventory.__getattribute__( name )
+		
+		# Ignore components that don't have a dictionary and those that do, but have a source dictionary (i.e. are sharing)
+		try:
+			if component._dictionary != None:
+				if component._dictionarySource == None:
+					linkComponentDictionaries( component )
+					dictionary.add( component.name, component._dictionary )
+		except AttributeError:
+			None

Added: long/3D/SNAC/trunk/StGermain/pyre/Layout.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Layout.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Layout.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,124 @@
+#!/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: Layout.py 3698 2006-07-20 21:09:56Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def layout(name="layout", facility="layout"):
+		    return Layout(name, facility)
+
+
+from pyre.components.Component import Component
+import journal
+import mpi
+
+
+class Layout( Component ):
+	def __init__( self, name = "layout", facility = "layout" ):
+		Component.__init__( self, name, facility )
+
+		self.coarse = None
+		self.fine = None
+		self.coarsePlus = []
+		self.finePlus = []
+
+		self.comm = None
+		self.rank = 0
+		self.nodes = 0
+		return
+
+	def initialize( self, application ):
+		self.discover()
+		self.verify( application )
+		self.allocateNodes()
+		self.createCommunicators()
+		return
+
+	def discover( self ):
+		self.comm = mpi.world()
+		self.rank = self.comm.rank
+		self.nodes = self.comm.size
+
+		return
+
+	def verify( self, application ):
+		size = self.nodes
+		nodes = application.inventory.launcher.inventory.nodes
+		if nodes == 0 and size == 1:
+			info = journal.info( "layout" )
+			info.log( "Running serially without a stager" )
+
+		elif nodes != size:
+			firewall = journal.firewall( "layout" )
+			firewall.log( "processor count mismatch: %d != %d" % ( nodes, self.nodes ) )
+
+		return
+
+	def allocateNodes( self ):
+		return
+
+	def createCommunicators( self ):
+		world = self.comm
+		myrank = world.rank
+		fineGroup = self.inventory.fine
+		coarseGroup = self.inventory.coarse
+
+		if self.nodes == 1:
+			return
+		else:
+			self.fine = world.include( fineGroup )
+			self.coarse = world.include( coarseGroup )
+
+		for each in coarseGroup:
+			self.finePlus.append( world.include( fineGroup + [each] ) )
+
+		for each in fineGroup:
+			self.coarsePlus.append( world.include( coarseGroup + [each] ) )
+
+		return
+
+
+	class Inventory( Component.Inventory ):
+
+		import pyre.inventory
+
+		coarse = pyre.inventory.slice( "coarse", default=[0] )
+		fine = pyre.inventory.slice( "fine", default=[1] )
+
+
+
+
+
+
+
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/pyre/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = ${def_pyc_package}
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/pyre/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ifeq (true,$(shell if test "x$(PYTHIA_INCDIR)" != "x"; then echo true; fi ))
+
+def_sub = Bindings Mesh
+
+def_pyc_package = StGermain/pyre
+def_pyc = Application.py Component.py Controller.py Debug.py Dictionary.py Layout.py Solver.py __init__.py
+
+endif

Added: long/3D/SNAC/trunk/StGermain/pyre/Mesh/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Mesh/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Mesh/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 1751 2004-07-29 05:58:20Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = ${def_pyc_package}
+
+RECURSE_DIRS = ${def_sub}
+EXPORT_PYTHON_MODULES = ${def_pyc}
+
+all:	doRecurse export
+
+doRecurse:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN += ${addprefix $(EXPORT_MODULEDIR)/, ${addsuffix .pyc, ${basename ${EXPORT_PYTHON_MODULES}}}}
+
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+
+export:: export-python-modules

Added: long/3D/SNAC/trunk/StGermain/pyre/Mesh/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Mesh/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Mesh/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,35 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  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 1437 2004-05-18 19:10:42Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = 
+
+def_pyc_package = StGermain/pyre/Mesh
+def_pyc = RegularMeshLayout.py Mesh.py __init__.py
+

Added: long/3D/SNAC/trunk/StGermain/pyre/Mesh/Mesh.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Mesh/Mesh.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Mesh/Mesh.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,59 @@
+#!/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: Application.py 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import journal
+from StGermain.pyre.Component import Component
+import StGermain.Base.IO.Dictionary
+from StGermain.Base.IO.Dictionary import Dictionary
+
+class DummyMeshLayout( Component ):
+	def __init__( self, name = "dummy", facility = "Meshayout" ):
+		Component.__init__( self, name, facility )
+		return
+
+	class Inventory( Component.Inventory ):
+		inventory = []
+
+
+
+class Mesh( Component ):
+	def __init__( self, name, layout, facility = "Mesh" ):
+		Component.__init__( self, name, facility )
+		self.inventory.MeshLayout = layout
+
+		self._dictionary = Dictionary( StGermain.Base.IO.Dictionary.new() )
+		self.inventory.MeshLayout._dictionarySource = self # meshlayout writes to the same dictionary, not its own
+		return
+
+	class Inventory( Component.Inventory ):
+		import pyre.inventory
+
+		MeshLayout = pyre.inventory.facility( name = "MeshLayout", factory = DummyMeshLayout ),

Added: long/3D/SNAC/trunk/StGermain/pyre/Mesh/RegularMeshLayout.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Mesh/RegularMeshLayout.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Mesh/RegularMeshLayout.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+#!/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: Application.py 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import journal
+from StGermain.pyre.Component import Component
+
+
+class RegularMeshLayout( Component ):
+	def __init__( self, name = "regularMeshLayout", facility = "MeshLayout" ):
+		Component.__init__( self, name, facility )
+		return
+
+	class Inventory( Component.Inventory ):
+		import pyre.inventory
+
+		meshSizeI = pyre.inventory.int( "meshSizeI", default=3 )
+		meshSizeJ = pyre.inventory.int( "meshSizeJ", default=3 )
+		meshSizeK = pyre.inventory.int( "meshSizeK", default=3 )
+
+		minX = pyre.inventory.int( "minX", default=0 )
+		minY = pyre.inventory.int( "minY", default=0 )
+		minZ = pyre.inventory.int( "minZ", default=0 )
+		maxX = pyre.inventory.int( "maxX", default=1 )
+		maxY = pyre.inventory.int( "maxY", default=1 )
+		maxZ = pyre.inventory.int( "maxZ", default=1 )

Added: long/3D/SNAC/trunk/StGermain/pyre/Mesh/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Mesh/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Mesh/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 663 2004-01-20 12:38:41Z PatrickSunter $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def copyright():
+	return "StGermain.pyre.Mesh Python module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+# version
+__id__ = "$Id: __init__.py 663 2004-01-20 12:38:41Z PatrickSunter $"

Added: long/3D/SNAC/trunk/StGermain/pyre/Mesh/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Mesh/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Mesh/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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: Make.mm 1751 2004-07-29 05:58:20Z 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
+
+subdirs = ${def_sub}
+
+PYTHON_PACKAGE = ${def_pyc_package}
+pyc = ${def_pyc}
+
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/pyre/Solver.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/Solver.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/Solver.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,167 @@
+#!/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
+##
+## Role:
+##	The pyre representation of StGermain solver.
+##
+## Assumptions:
+##	None as yet.
+##
+## Comments:
+##	Based off CitcomS' implementation.
+##
+## $Id: Solver.py 3872 2006-10-16 14:12:16Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def solver(name='solver', facility='solver'):
+	return Solver(name, facility)
+
+from pyre.simulations.Solver import Solver as BaseSolver
+import journal,sys
+
+from StGermain.Base.IO.Dictionary import Dictionary
+
+class Solver( BaseSolver ):
+
+	def __init__( self, name="solver", facility="solver" ):
+		BaseSolver.__init__( self, name, facility )
+
+		# StGermain stuff
+		self._context = None
+		self.communicator = None
+		self._dictionary = None
+		self.dt_prev = 0.0
+
+		# Coupler stuff
+		self.coupler = None
+		self.exchanger = None
+		self.myPlus = []
+		self.remotePlus = []
+
+		self.start_cpu_time = 0
+		self.cpu_time = 0
+		self.model_time = 0
+		self.fptime = None
+		return
+
+	def initialize( self, application ):
+		BaseSolver.initialize( self, application )
+
+		# StGermain stuff
+		self._dictionary = application._dictionary
+		self.communicator = application.solverCommunicator
+		if not application._context:
+			application._context = application.BuildContext()
+		self._context = application._context
+
+		# StGermain build... required now... as in the coupled case we control the coupling-boundary and it needs to be
+		# prepared first. Also The geometry needs to be set.
+		self._context.Construct()
+		self._context.Build()
+		self._context.Initialise()
+
+		# Coupler stuff
+		try:
+			application.inventory.coupler
+		except AttributeError:
+			pass
+		else:
+			self.myPlus = application.myPlus
+			self.remotePlus = application.remotePlus
+			self.exchanger = application.exchanger
+			self.coupler = application.inventory.coupler
+			if self.coupler:
+				self.coupler.initialize( self )
+		return
+
+	def launch( self, application ):
+		BaseSolver.launch( self, application )
+		# Coupler stuff
+		if self.coupler:
+			self.coupler.launch( self )
+		return
+
+	# What does this function do?
+	def newStep( self, t, step ):
+		BaseSolver.newStep( self, t, step )
+
+		# Coupler stuff
+		if self.coupler:
+			self.coupler.newStep()
+		return
+
+	def stableTimestep( self ):
+		dt = self._context.Dt()
+		if self.dt_prev > dt:
+			dt = self.dt_prev
+		else:
+			self.dt_prev = dt
+
+		# Coupler stuff
+		if self.coupler:
+			# negotiate with other solver(s)
+			dt = self.coupler.stableTimestep( dt )
+
+		return BaseSolver.stableTimestep( self, dt )
+
+	def advance( self, dt ):
+		BaseSolver.advance( self, dt )
+
+		# For imposing Force Boundary condition in coupled case
+		if self.coupler:
+		    self.coupler.preVSolverRun()
+
+		# StGermain stuff
+		self._context.Step( dt )
+
+		return
+
+	# What does this function do?
+	def endTimestep( self, t, steps, done ):
+		BaseSolver.endTimestep( self, t )
+
+		# Coupler stuff
+		if self.coupler:
+			done = self.coupler.endTimestep( steps, done )
+
+		return done
+
+	def endSimulation( self, step ):
+		BaseSolver.endSimulation( self, step, self.t )
+
+		# StGermain stuff
+		self._context.Stg_Class_Delete()
+
+		return
+
+	def save(self,step):
+		return
+
+	class Inventory( BaseSolver.Inventory ):
+		import pyre.inventory
+

Added: long/3D/SNAC/trunk/StGermain/pyre/__init__.py
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/__init__.py	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/__init__.py	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,41 @@
+#!/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 3698 2006-07-20 21:09:56Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+import mpi
+
+CommWorld = mpi.world
+
+def copyright():
+    return "StGermain pyre module: Copyright (c) 2003 Victorian Partnership for Advanced Computing (VPAC) Ltd. Australia.";
+
+# version
+__id__ = "$Id: __init__.py 3698 2006-07-20 21:09:56Z EunseoChoi $"
+

Added: long/3D/SNAC/trunk/StGermain/pyre/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/pyre/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/pyre/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -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 3470 2006-03-02 06:52:23Z EunseoChoi $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# 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

Added: long/3D/SNAC/trunk/StGermain/src/main.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/src/main.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/src/main.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,157 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** 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: main.c 532 2006-04-04 00:21:59Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifdef HAVE_PYTHON
+	#include <Python.h>
+#endif
+#include <mpi.h>
+//EP_APPLICATIONS_FINALISE defined in StGermain.h
+#include <StGermain/StGermain.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+const Type StGermain_Type = "StGermain";
+
+int main( int argc, char* argv[] ) 
+{
+	/* StGermain standard bits & pieces */
+	MPI_Comm			CommWorld;
+	int				rank;
+	int				numProcessors;
+	Dictionary*			dictionary;
+	XML_IO_Handler*			ioHandler;
+
+	Stream* 			infoStream;
+	
+	/* context */
+	AbstractContext*		context = NULL;
+	//This context may be initialised iff application plugins are loaded.
+	AbstractContext*		replacedContext = NULL;
+	EntryPoint*			applicationsFinalise_EP;
+
+	/* Initialise PETSc, 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 );
+	#ifdef HAVE_PYTHON
+		Py_Initialize();
+	#endif	
+	MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
+	
+	/* Create the application's dictionary */
+	dictionary = Dictionary_New();
+
+	/* Read input */
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromCommandLine( ioHandler, argc, argv, dictionary );
+
+	Journal_ReadFromDictionary( dictionary );
+	
+
+	/* Construction phase ----------------------------------------------------------------------------------------------*/
+	context = _AbstractContext_New( 
+			sizeof(AbstractContext),
+	       	        AbstractContext_Type,
+	                _AbstractContext_Delete,
+	                _AbstractContext_Print,
+	                NULL,
+	                NULL,
+	                _AbstractContext_Construct,
+	                _AbstractContext_Build,
+	                _AbstractContext_Initialise,
+	                _AbstractContext_Execute,
+	                _AbstractContext_Destroy,
+	                "context",
+	                True,
+	                NULL,
+	                0,
+	                10,
+	                CommWorld,
+	                dictionary );
+
+	/* Construction phase -----------------------------------------------------------------------------------------------*/
+	Stg_Component_Construct( context, 0 /* dummy */, &context, True );
+	
+	/* Building phase ---------------------------------------------------------------------------------------------------*/
+	Stg_Component_Build( context, 0 /* dummy */, False );
+	
+	/* Initialisaton phase ----------------------------------------------------------------------------------------------*/
+	Stg_Component_Initialise( context, 0 /* dummy */, False );
+	
+	/* Run (Solve) phase ------------------------------------------------------------------------------------------------*/
+	AbstractContext_Dump( context );
+	Stg_Component_Execute( context, 0 /* dummy */, False );
+
+	/* Destruct phase ---------------------------------------------------------------------------------------------------*/
+
+	//Finalise any application plugins.
+	applicationsFinalise_EP = Context_GetEntryPoint( context, EP_APPLICATIONS_FINALISE );
+	//If there exists an applications Finalise Entry Point, get in there and run hooks!
+	if(applicationsFinalise_EP != NULL)
+		((EntryPoint_VoidPtr_CallCast*) applicationsFinalise_EP->run)( applicationsFinalise_EP, NULL);
+
+	//If the context got replaced, replacedContext != NULL & needs to be deleted.
+	Stg_Component_Destroy( context, 0 /* dummy */, False );
+	if(replacedContext != NULL)
+		Stg_Class_Delete( replacedContext );
+	Stg_Class_Delete( context );
+	Stg_Class_Delete( dictionary );
+
+	//if( rank == procToWatch ) Memory_Print();
+	#ifdef HAVE_PYTHON
+		Py_Finalize();
+	#endif
+
+	infoStream = Journal_Register(Info_Type, "StGermainFinalise");
+	Journal_Printf( infoStream, "Finalised: StGermain Framework.\n");
+	StGermain_Finalise();
+		
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Victorian Partnership for Advanced Computing (VPAC) Ltd, Australia
+## (C) 2003 All Rights Reserved
+##
+## <copyright-release-tag>
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+#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
+
+bin = ${PROJECT}
+
+SRCS = $(wildcard *.c)
+
+# Necessary to load all my modules in one shebang!
+EXTERNAL_LIBS =  -lStGermain -lStGermainDiscretisation -lStGermainBase ${EXPORT_DYNAMIC_LFLAGS}
+
+EXTERNAL_INCLUDES = -DMODULE_EXT=\"${MODULE_EXT}\"
+
+packages = PETSC MPI XML MATH DL HYPRE
+		
+ifdef HAVE_PYTHON
+	packages += PYTHON
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake



More information about the cig-commits mailing list